/* * Copyright 2012 Phil Pratt-Szeliga and other contributors * http://chirrup.org/ * * See the file LICENSE for copying permission. */ package org.trifort.rootbeer.generate.bytecode.permissiongraph; import java.util.ArrayList; import java.util.List; import soot.RefType; import soot.SootClass; import soot.rbclassload.RootbeerClassLoader; public class PermissionGraph { private List<PermissionGraphNode> m_Roots; public PermissionGraph(){ m_Roots = new ArrayList<PermissionGraphNode>(); build(RootbeerClassLoader.v().getDfsInfo().getOrderedRefTypes()); } private void build(List<RefType> history) { for(RefType type : history){ SootClass soot_class = type.getSootClass(); if(soot_class.isPublic()){ m_Roots.add(new PermissionGraphNode(soot_class)); } } for(RefType type : history){ SootClass soot_class = type.getSootClass(); if(soot_class.isPublic() == false){ PermissionGraphNode root = findRoot(soot_class); if(root == null){ continue; } root.addChild(soot_class); } } } public List<PermissionGraphNode> getRoots(){ return m_Roots; } private PermissionGraphNode findRoot(SootClass soot_class) { String pkg = soot_class.getJavaPackageName(); for(PermissionGraphNode node : m_Roots){ String root_pkg = node.getSootClass().getJavaPackageName(); if(pkg.equals(root_pkg)) return node; } return null; } }