@Override public void caseAnnotationEnumElem(AnnotationEnumElem v) { try { Class<?> clazz = ClassLoaderUtils.loadClass(v.getTypeName().replace('/', '.')); // find out which enum constant is used. Enum<?> result = null; for (Object o : clazz.getEnumConstants()) { try { Enum<?> t = (Enum<?>) o; if (t.name().equals(v.getConstantName())) { result = t; break; } } catch (ClassCastException e) { throw new RuntimeException("Class " + v.getTypeName() + " is no Enum"); } } if (result == null) { throw new RuntimeException(v.getConstantName() + " is not a EnumConstant of " + v.getTypeName()); } setResult(new AnnotationElemResult<Enum<?>>(v.getName(), result)); } catch (ClassNotFoundException e) { throw new RuntimeException("Could not load class: " + v.getTypeName()); } }
result.append(".enum_kind "); result.append("\"" + elem.getName() + "\" "); result.append(soot.util.StringTools.getQuotedStringOf(((AnnotationEnumElem) elem).getTypeName())); result.append(" "); result.append(soot.util.StringTools.getQuotedStringOf(((AnnotationEnumElem) elem).getConstantName()));
case 'e': // enum AnnotationEnumElem enumElem = (AnnotationEnumElem) e; annotationType = Util.getType(enumElem.getTypeName());
AnnotationEnumElem e = (AnnotationEnumElem) elem; String classT = SootToDexUtils.getDexClassName(e.getTypeName()); String fieldT = classT; return new ImmutableEnumEncodedValue(new ImmutableFieldReference(classT, e.getConstantName(), fieldT));
if (elem instanceof AnnotationEnumElem) { AnnotationEnumElem enumElem = (AnnotationEnumElem) elem; av.visitEnum(enumElem.getName(), enumElem.getTypeName(), enumElem.getConstantName()); } else if (elem instanceof AnnotationArrayElem) { AnnotationArrayElem arrayElem = (AnnotationArrayElem) elem;