From 1d3a3aea0970a826fa9bdfa090e2c080ff57d2cf Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Mon, 19 May 2014 18:47:43 +0400 Subject: [PATCH] Introduce helper method to get stub or psi children as list Add ArrayFactory to JetStubElement Remove redundant array factories --- .../jet/lang/psi/JetElementImplStub.java | 11 ++++++++ .../jet/lang/psi/JetImportDirective.java | 8 ------ .../jetbrains/jet/lang/psi/JetImportList.java | 3 +-- .../jetbrains/jet/lang/psi/JetParameter.java | 9 ------- .../jet/lang/psi/JetParameterList.java | 3 +-- .../jet/lang/psi/JetTypeParameter.java | 9 ------- .../jet/lang/psi/JetTypeParameterList.java | 3 +-- .../stubs/elements/JetStubElementType.java | 26 ++++++++++++++++++- 8 files changed, 39 insertions(+), 33 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElementImplStub.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElementImplStub.java index 1024fe2197f..5f21d45010b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElementImplStub.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElementImplStub.java @@ -26,8 +26,12 @@ import com.intellij.psi.StubBasedPsiElement; import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.stubs.StubElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementType; import org.jetbrains.jet.plugin.JetLanguage; +import java.util.Arrays; +import java.util.List; + public class JetElementImplStub extends StubBasedPsiElementBase implements JetElement, StubBasedPsiElement { public JetElementImplStub(@NotNull T stub, @NotNull IStubElementType nodeType) { @@ -82,4 +86,11 @@ public class JetElementImplStub extends StubBasedPsiEleme public R accept(@NotNull JetVisitor visitor, D data) { return visitor.visitJetElement(this, data); } + + @NotNull + protected , StubT extends StubElement> List getStubOrPsiChildrenAsList( + @NotNull JetStubElementType elementType + ) { + return Arrays.asList(getStubOrPsiChildren(elementType, elementType.getArrayFactory())); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java index 999a8add1b2..88d142ea175 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java @@ -26,14 +26,6 @@ import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; import org.jetbrains.jet.lexer.JetTokens; public class JetImportDirective extends JetElementImplStub { - public static final JetImportDirective[] EMPTY_ARRAY = new JetImportDirective[0]; - - public static final ArrayFactory ARRAY_FACTORY = new ArrayFactory() { - @Override - public JetImportDirective[] create(int count) { - return count == 0 ? EMPTY_ARRAY : new JetImportDirective[count]; - } - }; public JetImportDirective(@NotNull ASTNode node) { super(node); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportList.java index b1e16bd18f9..090399215ad 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportList.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportList.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.stubs.PsiJetPlaceHolderStub; import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; -import java.util.Arrays; import java.util.List; public class JetImportList extends JetElementImplStub> { @@ -41,6 +40,6 @@ public class JetImportList extends JetElementImplStub getImports() { - return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.IMPORT_DIRECTIVE, JetImportDirective.ARRAY_FACTORY)); + return getStubOrPsiChildrenAsList(JetStubElementTypes.IMPORT_DIRECTIVE); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java index 6ea0b7bd84c..97f71cbdff4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; import com.intellij.navigation.ItemPresentationProviders; -import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; @@ -28,14 +27,6 @@ import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; import org.jetbrains.jet.lexer.JetTokens; public class JetParameter extends JetNamedDeclarationStub { - public static final JetParameter[] EMPTY_ARRAY = new JetParameter[0]; - - public static final ArrayFactory ARRAY_FACTORY = new ArrayFactory() { - @Override - public JetParameter[] create(int count) { - return count == 0 ? EMPTY_ARRAY : new JetParameter[count]; - } - }; public JetParameter(@NotNull ASTNode node) { super(node); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java index 2c157fca3de..1c3beefb7bd 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.stubs.PsiJetPlaceHolderStub; import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; -import java.util.Arrays; import java.util.List; public class JetParameterList extends JetElementImplStub> { @@ -40,6 +39,6 @@ public class JetParameterList extends JetElementImplStub getParameters() { - return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.VALUE_PARAMETER, JetParameter.ARRAY_FACTORY)); + return getStubOrPsiChildrenAsList(JetStubElementTypes.VALUE_PARAMETER); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java index 9cf8ab1e3b6..61d21a411b6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameter.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.psi; import com.intellij.lang.ASTNode; -import com.intellij.util.ArrayFactory; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.JetNodeTypes; @@ -27,14 +26,6 @@ import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lexer.JetTokens; public class JetTypeParameter extends JetNamedDeclarationStub { - public static final JetTypeParameter[] EMPTY_ARRAY = new JetTypeParameter[0]; - - public static final ArrayFactory ARRAY_FACTORY = new ArrayFactory() { - @Override - public JetTypeParameter[] create(int count) { - return count == 0 ? EMPTY_ARRAY : new JetTypeParameter[count]; - } - }; public JetTypeParameter(@NotNull ASTNode node) { super(node); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameterList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameterList.java index 00d21993038..9a1b7eab612 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameterList.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeParameterList.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.stubs.PsiJetPlaceHolderStub; import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes; -import java.util.Arrays; import java.util.List; public class JetTypeParameterList extends JetElementImplStub> { @@ -35,7 +34,7 @@ public class JetTypeParameterList extends JetElementImplStub getParameters() { - return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.TYPE_PARAMETER, JetTypeParameter.ARRAY_FACTORY)); + return getStubOrPsiChildrenAsList(JetStubElementTypes.TYPE_PARAMETER); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetStubElementType.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetStubElementType.java index 84607b692a4..acedfe3e43f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetStubElementType.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/stubs/elements/JetStubElementType.java @@ -22,12 +22,14 @@ import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.stubs.IndexSink; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ArrayFactory; import com.intellij.util.ReflectionUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.plugin.JetLanguage; +import java.lang.reflect.Array; import java.lang.reflect.Constructor; public abstract class JetStubElementType> extends IStubElementType { @@ -36,8 +38,12 @@ public abstract class JetStubElementType byNodeConstructor; @NotNull private final Constructor byStubConstructor; + @NotNull + private final PsiT[] emptyArray; + @NotNull + private final ArrayFactory arrayFactory; - public JetStubElementType(@NotNull @NonNls String debugName, @NotNull Class psiClass, @NotNull Class stubClass) { + public JetStubElementType(@NotNull @NonNls String debugName, @NotNull final Class psiClass, @NotNull Class stubClass) { super(debugName, JetLanguage.INSTANCE); try { byNodeConstructor = psiClass.getConstructor(ASTNode.class); @@ -46,6 +52,19 @@ public abstract class JetStubElementType() { + @NotNull + @Override + public PsiT[] create(int count) { + if (count == 0) { + return emptyArray; + } + //noinspection unchecked + return (PsiT[]) Array.newInstance(psiClass, count); + } + }; } @NotNull @@ -107,4 +126,9 @@ public abstract class JetStubElementType getArrayFactory() { + return arrayFactory; + } }