Package it.unive.lisa.analysis.string
Class StringConstantPropagation
- java.lang.Object
-
- it.unive.lisa.analysis.string.StringConstantPropagation
-
- All Implemented Interfaces:
it.unive.lisa.analysis.BaseLattice<StringConstantPropagation>,it.unive.lisa.analysis.Lattice<StringConstantPropagation>,it.unive.lisa.analysis.nonrelational.NonRelationalDomain<StringConstantPropagation,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<StringConstantPropagation>>,it.unive.lisa.analysis.nonrelational.NonRelationalElement<StringConstantPropagation,it.unive.lisa.symbolic.value.ValueExpression,it.unive.lisa.analysis.nonrelational.value.ValueEnvironment<StringConstantPropagation>>,it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>,it.unive.lisa.analysis.nonrelational.value.NonRelationalValueDomain<StringConstantPropagation>,it.unive.lisa.analysis.SemanticEvaluator,it.unive.lisa.util.representation.StructuredObject
public class StringConstantPropagation extends java.lang.Object implements it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
The string constant propagation abstract domain, tracking if a certain string value has constant value or not. Top and bottom cases for least upper bounds, widening and less or equals operations are handled byBaseLatticeinBaseLattice.lub(L),BaseLattice.widening(L)andBaseLattice.lessOrEqual(L), respectively.
-
-
Constructor Summary
Constructors Constructor Description StringConstantPropagation()Builds the top abstract value.StringConstantPropagation(java.lang.String value)Builds the abstract value for the given constant.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description StringConstantPropagationbottom()booleanequals(java.lang.Object obj)StringConstantPropagationevalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, StringConstantPropagation left, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)StringConstantPropagationevalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)StringConstantPropagationevalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)StringConstantPropagationevalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, StringConstantPropagation left, StringConstantPropagation middle, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)StringConstantPropagationevalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, StringConstantPropagation arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)protected java.lang.StringgetValue()Returns the abstract value of the domain.inthashCode()booleanisTop()booleanlessOrEqualAux(StringConstantPropagation other)StringConstantPropagationlubAux(StringConstantPropagation other)it.unive.lisa.util.representation.StructuredRepresentationrepresentation()it.unive.lisa.analysis.lattices.SatisfiabilitysatisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, StringConstantPropagation left, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)StringConstantPropagationtop()-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface it.unive.lisa.analysis.BaseLattice
glb, glbAux, lessOrEqual, lub, narrowing, narrowingAux, toString, widening, wideningAux
-
Methods inherited from interface it.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain
assume, assumeBinaryExpression, assumeTernaryExpression, assumeUnaryExpression, canProcess, eval, evalIdentifier, evalPushAny, evalPushInv, evalSkip, evalTypeCast, evalTypeConv, evalValueExpression, satisfies, satisfiesAbstractValue, satisfiesNonNullConstant, satisfiesNullConstant, satisfiesTernaryExpression, satisfiesUnaryExpression
-
-
-
-
Method Detail
-
top
public StringConstantPropagation top()
- Specified by:
topin interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
isTop
public boolean isTop()
- Specified by:
isTopin interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
bottom
public StringConstantPropagation bottom()
- Specified by:
bottomin interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representationin interfaceit.unive.lisa.util.representation.StructuredObject
-
evalNullConstant
public StringConstantPropagation evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalNullConstantin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
evalNonNullConstant
public StringConstantPropagation evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalNonNullConstantin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
evalUnaryExpression
public StringConstantPropagation evalUnaryExpression(it.unive.lisa.symbolic.value.operator.unary.UnaryOperator operator, StringConstantPropagation arg, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalUnaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
evalBinaryExpression
public StringConstantPropagation evalBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, StringConstantPropagation left, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
evalTernaryExpression
public StringConstantPropagation evalTernaryExpression(it.unive.lisa.symbolic.value.operator.ternary.TernaryOperator operator, StringConstantPropagation left, StringConstantPropagation middle, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
- Specified by:
evalTernaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
lubAux
public StringConstantPropagation lubAux(StringConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAuxin interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>- Throws:
it.unive.lisa.analysis.SemanticException
-
lessOrEqualAux
public boolean lessOrEqualAux(StringConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lessOrEqualAuxin interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCodein interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>- Overrides:
equalsin classjava.lang.Object
-
satisfiesBinaryExpression
public it.unive.lisa.analysis.lattices.Satisfiability satisfiesBinaryExpression(it.unive.lisa.symbolic.value.operator.binary.BinaryOperator operator, StringConstantPropagation left, StringConstantPropagation right, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)- Specified by:
satisfiesBinaryExpressionin interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
getValue
protected java.lang.String getValue() throws it.unive.lisa.analysis.SemanticExceptionReturns the abstract value of the domain.- Returns:
- the string representing the constant value
- Throws:
it.unive.lisa.analysis.SemanticException- if the method is called on a top or bottom element
-
-