From f2014af32f1ddf5a6ebc15642b6be545fa8f52f5 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 14 May 2019 20:42:11 +0200 Subject: [PATCH] error highlighting: fix accessibility for diamond constructors (IDEA-212188) GitOrigin-RevId: 7193877427e50351a1171df12a431effc89b6bfd --- .../daemon/impl/analysis/HighlightMethodUtil.java | 4 +++- .../src/com/intellij/psi/PsiDiamondTypeImpl.java | 8 ++++---- .../lambda/diamond/ConstructorAccessibility.java | 15 +++++++++++++++ .../daemon/lambda/Diamond8HighlightingTest.java | 4 ++++ 4 files changed, 26 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/ConstructorAccessibility.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java index 9025e94984d1..1f977f118d2c 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightMethodUtil.java @@ -1709,7 +1709,9 @@ public class HighlightMethodUtil { if (staticFactory instanceof MethodCandidateInfo) { if (((MethodCandidateInfo)staticFactory).isApplicable()) { result = (MethodCandidateInfo)staticFactory; - constructor = ((MethodCandidateInfo)staticFactory).getElement(); + if (constructor == null) { + constructor = ((MethodCandidateInfo)staticFactory).getElement(); + } } else { applicable = false; diff --git a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java index 094d56192ab9..911b4a794049 100644 --- a/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/PsiDiamondTypeImpl.java @@ -249,14 +249,14 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { return JavaResolveResult.EMPTY; } - final MethodCandidateInfo staticFactoryCandidateInfo = createMethodCandidate(staticFactory, context, false, argumentList); + final MethodCandidateInfo staticFactoryCandidateInfo = createMethodCandidate((MethodCandidateInfo)result, context, false, argumentList); if (!staticFactory.isVarArgs()) { return staticFactoryCandidateInfo; } final ArrayList conflicts = new ArrayList<>(); conflicts.add(staticFactoryCandidateInfo); - conflicts.add(createMethodCandidate(staticFactory, context, true, argumentList)); + conflicts.add(createMethodCandidate((MethodCandidateInfo)result, context, true, argumentList)); return resolver.resolveConflict(conflicts); }); } @@ -438,11 +438,11 @@ public class PsiDiamondTypeImpl extends PsiDiamondType { } - private static MethodCandidateInfo createMethodCandidate(@NotNull final PsiMethod staticFactoryMethod, + private static MethodCandidateInfo createMethodCandidate(@NotNull final MethodCandidateInfo staticFactoryMethod, final PsiElement parent, final boolean varargs, final PsiExpressionList argumentList) { - return new MethodCandidateInfo(staticFactoryMethod, PsiSubstitutor.EMPTY, false, false, argumentList, parent, null, null) { + return new MethodCandidateInfo(staticFactoryMethod.getElement(), PsiSubstitutor.EMPTY, !staticFactoryMethod.isAccessible(), false, argumentList, parent, null, null) { private PsiType[] myExpressionTypes; @Override diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/ConstructorAccessibility.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/ConstructorAccessibility.java new file mode 100644 index 000000000000..39ed1dc812c6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/diamond/ConstructorAccessibility.java @@ -0,0 +1,15 @@ +interface Either { + public static final class Left { + private final L value; + + private Left(L value) { + this.value = value; + } + } +} + +class Main { + { + new Either.Left<>(""); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Diamond8HighlightingTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Diamond8HighlightingTest.java index 0ba67b0ebb04..f74681ff62fc 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Diamond8HighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/lambda/Diamond8HighlightingTest.java @@ -29,6 +29,10 @@ public class Diamond8HighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testConstructorAccessibility() { + doTest(); + } + public void testOuterClass() { doTest(); }