From 74ccb5094ea556dfde0f29bdd31f6afb6401ddeb Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 23 Dec 2011 12:31:55 +0100 Subject: [PATCH] junit convention inspections should work in Groovy --- .../testFramework/ExpectedHighlightingData.java | 2 +- plugins/InspectionGadgets/src/META-INF/plugin.xml | 4 ++-- .../src/com/siyeh/ig/BaseInspectionVisitor.java | 7 +++++-- ...bstractTestClassNamingConventionInspection.java | 9 ++++++++- .../JUnitTestClassNamingConventionInspection.java | 14 ++++++++------ plugins/groovy/jetgroovy.iml | 1 + .../lang/psi/impl/synthetic/JavaIdentifier.java | 7 +++++++ .../groovy/lang/GroovyHighlightingTest.groovy | 7 +++++++ .../testdata/highlighting/JUnitConvention.groovy | 8 ++++++++ 9 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 plugins/groovy/testdata/highlighting/JUnitConvention.groovy diff --git a/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java b/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java index 4de9c541ab1d..74f003d21c59 100644 --- a/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java +++ b/platform/testFramework/src/com/intellij/testFramework/ExpectedHighlightingData.java @@ -234,7 +234,7 @@ public class ExpectedHighlightingData { final Set markers = highlightingTypes.keySet(); final String typesRx = "(?:" + StringUtil.join(markers, ")|(?:") + ")"; final String openingTagRx = "<(" + typesRx + ")" + - "(?:\\s+descr=\"((?:[^\"\\\\]|\\\\\"|\\\\\\\\\"|\\\\\\[|\\\\\\])*)\")?" + + "(?:\\s+descr=\"((?:[^\"]|\\\\\"|\\\\\\\\\"|\\\\\\[|\\\\\\])*)\")?" + "(?:\\s+type=\"([0-9A-Z_]+)\")?" + "(?:\\s+foreground=\"([0-9xa-f]+)\")?" + "(?:\\s+background=\"([0-9xa-f]+)\")?" + diff --git a/plugins/InspectionGadgets/src/META-INF/plugin.xml b/plugins/InspectionGadgets/src/META-INF/plugin.xml index 1c53428bbe3e..6569e065320d 100644 --- a/plugins/InspectionGadgets/src/META-INF/plugin.xml +++ b/plugins/InspectionGadgets/src/META-INF/plugin.xml @@ -1292,11 +1292,11 @@ key="junit4.test.method.in.class.extending.junit3.testcase.display.name" groupBundle="messages.InspectionsBundle" groupKey="group.names.junit.issues" enabledByDefault="true" level="WARNING" implementationClass="com.siyeh.ig.junit.JUnit4AnnotatedMethodInJUnit3TestCaseInspection"/> - - diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java index 135508f35fc9..88626a6de410 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java @@ -78,7 +78,7 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor { protected final void registerClassError(@NotNull PsiClass aClass, Object... infos) { - final PsiElement nameIdentifier; + PsiElement nameIdentifier; if (aClass instanceof PsiEnumConstantInitializer) { final PsiEnumConstantInitializer enumConstantInitializer = (PsiEnumConstantInitializer)aClass; @@ -93,7 +93,10 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor { else { nameIdentifier = aClass.getNameIdentifier(); } - if (nameIdentifier == null) { + if (nameIdentifier != null && !nameIdentifier.isPhysical()) { + nameIdentifier = nameIdentifier.getNavigationElement(); + } + if (nameIdentifier == null || !nameIdentifier.isPhysical()) { registerError(aClass.getContainingFile(), infos); } else { diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitAbstractTestClassNamingConventionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitAbstractTestClassNamingConventionInspection.java index d4de73968a69..515074aeccc0 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitAbstractTestClassNamingConventionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitAbstractTestClassNamingConventionInspection.java @@ -16,6 +16,7 @@ package com.siyeh.ig.junit; import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiModifier; import com.intellij.psi.PsiTypeParameter; import com.intellij.psi.util.InheritanceUtil; @@ -89,7 +90,13 @@ public class JUnitAbstractTestClassNamingConventionInspection private class NamingConventionsVisitor extends BaseInspectionVisitor { @Override - public void visitClass(@NotNull PsiClass aClass) { + public void visitElement(PsiElement element) { + if (!(element instanceof PsiClass)) { + super.visitElement(element); + return; + } + + PsiClass aClass = (PsiClass)element; if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) { return; diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java index e9b59ae906c4..3dcddfccbee7 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/junit/JUnitTestClassNamingConventionInspection.java @@ -15,10 +15,7 @@ */ package com.siyeh.ig.junit; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiModifier; -import com.intellij.psi.PsiTypeParameter; +import com.intellij.psi.*; import com.intellij.psi.util.InheritanceUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspectionVisitor; @@ -89,9 +86,14 @@ public class JUnitTestClassNamingConventionInspection } private class NamingConventionsVisitor extends BaseInspectionVisitor { - @Override - public void visitClass(@NotNull PsiClass aClass) { + public void visitElement(PsiElement element) { + if (!(element instanceof PsiClass)) { + super.visitElement(element); + return; + } + + PsiClass aClass = (PsiClass)element; if (aClass.isInterface() || aClass.isEnum() || aClass.isAnnotationType()) { return; diff --git a/plugins/groovy/jetgroovy.iml b/plugins/groovy/jetgroovy.iml index 79385a649ce6..37197d084866 100644 --- a/plugins/groovy/jetgroovy.iml +++ b/plugins/groovy/jetgroovy.iml @@ -31,6 +31,7 @@ + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/JavaIdentifier.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/JavaIdentifier.java index 16c692d1417f..7fa0c77b2159 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/JavaIdentifier.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/JavaIdentifier.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.impl.light.LightIdentifier; +import org.jetbrains.annotations.NotNull; /** * @author ven @@ -32,6 +33,12 @@ public class JavaIdentifier extends LightIdentifier { myElement = element; } + @NotNull + @Override + public PsiElement getNavigationElement() { + return myElement; + } + @Override public boolean isValid() { return myElement.isValid(); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy index ac0ebb27ec2c..dd5f6a0518e9 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.groovy @@ -28,6 +28,8 @@ import com.intellij.testFramework.IdeaTestUtil import com.intellij.testFramework.LightProjectDescriptor import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase +import com.siyeh.ig.junit.JUnitAbstractTestClassNamingConventionInspection +import com.siyeh.ig.junit.JUnitTestClassNamingConventionInspection import org.jetbrains.annotations.NotNull import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyAssignabilityCheckInspection import org.jetbrains.plugins.groovy.codeInspection.assignment.GroovyResultOfAssignmentUsedInspection @@ -557,4 +559,9 @@ class A { myFixture.enableInspections(GroovyAssignabilityCheckInspection) myFixture.checkHighlighting(true, false, false); } + + public void testJUnitConvention() { + myFixture.addClass("package junit.framework; public class TestCase {}") + doTest(new JUnitTestClassNamingConventionInspection(), new JUnitAbstractTestClassNamingConventionInspection()) + } } \ No newline at end of file diff --git a/plugins/groovy/testdata/highlighting/JUnitConvention.groovy b/plugins/groovy/testdata/highlighting/JUnitConvention.groovy new file mode 100644 index 000000000000..208e126f624d --- /dev/null +++ b/plugins/groovy/testdata/highlighting/JUnitConvention.groovy @@ -0,0 +1,8 @@ +import junit.framework.TestCase + +class SpecialGoodTest extends TestCase { + class MyVeryInner extends SpecialGoodTest {} +} +class SpecialBad extends TestCase { } +abstract class SpecialAbstract extends TestCase { } +abstract class SpecialAbstractTestCase extends TestCase { } \ No newline at end of file