diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java index 052a1176dfdd..874e0678b4c0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightClassUtil.java @@ -228,21 +228,13 @@ public class HighlightClassUtil { } @Nullable - static HighlightInfo checkPublicClassInRightFile(PsiKeyword keyword, PsiModifierList psiModifierList) { + static HighlightInfo checkPublicClassInRightFile(PsiClass aClass) { // most test case classes are located in wrong files if (ApplicationManager.getApplication().isUnitTestMode()) return null; - if (new PsiMatcherImpl(keyword) - .dot(PsiMatchers.hasText(PsiModifier.PUBLIC)) - .parent(PsiMatchers.hasClass(PsiModifierList.class)) - .parent(PsiMatchers.hasClass(PsiClass.class)) - .parent(PsiMatchers.hasClass(PsiJavaFile.class)) - .getElement() == null) { - return null; - } - - PsiClass aClass = (PsiClass)keyword.getParent().getParent(); - PsiJavaFile file = (PsiJavaFile)aClass.getContainingFile(); + PsiFile containingFile = aClass.getContainingFile(); + if (!aClass.hasModifierProperty(PsiModifier.PUBLIC) || !(containingFile instanceof PsiJavaFile)) return null; + PsiJavaFile file = (PsiJavaFile)containingFile; VirtualFile virtualFile = file.getVirtualFile(); HighlightInfo errorResult = null; if (virtualFile != null && !aClass.getName().equals(virtualFile.getNameWithoutExtension())) { @@ -251,6 +243,7 @@ public class HighlightClassUtil { errorResult = HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR). range(aClass, range.getStartOffset(), range.getEndOffset()). descriptionAndTooltip(message).create(); + PsiModifierList psiModifierList = aClass.getModifierList(); QuickFixAction.registerQuickFixAction(errorResult, QUICK_FIX_FACTORY.createModifierListFix(psiModifierList, PsiModifier.PUBLIC, false, false)); PsiClass[] classes = file.getClasses(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index c6282959300d..bf9f3e085ef5 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -394,6 +394,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumMustNotBeLocal(aClass)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkImplicitThisReferenceBeforeSuper(aClass, myJavaSdkVersion)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkClassAndPackageConflict(aClass)); + if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkPublicClassInRightFile(aClass)); } @Override @@ -713,7 +714,6 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh PsiModifierList psiModifierList = (PsiModifierList)parent; if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkNotAllowedModifier(keyword, psiModifierList)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkIllegalModifierCombination(keyword, psiModifierList)); - if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkPublicClassInRightFile(keyword, psiModifierList)); if (PsiModifier.ABSTRACT.equals(text) && psiModifierList.getParent() instanceof PsiMethod) { if (!myHolder.hasErrorResults()) { myHolder.add(HighlightMethodUtil.checkAbstractMethodInConcreteClass((PsiMethod)psiModifierList.getParent(), keyword));