ExpressionUtils#getEffectiveQualifier return null if non-static member is referenced from a static field initializer

IJ-CR-21030

GitOrigin-RevId: a91e78151cab5c78fe3576c61b71db6cf7b46403
This commit is contained in:
Andrey.Cherkasov
2022-05-06 18:04:09 +03:00
committed by intellij-monorepo-bot
parent d342a0c765
commit 63ab4f06f7
3 changed files with 34 additions and 5 deletions

View File

@@ -0,0 +1,16 @@
// "Qualify the call with 'A.this'" "false"
class A {
class B {
static String name(String key) {
return "";
}
static {
String s = name(<caret>);
}
}
String name(){
return "";
}
}

View File

@@ -0,0 +1,14 @@
// "Qualify the call with 'A.this'" "false"
class A {
class B {
static String name(String key) {
return "";
}
static String s = name(<caret>);
}
String name(){
return "";
}
}

View File

@@ -971,13 +971,12 @@ public final class ExpressionUtils {
* or if reference points to non-static member of class from static context
*/
public static PsiExpression getEffectiveQualifier(@NotNull PsiReferenceExpression ref, @NotNull PsiMember member) {
PsiElementFactory factory = JavaPsiFacade.getElementFactory(ref.getProject());
PsiClass memberClass = member.getContainingClass();
PsiMethod containingMethod = PsiTreeUtil.getParentOfType(ref, PsiMethod.class);
PsiClassInitializer classInitializer = PsiTreeUtil.getParentOfType(ref, PsiClassInitializer.class);
if (!member.hasModifierProperty(PsiModifier.STATIC) && (isStaticMember(containingMethod) || isStaticMember(classInitializer))) {
PsiMember containingMember = PsiTreeUtil.getParentOfType(ref, PsiMethod.class, PsiClassInitializer.class, PsiField.class);
if (!member.hasModifierProperty(PsiModifier.STATIC) && isStaticMember(containingMember)) {
return null;
}
PsiElementFactory factory = JavaPsiFacade.getElementFactory(ref.getProject());
PsiClass memberClass = member.getContainingClass();
if (memberClass != null) {
if (member.hasModifierProperty(PsiModifier.STATIC)) {
return factory.createReferenceExpression(memberClass);