Move some implementation from SmaliBaseReferenceList to its implementors

This commit is contained in:
Ben Gruver 2015-02-15 12:49:48 -08:00
parent 6a520231e7
commit e0aff4bda5
3 changed files with 51 additions and 31 deletions

View File

@ -31,7 +31,6 @@
package org.jf.smalidea.psi.impl; package org.jf.smalidea.psi.impl;
import com.google.common.collect.Lists;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiReferenceList; import com.intellij.psi.PsiReferenceList;
import com.intellij.psi.StubBasedPsiElement; import com.intellij.psi.StubBasedPsiElement;
@ -39,8 +38,6 @@ import com.intellij.psi.stubs.IStubElementType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jf.smalidea.psi.stub.SmaliBaseReferenceListStub; import org.jf.smalidea.psi.stub.SmaliBaseReferenceListStub;
import java.util.List;
public abstract class SmaliBaseReferenceList<StubT extends SmaliBaseReferenceListStub> public abstract class SmaliBaseReferenceList<StubT extends SmaliBaseReferenceListStub>
extends SmaliStubBasedPsiElement<StubT> implements StubBasedPsiElement<StubT>, PsiReferenceList { extends SmaliStubBasedPsiElement<StubT> implements StubBasedPsiElement<StubT>, PsiReferenceList {
protected SmaliBaseReferenceList(@NotNull StubT stub, @NotNull IStubElementType nodeType) { protected SmaliBaseReferenceList(@NotNull StubT stub, @NotNull IStubElementType nodeType) {
@ -89,32 +86,4 @@ public abstract class SmaliBaseReferenceList<StubT extends SmaliBaseReferenceLis
} }
@NotNull @Override public abstract SmaliClassTypeElement[] getReferenceElements(); @NotNull @Override public abstract SmaliClassTypeElement[] getReferenceElements();
protected SmaliClassTypeElement[] getImplementsElements() {
SmaliImplementsStatement[] implementsStatements = ((SmaliClass)getParent()).getImplementsStatements();
if (implementsStatements.length > 0) {
// all implemented interfaces go in the extends list for an interface
List<SmaliClassTypeElement> types = Lists.newArrayList();
for (SmaliImplementsStatement implementsStatement: implementsStatements) {
SmaliClassTypeElement classReference = implementsStatement.getClassReference();
if (classReference != null) {
types.add(classReference);
}
}
return types.toArray(new SmaliClassTypeElement[types.size()]);
}
return new SmaliClassTypeElement[0];
}
protected SmaliClassTypeElement[] getExtendsElement() {
SmaliSuperStatement superStatement = ((SmaliClass)getParent()).getSuperStatement();
if (superStatement != null) {
SmaliClassTypeElement classReference = superStatement.getClassReference();
if (classReference != null) {
return new SmaliClassTypeElement[] { classReference };
}
}
return new SmaliClassTypeElement[0];
}
} }

View File

@ -31,11 +31,14 @@
package org.jf.smalidea.psi.impl; package org.jf.smalidea.psi.impl;
import com.google.common.collect.Lists;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jf.smalidea.psi.SmaliElementTypes; import org.jf.smalidea.psi.SmaliElementTypes;
import org.jf.smalidea.psi.stub.SmaliExtendsListStub; import org.jf.smalidea.psi.stub.SmaliExtendsListStub;
import java.util.List;
public class SmaliExtendsList extends SmaliBaseReferenceList<SmaliExtendsListStub> { public class SmaliExtendsList extends SmaliBaseReferenceList<SmaliExtendsListStub> {
public SmaliExtendsList(@NotNull SmaliExtendsListStub stub) { public SmaliExtendsList(@NotNull SmaliExtendsListStub stub) {
super(stub, SmaliElementTypes.EXTENDS_LIST); super(stub, SmaliElementTypes.EXTENDS_LIST);
@ -53,6 +56,34 @@ public class SmaliExtendsList extends SmaliBaseReferenceList<SmaliExtendsListStu
} }
} }
@NotNull private SmaliClassTypeElement[] getImplementsElements() {
SmaliImplementsStatement[] implementsStatements = ((SmaliClass)getParent()).getImplementsStatements();
if (implementsStatements.length > 0) {
// all implemented interfaces go in the extends list for an interface
List<SmaliClassTypeElement> types = Lists.newArrayList();
for (SmaliImplementsStatement implementsStatement: implementsStatements) {
SmaliClassTypeElement classReference = implementsStatement.getClassReference();
if (classReference != null) {
types.add(classReference);
}
}
return types.toArray(new SmaliClassTypeElement[types.size()]);
}
return new SmaliClassTypeElement[0];
}
@NotNull private SmaliClassTypeElement[] getExtendsElement() {
SmaliSuperStatement superStatement = ((SmaliClass)getParent()).getSuperStatement();
if (superStatement != null) {
SmaliClassTypeElement classReference = superStatement.getClassReference();
if (classReference != null) {
return new SmaliClassTypeElement[] { classReference };
}
}
return new SmaliClassTypeElement[0];
}
@Override public Role getRole() { @Override public Role getRole() {
return Role.EXTENDS_LIST; return Role.EXTENDS_LIST;
} }

View File

@ -31,11 +31,14 @@
package org.jf.smalidea.psi.impl; package org.jf.smalidea.psi.impl;
import com.google.common.collect.Lists;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jf.smalidea.psi.SmaliElementTypes; import org.jf.smalidea.psi.SmaliElementTypes;
import org.jf.smalidea.psi.stub.SmaliImplementsListStub; import org.jf.smalidea.psi.stub.SmaliImplementsListStub;
import java.util.List;
public class SmaliImplementsList extends SmaliBaseReferenceList<SmaliImplementsListStub> { public class SmaliImplementsList extends SmaliBaseReferenceList<SmaliImplementsListStub> {
public SmaliImplementsList(@NotNull SmaliImplementsListStub stub) { public SmaliImplementsList(@NotNull SmaliImplementsListStub stub) {
super(stub, SmaliElementTypes.IMPLEMENTS_LIST); super(stub, SmaliElementTypes.IMPLEMENTS_LIST);
@ -52,6 +55,23 @@ public class SmaliImplementsList extends SmaliBaseReferenceList<SmaliImplementsL
return new SmaliClassTypeElement[0]; return new SmaliClassTypeElement[0];
} }
@NotNull private SmaliClassTypeElement[] getImplementsElements() {
SmaliImplementsStatement[] implementsStatements = ((SmaliClass)getParent()).getImplementsStatements();
if (implementsStatements.length > 0) {
// all implemented interfaces go in the extends list for an interface
List<SmaliClassTypeElement> types = Lists.newArrayList();
for (SmaliImplementsStatement implementsStatement: implementsStatements) {
SmaliClassTypeElement classReference = implementsStatement.getClassReference();
if (classReference != null) {
types.add(classReference);
}
}
return types.toArray(new SmaliClassTypeElement[types.size()]);
}
return new SmaliClassTypeElement[0];
}
@Override public Role getRole() { @Override public Role getRole() {
return Role.IMPLEMENTS_LIST; return Role.IMPLEMENTS_LIST;
} }