diff options
Diffstat (limited to 'plugins/IntentionPowerPak/src/com/siyeh/ipp')
8 files changed, 143 insertions, 208 deletions
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; } } |