From 3ff2b02967a63aa417779a0cf6b76aaa0fb3488c Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Mon, 23 May 2016 17:41:53 +0300 Subject: [PATCH] [groovy] do not load ast while resolving GrAnonymousClassDefinitionImpl#getBaseClassType (IDEA-155550) --- .../typedef/GrAnonymousClassDefinitionImpl.java | 17 ++++++----------- .../groovy/lang/psi/GrStubAstSwitchTest.groovy | 5 +++++ 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java index e56b0cfd05c9..669673af818e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrAnonymousClassDefinitionImpl.java @@ -63,6 +63,10 @@ public class GrAnonymousClassDefinitionImpl extends GrTypeDefinitionImpl impleme @Override @NotNull public GrCodeReferenceElement getBaseClassReferenceGroovy() { + GrTypeDefinitionStub stub = getStub(); + if (stub != null) { + return GroovyPsiElementFactory.getInstance(getProject()).createReferenceElementFromText(stub.getBaseClassName(), this); + } //noinspection ConstantConditions return findNotNullChildByClass(GrCodeReferenceElement.class); //not null because of definition =) } @@ -108,23 +112,14 @@ public class GrAnonymousClassDefinitionImpl extends GrTypeDefinitionImpl impleme @Override @NotNull public PsiClassType getBaseClassType() { - final GrTypeDefinitionStub stub = getStub(); - if (stub == null) { - myCachedBaseType = null; + if (isInQualifiedNew()) { return createClassType(); } PsiClassType type = SoftReference.dereference(myCachedBaseType); if (type != null && type.isValid()) return type; - if (isInQualifiedNew()) { - return createClassType(); - } - - final String refText = stub.getBaseClassName(); - assert refText != null : stub; - type = new GrClassReferenceType(GroovyPsiElementFactory.getInstance(getProject()).createReferenceElementFromText(refText, this)); - + type = createClassType(); myCachedBaseType = new SoftReference(type); return type; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy index e81fc416b742..e20e9c812ee1 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/psi/GrStubAstSwitchTest.groovy @@ -19,6 +19,7 @@ import com.intellij.psi.* import com.intellij.psi.impl.source.PsiFileImpl import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.stubs.StubIndex +import com.intellij.psi.util.InheritanceUtil import groovy.transform.CompileStatic import org.jetbrains.plugins.groovy.LightGroovyTestCase import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition @@ -267,5 +268,9 @@ class A { definition.baseClassType assert psiFile.stub assert !psiFile.contentsLoaded + + assert InheritanceUtil.isInheritor(definition, Runnable.name) + assert psiFile.stub + assert !psiFile.contentsLoaded } }