final class IntermediateEP[+E <: Entity, +P <: Property] extends EPS[E, P]
Encapsulates the intermediate lower- and upper bound related to the computation of the respective
property kind for the entity E.
For a detailed discussion of the semantics of lb and ub see EOptionP.lb.
- Alphabetic
- By Inheritance
- IntermediateEP
- EPS
- EOptionP
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new IntermediateEP(e: E, lb: P, ub: P)
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
asEPS: EPS[E, P]
This EOptionP as an EPS object; defined iff at least a preliminary property exists.
-
def
asFinal: FinalEP[E, P]
- Definition Classes
- IntermediateEP → EOptionP
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
val
e: E
The entity.
The entity. E.g., a class, method or field. In general, it is recommended to use entities that stand for specific elements in the code, but which are not the concrete source code entities themselves. This greatly facilitates associating properties with entities where the respective code is not available. For example, by using an object which acts as a representative for a concrete method it is possible to associate (predetermined) properties with (selected) library methods even if those methods are not part of the analysis.
- Definition Classes
- IntermediateEP → EOptionP
- Note
Entities have to implement
equals/hashCodemethods which are very efficient, because entity based comparisons happen very frequently!
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(other: Any): Boolean
- Definition Classes
- IntermediateEP → AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
hasNoProperty: Boolean
- Definition Classes
- EOptionP
- final def hasProperty: Boolean
-
def
hashCode(): Int
- Definition Classes
- IntermediateEP → AnyRef → Any
-
def
is(p: AnyRef): Boolean
Combines the test if we have a final property and – if we have one – if it is equal (by means of equality check) to the given one.
Combines the test if we have a final property and – if we have one – if it is equal (by means of equality check) to the given one.
- Definition Classes
- EOptionP
-
def
isFinal: Boolean
Returns
trueif and only if we have a property and the property was stored in the store using(Multi)Result.Returns
trueif and only if we have a property and the property was stored in the store using(Multi)Result.- Definition Classes
- IntermediateEP → EOptionP
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
final
def
isRefinable: Boolean
- Definition Classes
- EOptionP
-
val
lb: P
Returns the lower bound of the property if it is available, otherwise an
UnsupportedOperationExceptionis thrown.Returns the lower bound of the property if it is available, otherwise an
UnsupportedOperationExceptionis thrown. For details regarding the precise semantics see the discussion for ub.- Definition Classes
- IntermediateEP → EOptionP
- Note
If the property is final, the lb (and ub) will return the final property
,p.For simple properties an IllegalArgumentException is thrown.
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
pk: PropertyKey[P]
The property key of the optionally available property.
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
final
def
toEPK: EPK[E, P]
This EOptionP as a pair of an entity and a property key.
-
def
toString(): String
- Definition Classes
- IntermediateEP → AnyRef → Any
-
final
def
toUBEP: FinalEP[E, P]
Creates a FinalEP object using the current ub.
-
val
ub: P
Returns the upper bound of the property if it is available – hasProperty has to be
true– otherwise anUnsupportedOperationExceptionis thrown.Returns the upper bound of the property if it is available – hasProperty has to be
true– otherwise anUnsupportedOperationExceptionis thrown.The upper bound always models the best/most precise result w.r.t. the underlying lattice. Here, "best" means that the set of potentially reachable states/instructions that the analyzed program can ever assume, is potentially smaller when compared to a worse property.
The upper bound models the sound and precise result under the assumption that the properties of all explicitly and implicitly relevant entities is as last queried or implicitly assumed. I.e., unless a dependee is updated the upper bound represents the correct and most precise result. The upper bound also models the extension of simple properties.
The lower bound models the worst case property that a specific entity can have under the assumption that all other relevant properties will get their worst properties. This can – but does not have to be – the underlying lattice's bottom value. The lower bound is generally helpful for client analyses to determine final results quicker. For example, imagine the following code:
def f(a : AnyRef) : Unit = a match { case a : List[_] => if (a.exists( _ == null)) throw new IllegalArgumentException case _ => throw new UnknownError } def m(){ try { f(List(1,2,3)) } catch { case nfe: NumberFormatException => ... } }
In that case (assuming we do not perform context sensitive analyses), if the lower bound for
ffor the set of thrown exceptions is determined to beSet(IllegalArgumentException,UnkownError), the catch of theNumberFormatExceptioncan be ruled out and a final result formcan be computed.- Definition Classes
- IntermediateEP → EOptionP
- Note
If the property is final, the lb (and ub) will return the final property
p.
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )