mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 20:39:40 +07:00
resolve inside anonymous: avoid parsing if no initializer available
This commit is contained in:
@@ -27,13 +27,15 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.java.stubs.PsiFieldStub;
|
||||
import com.intellij.psi.impl.source.PsiFieldImpl;
|
||||
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
|
||||
import com.intellij.psi.scope.JavaScopeProcessorEvent;
|
||||
import com.intellij.psi.scope.MethodProcessorSetupFailedException;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.scope.processor.MethodsProcessor;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.psi.stubs.StubElement;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -313,7 +315,7 @@ public class PsiScopesUtil {
|
||||
PsiType type = ((PsiExpression)qualifier).getType();
|
||||
if (type != null && qualifier instanceof PsiReferenceExpression) {
|
||||
final PsiElement resolve = ((PsiReferenceExpression)qualifier).resolve();
|
||||
if (resolve instanceof PsiVariable && ((PsiVariable)resolve).hasModifierProperty(PsiModifier.FINAL)) {
|
||||
if (resolve instanceof PsiVariable && ((PsiVariable)resolve).hasModifierProperty(PsiModifier.FINAL) && ((PsiVariable)resolve).hasInitializer()) {
|
||||
final PsiExpression initializer = ((PsiVariable)resolve).getInitializer();
|
||||
if (initializer instanceof PsiNewExpression) {
|
||||
final PsiAnonymousClass anonymousClass = ((PsiNewExpression)initializer).getAnonymousClass();
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
class SomeClass {
|
||||
public static final Object OBJECT_OVERRIDDEN = new Object() {
|
||||
public String toString() {
|
||||
return "";
|
||||
}
|
||||
};
|
||||
|
||||
public String get() {
|
||||
return OBJECT_OVERRIDDEN.toSt<ref>ring();
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import com.intellij.navigation.NavigationItem;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.hamcrest.core.IsInstanceOf.instanceOf;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
/**
|
||||
* @author dsl
|
||||
@@ -118,6 +119,16 @@ public class ResolveMethod15Test extends Resolve15TestCase {
|
||||
assertEquals("java.lang.Class<? extends java.lang.String>", type.getCanonicalText());
|
||||
}
|
||||
|
||||
public void testToString() throws Exception {
|
||||
final PsiReference ref = configureByFile();
|
||||
assertThat(ref, instanceOf(PsiReferenceExpression.class));
|
||||
final PsiReferenceExpression refExpr = (PsiReferenceExpression)ref;
|
||||
final PsiElement resolve = refExpr.resolve();
|
||||
assertTrue(resolve != null ? resolve.toString() : null, resolve instanceof PsiMethod);
|
||||
final PsiClass containingClass = ((PsiMethod)resolve).getContainingClass();
|
||||
assertTrue(containingClass != null ? containingClass.getName() : null, containingClass instanceof PsiAnonymousClass);
|
||||
}
|
||||
|
||||
public void testFilterFixedVsVarargs1() throws Exception {
|
||||
final PsiReference ref = configureByFile();
|
||||
assertThat(ref, instanceOf(PsiReferenceExpression.class));
|
||||
|
||||
Reference in New Issue
Block a user