From ceca3ac46de377ab46bd259f563ad9e53f6cd54e Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 1 Sep 2016 18:11:33 +0300 Subject: [PATCH] check for accessibility --- .../impl/analysis/HighlightClassUtil.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) 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 6037ffa96b4a..8778fe6c9c48 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 @@ -47,6 +47,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; +import java.util.stream.Collectors; public class HighlightClassUtil { private static final QuickFixFactory QUICK_FIX_FACTORY = QuickFixFactory.getInstance(); @@ -235,7 +236,7 @@ public class HighlightClassUtil { if (aClass.getParent() != containingFile || !aClass.hasModifierProperty(PsiModifier.PUBLIC) || !(containingFile instanceof PsiJavaFile)) return null; PsiJavaFile file = (PsiJavaFile)containingFile; VirtualFile virtualFile = file.getVirtualFile(); - if (virtualFile == null || aClass.getName().equals(virtualFile.getNameWithoutExtension())) { + if (virtualFile == null || virtualFile.getNameWithoutExtension().equals(aClass.getName())) { return null; } String message = JavaErrorMessages.message("public.class.should.be.named.after.file", aClass.getName()); @@ -253,7 +254,7 @@ public class HighlightClassUtil { for (PsiClass otherClass : classes) { if (!otherClass.getManager().areElementsEquivalent(otherClass, aClass) && otherClass.hasModifierProperty(PsiModifier.PUBLIC) && - otherClass.getName().equals(virtualFile.getNameWithoutExtension())) { + virtualFile.getNameWithoutExtension().equals(otherClass.getName())) { return errorResult; } } @@ -564,22 +565,26 @@ public class HighlightClassUtil { @NotNull TextRange range, @NotNull PsiClass subClass, @NotNull PsiClass superClass) { - PsiElement resolved = JavaResolveUtil.resolveImaginarySuperCallInThisPlace(subClass, subClass.getProject(), superClass); + Project project = subClass.getProject(); + PsiElement resolved = JavaResolveUtil.resolveImaginarySuperCallInThisPlace(subClass, project, superClass); if (resolved != null) { return null; } // find two ambiguous var-args-only constructors - List varargConstructors = new ArrayList<>(); - for (PsiMethod constructor : constructors) { - final PsiParameter[] parameters = constructor.getParameterList().getParameters(); - if (parameters.length == 1 && parameters[0].isVarArgs()) { - varargConstructors.add(constructor); - if (varargConstructors.size() == 2) break; - } - } + List varargConstructors = Arrays.stream(constructors) + .filter(constructor -> constructor.getParameterList().getParameters().length == 1) + .filter(constructor -> constructor.getParameterList().getParameters()[0].isVarArgs()) + .filter(constructor -> PsiResolveHelper.SERVICE.getInstance(project).isAccessible(constructor, subClass, subClass)) + .limit(2).collect(Collectors.toList()); - if (varargConstructors.size() > 1) { + //List varargConstructors = Arrays.stream(constructors) + // .map(constructor -> Pair.create(constructor, constructor.getParameterList().getParameters())) + // .filter(p -> p.second.length == 1 && p.second[0].isVarArgs() && PsiResolveHelper.SERVICE.getInstance(project).isAccessible(p.first, subClass, subClass)) + // .map(p -> p.first) + // .limit(2).collect(Collectors.toList()); + // + if (varargConstructors.size() == 2) { final String m1 = PsiFormatUtil.formatMethod(varargConstructors.get(0), PsiSubstitutor.EMPTY, PsiFormatUtilBase.SHOW_CONTAINING_CLASS | PsiFormatUtilBase.SHOW_NAME |