/* Soot - a J*va Optimization Framework * Copyright (C) 2004 Jennifer Lhotak * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package soot.javaToJimple; import java.util.*; import polyglot.ast.Node; public class InnerClassInfoFinder extends polyglot.visit.NodeVisitor { private final ArrayList<Node> localClassDeclList; private final ArrayList<Node> anonBodyList; private final ArrayList<Node> memberList; //private ArrayList declaredInstList; //private ArrayList usedInstList; public ArrayList<Node> memberList(){ return memberList; } /*public ArrayList declaredInstList(){ return declaredInstList; } public ArrayList usedInstList(){ return usedInstList; }*/ public ArrayList<Node> localClassDeclList(){ return localClassDeclList; } public ArrayList<Node> anonBodyList(){ return anonBodyList; } public InnerClassInfoFinder(){ //declFound = null; localClassDeclList = new ArrayList<Node>(); anonBodyList = new ArrayList<Node>(); memberList = new ArrayList<Node>(); //declaredInstList = new ArrayList(); //usedInstList = new ArrayList(); } public polyglot.visit.NodeVisitor enter(polyglot.ast.Node parent, polyglot.ast.Node n) { if (n instanceof polyglot.ast.LocalClassDecl) { localClassDeclList.add(n); } if (n instanceof polyglot.ast.New) { if (((polyglot.ast.New)n).anonType() != null){ anonBodyList.add(n); } /*polyglot.types.ProcedureInstance pi = ((polyglot.ast.New)n).constructorInstance(); if (pi.isPrivate()){ usedInstList.add(new polyglot.util.IdentityKey(pi)); }*/ } if (n instanceof polyglot.ast.ProcedureDecl) { memberList.add(n); /*polyglot.types.ProcedureInstance pi = ((polyglot.ast.ProcedureDecl)n).procedureInstance(); if (pi.flags().isPrivate()){ declaredInstList.add(new polyglot.util.IdentityKey(pi)); }*/ } if (n instanceof polyglot.ast.FieldDecl) { memberList.add(n); /*polyglot.types.FieldInstance fi = ((polyglot.ast.FieldDecl)n).fieldInstance(); if (fi.flags().isPrivate()){ declaredInstList.add(new polyglot.util.IdentityKey(fi)); }*/ } if (n instanceof polyglot.ast.Initializer) { memberList.add(n); } /*if (n instanceof polyglot.ast.Field) { polyglot.types.FieldInstance fi = ((polyglot.ast.Field)n).fieldInstance(); if (fi.isPrivate()){ usedInstList.add(new polyglot.util.IdentityKey(fi)); } } if (n instanceof polyglot.ast.Call){ polyglot.types.ProcedureInst pi = ((polyglot.ast.Call)n).methodInstance(); if (pi.isPrivate()){ usedInstList.add(new polyglot.util.IdentityKey(pi)); } } if (n instanceof polyglot.ast.ConstructorCall){ polyglot.types.ProcedureInstance pi = ((polyglot.ast.ConstructorCall)n).constructorInstance(); if (pi.isPrivate()){ usedInstList.add(new polyglot.util.IdentityKey(pi)); } }*/ return enter(n); } }