java diamonds: avoid recursion prevention (IDEA-255486)

GitOrigin-RevId: bb6e3e45899ede6c36278bfd3c74813b1fc64b38
This commit is contained in:
Anna Kozlova
2020-11-16 14:14:13 +01:00
committed by intellij-monorepo-bot
parent 860f3889a2
commit cbff44d84f
3 changed files with 24 additions and 0 deletions

View File

@@ -112,6 +112,10 @@ public final class JavaResolveUtil {
else {
contextClass = PsiTreeUtil.getContextOfType(place, PsiClass.class, false);
if (isInClassAnnotationParameterList(place, contextClass)) return false;
if (contextClass instanceof PsiAnonymousClass &&
PsiTreeUtil.isAncestor(((PsiAnonymousClass)contextClass).getArgumentList(), place, true)) {
contextClass = PsiTreeUtil.getContextOfType(contextClass, PsiClass.class, true);
}
}
return canAccessProtectedMember(member, memberClass, accessObjectClass, contextClass,
modifierList.hasModifierProperty(PsiModifier.STATIC));

View File

@@ -0,0 +1,13 @@
package c;
import a.*;
class Derived extends Base {
{
Foo<String> b = new Foo<>(super.createString()) {};
}
class Foo<T> {
Foo(T t) {
}
}
}

View File

@@ -203,6 +203,13 @@ public class LightAdvHighlightingFixtureTest extends LightJavaCodeInsightFixture
myFixture.addClass("package a; public class Base<T> { protected Base() {}}");
doTest();
}
public void testDiamondsWithProtectedCallInConstruction() {
myFixture.addClass("package a; public class Base { " +
" protected String createString() {return null;}" +
"}");
doTest();
}
private void doTest() {
myFixture.configureByFile(getTestName(false) + ".java");