From 5c7c18c460ef20f291a4e5a83621d53d87a233f2 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 7 Nov 2018 21:06:44 +0100 Subject: [PATCH] PsiClass.getDocComment: don't load AST when there's no doc comment --- .../psi/impl/compiled/StubBuildingVisitor.java | 2 +- .../psi/impl/java/stubs/JavaClassElementType.java | 4 +++- .../com/intellij/psi/impl/java/stubs/PsiClassStub.java | 4 ++++ .../psi/impl/java/stubs/impl/PsiClassStubImpl.java | 10 +++++++++- .../intellij/psi/impl/source/JavaFileElementType.java | 3 +-- .../src/com/intellij/psi/impl/source/PsiClassImpl.java | 3 +++ 6 files changed, 21 insertions(+), 5 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index 1ceb9c052a49..d59aa8d57114 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -99,7 +99,7 @@ public class StubBuildingVisitor extends ClassVisitor { boolean isEnum = isSet(flags, Opcodes.ACC_ENUM); boolean isAnnotationType = isSet(flags, Opcodes.ACC_ANNOTATION); short stubFlags = PsiClassStubImpl.packFlags(isDeprecated, isInterface, isEnum, false, false, - isAnnotationType, false, false, myAnonymousInner, myLocalClassInner); + isAnnotationType, false, false, myAnonymousInner, myLocalClassInner, false); myResult = new PsiClassStubImpl(JavaStubElementTypes.CLASS, myParent, fqn, shortName, null, stubFlags); myModList = new PsiModifierListStubImpl(myResult, packClassFlags(flags)); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java index 475272684c4e..b2c43c6084e2 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/JavaClassElementType.java @@ -77,6 +77,7 @@ public abstract class JavaClassElementType extends JavaStubElementType extends PsiMemberStub { boolean isAnnotationType(); + default boolean hasDocComment() { + return true; + } + @Nullable String getSourceFileName(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassStubImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassStubImpl.java index 116427606d59..99c1bf76afd9 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassStubImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/impl/PsiClassStubImpl.java @@ -42,6 +42,7 @@ public class PsiClassStubImpl extends StubBase implements private static final int DEPRECATED_ANNOTATION = 0x80; private static final int ANONYMOUS_INNER = 0x100; private static final int LOCAL_CLASS_INNER = 0x200; + private static final int HAS_DOC_COMMENT = 0x400; private final String myQualifiedName; private final String myName; @@ -124,6 +125,11 @@ public class PsiClassStubImpl extends StubBase implements return BitUtil.isSet(myFlags, ANON_TYPE); } + @Override + public boolean hasDocComment() { + return BitUtil.isSet(myFlags, HAS_DOC_COMMENT); + } + @Override public LanguageLevel getLanguageLevel() { StubElement parent = getParentStub(); @@ -163,7 +169,8 @@ public class PsiClassStubImpl extends StubBase implements boolean isInQualifiedNew, boolean hasDeprecatedAnnotation, boolean anonymousInner, - boolean localClassInner + boolean localClassInner, + boolean hasDocComment ) { short flags = 0; if (isDeprecated) flags |= DEPRECATED; @@ -176,6 +183,7 @@ public class PsiClassStubImpl extends StubBase implements if (hasDeprecatedAnnotation) flags |= DEPRECATED_ANNOTATION; if (anonymousInner) flags |= ANONYMOUS_INNER; if (localClassInner) flags |= LOCAL_CLASS_INNER; + if (hasDocComment) flags |= HAS_DOC_COMMENT; return flags; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java index 00f57a49e532..2212ea4ff54c 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/JavaFileElementType.java @@ -29,7 +29,6 @@ import com.intellij.psi.impl.source.tree.java.JavaFileElement; import com.intellij.psi.stubs.*; import com.intellij.psi.tree.ILightStubFileElementType; import com.intellij.util.diff.FlyweightCapableTreeStructure; -import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import java.io.IOException; @@ -38,7 +37,7 @@ import java.io.IOException; * @author max */ public class JavaFileElementType extends ILightStubFileElementType { - public static final int STUB_VERSION = 41; + public static final int STUB_VERSION = 42; public JavaFileElementType() { super("java.FILE", JavaLanguage.INSTANCE); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java index 844d2a2561c1..f598d7060ddb 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java @@ -419,6 +419,9 @@ public class PsiClassImpl extends JavaStubPsiElement> implements @Override public PsiDocComment getDocComment(){ + PsiClassStub stub = getGreenStub(); + if (stub != null && !stub.hasDocComment()) return null; + return (PsiDocComment)getNode().findChildByRoleAsPsiElement(ChildRole.DOC_COMMENT); }