From 280fe8d967f3faeaf1dd02ca7b75b370867262ae Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 8 Oct 2008 14:05:02 +0400 Subject: [PATCH] IDEADEV-31057 (Intention "Expand boolean use to if-else" works incorrectly with |=) --- .../ipp/trivialif/ExpandBooleanIntention.java | 25 +++++++++++----- .../ipp/trivialif/ExpandBooleanPredicate.java | 35 +++++----------------- 2 files changed, 25 insertions(+), 35 deletions(-) diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanIntention.java index 514bdad4bb..240b9def1c 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanIntention.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2008 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,21 +20,22 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import com.siyeh.ipp.base.Intention; import com.siyeh.ipp.base.PsiElementPredicate; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; public class ExpandBooleanIntention extends Intention { + @Override @NotNull public PsiElementPredicate getElementPredicate() { return new ExpandBooleanPredicate(); } - public void processIntention(PsiElement element) + @Override + public void processIntention(@NotNull PsiElement element) throws IncorrectOperationException { - final PsiJavaToken token = (PsiJavaToken)element; final PsiStatement containingStatement = - PsiTreeUtil.getParentOfType(token, PsiStatement.class); + PsiTreeUtil.getParentOfType(element, PsiStatement.class); if (containingStatement == null) { return; } @@ -50,9 +51,17 @@ public class ExpandBooleanIntention extends Intention { final String rhsText = rhs.getText(); final PsiExpression lhs = assignmentExpression.getLExpression(); final String lhsText = lhs.getText(); + final PsiJavaToken sign = assignmentExpression.getOperationSign(); + final String signText = sign.getText(); + final String conditionText; + if (signText.length() == 2) { + conditionText = lhsText + signText.charAt(0) + rhsText; + } else { + conditionText = rhsText; + } @NonNls final String statement = - "if(" + rhsText + "){" + lhsText + " = true;}else{" + - lhsText + " = false;}"; + "if(" + conditionText + ") " + lhsText + " = true; else " + + lhsText + " = false;"; replaceStatement(statement, containingStatement); } else if (ExpandBooleanPredicate.isBooleanReturn( containingStatement)) { @@ -64,7 +73,7 @@ public class ExpandBooleanIntention extends Intention { } final String valueText = returnValue.getText(); @NonNls final String statement = - "if(" + valueText + "){return true;}else{return false;}"; + "if(" + valueText + ") return true; else return false;"; replaceStatement(statement, containingStatement); } } diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanPredicate.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanPredicate.java index b0a0fca107..ed2d104e4c 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanPredicate.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ExpandBooleanPredicate.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Dave Griffith + * Copyright 2003-2008 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package com.siyeh.ipp.trivialif; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.siyeh.ipp.base.PsiElementPredicate; -import com.siyeh.ipp.psiutils.ErrorUtil; class ExpandBooleanPredicate implements PsiElementPredicate{ @@ -26,20 +25,14 @@ class ExpandBooleanPredicate implements PsiElementPredicate{ if(!(element instanceof PsiJavaToken)){ return false; } - final PsiJavaToken token = (PsiJavaToken) element; final PsiStatement containingStatement = - PsiTreeUtil.getParentOfType(token, + PsiTreeUtil.getParentOfType(element, PsiStatement.class); if(containingStatement == null){ return false; } - if(isBooleanReturn(containingStatement)){ - return true; - } - if (!isBooleanAssignment(containingStatement)) { - return false; - } - return !ErrorUtil.containsError(containingStatement); + return isBooleanReturn(containingStatement) || + isBooleanAssignment(containingStatement); } public static boolean isBooleanReturn(PsiStatement containingStatement){ @@ -49,17 +42,11 @@ class ExpandBooleanPredicate implements PsiElementPredicate{ final PsiReturnStatement returnStatement = (PsiReturnStatement) containingStatement; final PsiExpression returnValue = returnStatement.getReturnValue(); - if(returnValue == null){ - return false; - } - if(returnValue instanceof PsiLiteralExpression){ + if (returnValue == null || returnValue instanceof PsiLiteralExpression) { return false; } final PsiType returnType = returnValue.getType(); - if(returnType == null){ - return false; - } - return returnType.equals(PsiType.BOOLEAN); + return PsiType.BOOLEAN.equals(returnType); } public static boolean isBooleanAssignment(PsiStatement containingStatement){ @@ -75,16 +62,10 @@ class ExpandBooleanPredicate implements PsiElementPredicate{ final PsiAssignmentExpression assignment = (PsiAssignmentExpression) expression; final PsiExpression rhs = assignment.getRExpression(); - if(rhs == null){ - return false; - } - if(rhs instanceof PsiLiteralExpression){ + if (rhs == null || rhs instanceof PsiLiteralExpression) { return false; } final PsiType assignmentType = rhs.getType(); - if(assignmentType == null){ - return false; - } - return assignmentType.equals(PsiType.BOOLEAN); + return PsiType.BOOLEAN.equals(assignmentType); } } -- 2.11.4.GIT