From f7c259b7ecba4fbca5b063e442421b71ca2e7817 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Mon, 8 Jun 2020 09:00:45 +0200 Subject: [PATCH] PsiBuilder: don't reuse collapsed tokens if the element type doesn't say so GitOrigin-RevId: 3f7ba09e40e1e94f34612c4bb9b92f46bc4f2ea9 --- .../src/com/intellij/lang/impl/PsiBuilderImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java b/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java index 3153220ea20e..5bc0d9228c9d 100644 --- a/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java +++ b/platform/core-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java @@ -163,7 +163,7 @@ public class PsiBuilderImpl extends UnprotectedUserDataHolder implements PsiBuil private TokenSequence performLexing(@Nullable Object parentCachingNode) { TokenSequence fromParent = null; - if (parentCachingNode instanceof LazyParseableToken) { + if (parentCachingNode instanceof LazyParseableToken && shouldReuseCollapsedTokens(((LazyParseableToken)parentCachingNode).getTokenType())) { fromParent = ((LazyParseableToken)parentCachingNode).getParsedTokenSequence(); assert fromParent == null || fromParent.lexStarts[fromParent.lexemeCount] == myText.length(); ProgressIndicatorProvider.checkCanceled(); @@ -1253,7 +1253,7 @@ public class PsiBuilderImpl extends UnprotectedUserDataHolder implements PsiBuil final int end = myLexStarts[startMarker.getEndIndex()]; final IElementType markerType = startMarker.myType; final TreeElement leaf = createLeaf(markerType, start, end); - if (markerType instanceof ILazyParseableElementTypeBase && ((ILazyParseableElementTypeBase)markerType).reuseCollapsedTokens() && + if (shouldReuseCollapsedTokens(markerType) && startMarker.myLexemeIndex < startMarker.getEndIndex()) { int length = startMarker.getEndIndex() - startMarker.myLexemeIndex; int[] relativeStarts = new int[length + 1]; @@ -1269,6 +1269,10 @@ public class PsiBuilderImpl extends UnprotectedUserDataHolder implements PsiBuil return startMarker.getEndIndex(); } + private static boolean shouldReuseCollapsedTokens(IElementType collapsed) { + return collapsed instanceof ILazyParseableElementTypeBase && ((ILazyParseableElementTypeBase)collapsed).reuseCollapsedTokens(); + } + @NotNull private static CompositeElement createComposite(@NotNull StartMarker marker, @Nullable ASTFactory astFactory) { final IElementType type = marker.myType;