Search in sources :

Example 6 with Tag

use of soot.tagkit.Tag in project robovm by robovm.

the class MarshalerLookup method getOuterClass.

private SootClass getOuterClass(SootClass clazz) {
    String name = getInternalName(clazz);
    for (Tag tag : clazz.getTags()) {
        if (tag instanceof InnerClassTag) {
            InnerClassTag innerClassTag = (InnerClassTag) tag;
            String inner = innerClassTag.getInnerClass();
            String outer = innerClassTag.getOuterClass();
            if (inner != null && outer != null && inner.equals(name)) {
                return config.getClazzes().load(outer).getSootClass();
            }
        }
    }
    return null;
}
Also used : InnerClassTag(soot.tagkit.InnerClassTag) Tag(soot.tagkit.Tag) InnerClassTag(soot.tagkit.InnerClassTag) AnnotationTag(soot.tagkit.AnnotationTag)

Example 7 with Tag

use of soot.tagkit.Tag in project robovm by robovm.

the class Annotations method getParameterAnnotations.

public static List<AnnotationTag>[] getParameterAnnotations(SootMethod method, Visibility visibility) {
    @SuppressWarnings("unchecked") ArrayList<AnnotationTag>[] result = new ArrayList[method.getParameterCount()];
    for (int i = 0; i < result.length; i++) {
        result[i] = new ArrayList<>();
    }
    for (Tag tag : method.getTags()) {
        if (tag instanceof VisibilityParameterAnnotationTag) {
            if (visibility == Visibility.Any || ((VisibilityParameterAnnotationTag) tag).getKind() == visibility.ordinal()) {
                ArrayList<VisibilityAnnotationTag> l = ((VisibilityParameterAnnotationTag) tag).getVisibilityAnnotations();
                if (l != null) {
                    int i = 0;
                    for (VisibilityAnnotationTag t : l) {
                        ArrayList<AnnotationTag> annotations = t.getAnnotations();
                        if (annotations != null) {
                            result[i].addAll(annotations);
                        }
                        i++;
                    }
                }
            }
        }
    }
    return result;
}
Also used : AnnotationTag(soot.tagkit.AnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) ArrayList(java.util.ArrayList) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag) Tag(soot.tagkit.Tag) AnnotationTag(soot.tagkit.AnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag)

Example 8 with Tag

use of soot.tagkit.Tag in project robovm by robovm.

the class Annotations method copyParameterAnnotations.

private static void copyParameterAnnotations(SootMethod fromMethod, SootMethod toMethod, int start, int end, int shift, int visibility) {
    List<AnnotationTag>[] fromAnnos = getParameterAnnotations(fromMethod, Visibility.values()[visibility]);
    List<AnnotationTag>[] toAnnos = getParameterAnnotations(toMethod, Visibility.values()[visibility]);
    for (int i = start; i < end; i++) {
        toAnnos[i + shift].addAll(fromAnnos[i]);
    }
    for (Iterator<Tag> it = toMethod.getTags().iterator(); it.hasNext(); ) {
        Tag tag = it.next();
        if (tag instanceof VisibilityParameterAnnotationTag) {
            if (((VisibilityParameterAnnotationTag) tag).getKind() == visibility) {
                it.remove();
            }
        }
    }
    VisibilityParameterAnnotationTag vpaTag = new VisibilityParameterAnnotationTag(toAnnos.length, visibility);
    for (List<AnnotationTag> annos : toAnnos) {
        VisibilityAnnotationTag vaTag = new VisibilityAnnotationTag(visibility);
        for (AnnotationTag anno : annos) {
            vaTag.addAnnotation(anno);
        }
        vpaTag.addVisibilityAnnotation(vaTag);
    }
    toMethod.addTag(vpaTag);
}
Also used : AnnotationTag(soot.tagkit.AnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag) ArrayList(java.util.ArrayList) List(java.util.List) Tag(soot.tagkit.Tag) AnnotationTag(soot.tagkit.AnnotationTag) VisibilityParameterAnnotationTag(soot.tagkit.VisibilityParameterAnnotationTag) VisibilityAnnotationTag(soot.tagkit.VisibilityAnnotationTag)

Aggregations

Tag (soot.tagkit.Tag)8 AnnotationTag (soot.tagkit.AnnotationTag)7 VisibilityAnnotationTag (soot.tagkit.VisibilityAnnotationTag)6 VisibilityParameterAnnotationTag (soot.tagkit.VisibilityParameterAnnotationTag)6 ArrayList (java.util.ArrayList)4 IntegerConstant (org.robovm.compiler.llvm.IntegerConstant)2 Value (org.robovm.compiler.llvm.Value)2 InnerClassTag (soot.tagkit.InnerClassTag)2 List (java.util.List)1 ArrayConstant (org.robovm.compiler.llvm.ArrayConstant)1 ArrayType (org.robovm.compiler.llvm.ArrayType)1 Constant (org.robovm.compiler.llvm.Constant)1 ConstantTrunc (org.robovm.compiler.llvm.ConstantTrunc)1 FloatingPointConstant (org.robovm.compiler.llvm.FloatingPointConstant)1 FunctionRef (org.robovm.compiler.llvm.FunctionRef)1 IntegerType (org.robovm.compiler.llvm.IntegerType)1 NullConstant (org.robovm.compiler.llvm.NullConstant)1 PackedStructureConstant (org.robovm.compiler.llvm.PackedStructureConstant)1 PackedStructureType (org.robovm.compiler.llvm.PackedStructureType)1 StructureConstant (org.robovm.compiler.llvm.StructureConstant)1