summaryrefslogtreecommitdiff
path: root/plugins/IntentionPowerPak/src/com
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/IntentionPowerPak/src/com')
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties6
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java8
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/SimplifyVariableIntention.java12
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ObjectEqualityPredicate.java36
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithEqualsIntention.java31
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithSafeEqualsIntention.java63
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java9
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertIntention.java133
-rw-r--r--plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertPredicate.java59
9 files changed, 147 insertions, 210 deletions
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties b/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties
index 30e64929f8b2..923df3eb28f4 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties
+++ b/plugins/IntentionPowerPak/src/com/siyeh/IntentionPowerPackBundle.properties
@@ -14,6 +14,7 @@ change.to.end.of.line.comment.intention.family.name=Replace with End Of Line Com
assert.to.if.intention.name=Replace 'assert' with 'if' statement
assert.to.if.intention.family.name=Replace Assert with If Statement
replace.equality.with.safe.equals.intention.name=Replace '==' with safe '.equals()'
+replace.equality.with.safe.not.equals.intention.name=Replace '!=' with safe '!equals()'
replace.equality.with.safe.equals.intention.family.name=Replace Equality with Safe Equals
replace.for.each.loop.with.indexed.for.loop.intention.name=Replace 'for each' loop with indexed 'for' loop
replace.for.each.loop.with.iterator.for.loop.intention.name=Replace 'for each' loop with iterator 'for' loop
@@ -40,7 +41,7 @@ replace.switch.with.if.intention.family.name=Replace Switch with If
simplify.variable.intention.name=Replace with Java-style array declaration
simplify.variable.intention.family.name=Replace with Java Style Array Declaration
constant.expression.intention.family.name=Compute Constant Value
-create.assert.intention.name=Create JUnit Assertion
+create.assert.intention.name=Create JUnit assertion
create.assert.intention.family.name=Create JUnit Assertion
simplify.if.else.intention.name=Simplify 'if else'
simplify.if.else.intention.family.name=Simplify If Else
@@ -81,7 +82,8 @@ char.to.string.intention.name=Replace character literal with string
char.to.string.intention.family.name=Replace Char with String
replace.if.with.conditional.intention.name=Replace 'if else' with '?:'
replace.if.with.conditional.intention.family.name=Replace If Else with Conditional
-replace.equality.with.equals.intention.name=Replace '==' with '.equals()'
+replace.equality.with.equals.intention.name=Replace '==' with 'equals()'
+replace.equality.with.not.equals.intention.name=Replace '!=' with '!equals()'
replace.equality.with.equals.intention.family.name=Replace Equality with Equals
make.call.chain.into.call.sequence.intention.name=Make method call chain into call sequence
make.call.chain.into.call.sequence.intention.family.name=Make Call Chain Into Call Sequence
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java
index 9e1ef7f75f7b..579f36317b4a 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/Intention.java
@@ -123,14 +123,6 @@ public abstract class Intention extends BaseElementAtCaretIntentionAction {
codeStyleManager.reformat(insertedElement);
}
- protected static void addStatementBefore(String newStatementText, PsiReturnStatement anchor) {
- final Project project = anchor.getProject();
- final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
- final PsiStatement newStatement = factory.createStatementFromText(newStatementText, anchor);
- final PsiElement addedStatement = anchor.getParent().addBefore(newStatement, anchor);
- CodeStyleManager.getInstance(project).reformat(addedStatement);
- }
-
@Nullable
PsiElement findMatchingElement(@Nullable PsiElement element, Editor editor) {
while (element != null) {
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/SimplifyVariableIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/SimplifyVariableIntention.java
index f127b50fdd79..149d8067c882 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/SimplifyVariableIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/decls/SimplifyVariableIntention.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2005 Dave Griffith
+ * Copyright 2003-2014 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.
@@ -17,7 +17,7 @@ package com.siyeh.ipp.decls;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiVariable;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.psi.codeStyle.CodeStyleManager;
import com.siyeh.ipp.base.Intention;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.NotNull;
@@ -29,9 +29,9 @@ public class SimplifyVariableIntention extends Intention {
return new SimplifyVariablePredicate();
}
- public void processIntention(PsiElement element)
- throws IncorrectOperationException {
- final PsiVariable var = (PsiVariable)element;
- var.normalizeDeclaration();
+ public void processIntention(PsiElement element) {
+ final PsiVariable variable = (PsiVariable)element;
+ variable.normalizeDeclaration();
+ CodeStyleManager.getInstance(element.getProject()).reformat(variable);
}
} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ObjectEqualityPredicate.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ObjectEqualityPredicate.java
index 18d55c35fe97..4bea8688ae32 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ObjectEqualityPredicate.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ObjectEqualityPredicate.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2005 Dave Griffith
+ * Copyright 2003-2014 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.
@@ -19,7 +19,6 @@ import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.TypeConversionUtil;
import com.siyeh.ipp.base.PsiElementPredicate;
-import com.siyeh.ipp.psiutils.ErrorUtil;
class ObjectEqualityPredicate implements PsiElementPredicate {
@@ -34,44 +33,15 @@ class ObjectEqualityPredicate implements PsiElementPredicate {
return false;
}
final PsiExpression lhs = expression.getLOperand();
- final String lhsText = lhs.getText();
- if (PsiKeyword.NULL.equals(lhsText)) {
- return false;
- }
final PsiType lhsType = lhs.getType();
- if (lhsType == null) {
+ if (lhsType == null || lhsType instanceof PsiPrimitiveType || TypeConversionUtil.isEnumType(lhsType)) {
return false;
}
final PsiExpression rhs = expression.getROperand();
if (rhs == null) {
return false;
}
- final String rhsText = rhs.getText();
- if (PsiKeyword.NULL.equals(rhsText)) {
- return false;
- }
final PsiType rhsType = rhs.getType();
- if (rhsType == null) {
- return false;
- }
- if (TypeConversionUtil.isPrimitiveAndNotNull(lhsType) ||
- TypeConversionUtil.isPrimitiveAndNotNull(rhsType)) {
- return false;
- }
- if (rhsType instanceof PsiClassType) {
- final PsiClassType rhsClassType = (PsiClassType)rhsType;
- final PsiClass rhsClass = rhsClassType.resolve();
- if (rhsClass != null && rhsClass.isEnum()) {
- return false;
- }
- }
- if (lhsType instanceof PsiClassType) {
- final PsiClassType lhsClassType = (PsiClassType)lhsType;
- final PsiClass lhsClass = lhsClassType.resolve();
- if (lhsClass != null && lhsClass.isEnum()) {
- return false;
- }
- }
- return !ErrorUtil.containsError(element);
+ return !(rhsType == null || rhsType instanceof PsiPrimitiveType || TypeConversionUtil.isEnumType(rhsType));
}
} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithEqualsIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithEqualsIntention.java
index 9c0119a92797..d0f56b8cc305 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithEqualsIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithEqualsIntention.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 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.
@@ -15,30 +15,37 @@
*/
package com.siyeh.ipp.equality;
-import com.intellij.psi.JavaTokenType;
-import com.intellij.psi.PsiBinaryExpression;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiExpression;
+import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
-import com.intellij.util.IncorrectOperationException;
+import com.siyeh.IntentionPowerPackBundle;
import com.siyeh.ig.PsiReplacementUtil;
import com.siyeh.ig.psiutils.ParenthesesUtils;
-import com.siyeh.ipp.base.Intention;
+import com.siyeh.ipp.base.MutablyNamedIntention;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
-public class ReplaceEqualityWithEqualsIntention extends Intention {
+public class ReplaceEqualityWithEqualsIntention extends MutablyNamedIntention {
+
+ @Override
+ protected String getTextForElement(PsiElement element) {
+ final PsiBinaryExpression binaryExpression = (PsiBinaryExpression)element;
+ final IElementType tokenType = binaryExpression.getOperationTokenType();
+ if (JavaTokenType.NE.equals(tokenType)) {
+ return IntentionPowerPackBundle.message("replace.equality.with.not.equals.intention.name");
+ }
+ else {
+ return IntentionPowerPackBundle.message("replace.equality.with.equals.intention.name");
+ }
+ }
@NotNull
public PsiElementPredicate getElementPredicate() {
return new ObjectEqualityPredicate();
}
- public void processIntention(PsiElement element)
- throws IncorrectOperationException {
- final PsiBinaryExpression exp =
- (PsiBinaryExpression)element;
+ public void processIntention(PsiElement element) {
+ final PsiBinaryExpression exp = (PsiBinaryExpression)element;
final PsiExpression lhs = exp.getLOperand();
final PsiExpression rhs = exp.getROperand();
if (rhs == null) {
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithSafeEqualsIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithSafeEqualsIntention.java
index d14804ae2cda..12acaa006f54 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithSafeEqualsIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/equality/ReplaceEqualityWithSafeEqualsIntention.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2013 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 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.
@@ -17,25 +17,36 @@ package com.siyeh.ipp.equality;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
-import com.intellij.util.IncorrectOperationException;
+import com.intellij.psi.util.PsiUtil;
+import com.siyeh.IntentionPowerPackBundle;
import com.siyeh.ig.PsiReplacementUtil;
+import com.siyeh.ig.psiutils.ClassUtils;
import com.siyeh.ig.psiutils.ParenthesesUtils;
-import com.siyeh.ipp.base.Intention;
+import com.siyeh.ipp.base.MutablyNamedIntention;
import com.siyeh.ipp.base.PsiElementPredicate;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
-public class ReplaceEqualityWithSafeEqualsIntention extends Intention {
+public class ReplaceEqualityWithSafeEqualsIntention extends MutablyNamedIntention {
+
+ @Override
+ protected String getTextForElement(PsiElement element) {
+ final PsiBinaryExpression binaryExpression = (PsiBinaryExpression)element;
+ if (JavaTokenType.NE.equals(binaryExpression.getOperationTokenType())) {
+ return IntentionPowerPackBundle.message("replace.equality.with.safe.not.equals.intention.name");
+ }
+ else {
+ return IntentionPowerPackBundle.message("replace.equality.with.safe.equals.intention.name");
+ }
+ }
@NotNull
public PsiElementPredicate getElementPredicate() {
return new ObjectEqualityPredicate();
}
- public void processIntention(PsiElement element)
- throws IncorrectOperationException {
- final PsiBinaryExpression exp =
- (PsiBinaryExpression)element;
+ public void processIntention(PsiElement element) {
+ final PsiBinaryExpression exp = (PsiBinaryExpression)element;
final PsiExpression lhs = exp.getLOperand();
final PsiExpression rhs = exp.getROperand();
if (rhs == null) {
@@ -56,26 +67,26 @@ public class ReplaceEqualityWithSafeEqualsIntention extends Intention {
final PsiJavaToken operationSign = exp.getOperationSign();
final IElementType tokenType = operationSign.getTokenType();
final String signText = operationSign.getText();
- @NonNls final StringBuilder buffer = new StringBuilder(lhsText);
- buffer.append("==null?");
- buffer.append(rhsText);
- buffer.append(signText);
- buffer.append(" null:");
- if (tokenType.equals(JavaTokenType.NE)) {
- buffer.append('!');
- }
- if (ParenthesesUtils.getPrecedence(strippedLhs) >
- ParenthesesUtils.METHOD_CALL_PRECEDENCE) {
- buffer.append('(');
- buffer.append(lhsText);
- buffer.append(')');
+ @NonNls final StringBuilder newExpression = new StringBuilder();
+ if (PsiUtil.isLanguageLevel7OrHigher(element) && ClassUtils.findClass("java.util.Objects", element) != null) {
+ if (tokenType.equals(JavaTokenType.NE)) {
+ newExpression.append('!');
+ }
+ newExpression.append("java.util.Objects.equals(").append(lhsText).append(',').append(rhsText).append(')');
}
else {
- buffer.append(lhsText);
+ newExpression.append(lhsText).append("==null?").append(rhsText).append(signText).append(" null:");
+ if (tokenType.equals(JavaTokenType.NE)) {
+ newExpression.append('!');
+ }
+ if (ParenthesesUtils.getPrecedence(strippedLhs) > ParenthesesUtils.METHOD_CALL_PRECEDENCE) {
+ newExpression.append('(').append(lhsText).append(')');
+ }
+ else {
+ newExpression.append(lhsText);
+ }
+ newExpression.append(".equals(").append(rhsText).append(')');
}
- buffer.append(".equals(");
- buffer.append(rhsText);
- buffer.append(')');
- PsiReplacementUtil.replaceExpression(exp, buffer.toString());
+ PsiReplacementUtil.replaceExpressionAndShorten(exp, newExpression.toString());
}
} \ No newline at end of file
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java
index 3bbc7a63bd65..aebb8f568814 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/initialization/SplitDeclarationAndInitializationIntention.java
@@ -37,12 +37,11 @@ public class SplitDeclarationAndInitializationIntention extends Intention {
@Override
public void processIntention(@NotNull PsiElement element) {
final PsiField field = (PsiField)element.getParent();
- field.normalizeDeclaration();
- final PsiExpression initializer = RefactoringUtil.convertInitializerToNormalExpression(field.getInitializer(), field.getType());
+ final PsiExpression initializer = field.getInitializer();
if (initializer == null) {
return;
}
- final String initializerText = initializer.getText();
+ final String initializerText = RefactoringUtil.convertInitializerToNormalExpression(initializer, field.getType()).getText();
final PsiClass containingClass = field.getContainingClass();
if (containingClass == null) {
return;
@@ -96,9 +95,7 @@ public class SplitDeclarationAndInitializationIntention extends Intention {
}
}
initializer.delete();
- final CodeStyleManager codeStyleManager = CodeStyleManager.getInstance(manager.getProject());
- codeStyleManager.reformat(field);
- codeStyleManager.reformat(classInitializer);
+ CodeStyleManager.getInstance(manager.getProject()).reformat(classInitializer);
HighlightUtil.highlightElement(addedElement,
IntentionPowerPackBundle.message(
"press.escape.to.remove.highlighting.message"));
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertIntention.java
index 55ae45e3f3bf..4be5442d03c1 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertIntention.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertIntention.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2006 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 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.
@@ -16,16 +16,15 @@
package com.siyeh.ipp.junit;
import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.tree.IElementType;
-import com.intellij.util.IncorrectOperationException;
-import com.intellij.codeInsight.AnnotationUtil;
import com.siyeh.ig.PsiReplacementUtil;
+import com.siyeh.ig.psiutils.ExpressionUtils;
+import com.siyeh.ig.psiutils.ImportUtils;
import com.siyeh.ipp.base.Intention;
import com.siyeh.ipp.base.PsiElementPredicate;
import com.siyeh.ipp.psiutils.BoolUtils;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
public class CreateAssertIntention extends Intention {
@@ -34,28 +33,12 @@ public class CreateAssertIntention extends Intention {
return new CreateAssertPredicate();
}
- public void processIntention(PsiElement element)
- throws IncorrectOperationException {
- final PsiExpressionStatement statement =
- (PsiExpressionStatement)element;
- assert statement != null;
+ public void processIntention(PsiElement element) {
+ final PsiExpressionStatement statement = (PsiExpressionStatement)element;
final PsiExpression expression = statement.getExpression();
- final PsiMethod containingMethod =
- PsiTreeUtil.getParentOfType(statement, PsiMethod.class);
- final String specifierString;
- if (containingMethod != null &&
- AnnotationUtil.isAnnotated(containingMethod,
- "org.junit.Test", true)) {
- specifierString = "org.junit.Assert.";
- }
- else {
- specifierString = "";
- }
+ final String newStatement;
if (BoolUtils.isNegation(expression)) {
- @NonNls final String newExpression =
- specifierString + "assertFalse(" +
- BoolUtils.getNegatedExpressionText(expression) + ");";
- PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newExpression);
+ newStatement = buildNewStatement("assertFalse", element, BoolUtils.getNegatedExpressionText(expression));
}
else if (isNullComparison(expression)) {
final PsiBinaryExpression binaryExpression =
@@ -63,16 +46,19 @@ public class CreateAssertIntention extends Intention {
final PsiExpression lhs = binaryExpression.getLOperand();
final PsiExpression rhs = binaryExpression.getROperand();
final PsiExpression comparedExpression;
- if (isNull(lhs)) {
+ if (ExpressionUtils.isNullLiteral(lhs)) {
comparedExpression = rhs;
}
else {
comparedExpression = lhs;
}
assert comparedExpression != null;
- @NonNls final String newExpression = specifierString +
- "assertNull(" + comparedExpression.getText() + ");";
- PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newExpression);
+ if (JavaTokenType.EQEQ.equals(binaryExpression.getOperationTokenType())) {
+ newStatement = buildNewStatement("assertNull", element, comparedExpression.getText());
+ }
+ else {
+ newStatement = buildNewStatement("assertNotNull", element, comparedExpression.getText());
+ }
}
else if (isEqualityComparison(expression)) {
final PsiBinaryExpression binaryExpression =
@@ -91,23 +77,16 @@ public class CreateAssertIntention extends Intention {
}
assert comparingExpression != null;
final PsiType type = lhs.getType();
- @NonNls final String newExpression;
if (PsiType.DOUBLE.equals(type) || PsiType.FLOAT.equals(type)) {
- newExpression = specifierString + "assertEquals(" +
- comparedExpression.getText() + ", " +
- comparingExpression.getText() + ", 0.0);";
+ newStatement = buildNewStatement("assertEquals",
+ element, comparedExpression.getText(), comparingExpression.getText(), "0.0");
}
else if (type instanceof PsiPrimitiveType) {
- newExpression = specifierString + "assertEquals(" +
- comparedExpression.getText() + ", " +
- comparingExpression.getText() + ");";
+ newStatement = buildNewStatement("assertEquals", element, comparedExpression.getText(), comparingExpression.getText());
}
else {
- newExpression = specifierString + "assertSame(" +
- comparedExpression.getText() + ", " +
- comparingExpression.getText() + ");";
+ newStatement = buildNewStatement("assertSame", element, comparedExpression.getText(), comparingExpression.getText());
}
- PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newExpression);
}
else if (isEqualsExpression(expression)) {
final PsiMethodCallExpression call =
@@ -118,26 +97,55 @@ public class CreateAssertIntention extends Intention {
methodExpression.getQualifierExpression();
assert comparedExpression != null;
final PsiExpressionList argList = call.getArgumentList();
- final PsiExpression comparingExpression =
- argList.getExpressions()[0];
- @NonNls final String newExpression;
+ final PsiExpression comparingExpression = argList.getExpressions()[0];
if (comparingExpression instanceof PsiLiteralExpression) {
- newExpression = specifierString + "assertEquals(" +
- comparingExpression.getText() + ", " +
- comparedExpression.getText() + ");";
+ newStatement = buildNewStatement("assertEquals", element, comparingExpression.getText(), comparedExpression.getText());
+ }
+ else {
+ newStatement = buildNewStatement("assertEquals", element, comparedExpression.getText(), comparingExpression.getText());
+ }
+ }
+ else {
+ newStatement = buildNewStatement("assertTrue", element, expression.getText());
+ }
+ PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newStatement);
+ }
+
+ @NonNls
+ private static String buildNewStatement(@NonNls String memberName, PsiElement context, String... argumentTexts) {
+ final PsiElementFactory factory = JavaPsiFacade.getElementFactory(context.getProject());
+ final StringBuilder builder = new StringBuilder(memberName).append('(');
+ boolean comma = false;
+ for (String argumentText : argumentTexts) {
+ if (comma) {
+ builder.append(',');
}
else {
- newExpression = specifierString + "assertEquals(" +
- comparedExpression.getText() + ", " +
- comparingExpression.getText() + ");";
+ comma = true;
}
- PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newExpression);
+ builder.append(argumentText);
+ }
+ builder.append(')');
+ final String text = builder.toString();
+
+ final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)factory.createExpressionFromText(text, context);
+ final PsiMethod method = methodCallExpression.resolveMethod();
+ if (method != null || hasStaticImports(context) && ImportUtils.addStaticImport("org.junit.Assert", memberName, context)) {
+ return text + ';';
}
else {
- @NonNls final String newExpression =
- specifierString + "assertTrue(" + expression.getText() + ");";
- PsiReplacementUtil.replaceStatementAndShortenClassNames(statement, newExpression);
+ return "org.junit.Assert." + text + ';';
+ }
+ }
+
+ private static boolean hasStaticImports(PsiElement element) {
+ final PsiFile file = element.getContainingFile();
+ if (!(file instanceof PsiJavaFile)) {
+ return false;
}
+ final PsiJavaFile javaFile = (PsiJavaFile)file;
+ final PsiImportList importList = javaFile.getImportList();
+ return importList != null && importList.getImportStaticStatements().length > 0;
}
private static boolean isEqualsExpression(PsiExpression expression) {
@@ -176,25 +184,16 @@ public class CreateAssertIntention extends Intention {
if (!(expression instanceof PsiBinaryExpression)) {
return false;
}
- final PsiBinaryExpression binaryExpression =
- (PsiBinaryExpression)expression;
+ final PsiBinaryExpression binaryExpression = (PsiBinaryExpression)expression;
final IElementType tokenType = binaryExpression.getOperationTokenType();
- if (!JavaTokenType.EQEQ.equals(tokenType)) {
+ if (!JavaTokenType.EQEQ.equals(tokenType) && !JavaTokenType.NE.equals(tokenType)) {
return false;
}
final PsiExpression lhs = binaryExpression.getLOperand();
- if (isNull(lhs)) {
+ if (ExpressionUtils.isNullLiteral(lhs)) {
return true;
}
- final PsiExpression Rhs = binaryExpression.getROperand();
- return isNull(Rhs);
- }
-
- private static boolean isNull(PsiExpression expression) {
- if (!(expression instanceof PsiLiteralExpression)) {
- return false;
- }
- @NonNls final String text = expression.getText();
- return PsiKeyword.NULL.equals(text);
+ final PsiExpression rhs = binaryExpression.getROperand();
+ return ExpressionUtils.isNullLiteral(rhs);
}
}
diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertPredicate.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertPredicate.java
index 27f09f9c3b80..c21bb76aa1bc 100644
--- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertPredicate.java
+++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/junit/CreateAssertPredicate.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2009 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2014 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.
@@ -15,14 +15,10 @@
*/
package com.siyeh.ipp.junit;
-import com.intellij.codeInsight.AnnotationUtil;
-import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.util.InheritanceUtil;
import com.intellij.psi.util.PsiTreeUtil;
+import com.siyeh.ig.psiutils.TestUtils;
import com.siyeh.ipp.base.PsiElementPredicate;
-import org.jetbrains.annotations.NonNls;
class CreateAssertPredicate implements PsiElementPredicate {
@@ -41,50 +37,13 @@ class CreateAssertPredicate implements PsiElementPredicate {
if (!PsiType.BOOLEAN.equals(type)) {
return false;
}
- final PsiMethod containingMethod =
- PsiTreeUtil.getParentOfType(expression, PsiMethod.class);
- return isTestMethod(containingMethod);
- }
-
- private static boolean isTestMethod(PsiMethod method) {
- if (method == null) {
- return false;
- }
- if (AnnotationUtil.isAnnotated(method, "org.junit.Test", true)) {
- return true;
- }
- if (method.hasModifierProperty(PsiModifier.ABSTRACT) ||
- !method.hasModifierProperty(PsiModifier.PUBLIC)) {
- return false;
- }
- final PsiType returnType = method.getReturnType();
- if (returnType == null) {
- return false;
- }
- if (!returnType.equals(PsiType.VOID)) {
- return false;
- }
- final PsiParameterList parameterList = method.getParameterList();
- final PsiParameter[] parameters = parameterList.getParameters();
- if (parameters.length != 0) {
- return false;
- }
- @NonNls final String methodName = method.getName();
- if (!methodName.startsWith("test")) {
- return false;
- }
- final PsiClass containingClass = method.getContainingClass();
- return isTestClass(containingClass);
- }
-
- private static boolean isTestClass(PsiClass aClass) {
- if (aClass == null) {
- return false;
+ PsiMethod containingMethod = PsiTreeUtil.getParentOfType(expression, PsiMethod.class);
+ while (containingMethod != null) {
+ if (TestUtils.isJUnitTestMethod(containingMethod)) {
+ return true;
+ }
+ containingMethod = PsiTreeUtil.getParentOfType(containingMethod, PsiMethod.class);
}
- final Project project = aClass.getProject();
- final GlobalSearchScope scope = GlobalSearchScope.allScope(project);
- final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
- final PsiClass ancestorClass = psiFacade.findClass("junit.framework.TestCase", scope);
- return InheritanceUtil.isInheritorOrSelf(aClass, ancestorClass, true);
+ return false;
}
}