2009-01-09 02:52:56 +00:00
|
|
|
/******************************************************************************
|
|
|
|
* Copyright (c) 2002 - 2006 IBM Corporation.
|
|
|
|
* All rights reserved. This program and the accompanying materials
|
|
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
|
|
* which accompanies this distribution, and is available at
|
|
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
*
|
|
|
|
* Contributors:
|
|
|
|
* IBM Corporation - initial API and implementation
|
|
|
|
*****************************************************************************/
|
|
|
|
/*
|
|
|
|
* Created on Sep 1, 2005
|
|
|
|
*/
|
|
|
|
package com.ibm.wala.cast.java.translator.polyglot;
|
|
|
|
|
|
|
|
import polyglot.ast.ArrayAccess;
|
|
|
|
import polyglot.ast.ArrayAccessAssign;
|
|
|
|
import polyglot.ast.ArrayInit;
|
|
|
|
import polyglot.ast.ArrayTypeNode;
|
|
|
|
import polyglot.ast.Assert;
|
|
|
|
import polyglot.ast.Binary;
|
|
|
|
import polyglot.ast.Block;
|
|
|
|
import polyglot.ast.BooleanLit;
|
|
|
|
import polyglot.ast.Branch;
|
|
|
|
import polyglot.ast.Call;
|
|
|
|
import polyglot.ast.CanonicalTypeNode;
|
|
|
|
import polyglot.ast.Case;
|
|
|
|
import polyglot.ast.Cast;
|
|
|
|
import polyglot.ast.Catch;
|
|
|
|
import polyglot.ast.CharLit;
|
|
|
|
import polyglot.ast.ClassBody;
|
|
|
|
import polyglot.ast.ClassDecl;
|
|
|
|
import polyglot.ast.ClassLit;
|
|
|
|
import polyglot.ast.Conditional;
|
|
|
|
import polyglot.ast.ConstructorCall;
|
|
|
|
import polyglot.ast.ConstructorDecl;
|
|
|
|
import polyglot.ast.Do;
|
|
|
|
import polyglot.ast.Empty;
|
|
|
|
import polyglot.ast.Eval;
|
|
|
|
import polyglot.ast.Field;
|
|
|
|
import polyglot.ast.FieldAssign;
|
|
|
|
import polyglot.ast.FieldDecl;
|
|
|
|
import polyglot.ast.FloatLit;
|
|
|
|
import polyglot.ast.For;
|
|
|
|
import polyglot.ast.Formal;
|
|
|
|
import polyglot.ast.If;
|
|
|
|
import polyglot.ast.Import;
|
|
|
|
import polyglot.ast.Initializer;
|
|
|
|
import polyglot.ast.Instanceof;
|
|
|
|
import polyglot.ast.IntLit;
|
|
|
|
import polyglot.ast.Labeled;
|
|
|
|
import polyglot.ast.Local;
|
|
|
|
import polyglot.ast.LocalAssign;
|
|
|
|
import polyglot.ast.LocalClassDecl;
|
|
|
|
import polyglot.ast.LocalDecl;
|
|
|
|
import polyglot.ast.MethodDecl;
|
|
|
|
import polyglot.ast.New;
|
|
|
|
import polyglot.ast.NewArray;
|
|
|
|
import polyglot.ast.NullLit;
|
|
|
|
import polyglot.ast.PackageNode;
|
|
|
|
import polyglot.ast.Return;
|
|
|
|
import polyglot.ast.Special;
|
|
|
|
import polyglot.ast.StringLit;
|
|
|
|
import polyglot.ast.Switch;
|
|
|
|
import polyglot.ast.SwitchBlock;
|
|
|
|
import polyglot.ast.Synchronized;
|
|
|
|
import polyglot.ast.Throw;
|
|
|
|
import polyglot.ast.Try;
|
|
|
|
import polyglot.ast.Unary;
|
|
|
|
import polyglot.ast.While;
|
|
|
|
|
|
|
|
import com.ibm.wala.cast.java.translator.polyglot.PolyglotJava2CAstTranslator.MethodContext;
|
|
|
|
import com.ibm.wala.cast.java.translator.polyglot.PolyglotJava2CAstTranslator.WalkContext;
|
|
|
|
import com.ibm.wala.cast.tree.CAstNode;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* An alternative visitor API for Polyglot, whose API is somewhat brain-damaged...
|
2009-04-13 19:39:48 +00:00
|
|
|
*
|
2009-01-09 02:52:56 +00:00
|
|
|
* @author rfuhrer
|
|
|
|
*/
|
|
|
|
public interface TranslatingVisitor {
|
2009-04-13 19:39:48 +00:00
|
|
|
CAstNode visit(MethodDecl m, MethodContext context);
|
|
|
|
|
|
|
|
CAstNode visit(ConstructorDecl cd, MethodContext cc);
|
|
|
|
|
|
|
|
CAstNode visit(FieldDecl f, MethodContext mc); // yes, a MethodContext; we process FieldDecl's only to add their initializers to
|
|
|
|
// each constructor
|
|
|
|
|
|
|
|
CAstNode visit(Import i, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(PackageNode p, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(CanonicalTypeNode ctn, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ArrayTypeNode ctn, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ArrayInit ai, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ArrayAccessAssign aaa, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(FieldAssign fa, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(LocalAssign la, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Binary b, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Call c, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ConstructorCall cc, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Cast c, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Conditional c, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Instanceof io, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(BooleanLit bl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ClassLit cl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(FloatLit fl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(NullLit nl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(CharLit cl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(IntLit il, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(StringLit sl, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(New n, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(NewArray na, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Special s, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Unary u, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ArrayAccess aa, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Field f, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Local l, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(ClassBody cb, WalkContext wc); // should never see this when producing CAstNodes
|
|
|
|
|
|
|
|
CAstNode visit(ClassDecl cd, WalkContext wc); // should never see this when producing CAstNodes
|
|
|
|
|
|
|
|
CAstNode visit(Initializer i, WalkContext wc); // should never see this when producing CAstNodes
|
|
|
|
|
|
|
|
CAstNode visit(Assert a, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Branch b, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Block b, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(SwitchBlock sb, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Catch c, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(If i, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Labeled l, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(LocalClassDecl lcd, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Do d, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(For f, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(While w, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Switch s, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Synchronized s, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Try t, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Empty e, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Eval e, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(LocalDecl ld, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Return r, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Case c, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Throw t, WalkContext wc);
|
|
|
|
|
|
|
|
CAstNode visit(Formal f, WalkContext wc); // may not see these (might be handled by parent)
|
2009-01-09 02:52:56 +00:00
|
|
|
}
|