use green stubs in java PSI to decrease the amount of AST being reloaded after GC

This commit is contained in:
peter
2016-08-30 17:35:04 +02:00
parent 34248851b4
commit b2791e4f73
14 changed files with 29 additions and 29 deletions
@@ -20,7 +20,6 @@ import com.intellij.psi.*;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
import com.intellij.psi.impl.java.stubs.PsiClassStub;
import com.intellij.psi.impl.source.tree.ChildRole;
import com.intellij.psi.impl.source.tree.SharedImplUtil;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.reference.SoftReference;
import com.intellij.util.IncorrectOperationException;
@@ -66,7 +65,7 @@ public class PsiAnonymousClassImpl extends PsiClassImpl implements PsiAnonymousC
@Override
@NotNull
public PsiClassType getBaseClassType() {
final PsiClassStub stub = getStub();
final PsiClassStub stub = getGreenStub();
if (stub == null) {
myCachedBaseType = null;
return getTypeByTree();
@@ -192,7 +191,7 @@ public class PsiAnonymousClassImpl extends PsiClassImpl implements PsiAnonymousC
@Override
public boolean isInQualifiedNew() {
final PsiClassStub stub = getStub();
final PsiClassStub stub = getGreenStub();
if (stub != null) {
return stub.isAnonymousInQualifiedNew();
}
@@ -242,7 +242,7 @@ public class PsiClassImpl extends JavaStubPsiElement<PsiClassStub<?>> implements
@Override
@Nullable
public PsiClass getContainingClass() {
final PsiClassStub stub = getStub();
final PsiClassStub stub = getGreenStub();
if (stub != null) {
StubElement parent = stub.getParentStub();
return parent instanceof PsiClassStub ? ((PsiClassStub<?>)parent).getPsi() : null;
@@ -540,7 +540,7 @@ public class PsiClassImpl extends JavaStubPsiElement<PsiClassStub<?>> implements
private static boolean isAnonymousOrLocal(PsiClass aClass) {
if (aClass instanceof PsiAnonymousClass) return true;
final PsiClassStub stub = ((PsiClassImpl)aClass).getStub();
final PsiClassStub stub = ((PsiClassImpl)aClass).getGreenStub();
if (stub != null) {
final StubElement parentStub = stub.getParentStub();
return !(parentStub instanceof PsiClassStub || parentStub instanceof PsiFileStub);
@@ -174,7 +174,7 @@ public class PsiEnumConstantImpl extends JavaStubPsiElement<PsiFieldStub> implem
@Override
@NotNull
public String getName() {
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null) {
return stub.getName();
}
@@ -194,7 +194,7 @@ public class PsiEnumConstantImpl extends JavaStubPsiElement<PsiFieldStub> implem
@Override
public boolean isDeprecated() {
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null) {
return stub.isDeprecated();
}
@@ -104,7 +104,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
@Override
@NotNull
public String getName() {
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null) {
return stub.getName();
}
@@ -185,7 +185,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
private PsiField findFirstFieldInDeclaration() {
if (getSelfModifierList() != null) return this;
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null) {
final List siblings = stub.getParentStub().getChildrenStubs();
final int idx = siblings.indexOf(stub);
@@ -226,7 +226,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
// avoids stub-to-AST switch if possible,
// returns the light generated initializer literal expression if stored in stubs, the regular initializer if wasn't
public PsiExpression getDetachedInitializer() {
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
PsiExpression initializer;
if (stub == null) {
initializer = getInitializer();
@@ -251,7 +251,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
@Override
public boolean hasInitializer() {
PsiFieldStub stub = getStub();
PsiFieldStub stub = getGreenStub();
if (stub != null) {
return stub.getInitializerText() != null;
}
@@ -299,7 +299,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
@Override
public boolean isDeprecated() {
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null) {
return stub.isDeprecated() || stub.hasDeprecatedAnnotation() && PsiImplUtil.isDeprecatedByAnnotation(this);
}
@@ -309,7 +309,7 @@ public class PsiFieldImpl extends JavaStubPsiElement<PsiFieldStub> implements Ps
@Override
public PsiDocComment getDocComment(){
final PsiFieldStub stub = getStub();
final PsiFieldStub stub = getGreenStub();
if (stub != null && !stub.hasDocComment()) return null;
CompositeElement treeElement = getNode();
@@ -40,7 +40,7 @@ public abstract class PsiImportStatementBaseImpl extends JavaStubPsiElement<PsiI
@Override
public boolean isOnDemand(){
final PsiImportStatementStub stub = getStub();
final PsiImportStatementStub stub = getGreenStub();
if (stub != null) {
return stub.isOnDemand();
}
@@ -42,7 +42,7 @@ public class PsiImportStatementImpl extends PsiImportStatementBaseImpl implement
@Override
public String getQualifiedName() {
PsiImportStatementStub stub = getStub();
PsiImportStatementStub stub = getGreenStub();
if (stub != null) {
return stub.getImportReferenceText();
}
@@ -38,7 +38,7 @@ public class PsiJavaFileImpl extends PsiJavaFileBaseImpl {
@Nullable
@Override
public PsiJavaModule getModuleDeclaration() {
PsiJavaFileStub stub = (PsiJavaFileStub)getStub();
PsiJavaFileStub stub = (PsiJavaFileStub)getGreenStub();
if (stub != null) {
return stub.getModule();
}
@@ -43,7 +43,7 @@ public class PsiJavaModuleImpl extends JavaStubPsiElement<PsiJavaModuleStub> imp
@NotNull
@Override
public String getModuleName() {
PsiJavaModuleStub stub = getStub();
PsiJavaModuleStub stub = getGreenStub();
if (stub != null) {
return stub.getName();
}
@@ -20,6 +20,7 @@ import com.intellij.navigation.ItemPresentation;
import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.ui.Queryable;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.psi.*;
import com.intellij.psi.impl.ElementPresentationUtil;
@@ -136,7 +137,7 @@ public class PsiMethodImpl extends JavaStubPsiElement<PsiMethodStub> implements
@NotNull
public String getName() {
final String name;
final PsiMethodStub stub = getStub();
final PsiMethodStub stub = getGreenStub();
if (stub != null) {
name = stub.getName();
}
@@ -241,7 +242,7 @@ public class PsiMethodImpl extends JavaStubPsiElement<PsiMethodStub> implements
@Override
public boolean isDeprecated() {
final PsiMethodStub stub = getStub();
final PsiMethodStub stub = getGreenStub();
if (stub != null) {
return stub.isDeprecated() || stub.hasDeprecatedAnnotation() && PsiImplUtil.isDeprecatedByAnnotation(this);
}
@@ -251,7 +252,7 @@ public class PsiMethodImpl extends JavaStubPsiElement<PsiMethodStub> implements
@Override
public PsiDocComment getDocComment() {
final PsiMethodStub stub = getStub();
final PsiMethodStub stub = getGreenStub();
if (stub != null && !stub.hasDocComment()) return null;
return (PsiDocComment)getNode().findChildByRoleAsPsiElement(ChildRole.DOC_COMMENT);
@@ -259,7 +260,7 @@ public class PsiMethodImpl extends JavaStubPsiElement<PsiMethodStub> implements
@Override
public boolean isConstructor() {
final PsiMethodStub stub = getStub();
final PsiMethodStub stub = getGreenStub();
if (stub != null) {
return stub.isConstructor();
}
@@ -269,7 +270,7 @@ public class PsiMethodImpl extends JavaStubPsiElement<PsiMethodStub> implements
@Override
public boolean isVarArgs() {
final PsiMethodStub stub = getStub();
final PsiMethodStub stub = getGreenStub();
if (stub != null) {
return stub.isVarArgs();
}
@@ -113,7 +113,7 @@ public class PsiParameterImpl extends JavaStubPsiElement<PsiParameterStub> imple
@Override
@NotNull
public final String getName() {
PsiParameterStub stub = getStub();
PsiParameterStub stub = getGreenStub();
if (stub != null) {
return stub.getName();
}
@@ -269,7 +269,7 @@ public class PsiParameterImpl extends JavaStubPsiElement<PsiParameterStub> imple
@Override
public boolean isVarArgs() {
final PsiParameterStub stub = getStub();
final PsiParameterStub stub = getGreenStub();
if (stub != null) {
return stub.isParameterTypeEllipsis();
}
@@ -59,7 +59,7 @@ public class PsiParameterListImpl extends JavaStubPsiElement<PsiParameterListStu
@Override
public int getParametersCount() {
final PsiParameterListStub stub = getStub();
final PsiParameterListStub stub = getGreenStub();
if (stub != null) {
return stub.getChildrenStubs().size();
}
@@ -47,7 +47,7 @@ public class PsiReferenceListImpl extends JavaStubPsiElement<PsiClassReferenceLi
@Override
@NotNull
public PsiClassType[] getReferencedTypes() {
PsiClassReferenceListStub stub = getStub();
PsiClassReferenceListStub stub = getGreenStub();
if (stub != null) {
return stub.getReferencedTypes();
}
@@ -98,7 +98,7 @@ public class PsiLiteralExpressionImpl
}
public IElementType getLiteralElementType() {
PsiLiteralStub stub = getStub();
PsiLiteralStub stub = getGreenStub();
if (stub != null) return stub.getLiteralType();
return getNode().getFirstChildNode().getElementType();
@@ -111,7 +111,7 @@ public class PsiLiteralExpressionImpl
@Override
public String getText() {
PsiLiteralStub stub = getStub();
PsiLiteralStub stub = getGreenStub();
if (stub != null) return stub.getLiteralText();
return super.getText();
@@ -103,7 +103,7 @@ public class PsiNameValuePairImpl extends JavaStubPsiElement<PsiNameValuePairStu
@Override
@Nullable
public PsiAnnotationMemberValue getDetachedValue() {
PsiNameValuePairStub stub = getStub();
PsiNameValuePairStub stub = getGreenStub();
if (stub != null) {
String text = stub.getValue();
PsiAnnotationMemberValue result = SoftReference.dereference(myDetachedValue);