Class DeInliningFinalFields
- java.lang.Object
-
- soot.dava.toolkits.base.AST.analysis.AnalysisAdapter
-
- soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
-
- soot.dava.toolkits.base.AST.transformations.DeInliningFinalFields
-
- All Implemented Interfaces:
Analysis
public class DeInliningFinalFields extends DepthFirstAdapter
Both static and non-static BUT FINAL fields if initialized with constants get inlined A final initialized with an object (even if its a string) is NOT inlined e.g. public static final String temp = "hello"; //use of temp will get inlined public static final String temp1 = new String("hello"); //use of temp will NOT get inlined If its a static field we can get the info from a tag in the case of a non static we cant decide since the field is initialized inside a constructor and depending on different constructors there coul dbe different values...conservative.... Need to be very clear when a SootField can be used It can be used in the following places: a, NOT used inside a Synchronized Block ........ HOWEVER ADD IT SINCE I DONT SEE WHY THIS RESTRICTION EXISTS!!! TICK b, CAN BE USED in a condition TICK c, CAN BE USED in the for init for update TICK d, CAN BE USED in a switch TICK e, CAN BE USED in a stmt TICK These are the exact places to look for constants...a constant is StringConstant DoubleConstant FloatConstant IntConstant (shortype, booltype, charType intType, byteType LongConstant
-
-
Field Summary
-
Fields inherited from class soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
DEBUG
-
-
Constructor Summary
Constructors Constructor Description DeInliningFinalFields()DeInliningFinalFields(boolean verbose)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Objectcheck(Value val)voidcheckAndSwitch(ValueBox valBox)voidcheckConditionalUses(Object cond, ASTNode node)voidinASTDoWhileNode(ASTDoWhileNode node)voidinASTForLoopNode(ASTForLoopNode node)voidinASTIfElseNode(ASTIfElseNode node)voidinASTIfNode(ASTIfNode node)voidinASTMethodNode(ASTMethodNode node)voidinASTStatementSequenceNode(ASTStatementSequenceNode node)voidinASTSwitchNode(ASTSwitchNode node)voidinASTSynchronizedBlockNode(ASTSynchronizedBlockNode node)voidinASTWhileNode(ASTWhileNode node)-
Methods inherited from class soot.dava.toolkits.base.AST.analysis.DepthFirstAdapter
caseArrayRef, caseASTAndCondition, caseASTBinaryCondition, caseASTDoWhileNode, caseASTForLoopNode, caseASTIfElseNode, caseASTIfNode, caseASTLabeledBlockNode, caseASTMethodNode, caseASTOrCondition, caseASTStatementSequenceNode, caseASTSwitchNode, caseASTSynchronizedBlockNode, caseASTTryNode, caseASTUnaryCondition, caseASTUnconditionalLoopNode, caseASTWhileNode, caseBinopExpr, caseCastExpr, caseDefinitionStmt, caseDVariableDeclarationStmt, caseExpr, caseExprOrRefValueBox, caseInstanceFieldRef, caseInstanceInvokeExpr, caseInstanceOfExpr, caseInvokeExpr, caseInvokeStmt, caseNewArrayExpr, caseNewMultiArrayExpr, caseRef, caseReturnStmt, caseStaticFieldRef, caseStmt, caseThrowStmt, caseType, caseUnopExpr, caseValue, debug, decideCaseExpr, decideCaseExprOrRef, decideCaseRef, inArrayRef, inASTAndCondition, inASTBinaryCondition, inASTLabeledBlockNode, inASTOrCondition, inASTTryNode, inASTUnaryCondition, inASTUnconditionalLoopNode, inBinopExpr, inCastExpr, inDefinitionStmt, inDVariableDeclarationStmt, inExpr, inExprOrRefValueBox, inInstanceFieldRef, inInstanceInvokeExpr, inInstanceOfExpr, inInvokeExpr, inInvokeStmt, inNewArrayExpr, inNewMultiArrayExpr, inRef, inReturnStmt, inStaticFieldRef, inStmt, inThrowStmt, inType, inUnopExpr, inValue, normalRetrieving, outArrayRef, outASTAndCondition, outASTBinaryCondition, outASTDoWhileNode, outASTForLoopNode, outASTIfElseNode, outASTIfNode, outASTLabeledBlockNode, outASTMethodNode, outASTOrCondition, outASTStatementSequenceNode, outASTSwitchNode, outASTSynchronizedBlockNode, outASTTryNode, outASTUnaryCondition, outASTUnconditionalLoopNode, outASTWhileNode, outBinopExpr, outCastExpr, outDefinitionStmt, outDVariableDeclarationStmt, outExpr, outExprOrRefValueBox, outInstanceFieldRef, outInstanceInvokeExpr, outInstanceOfExpr, outInvokeExpr, outInvokeStmt, outNewArrayExpr, outNewMultiArrayExpr, outRef, outReturnStmt, outStaticFieldRef, outStmt, outThrowStmt, outType, outUnopExpr, outValue
-
Methods inherited from class soot.dava.toolkits.base.AST.analysis.AnalysisAdapter
defaultCase
-
-
-
-
Method Detail
-
inASTMethodNode
public void inASTMethodNode(ASTMethodNode node)
- Overrides:
inASTMethodNodein classDepthFirstAdapter
-
inASTSynchronizedBlockNode
public void inASTSynchronizedBlockNode(ASTSynchronizedBlockNode node)
- Overrides:
inASTSynchronizedBlockNodein classDepthFirstAdapter
-
checkAndSwitch
public void checkAndSwitch(ValueBox valBox)
-
inASTSwitchNode
public void inASTSwitchNode(ASTSwitchNode node)
- Overrides:
inASTSwitchNodein classDepthFirstAdapter
-
inASTStatementSequenceNode
public void inASTStatementSequenceNode(ASTStatementSequenceNode node)
- Overrides:
inASTStatementSequenceNodein classDepthFirstAdapter
-
inASTForLoopNode
public void inASTForLoopNode(ASTForLoopNode node)
- Overrides:
inASTForLoopNodein classDepthFirstAdapter
-
inASTIfNode
public void inASTIfNode(ASTIfNode node)
- Overrides:
inASTIfNodein classDepthFirstAdapter
-
inASTIfElseNode
public void inASTIfElseNode(ASTIfElseNode node)
- Overrides:
inASTIfElseNodein classDepthFirstAdapter
-
inASTWhileNode
public void inASTWhileNode(ASTWhileNode node)
- Overrides:
inASTWhileNodein classDepthFirstAdapter
-
inASTDoWhileNode
public void inASTDoWhileNode(ASTDoWhileNode node)
- Overrides:
inASTDoWhileNodein classDepthFirstAdapter
-
-