mirror of
https://github.com/revanced/smali.git
synced 2025-05-28 11:50:12 +02:00
Ensure that SmaliModifierList's direct parent is a PsiModifierListOwner
This commit is contained in:
parent
912a474644
commit
4f16feb476
@ -32,14 +32,17 @@
|
||||
package org.jf.smalidea.psi.iface;
|
||||
|
||||
import com.intellij.psi.PsiAnnotationOwner;
|
||||
import com.intellij.psi.PsiModifierListOwner;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jf.smalidea.psi.impl.SmaliAnnotation;
|
||||
import org.jf.smalidea.psi.impl.SmaliModifierList;
|
||||
|
||||
public interface SmaliModifierListOwner extends PsiAnnotationOwner {
|
||||
public interface SmaliModifierListOwner extends PsiModifierListOwner, PsiAnnotationOwner {
|
||||
@NotNull @Override SmaliAnnotation[] getAnnotations();
|
||||
@NotNull @Override SmaliAnnotation[] getApplicableAnnotations();
|
||||
@Nullable @Override SmaliAnnotation findAnnotation(@NotNull @NonNls String qualifiedName);
|
||||
@NotNull @Override SmaliAnnotation addAnnotation(@NotNull @NonNls String qualifiedName);
|
||||
@Nullable @Override SmaliModifierList getModifierList();
|
||||
}
|
||||
|
@ -32,13 +32,16 @@
|
||||
package org.jf.smalidea.psi.impl;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jf.smalidea.psi.SmaliElementTypes;
|
||||
import org.jf.smalidea.psi.iface.SmaliModifierListOwner;
|
||||
import org.jf.smalidea.psi.leaf.SmaliClassDescriptor;
|
||||
import org.jf.smalidea.psi.stub.SmaliClassStatementStub;
|
||||
|
||||
public class SmaliClassStatement extends SmaliStubBasedPsiElement<SmaliClassStatementStub> {
|
||||
public class SmaliClassStatement extends SmaliStubBasedPsiElement<SmaliClassStatementStub>
|
||||
implements SmaliModifierListOwner {
|
||||
public SmaliClassStatement(@NotNull SmaliClassStatementStub stub) {
|
||||
super(stub, SmaliElementTypes.CLASS_STATEMENT);
|
||||
}
|
||||
@ -52,6 +55,11 @@ public class SmaliClassStatement extends SmaliStubBasedPsiElement<SmaliClassStat
|
||||
return findChildByClass(SmaliClassTypeElement.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public SmaliClass getContainingClass() {
|
||||
return getStubOrPsiParentOfType(SmaliClass.class);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public SmaliClassDescriptor getNameIdentifier() {
|
||||
SmaliClassTypeElement classTypeElement = getNameElement();
|
||||
@ -82,4 +90,54 @@ public class SmaliClassStatement extends SmaliStubBasedPsiElement<SmaliClassStat
|
||||
public SmaliModifierList getModifierList() {
|
||||
return getStubOrPsiChild(SmaliElementTypes.MODIFIER_LIST);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public SmaliAnnotation addAnnotation(@NotNull @NonNls String qualifiedName) {
|
||||
SmaliClass containingClass = getContainingClass();
|
||||
if (containingClass == null) {
|
||||
// TODO: what should we do here?
|
||||
return null;
|
||||
}
|
||||
return containingClass.addAnnotation(qualifiedName);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public SmaliAnnotation[] getAnnotations() {
|
||||
SmaliClass containingClass = getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return new SmaliAnnotation[0];
|
||||
}
|
||||
return containingClass.getAnnotations();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public SmaliAnnotation[] getApplicableAnnotations() {
|
||||
SmaliClass containingClass = getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return new SmaliAnnotation[0];
|
||||
}
|
||||
return containingClass.getApplicableAnnotations();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public SmaliAnnotation findAnnotation(@NotNull @NonNls String qualifiedName) {
|
||||
SmaliClass containingClass = getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return null;
|
||||
}
|
||||
return containingClass.findAnnotation(qualifiedName);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasModifierProperty(@NonNls @NotNull String name) {
|
||||
SmaliClass containingClass = getContainingClass();
|
||||
if (containingClass == null) {
|
||||
return false;
|
||||
}
|
||||
return containingClass.hasModifierProperty(name);
|
||||
}
|
||||
}
|
||||
|
@ -32,6 +32,7 @@
|
||||
package org.jf.smalidea;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.psi.PsiModifierListOwner;
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase;
|
||||
import org.jf.dexlib2.AccessFlags;
|
||||
import org.jf.smalidea.psi.impl.SmaliAnnotation;
|
||||
@ -163,6 +164,11 @@ public class SmaliClassModifierListTest extends LightCodeInsightFixtureTestCase
|
||||
SmaliClass smaliClass = file.getPsiClass();
|
||||
SmaliModifierList modifierList = smaliClass.getModifierList();
|
||||
|
||||
// Ensures that the parent of the modifier list is a PsiModifierListOwner
|
||||
// e.g. for code like JavaSuppressionUtil.getInspectionIdsSuppressedInAnnotation,
|
||||
// which assumes the parent is a PsiModifierListOwner
|
||||
Assert.assertTrue(modifierList.getParent() instanceof PsiModifierListOwner);
|
||||
|
||||
Assert.assertEquals(0, modifierList.getAnnotations().length);
|
||||
Assert.assertEquals(0, modifierList.getApplicableAnnotations().length);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user