diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliFile.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliFile.java index cacdbe3d..33db24c2 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliFile.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliFile.java @@ -38,6 +38,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.StubElement; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jf.smalidea.SmaliFileType; import org.jf.smalidea.SmaliLanguage; import org.jf.smalidea.psi.SmaliElementTypes; @@ -50,26 +51,37 @@ public class SmaliFile extends PsiFileBase implements PsiClassOwner { @NotNull @Override public SmaliFileType getFileType() { return SmaliFileType.INSTANCE; } - @NotNull + + @Nullable public SmaliClass getPsiClass() { StubElement stub = (StubElement)getStub(); if (stub != null) { StubElement classElement = stub.findChildStubByType(SmaliElementTypes.CLASS); - assert classElement != null; - return classElement.getPsi(); + if (classElement != null) { + return classElement.getPsi(); + } else { + return null; + } } else { - SmaliClass smaliClass = findChildByClass(SmaliClass.class); - assert smaliClass != null; - return smaliClass; + return findChildByClass(SmaliClass.class); } } @NotNull @Override public SmaliClass[] getClasses() { - return new SmaliClass[] {getPsiClass()}; + SmaliClass smaliClass = getPsiClass(); + if (smaliClass == null) { + return new SmaliClass[] {}; + } else { + return new SmaliClass[] { smaliClass }; + } } - @Override public String getPackageName() { - return getPsiClass().getPackageName(); + @NotNull @Override public String getPackageName() { + SmaliClass smaliClass = getPsiClass(); + if (smaliClass == null) { + return ""; + } + return smaliClass.getPackageName(); } @Override public void setPackageName(String packageName) throws IncorrectOperationException { diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java index 35d62261..acbb3b8e 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java @@ -72,10 +72,19 @@ public class SmaliMethod extends SmaliStubBasedPsiElement @NotNull @Override public String getName() { SmaliMethodStub stub = getStub(); + String name = null; if (stub != null) { - return stub.getName(); + name = stub.getName(); + } else { + SmaliMemberName nameIdentifier = getNameIdentifier(); + if (nameIdentifier != null) { + name = nameIdentifier.getText(); + } } - return getNameIdentifier().getText(); + if (name == null || name.isEmpty()) { + name = ""; + } + return name; } @Override public boolean hasTypeParameters() { @@ -88,17 +97,24 @@ public class SmaliMethod extends SmaliStubBasedPsiElement return getRequiredStubOrPsiChild(SmaliElementTypes.METHOD_PROTOTYPE); } - @NotNull @Override public PsiType getReturnType() { + @Nullable @Override public PsiType getReturnType() { SmaliMethodStub stub = getStub(); if (stub != null) { String returnType = stub.getReturnType(); + if (returnType == null) { + return null; + } PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); return factory.createTypeByFQClassName(returnType, getResolveScope()); } - return getReturnTypeElement().getType(); + PsiTypeElement returnTypeElement = getReturnTypeElement(); + if (returnTypeElement == null) { + return null; + } + return returnTypeElement.getType(); } - @NotNull @Override public PsiTypeElement getReturnTypeElement() { + @Nullable @Override public PsiTypeElement getReturnTypeElement() { return getMethodPrototype().getReturnType(); } @@ -182,10 +198,8 @@ public class SmaliMethod extends SmaliStubBasedPsiElement return MethodSignatureBackedByPsiMethod.create(this, substitutor); } - @NotNull @Override public SmaliMemberName getNameIdentifier() { - SmaliMemberName memberName = findChildByClass(SmaliMemberName.class); - assert memberName != null; - return memberName; + @Nullable @Override public SmaliMemberName getNameIdentifier() { + return findChildByClass(SmaliMemberName.class); } @NotNull @Override public PsiMethod[] findSuperMethods() { diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodPrototype.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodPrototype.java index e72de615..e3c6a4ba 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodPrototype.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodPrototype.java @@ -34,6 +34,7 @@ package org.jf.smalidea.psi.impl; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiTypeElement; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jf.smalidea.psi.SmaliElementTypes; import org.jf.smalidea.psi.stub.SmaliMethodPrototypeStub; @@ -46,18 +47,13 @@ public class SmaliMethodPrototype extends SmaliStubBasedPsiElement { - @NotNull private final String name; - @NotNull private final String returnType; +import javax.annotation.Nullable; - public SmaliMethodStub(@NotNull StubElement parent, @NotNull String name, @NotNull String returnType) { +public class SmaliMethodStub extends StubBase { + @Nullable private final String name; + @Nullable private final String returnType; + + public SmaliMethodStub(@NotNull StubElement parent, @Nullable String name, @Nullable String returnType) { super(parent, SmaliElementTypes.METHOD); this.name = name; this.returnType = returnType; } - @NotNull public String getName() { + @Nullable public String getName() { return name; } - @NotNull public String getReturnType() { + @Nullable public String getReturnType() { return returnType; } } diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/stub/element/SmaliMethodElementType.java b/smalidea/src/main/java/org/jf/smalidea/psi/stub/element/SmaliMethodElementType.java index 3524c910..a783319e 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/stub/element/SmaliMethodElementType.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/stub/element/SmaliMethodElementType.java @@ -32,10 +32,12 @@ package org.jf.smalidea.psi.stub.element; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiType; import com.intellij.psi.stubs.IndexSink; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; +import com.intellij.util.io.StringRef; import org.jetbrains.annotations.NotNull; import org.jf.smalidea.psi.impl.SmaliMethod; import org.jf.smalidea.psi.stub.SmaliMethodStub; @@ -62,7 +64,12 @@ public class SmaliMethodElementType extends SmaliStubElementType