protected int processModifiers(List l) { int modifier = 0; Iterator it = l.iterator(); while (it.hasNext()) { Object t = it.next(); if (t instanceof AAbstractModifier) modifier |= Modifier.ABSTRACT; else if (t instanceof AFinalModifier) modifier |= Modifier.FINAL; else if (t instanceof ANativeModifier) modifier |= Modifier.NATIVE; else if (t instanceof APublicModifier) modifier |= Modifier.PUBLIC; else if (t instanceof AProtectedModifier) modifier |= Modifier.PROTECTED; else if (t instanceof APrivateModifier) modifier |= Modifier.PRIVATE; else if (t instanceof AStaticModifier) modifier |= Modifier.STATIC; else if (t instanceof ASynchronizedModifier) modifier |= Modifier.SYNCHRONIZED; else if (t instanceof ATransientModifier) modifier |= Modifier.TRANSIENT; else if (t instanceof AVolatileModifier) modifier |= Modifier.VOLATILE; else if (t instanceof AEnumModifier) modifier |= Modifier.ENUM; else if (t instanceof AAnnotationModifier) modifier |= Modifier.ANNOTATION; else throw new RuntimeException( "Impossible: modifier unknown - Have you added a new modifier and not updated this file?"); } return modifier; }
public void outADeclaration(ADeclaration node) { List localNameList = (List) mProductions.removeLast(); Type type = (Type) mProductions.removeLast(); Iterator it = localNameList.iterator(); List localList = new ArrayList(); while (it.hasNext()) { Local l = Jimple.v().newLocal((String) it.next(), type); mLocals.put(l.getName(), l); localList.add(l); } mProductions.addLast(localList); }
/* throws_clause = throws class_name_list; */ public void outAThrowsClause(AThrowsClause node) { List l = (List) mProductions.removeLast(); Iterator it = l.iterator(); List exceptionClasses = new ArrayList(l.size()); while (it.hasNext()) { String className = (String) it.next(); exceptionClasses.add(mResolver.makeClassRef(className)); } mProductions.addLast(exceptionClasses); }
public void outAFile(AFile node) { // not not pop members; they have been taken care of. List implementsList = null; String superClass = null; String classType = null; if (node.getImplementsClause() != null) { implementsList = (List) mProductions.removeLast(); } if (node.getExtendsClause() != null) { superClass = (String) mProductions.removeLast(); } classType = (String) mProductions.removeLast(); int modifierCount = node.getModifier().size(); int modifierFlags = processModifiers(node.getModifier()); if (classType.equals("interface")) modifierFlags |= Modifier.INTERFACE; mSootClass.setModifiers(modifierFlags); if (superClass != null) { mSootClass.setSuperclass(mResolver.makeClassRef(superClass)); } if (implementsList != null) { Iterator implIt = implementsList.iterator(); while (implIt.hasNext()) { SootClass interfaceClass = mResolver.makeClassRef((String) implIt.next()); mSootClass.addInterface(interfaceClass); } } mProductions.addLast(mSootClass); }