Introduce helper method to get stub or psi children as list
Add ArrayFactory to JetStubElement Remove redundant array factories
This commit is contained in:
@@ -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<T extends StubElement> extends StubBasedPsiElementBase<T>
|
||||
implements JetElement, StubBasedPsiElement<T> {
|
||||
public JetElementImplStub(@NotNull T stub, @NotNull IStubElementType nodeType) {
|
||||
@@ -82,4 +86,11 @@ public class JetElementImplStub<T extends StubElement> extends StubBasedPsiEleme
|
||||
public <R, D> R accept(@NotNull JetVisitor<R, D> visitor, D data) {
|
||||
return visitor.visitJetElement(this, data);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected <PsiT extends JetElementImplStub<?>, StubT extends StubElement> List<PsiT> getStubOrPsiChildrenAsList(
|
||||
@NotNull JetStubElementType<StubT, PsiT> elementType
|
||||
) {
|
||||
return Arrays.asList(getStubOrPsiChildren(elementType, elementType.getArrayFactory()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,14 +26,6 @@ import org.jetbrains.jet.lang.psi.stubs.elements.JetStubElementTypes;
|
||||
import org.jetbrains.jet.lexer.JetTokens;
|
||||
|
||||
public class JetImportDirective extends JetElementImplStub<PsiJetImportDirectiveStub> {
|
||||
public static final JetImportDirective[] EMPTY_ARRAY = new JetImportDirective[0];
|
||||
|
||||
public static final ArrayFactory<JetImportDirective> ARRAY_FACTORY = new ArrayFactory<JetImportDirective>() {
|
||||
@Override
|
||||
public JetImportDirective[] create(int count) {
|
||||
return count == 0 ? EMPTY_ARRAY : new JetImportDirective[count];
|
||||
}
|
||||
};
|
||||
|
||||
public JetImportDirective(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
|
||||
@@ -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<PsiJetPlaceHolderStub<JetImportList>> {
|
||||
@@ -41,6 +40,6 @@ public class JetImportList extends JetElementImplStub<PsiJetPlaceHolderStub<JetI
|
||||
|
||||
@NotNull
|
||||
public List<JetImportDirective> getImports() {
|
||||
return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.IMPORT_DIRECTIVE, JetImportDirective.ARRAY_FACTORY));
|
||||
return getStubOrPsiChildrenAsList(JetStubElementTypes.IMPORT_DIRECTIVE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PsiJetParameterStub> {
|
||||
public static final JetParameter[] EMPTY_ARRAY = new JetParameter[0];
|
||||
|
||||
public static final ArrayFactory<JetParameter> ARRAY_FACTORY = new ArrayFactory<JetParameter>() {
|
||||
@Override
|
||||
public JetParameter[] create(int count) {
|
||||
return count == 0 ? EMPTY_ARRAY : new JetParameter[count];
|
||||
}
|
||||
};
|
||||
|
||||
public JetParameter(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
|
||||
@@ -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<PsiJetPlaceHolderStub<JetParameterList>> {
|
||||
@@ -40,6 +39,6 @@ public class JetParameterList extends JetElementImplStub<PsiJetPlaceHolderStub<J
|
||||
|
||||
@NotNull
|
||||
public List<JetParameter> getParameters() {
|
||||
return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.VALUE_PARAMETER, JetParameter.ARRAY_FACTORY));
|
||||
return getStubOrPsiChildrenAsList(JetStubElementTypes.VALUE_PARAMETER);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PsiJetTypeParameterStub> {
|
||||
public static final JetTypeParameter[] EMPTY_ARRAY = new JetTypeParameter[0];
|
||||
|
||||
public static final ArrayFactory<JetTypeParameter> ARRAY_FACTORY = new ArrayFactory<JetTypeParameter>() {
|
||||
@Override
|
||||
public JetTypeParameter[] create(int count) {
|
||||
return count == 0 ? EMPTY_ARRAY : new JetTypeParameter[count];
|
||||
}
|
||||
};
|
||||
|
||||
public JetTypeParameter(@NotNull ASTNode node) {
|
||||
super(node);
|
||||
|
||||
@@ -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<PsiJetPlaceHolderStub<JetTypeParameterList>> {
|
||||
@@ -35,7 +34,7 @@ public class JetTypeParameterList extends JetElementImplStub<PsiJetPlaceHolderSt
|
||||
|
||||
@NotNull
|
||||
public List<JetTypeParameter> getParameters() {
|
||||
return Arrays.asList(getStubOrPsiChildren(JetStubElementTypes.TYPE_PARAMETER, JetTypeParameter.ARRAY_FACTORY));
|
||||
return getStubOrPsiChildrenAsList(JetStubElementTypes.TYPE_PARAMETER);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+25
-1
@@ -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<StubT extends StubElement, PsiT extends JetElementImplStub<?>> extends IStubElementType<StubT, PsiT> {
|
||||
@@ -36,8 +38,12 @@ public abstract class JetStubElementType<StubT extends StubElement, PsiT extends
|
||||
private final Constructor<PsiT> byNodeConstructor;
|
||||
@NotNull
|
||||
private final Constructor<PsiT> byStubConstructor;
|
||||
@NotNull
|
||||
private final PsiT[] emptyArray;
|
||||
@NotNull
|
||||
private final ArrayFactory<PsiT> arrayFactory;
|
||||
|
||||
public JetStubElementType(@NotNull @NonNls String debugName, @NotNull Class<PsiT> psiClass, @NotNull Class<?> stubClass) {
|
||||
public JetStubElementType(@NotNull @NonNls String debugName, @NotNull final Class<PsiT> psiClass, @NotNull Class<?> stubClass) {
|
||||
super(debugName, JetLanguage.INSTANCE);
|
||||
try {
|
||||
byNodeConstructor = psiClass.getConstructor(ASTNode.class);
|
||||
@@ -46,6 +52,19 @@ public abstract class JetStubElementType<StubT extends StubElement, PsiT extends
|
||||
catch (NoSuchMethodException e) {
|
||||
throw new RuntimeException("Stub element type declaration for " + psiClass.getSimpleName() + " is missing required constructors",e);
|
||||
}
|
||||
//noinspection unchecked
|
||||
emptyArray = (PsiT[]) Array.newInstance(psiClass, 0);
|
||||
arrayFactory = new ArrayFactory<PsiT>() {
|
||||
@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<StubT extends StubElement, PsiT extends
|
||||
public void indexStub(@NotNull StubT stub, @NotNull IndexSink sink) {
|
||||
// do not force inheritors to implement this method
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ArrayFactory<PsiT> getArrayFactory() {
|
||||
return arrayFactory;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user