package soot.JastAddJ;
import java.util.HashSet;import java.util.LinkedHashSet;import java.io.File;import java.util.*;import beaver.*;import java.util.ArrayList;import java.util.zip.*;import java.io.*;import java.io.FileNotFoundException;import java.util.Collection;import soot.*;import soot.util.*;import soot.jimple.*;import soot.coffi.ClassFile;import soot.coffi.method_info;import soot.coffi.CONSTANT_Utf8_info;import soot.tagkit.SourceFileTag;import soot.coffi.CoffiMethodSource;
public class VarAccess extends Access implements Cloneable {
public void flushCache() {
super.flushCache();
isConstant_visited = -1;
isConstant_computed = false;
isConstant_initialized = false;
isDAafter_Variable_values = null;
decls_computed = false;
decls_value = null;
decl_computed = false;
decl_value = null;
isFieldAccess_computed = false;
type_computed = false;
type_value = null;
base_Body_values = null;
}
public void flushCollectionCache() {
super.flushCollectionCache();
}
@SuppressWarnings({"unchecked", "cast"}) public VarAccess clone() throws CloneNotSupportedException {
VarAccess node = (VarAccess)super.clone();
node.isConstant_visited = -1;
node.isConstant_computed = false;
node.isConstant_initialized = false;
node.isDAafter_Variable_values = null;
node.decls_computed = false;
node.decls_value = null;
node.decl_computed = false;
node.decl_value = null;
node.isFieldAccess_computed = false;
node.type_computed = false;
node.type_value = null;
node.base_Body_values = null;
node.in$Circle(false);
node.is$Final(false);
return node;
}
@SuppressWarnings({"unchecked", "cast"}) public VarAccess copy() {
try {
VarAccess node = (VarAccess)clone();
if(children != null) node.children = (ASTNode[])children.clone();
return node;
} catch (CloneNotSupportedException e) {
}
System.err.println("Error: Could not clone node of type " + getClass().getName() + "!");
return null;
}
@SuppressWarnings({"unchecked", "cast"}) public VarAccess fullCopy() {
VarAccess res = (VarAccess)copy();
for(int i = 0; i < getNumChildNoTransform(); i++) {
ASTNode node = getChildNoTransform(i);
if(node != null) node = node.fullCopy();
res.setChild(node, i);
}
return res;
}
// Declared in DefiniteAssignment.jrag at line 94
public void definiteAssignment() {
if(isSource()) {
if(decl() instanceof VariableDeclaration) {
VariableDeclaration v = (VariableDeclaration)decl();
//System.err.println("Is " + v + " final? " + v.isFinal() + ", DAbefore: " + isDAbefore(v));
if(v.isValue()) {
}
else if(v.isBlankFinal()) {
//if(!isDAbefore(v) && !v.hasInit() && !v.getInit().isConstant())
if(!isDAbefore(v))
error("Final variable " + v.name() + " is not assigned before used");
}
else {
//if(!v.hasInit() && !isDAbefore(v)) {
if(!isDAbefore(v))
error("Local variable " + v.name() + " in not assigned before used");
}
}
else if(decl() instanceof FieldDeclaration && !isQualified()) {
FieldDeclaration f = (FieldDeclaration)decl();
//if(f.isFinal() && f.isInstanceVariable() && !isDAbefore(f)) {
//if(f.isFinal() && !isDAbefore(f) && (!f.hasInit() || !f.getInit().isConstant())) {
//if(f.isFinal() && (!f.hasInit() || !f.getInit().isConstant()) && !isDAbefore(f)) {
if(f.isFinal() && !f.hasInit() && !isDAbefore(f)) {
error("Final field " + f + " is not assigned before used");
}
}
}
if(isDest()) {
Variable v = decl();
// Blank final field
if(v.isFinal() && v.isBlank() && !hostType().instanceOf(v.hostType()))
error("The final variable is not a blank final in this context, so it may not be assigned.");
else if(v.isFinal() && isQualified() && (!qualifier().isThisAccess() || ((Access)qualifier()).isQualified()))
error("the blank final field " + v.name() + " may only be assigned by simple name");
// local variable or parameter
else if(v instanceof VariableDeclaration) {
VariableDeclaration var = (VariableDeclaration)v;
//System.out.println("### is variable");
if(!var.isValue() && var.getParent().getParent().getParent() instanceof SwitchStmt && var.isFinal()) {
if(!isDUbefore(var))
error("Final variable " + var.name() + " may only be assigned once");
}
else if(var.isValue()) {
if(var.hasInit() || !isDUbefore(var))
error("Final variable " + var.name() + " may only be assigned once");
}
else if(var.isBlankFinal()) {
if(var.hasInit() || !isDUbefore(var))
error("Final variable " + var.name() + " may only be assigned once");
}
if(var.isFinal() && (var.hasInit() || !isDUbefore(var))) {
//if(var.isFinal() && ((var.hasInit() && var.getInit().isConstant()) || !isDUbefore(var))) {
}
}
// field
else if(v instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)v;
if(f.isFinal()) {
if(f.hasInit())
error("initialized field " + f.name() + " can not be assigned");
else {
BodyDecl bodyDecl = enclosingBodyDecl();
if(!(bodyDecl instanceof ConstructorDecl) && !(bodyDecl instanceof InstanceInitializer) && !(bodyDecl instanceof StaticInitializer) && !(bodyDecl instanceof FieldDeclaration))
error("final field " + f.name() + " may only be assigned in constructors and initializers");
else if(!isDUbefore(f))
error("Final field " + f.name() + " may only be assigned once");
}
}
}
else if(v instanceof ParameterDeclaration) {
ParameterDeclaration p = (ParameterDeclaration)v;
// 8.4.1
if(p.isFinal()) {
error("Final parameter " + p.name() + " may not be assigned");
}
}
}
}
// Declared in DefiniteAssignment.jrag at line 458
protected boolean checkDUeverywhere(Variable v) {
if(isDest() && decl() == v)
return false;
return super.checkDUeverywhere(v);
}
// Declared in NameCheck.jrag at line 177
public void nameCheck() {
if(decls().isEmpty() && (!isQualified() || !qualifier().type().isUnknown() || qualifier().isPackageAccess()))
error("no field named " + name());
if(decls().size() > 1) {
StringBuffer s = new StringBuffer();
s.append("several fields named " + name());
for(Iterator iter = decls().iterator(); iter.hasNext(); ) {
Variable v = (Variable)iter.next();
s.append("\n " + v.type().typeName() + "." + v.name() + " declared in " + v.hostType().typeName());
}
error(s.toString());
}
// 8.8.5.1
if(inExplicitConstructorInvocation() && !isQualified() && decl().isInstanceVariable() && hostType() == decl().hostType())
error("instance variable " + name() + " may not be accessed in an explicit constructor invocation");
Variable v = decl();
if(!v.isFinal() && !v.isClassVariable() && !v.isInstanceVariable() && v.hostType() != hostType())
error("A parameter/variable used but not declared in an inner class must be declared final");
// 8.3.2.3
if((decl().isInstanceVariable() || decl().isClassVariable()) && !isQualified()) {
if(hostType() != null && !hostType().declaredBeforeUse(decl(), this)) {
if(inSameInitializer() && !simpleAssignment() && inDeclaringClass()) {
BodyDecl b = closestBodyDecl(hostType());
error("variable " + decl().name() + " is used in " + b + " before it is declared");
}
}
}
}
// Declared in NameCheck.jrag at line 211
// find the bodydecl declared in t in which this construct is nested
public BodyDecl closestBodyDecl(TypeDecl t) {
ASTNode node = this;
while(!(node.getParent().getParent() instanceof Program) && node.getParent().getParent() != t) {
node = node.getParent();
}
if(node instanceof BodyDecl)
return (BodyDecl)node;
return null;
}
// Declared in NodeConstructors.jrag at line 38
public VarAccess(String name, int start, int end) {
this(name);
this.start = start;
this.end = end;
}
// Declared in PrettyPrint.jadd at line 452
public void toString(StringBuffer s) {
s.append(name());
}
// Declared in Annotations.jrag at line 344
public void checkModifiers() {
if(decl() instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)decl();
if(f.isDeprecated() &&
!withinDeprecatedAnnotation() &&
hostType().topLevelType() != f.hostType().topLevelType() &&
!withinSuppressWarnings("deprecation"))
warning(f.name() + " in " + f.hostType().typeName() + " has been deprecated");
}
}
// Declared in Enums.jrag at line 428
protected void checkEnum(EnumDecl enumDecl) {
super.checkEnum(enumDecl);
if(decl().isStatic() && decl().hostType() == enumDecl && !isConstant())
error("may not reference a static field of an enum type from here");
}
// Declared in InnerClasses.jrag at line 25
private TypeDecl refined_InnerClasses_VarAccess_fieldQualifierType() {
if(hasPrevExpr())
return prevExpr().type();
TypeDecl typeDecl = hostType();
while(typeDecl != null && !typeDecl.hasField(name()))
typeDecl = typeDecl.enclosingType();
if(typeDecl != null)
return typeDecl;
return decl().hostType();
}
// Declared in InnerClasses.jrag at line 159
public void collectEnclosingVariables(HashSet set, TypeDecl typeDecl) {
Variable v = decl();
if(!v.isInstanceVariable() && !v.isClassVariable() && v.hostType() == typeDecl)
set.add(v);
super.collectEnclosingVariables(set, typeDecl);
}
// Declared in Transformations.jrag at line 103
// remote collection / demand driven creation of accessor
public void transformation() {
Variable v = decl();
if(v instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)v;
if(requiresAccessor()) {
TypeDecl typeDecl = fieldQualifierType();
if(isSource())
f.createAccessor(typeDecl);
if(isDest())
f.createAccessorWrite(typeDecl);
}
}
super.transformation();
}
// Declared in Expressions.jrag at line 194
public soot.Value refined_Expressions_VarAccess_eval(Body b) {
Variable v = decl();
if(v instanceof VariableDeclaration) {
VariableDeclaration decl = (VariableDeclaration)v;
if(decl.hostType() == hostType())
return decl.local;
else
return emitLoadLocalInNestedClass(b, decl);
}
else if(v instanceof ParameterDeclaration) {
ParameterDeclaration decl = (ParameterDeclaration)v;
if(decl.hostType() == hostType())
return decl.local;
else
return emitLoadLocalInNestedClass(b, decl);
}
else if(v instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)v;
if(f.hostType().isArrayDecl() && f.name().equals("length")) {
return b.newLengthExpr(asImmediate(b, createLoadQualifier(b)), this);
}
if(f.isStatic()) {
if(isQualified() && !qualifier().isTypeAccess())
b.newTemp(qualifier().eval(b));
if(requiresAccessor()) {
ArrayList list = new ArrayList();
return b.newStaticInvokeExpr(f.createAccessor(fieldQualifierType()).sootRef(), list, this);
}
else
return b.newStaticFieldRef(sootRef(), this);
}
else {
if(requiresAccessor()) {
soot.Local base = base(b);
ArrayList list = new ArrayList();
list.add(base);
return b.newStaticInvokeExpr(f.createAccessor(fieldQualifierType()).sootRef(), list, this);
}
else {
soot.Local base = createLoadQualifier(b);
return b.newInstanceFieldRef(base, sootRef(), this);
}
}
}
else
return super.eval(b);
}
// Declared in Expressions.jrag at line 270
public soot.Value refined_Expressions_VarAccess_emitStore(Body b, soot.Value lvalue, soot.Value rvalue, ASTNode location) {
Variable v = decl();
if(v instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)v;
if(requiresAccessor()) {
if(f.isStatic()) {
ArrayList list = new ArrayList();
list.add(rvalue);
return asLocal(b, b.newStaticInvokeExpr(f.createAccessorWrite(fieldQualifierType()).sootRef(), list, location));
}
else {
soot.Local base = base(b);
ArrayList list = new ArrayList();
list.add(base);
list.add(asLocal(b, rvalue, lvalue.getType()));
return asLocal(b, b.newStaticInvokeExpr(f.createAccessorWrite(fieldQualifierType()).sootRef(), list, location));
}
}
}
return super.emitStore(b, lvalue, rvalue, location);
}
// Declared in EmitJimpleRefinements.jrag at line 220
public void collectTypesToSignatures(Collection<Type> set) {
super.collectTypesToSignatures(set);
// if we access a field declaration we load the qualifying type
// the element type is used to cater for reading the field length in an array type
if(decl() instanceof FieldDeclaration)
addDependencyIfNeeded(set, fieldQualifierType());
}
// Declared in java.ast at line 3
// Declared in java.ast line 16
public VarAccess() {
super();
}
// Declared in java.ast at line 10
// Declared in java.ast line 16
public VarAccess(String p0) {
setID(p0);
}
// Declared in java.ast at line 15
// Declared in java.ast line 16
public VarAccess(beaver.Symbol p0) {
setID(p0);
}
// Declared in java.ast at line 19
protected int numChildren() {
return 0;
}
// Declared in java.ast at line 22
public boolean mayHaveRewrite() {
return false;
}
// Declared in java.ast at line 2
// Declared in java.ast line 16
protected String tokenString_ID;
// Declared in java.ast at line 3
public void setID(String value) {
tokenString_ID = value;
}
// Declared in java.ast at line 6
public int IDstart;
// Declared in java.ast at line 7
public int IDend;
// Declared in java.ast at line 8
public void setID(beaver.Symbol symbol) {
if(symbol.value != null && !(symbol.value instanceof String))
throw new UnsupportedOperationException("setID is only valid for String lexemes");
tokenString_ID = (String)symbol.value;
IDstart = symbol.getStart();
IDend = symbol.getEnd();
}
// Declared in java.ast at line 15
public String getID() {
return tokenString_ID != null ? tokenString_ID : "";
}
// Declared in GenericsCodegen.jrag at line 312
protected TypeDecl refined_GenericsCodegen_VarAccess_fieldQualifierType() {
TypeDecl typeDecl = refined_InnerClasses_VarAccess_fieldQualifierType();
return typeDecl == null ? null : typeDecl.erasure();
}
// Declared in GenericsCodegen.jrag at line 38
public soot.Value eval(Body b) {
Variable v = decl();
soot.Value result;
if(v instanceof FieldDeclaration) {
FieldDeclaration f = ((FieldDeclaration)v).erasedField();
if(f.hostType().isArrayDecl() && f.name().equals("length")) {
return b.newLengthExpr(asImmediate(b, createLoadQualifier(b)), this);
}
if(f.isStatic()) {
if(isQualified() && !qualifier().isTypeAccess())
b.newTemp(qualifier().eval(b));
if(requiresAccessor()) {
ArrayList list = new ArrayList();
result = b.newStaticInvokeExpr(f.createAccessor(fieldQualifierType().erasure()).sootRef(), list, this);
}
else
result = b.newStaticFieldRef(sootRef(), this);
}
else {
if(requiresAccessor()) {
soot.Local base = base(b);
ArrayList list = new ArrayList();
list.add(base);
result = b.newStaticInvokeExpr(f.createAccessor(fieldQualifierType().erasure()).sootRef(), list, this);
}
else {
soot.Local base = createLoadQualifier(b);
result = b.newInstanceFieldRef(base, sootRef(), this);
}
}
if(f.type() != v.type())
result = f.type().emitCastTo(b, result, v.type(), this);
return result;
}
else
return refined_Expressions_VarAccess_eval(b);
}
// Declared in GenericsCodegen.jrag at line 75
private SootFieldRef sootRef() {
FieldDeclaration decl = ((FieldDeclaration)decl()).erasedField();
SootFieldRef ref = Scene.v().makeFieldRef(
fieldQualifierType().getSootClassDecl(),
decl.name(),
decl.type().getSootType(),
decl.isStatic()
);
return ref;
}
// Declared in GenericsCodegen.jrag at line 86
public soot.Value emitStore(Body b, soot.Value lvalue, soot.Value rvalue, ASTNode location) {
Variable v = decl();
if(v instanceof FieldDeclaration) {
FieldDeclaration f = ((FieldDeclaration)v).erasedField();
if(requiresAccessor()) {
if(f.isStatic()) {
ArrayList list = new ArrayList();
list.add(rvalue);
return asLocal(b, b.newStaticInvokeExpr(f.createAccessorWrite(fieldQualifierType().erasure()).sootRef(), list, this));
}
else {
soot.Local base = base(b);
ArrayList list = new ArrayList();
list.add(base);
list.add(asLocal(b, rvalue, lvalue.getType()));
return asLocal(b, b.newStaticInvokeExpr(f.createAccessorWrite(fieldQualifierType().erasure()).sootRef(), list, this));
}
}
}
return refined_Expressions_VarAccess_emitStore(b, lvalue, rvalue, location);
}
// Declared in GenericsCodegen.jrag at line 108
public soot.Local createLoadQualifier(Body b) {
Variable v = decl();
if(v instanceof FieldDeclaration) {
FieldDeclaration f = ((FieldDeclaration)v).erasedField();
if(hasPrevExpr()) {
// load explicit qualifier
Local qualifier = asLocal(b, prevExpr().eval(b));
// pop qualifier stack element for class variables
// this qualifier must be computed to ensure side effects
return qualifier;
}
else if(f.isInstanceVariable()) {
return emitThis(b, fieldQualifierType().erasure());
}
}
throw new Error("createLoadQualifier not supported for " + v.getClass().getName());
}
// Declared in StaticImportsCodegen.jrag at line 11
protected TypeDecl fieldQualifierType() {
TypeDecl typeDecl = refined_GenericsCodegen_VarAccess_fieldQualifierType();
if(typeDecl != null)
return typeDecl;
return decl().hostType();
}
// Declared in ConstantExpression.jrag at line 108
@SuppressWarnings({"unchecked", "cast"}) public Constant constant() {
ASTNode$State state = state();
Constant constant_value = constant_compute();
return constant_value;
}
private Constant constant_compute() { return type().cast(decl().getInit().constant()); }
protected int isConstant_visited = -1;
protected boolean isConstant_computed = false;
protected boolean isConstant_initialized = false;
protected boolean isConstant_value;
// Declared in ConstantExpression.jrag at line 500
@SuppressWarnings({"unchecked", "cast"}) public boolean isConstant() {
if(isConstant_computed) {
return isConstant_value;
}
ASTNode$State state = state();
if (!isConstant_initialized) {
isConstant_initialized = true;
isConstant_value = false;
}
if (!state.IN_CIRCLE) {
state.IN_CIRCLE = true;
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
do {
isConstant_visited = state.CIRCLE_INDEX;
state.CHANGE = false;
boolean new_isConstant_value = isConstant_compute();
if (new_isConstant_value!=isConstant_value)
state.CHANGE = true;
isConstant_value = new_isConstant_value;
state.CIRCLE_INDEX++;
} while (state.CHANGE);
if(isFinal && num == state().boundariesCrossed)
{
isConstant_computed = true;
}
else {
state.RESET_CYCLE = true;
isConstant_compute();
state.RESET_CYCLE = false;
isConstant_computed = false;
isConstant_initialized = false;
}
state.IN_CIRCLE = false;
return isConstant_value;
}
if(isConstant_visited != state.CIRCLE_INDEX) {
isConstant_visited = state.CIRCLE_INDEX;
if (state.RESET_CYCLE) {
isConstant_computed = false;
isConstant_initialized = false;
isConstant_visited = -1;
return isConstant_value;
}
boolean new_isConstant_value = isConstant_compute();
if (new_isConstant_value!=isConstant_value)
state.CHANGE = true;
isConstant_value = new_isConstant_value;
return isConstant_value;
}
return isConstant_value;
}
private boolean isConstant_compute() {
Variable v = decl();
if(v instanceof FieldDeclaration) {
FieldDeclaration f = (FieldDeclaration)v;
return f.isConstant() && (!isQualified() || (isQualified() && qualifier().isTypeAccess()));
}
boolean result = v.isFinal() && v.hasInit() && v.getInit().isConstant() && (v.type().isPrimitive() || v.type().isString());
return result && (!isQualified() || (isQualified() && qualifier().isTypeAccess()));
}
// Declared in DefiniteAssignment.jrag at line 60
@SuppressWarnings({"unchecked", "cast"}) public Variable varDecl() {
ASTNode$State state = state();
Variable varDecl_value = varDecl_compute();
return varDecl_value;
}
private Variable varDecl_compute() { return decl(); }
protected java.util.Map isDAafter_Variable_values;
// Declared in DefiniteAssignment.jrag at line 353
@SuppressWarnings({"unchecked", "cast"}) public boolean isDAafter(Variable v) {
Object _parameters = v;
if(isDAafter_Variable_values == null) isDAafter_Variable_values = new java.util.HashMap(4);
if(isDAafter_Variable_values.containsKey(_parameters)) {
return ((Boolean)isDAafter_Variable_values.get(_parameters)).booleanValue();
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
boolean isDAafter_Variable_value = isDAafter_compute(v);
if(isFinal && num == state().boundariesCrossed)
isDAafter_Variable_values.put(_parameters, Boolean.valueOf(isDAafter_Variable_value));
return isDAafter_Variable_value;
}
private boolean isDAafter_compute(Variable v) {
return (isDest() && decl() == v) || isDAbefore(v);
}
// Declared in DefiniteAssignment.jrag at line 833
@SuppressWarnings({"unchecked", "cast"}) public boolean isDUafter(Variable v) {
ASTNode$State state = state();
boolean isDUafter_Variable_value = isDUafter_compute(v);
return isDUafter_Variable_value;
}
private boolean isDUafter_compute(Variable v) {
if(isDest() && decl() == v)
return false;
return isDUbefore(v);
}
// Declared in DefiniteAssignment.jrag at line 1208
@SuppressWarnings({"unchecked", "cast"}) public boolean unassignedEverywhere(Variable v, TryStmt stmt) {
ASTNode$State state = state();
boolean unassignedEverywhere_Variable_TryStmt_value = unassignedEverywhere_compute(v, stmt);
return unassignedEverywhere_Variable_TryStmt_value;
}
private boolean unassignedEverywhere_compute(Variable v, TryStmt stmt) {
if(isDest() && decl() == v && enclosingStmt().reachable()) {
return false;
}
return super.unassignedEverywhere(v, stmt);
}
protected boolean decls_computed = false;
protected SimpleSet decls_value;
// Declared in LookupVariable.jrag at line 230
@SuppressWarnings({"unchecked", "cast"}) public SimpleSet decls() {
if(decls_computed) {
return decls_value;
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
decls_value = decls_compute();
if(isFinal && num == state().boundariesCrossed)
decls_computed = true;
return decls_value;
}
private SimpleSet decls_compute() {
SimpleSet set = lookupVariable(name());
if(set.size() == 1) {
Variable v = (Variable)set.iterator().next();
if(!isQualified() && inStaticContext()) {
if(v.isInstanceVariable() && !hostType().memberFields(v.name()).isEmpty())
return SimpleSet.emptySet;
}
else if(isQualified() && qualifier().staticContextQualifier()) {
if(v.isInstanceVariable())
return SimpleSet.emptySet;
}
}
return set;
}
protected boolean decl_computed = false;
protected Variable decl_value;
// Declared in LookupVariable.jrag at line 245
@SuppressWarnings({"unchecked", "cast"}) public Variable decl() {
if(decl_computed) {
return decl_value;
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
decl_value = decl_compute();
if(isFinal && num == state().boundariesCrossed)
decl_computed = true;
return decl_value;
}
private Variable decl_compute() {
SimpleSet decls = decls();
if(decls.size() == 1)
return (Variable)decls.iterator().next();
return unknownField();
}
// Declared in NameCheck.jrag at line 221
@SuppressWarnings({"unchecked", "cast"}) public boolean inSameInitializer() {
ASTNode$State state = state();
boolean inSameInitializer_value = inSameInitializer_compute();
return inSameInitializer_value;
}
private boolean inSameInitializer_compute() {
BodyDecl b = closestBodyDecl(decl().hostType());
if(b == null) return false;
if(b instanceof FieldDeclaration && ((FieldDeclaration)b).isStatic() == decl().isStatic())
return true;
if(b instanceof InstanceInitializer && !decl().isStatic())
return true;
if(b instanceof StaticInitializer && decl().isStatic())
return true;
return false;
}
// Declared in NameCheck.jrag at line 233
@SuppressWarnings({"unchecked", "cast"}) public boolean simpleAssignment() {
ASTNode$State state = state();
boolean simpleAssignment_value = simpleAssignment_compute();
return simpleAssignment_value;
}
private boolean simpleAssignment_compute() { return isDest() && getParent() instanceof AssignSimpleExpr; }
// Declared in NameCheck.jrag at line 235
@SuppressWarnings({"unchecked", "cast"}) public boolean inDeclaringClass() {
ASTNode$State state = state();
boolean inDeclaringClass_value = inDeclaringClass_compute();
return inDeclaringClass_value;
}
private boolean inDeclaringClass_compute() { return hostType() == decl().hostType(); }
// Declared in PrettyPrint.jadd at line 801
@SuppressWarnings({"unchecked", "cast"}) public String dumpString() {
ASTNode$State state = state();
String dumpString_value = dumpString_compute();
return dumpString_value;
}
private String dumpString_compute() { return getClass().getName() + " [" + getID() + "]"; }
// Declared in QualifiedNames.jrag at line 17
@SuppressWarnings({"unchecked", "cast"}) public String name() {
ASTNode$State state = state();
String name_value = name_compute();
return name_value;
}
private String name_compute() { return getID(); }
protected boolean isFieldAccess_computed = false;
protected boolean isFieldAccess_value;
// Declared in ResolveAmbiguousNames.jrag at line 23
@SuppressWarnings({"unchecked", "cast"}) public boolean isFieldAccess() {
if(isFieldAccess_computed) {
return isFieldAccess_value;
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
isFieldAccess_value = isFieldAccess_compute();
if(isFinal && num == state().boundariesCrossed)
isFieldAccess_computed = true;
return isFieldAccess_value;
}
private boolean isFieldAccess_compute() { return decl().isClassVariable() || decl().isInstanceVariable(); }
// Declared in SyntacticClassification.jrag at line 111
@SuppressWarnings({"unchecked", "cast"}) public NameType predNameType() {
ASTNode$State state = state();
NameType predNameType_value = predNameType_compute();
return predNameType_value;
}
private NameType predNameType_compute() { return NameType.AMBIGUOUS_NAME; }
// Declared in TypeAnalysis.jrag at line 283
@SuppressWarnings({"unchecked", "cast"}) public TypeDecl type() {
if(type_computed) {
return type_value;
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
type_value = type_compute();
if(isFinal && num == state().boundariesCrossed)
type_computed = true;
return type_value;
}
private TypeDecl type_compute() { return decl().type(); }
// Declared in TypeCheck.jrag at line 17
@SuppressWarnings({"unchecked", "cast"}) public boolean isVariable() {
ASTNode$State state = state();
boolean isVariable_value = isVariable_compute();
return isVariable_value;
}
private boolean isVariable_compute() { return true; }
// Declared in InnerClasses.jrag at line 361
@SuppressWarnings({"unchecked", "cast"}) public boolean requiresAccessor() {
ASTNode$State state = state();
boolean requiresAccessor_value = requiresAccessor_compute();
return requiresAccessor_value;
}
private boolean requiresAccessor_compute() {
Variable v = decl();
if(!(v instanceof FieldDeclaration))
return false;
FieldDeclaration f = (FieldDeclaration)v;
if(f.isPrivate() && !hostType().hasField(v.name()))
return true;
if(f.isProtected() && !f.hostPackage().equals(hostPackage()) && !hostType().hasField(v.name()))
return true;
return false;
}
protected java.util.Map base_Body_values;
// Declared in Expressions.jrag at line 254
@SuppressWarnings({"unchecked", "cast"}) public soot.Local base(Body b) {
Object _parameters = b;
if(base_Body_values == null) base_Body_values = new java.util.HashMap(4);
if(base_Body_values.containsKey(_parameters)) {
return (soot.Local)base_Body_values.get(_parameters);
}
ASTNode$State state = state();
int num = state.boundariesCrossed;
boolean isFinal = this.is$Final();
soot.Local base_Body_value = base_compute(b);
if(isFinal && num == state().boundariesCrossed)
base_Body_values.put(_parameters, base_Body_value);
return base_Body_value;
}
private soot.Local base_compute(Body b) { return asLocal(b, createLoadQualifier(b)); }
// Declared in TypeHierarchyCheck.jrag at line 122
@SuppressWarnings({"unchecked", "cast"}) public boolean inExplicitConstructorInvocation() {
ASTNode$State state = state();
boolean inExplicitConstructorInvocation_value = getParent().Define_boolean_inExplicitConstructorInvocation(this, null);
return inExplicitConstructorInvocation_value;
}
public ASTNode rewriteTo() {
return super.rewriteTo();
}
}