diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/DistributiveExpression.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/DistributiveExpression.java index 5eba3079f091..0c5c68092a4c 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/DistributiveExpression.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/DistributiveExpression.java @@ -5,6 +5,7 @@ import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.PsiPrecedenceUtil; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.hash.HashMap; import org.jetbrains.annotations.Contract; @@ -146,6 +147,7 @@ class DistributiveExpression extends ExpandableExpression { if (polyadicExpression == null || !JavaTokenType.DIV.equals(polyadicExpression.getOperationTokenType())) return expression; PsiExpression operand = expression.getOperand(); if (polyadicExpression.getTokenBeforeOperand(operand) != null) return null; + if (TypeConversionUtil.isIntegralNumberType(polyadicExpression.getType())) return null; return expression; } } diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/ExpandBracketsIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/ExpandBracketsIntention.java index b3dee953e884..35a341067c37 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/ExpandBracketsIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/expression/expand/ExpandBracketsIntention.java @@ -24,10 +24,13 @@ import java.util.List; public class ExpandBracketsIntention extends BaseElementAtCaretIntentionAction { + private boolean myStartInWriteAction = false; + private static final Pass EXPAND_CALLBACK = new Pass() { @Override public void pass(@NotNull PsiParenthesizedExpression expression) { WriteCommandAction.writeCommandAction(expression.getProject(), expression.getContainingFile()) + .withName(getName()) .run(() -> replaceExpression(expression)); } }; @@ -36,24 +39,30 @@ public class ExpandBracketsIntention extends BaseElementAtCaretIntentionAction { @NotNull @Override public String getFamilyName() { - return getText(); + return getName(); } @NotNull @Override public String getText() { + return getName(); + } + + private static String getName() { return IntentionPowerPackBundle.defaultableMessage("expand.brackets.intention.name"); } @Override public boolean startInWriteAction() { - return false; + return myStartInWriteAction; } @Override public boolean isAvailable(@NotNull Project project, Editor editor, @NotNull PsiElement element) { List possibleInnerExpressions = getPossibleInnerExpressions(element); - return possibleInnerExpressions != null && possibleInnerExpressions.size() > 0; + if (possibleInnerExpressions == null || possibleInnerExpressions.isEmpty()) return false; + myStartInWriteAction = possibleInnerExpressions.size() == 1; + return true; } @Override @@ -65,7 +74,7 @@ public class ExpandBracketsIntention extends BaseElementAtCaretIntentionAction { private static void processInnerExpression(@Nullable Editor editor, @NotNull List expressions) { if (expressions.size() == 1) { - EXPAND_CALLBACK.pass(expressions.get(0)); + replaceExpression(expressions.get(0)); return; } if (expressions.isEmpty() || editor == null) return; diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive.java index 5c69fc005f72..03c6c9c33c4a 100644 --- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive.java +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive.java @@ -1,5 +1,5 @@ class Test { - void distributiveTest(int a, int b, int c, int d) { + void distributiveTest(int a, int b, int c, int d, double cc) { int e = /*1*/a * (b /*2*/+ c); int f = -/*1*/a * -/*2*/(b - -/*3*/c); int g = /*1*/a * (b + c) * d; @@ -11,7 +11,7 @@ class Test { int m = a | (-c & b); int n = a & (c | b); int o = 2 * (3 - -a / -/*1*/b * -/*2*/c); - int p = (a +/*1*/ b) /*2*// c; + double p = (a +/*1*/ b) /*2*// cc; } void distributiveBooleanTest(boolean a, boolean b, boolean c, boolean d) { diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive_after.java index 2984e27a3399..71abf2a3e45b 100644 --- a/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive_after.java +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/expression/expand_brackets/Distributive_after.java @@ -1,5 +1,5 @@ class Test { - void distributiveTest(int a, int b, int c, int d) { + void distributiveTest(int a, int b, int c, int d, double cc) { /*2*/ int e = /*1*/a * b + a * c; /*1*/ @@ -21,7 +21,7 @@ class Test { int o = 2 * 3 + 2 * a / b * c; /*1*/ /*2*/ - int p = a / c + b / c; + double p = a / cc + b / cc; } void distributiveBooleanTest(boolean a, boolean b, boolean c, boolean d) {