From 857c80cd17a8750bddbed49c9bb90df3410ffe42 Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 28 May 2016 11:38:39 +0200 Subject: [PATCH] less psi allocation during stub indexing --- .../psi/stubs/DefaultStubBuilder.java | 29 +++++++++---------- .../psi/impl/stubs/PyFileStubBuilder.java | 5 ---- 2 files changed, 13 insertions(+), 21 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/stubs/DefaultStubBuilder.java b/platform/core-impl/src/com/intellij/psi/stubs/DefaultStubBuilder.java index b4290e83651a..9da64fce6720 100644 --- a/platform/core-impl/src/com/intellij/psi/stubs/DefaultStubBuilder.java +++ b/platform/core-impl/src/com/intellij/psi/stubs/DefaultStubBuilder.java @@ -45,32 +45,28 @@ public class DefaultStubBuilder implements StubBuilder { @NotNull private StubElement buildStubTreeFor(@NotNull PsiElement root, @NotNull StubElement parentStub) { Stack parentStubs = new Stack(); - Stack parentElements = new Stack(); - parentElements.push(root); + Stack parentElements = new Stack(); + parentElements.push(root.getNode()); parentStubs.push(parentStub); while (!parentElements.isEmpty()) { StubElement stub = parentStubs.pop(); - PsiElement elt = parentElements.pop(); + ASTNode node = parentElements.pop(); - if (elt instanceof StubBasedPsiElement) { - final IStubElementType type = ((StubBasedPsiElement)elt).getElementType(); - - if (type.shouldCreateStub(elt.getNode())) { - @SuppressWarnings("unchecked") StubElement s = type.createStub(elt, stub); - stub = s; + IElementType type = node.getElementType(); + if (type instanceof IStubElementType && ((IStubElementType)type).shouldCreateStub(node)) { + PsiElement elt = node.getPsi(); + if (elt instanceof StubBasedPsiElement) { + //noinspection unchecked + stub = ((IStubElementType)type).createStub(elt, stub); } - } - else { - final ASTNode node = elt.getNode(); - final IElementType type = node == null? null : node.getElementType(); - if (type instanceof IStubElementType && ((IStubElementType)type).shouldCreateStub(node)) { + else { LOG.error("Non-StubBasedPsiElement requests stub creation. Stub type: " + type + ", PSI: " + elt); } } - for (PsiElement child = elt.getLastChild(); child != null; child = child.getPrevSibling()) { - if (!skipChildProcessingWhenBuildingStubs(elt, child)) { + for (ASTNode child = node.getLastChildNode(); child != null; child = child.getTreePrev()) { + if (!skipChildProcessingWhenBuildingStubs(node, child)) { parentStubs.push(stub); parentElements.push(child); } @@ -80,6 +76,7 @@ public class DefaultStubBuilder implements StubBuilder { } /** + * @deprecated override and invoke {@link #skipChildProcessingWhenBuildingStubs(ASTNode, ASTNode)} * Note to implementers: always keep in sync with {@linkplain #skipChildProcessingWhenBuildingStubs(ASTNode, ASTNode)}. */ protected boolean skipChildProcessingWhenBuildingStubs(@NotNull PsiElement parent, @NotNull PsiElement element) { diff --git a/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubBuilder.java b/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubBuilder.java index 0858ff5056bb..6ec1d3b4d4b0 100644 --- a/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubBuilder.java +++ b/python/src/com/jetbrains/python/psi/impl/stubs/PyFileStubBuilder.java @@ -39,11 +39,6 @@ public class PyFileStubBuilder extends DefaultStubBuilder { return super.createStubForFile(file); } - @Override - protected boolean skipChildProcessingWhenBuildingStubs(@NotNull PsiElement parent, @NotNull PsiElement element) { - return parent instanceof PyIfStatement && PyUtil.isIfNameEqualsMain((PyIfStatement)parent); - } - @Override public boolean skipChildProcessingWhenBuildingStubs(@NotNull ASTNode parent, @NotNull ASTNode node) { PsiElement psi = parent.getPsi();