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 byBaseLattice
inBaseLattice.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 StringConstantPropagation
bottom()
boolean
equals(java.lang.Object obj)
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)
StringConstantPropagation
evalNonNullConstant(it.unive.lisa.symbolic.value.Constant constant, it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
StringConstantPropagation
evalNullConstant(it.unive.lisa.program.cfg.ProgramPoint pp, it.unive.lisa.analysis.SemanticOracle oracle)
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)
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)
protected java.lang.String
getValue()
Returns the abstract value of the domain.int
hashCode()
boolean
isTop()
boolean
lessOrEqualAux(StringConstantPropagation other)
StringConstantPropagation
lubAux(StringConstantPropagation other)
it.unive.lisa.util.representation.StructuredRepresentation
representation()
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)
StringConstantPropagation
top()
-
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:
top
in interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
isTop
public boolean isTop()
- Specified by:
isTop
in interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
bottom
public StringConstantPropagation bottom()
- Specified by:
bottom
in interfaceit.unive.lisa.analysis.Lattice<StringConstantPropagation>
-
representation
public it.unive.lisa.util.representation.StructuredRepresentation representation()
- Specified by:
representation
in 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:
evalNullConstant
in 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:
evalNonNullConstant
in 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:
evalUnaryExpression
in 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:
evalBinaryExpression
in 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:
evalTernaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
lubAux
public StringConstantPropagation lubAux(StringConstantPropagation other) throws it.unive.lisa.analysis.SemanticException
- Specified by:
lubAux
in 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:
lessOrEqualAux
in interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>
- Throws:
it.unive.lisa.analysis.SemanticException
-
hashCode
public int hashCode()
- Specified by:
hashCode
in interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equals
in interfaceit.unive.lisa.analysis.BaseLattice<StringConstantPropagation>
- Overrides:
equals
in 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:
satisfiesBinaryExpression
in interfaceit.unive.lisa.analysis.nonrelational.value.BaseNonRelationalValueDomain<StringConstantPropagation>
-
getValue
protected java.lang.String getValue() throws it.unive.lisa.analysis.SemanticException
Returns 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
-
-