return new ImmutableCharEncodedValue((char) i.getIntValue()); } else if (sft instanceof ByteType) { return new ImmutableByteEncodedValue((byte) i.getIntValue()); } else if (sft instanceof IntType) { return new ImmutableIntEncodedValue(i.getIntValue()); } else if (sft instanceof ShortType) { return new ImmutableShortEncodedValue((short) i.getIntValue()); } else { throw new RuntimeException("error: unexpected constant tag type: " + t + " for field " + sf); return new ImmutableLongEncodedValue(l.getLongValue()); } else if (t instanceof DoubleConstantValueTag) { DoubleConstantValueTag d = (DoubleConstantValueTag) t; return new ImmutableDoubleEncodedValue(d.getDoubleValue()); } else if (t instanceof FloatConstantValueTag) { FloatConstantValueTag f = (FloatConstantValueTag) t; return new ImmutableFloatEncodedValue(f.getFloatValue()); } else if (t instanceof StringConstantValueTag) { StringConstantValueTag s = (StringConstantValueTag) t; if (sf.getType().equals(RefType.v("java.lang.String"))) { return new ImmutableStringEncodedValue(s.getStringValue()); } else {
encodedValue = new ImmutableIntEncodedValue(integer_literal24); encodedValue = new ImmutableLongEncodedValue(long_literal25); encodedValue = new ImmutableShortEncodedValue(short_literal26); encodedValue = new ImmutableByteEncodedValue(byte_literal27); encodedValue = new ImmutableFloatEncodedValue(float_literal28); encodedValue = new ImmutableDoubleEncodedValue(double_literal29); encodedValue = new ImmutableCharEncodedValue(char_literal30); encodedValue = new ImmutableStringEncodedValue(string_literal31); encodedValue = ImmutableBooleanEncodedValue.forBoolean(bool_literal32); encodedValue = new ImmutableTypeEncodedValue(type_descriptor33); encodedValue = new ImmutableArrayEncodedValue(array_literal34); encodedValue = new ImmutableAnnotationEncodedValue((subannotation35!=null?((smaliTreeWalker.subannotation_return)subannotation35).annotationType:null), (subannotation35!=null?((smaliTreeWalker.subannotation_return)subannotation35).elements:null)); encodedValue = new ImmutableFieldEncodedValue(field_literal36); encodedValue = new ImmutableMethodEncodedValue(method_literal37); encodedValue = new ImmutableEnumEncodedValue(enum_literal38);
ImmutableStringEncodedValue val = new ImmutableStringEncodedValue(s); valueList.add(val); ImmutableArrayEncodedValue valueValue = new ImmutableArrayEncodedValue(valueList); ImmutableAnnotationElement valueElement = new ImmutableAnnotationElement("value", valueValue); elements = Collections.singleton(valueElement);
private Set<Annotation> buildMethodAnnotations(SootMethod m) { Set<String> skipList = new HashSet<String>(); Set<Annotation> annotations = buildCommonAnnotations(m, skipList); for (Tag t : m.getTags()) { if (t.getName().equals("VisibilityAnnotationTag")) { List<ImmutableAnnotation> visibilityItems = buildVisibilityAnnotationTag((VisibilityAnnotationTag) t, skipList); annotations.addAll(visibilityItems); } } List<SootClass> exceptionList = m.getExceptionsUnsafe(); if (exceptionList != null && !exceptionList.isEmpty()) { List<ImmutableEncodedValue> valueList = new ArrayList<ImmutableEncodedValue>(exceptionList.size()); for (SootClass exceptionClass : exceptionList) { valueList.add(new ImmutableTypeEncodedValue(DexType.toDalvikICAT(exceptionClass.getName()).replace(".", "/"))); } ImmutableArrayEncodedValue valueValue = new ImmutableArrayEncodedValue(valueList); ImmutableAnnotationElement valueElement = new ImmutableAnnotationElement("value", valueValue); Set<ImmutableAnnotationElement> elements = Collections.singleton(valueElement); ImmutableAnnotation ann = new ImmutableAnnotation(AnnotationVisibility.SYSTEM, "Ldalvik/annotation/Throws;", elements); annotations.add(ann); } return annotations; }
= new ImmutableAnnotationElement("accessFlags", new ImmutableIntEncodedValue(icTag.getAccessFlags())); elements.add(flagsElement); nameValue = new ImmutableStringEncodedValue(icTag.getShortName()); } else { nameValue = ImmutableNullEncodedValue.INSTANCE;
@Override public EncodedValue getValue() { return new ImmutableStringEncodedValue(method); }
public static ImmutableCharEncodedValue of(CharEncodedValue charEncodedValue) { if (charEncodedValue instanceof ImmutableCharEncodedValue) { return (ImmutableCharEncodedValue)charEncodedValue; } return new ImmutableCharEncodedValue(charEncodedValue.getValue()); }
private Annotation buildEnclosingMethodTag(EnclosingMethodTag t, Set<String> skipList) { if (!skipList.add("Ldalvik/annotation/EnclosingMethod;")) { return null; } if (t.getEnclosingMethod() == null) { return null; } String[] split1 = t.getEnclosingMethodSig().split("\\)"); String parametersS = split1[0].replaceAll("\\(", ""); String returnTypeS = split1[1]; List<String> typeList = new ArrayList<String>(); if (!parametersS.equals("")) { for (String p : Util.splitParameters(parametersS)) { if (!p.isEmpty()) { typeList.add(p); } } } ImmutableMethodReference mRef = new ImmutableMethodReference(SootToDexUtils.getDexClassName(t.getEnclosingClass()), t.getEnclosingMethod(), typeList, returnTypeS); ImmutableMethodEncodedValue methodRef = new ImmutableMethodEncodedValue(mRef); AnnotationElement methodElement = new ImmutableAnnotationElement("value", methodRef); return new ImmutableAnnotation(AnnotationVisibility.SYSTEM, "Ldalvik/annotation/EnclosingMethod;", Collections.singleton(methodElement)); }
new ImmutableTypeEncodedValue(SootToDexUtils.getDexClassName(c.getOuterClass().getName()))); annotations.add(new ImmutableAnnotation(AnnotationVisibility.SYSTEM, "Ldalvik/annotation/EnclosingClass;", Collections.singleton(enclosingElement)));
public static ImmutableByteEncodedValue of(ByteEncodedValue byteEncodedValue) { if (byteEncodedValue instanceof ImmutableByteEncodedValue) { return (ImmutableByteEncodedValue)byteEncodedValue; } return new ImmutableByteEncodedValue(byteEncodedValue.getValue()); }
public static ImmutableShortEncodedValue of(ShortEncodedValue shortEncodedValue) { if (shortEncodedValue instanceof ImmutableShortEncodedValue) { return (ImmutableShortEncodedValue)shortEncodedValue; } return new ImmutableShortEncodedValue(shortEncodedValue.getValue()); }
public static ImmutableLongEncodedValue of(LongEncodedValue longEncodedValue) { if (longEncodedValue instanceof ImmutableLongEncodedValue) { return (ImmutableLongEncodedValue)longEncodedValue; } return new ImmutableLongEncodedValue(longEncodedValue.getValue()); }
public static ImmutableFloatEncodedValue of(FloatEncodedValue floatEncodedValue) { if (floatEncodedValue instanceof ImmutableFloatEncodedValue) { return (ImmutableFloatEncodedValue)floatEncodedValue; } return new ImmutableFloatEncodedValue(floatEncodedValue.getValue()); }
public ImmutableAnnotationElement(@Nonnull String name, @Nonnull EncodedValue value) { this.name = name; this.value = ImmutableEncodedValueFactory.of(value); }
return new ImmutableShortEncodedValue((short) e.getValue()); return new ImmutableByteEncodedValue((byte) e.getValue()); return new ImmutableCharEncodedValue((char) e.getValue()); return new ImmutableIntEncodedValue(e.getValue()); return new ImmutableLongEncodedValue(e.getValue()); return new ImmutableFloatEncodedValue(e.getValue()); return new ImmutableDoubleEncodedValue(e.getValue()); return new ImmutableStringEncodedValue(e.getValue()); return new ImmutableEnumEncodedValue(new ImmutableFieldReference(classT, e.getConstantName(), fieldT)); return new ImmutableTypeEncodedValue(e.getDesc()); return new ImmutableArrayEncodedValue(values); return new ImmutableAnnotationEncodedValue(SootToDexUtils.getDexClassName(e.getValue().getType()), elements); return new ImmutableFieldEncodedValue(new ImmutableFieldReference(classString, fieldName, typeString)); return new ImmutableMethodEncodedValue( new ImmutableMethodReference(classString, methodNameString, paramTypeList, returnType));
List<EncodedValue> classes = new ArrayList<EncodedValue>(); for (String memberClass : memberClasses) { ImmutableTypeEncodedValue classValue = new ImmutableTypeEncodedValue(memberClass); classes.add(classValue); ImmutableArrayEncodedValue classesValue = new ImmutableArrayEncodedValue(classes); ImmutableAnnotationElement element = new ImmutableAnnotationElement("value", classesValue); ImmutableAnnotation memberAnnotation = new ImmutableAnnotation(AnnotationVisibility.SYSTEM,
@Override public EncodedValue getValue() { String name = clazz.substring(1, clazz.length() - 1).replace('/', '.'); return new ImmutableStringEncodedValue(name); }
public static ImmutableCharEncodedValue of(CharEncodedValue charEncodedValue) { if (charEncodedValue instanceof ImmutableCharEncodedValue) { return (ImmutableCharEncodedValue)charEncodedValue; } return new ImmutableCharEncodedValue(charEncodedValue.getValue()); }
public ImmutableAnnotationElement(@Nonnull String name, @Nonnull EncodedValue value) { this.name = name; this.value = ImmutableEncodedValueFactory.of(value); }
public static ImmutableCharEncodedValue of(CharEncodedValue charEncodedValue) { if (charEncodedValue instanceof ImmutableCharEncodedValue) { return (ImmutableCharEncodedValue)charEncodedValue; } return new ImmutableCharEncodedValue(charEncodedValue.getValue()); }