Packages

case class MethodComplexity(value: Int) extends Property with MethodComplexityPropertyMetaInformation with Product with Serializable

An upper bound for the maximum number of instructions that need to be evaluated when the method is executed/interpreted. Using this property enables other analyses to make a decision whether to "inline" method calls or not. For example, to improve the precision of an analysis it may be very useful to inline short methods. Given the following code:

def abs(i : Int) : Int = {
    if(i == Int.MinValue) Int.MaxValue // COND + RETURN
    else if(i < 0) -i // COND + RETURN
    else i // RETURN
} // COMPLEXITY (BASED ON SOURCE CODE): 5

def ratio(i : Int, j : Int) : Int = {
    abs(i) / abs(j) // HERE, when we do not inline abs calls, we have no idea about the final
                    // result; when we inline the abs calls, we can compute that the returned
                    // value will be positive or that the method throws a
                    // `DivisionByZeroException`.
}

In general, the control flow graph is analyzed to compute an upper bound for the number of evaluated instructions; as far as (easily) possible, loops are conceptually unrolled. If the uppper bound could not be determined, the method is rated as being maximally complex.

The complexity of called methods is generally not taken into account. However, invoke instructions generally have a higher complexity than all other instructions to account for the fact that method calls are more expensive than all other types of instructions.

If an upper bound of a method's complexity cannot be estimated, the method will have Int.MaxValue complexity.

value

The estimated complexity of a specific method ([0...Int.MaxMavlue])

Source
MethodComplexity.scala
Linear Supertypes
Serializable, Serializable, Product, Equals, MethodComplexityPropertyMetaInformation, Property, PropertyMetaInformation, PropertyKind, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MethodComplexity
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. MethodComplexityPropertyMetaInformation
  7. Property
  8. PropertyMetaInformation
  9. PropertyKind
  10. AnyRef
  11. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new MethodComplexity(value: Int)

    value

    The estimated complexity of a specific method ([0...Int.MaxMavlue])

Type Members

  1. final type Self = MethodComplexity

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. final def asOrderedProperty: OrderedProperty

    Returns this if this property inherits from OrderedProperty.

    Returns this if this property inherits from OrderedProperty.

    Used, e.g., by the framework to support debugging analyses.

    Definition Classes
    Property
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native() @IntrinsicCandidate()
  7. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  8. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  9. final def id: Int

    The id uniquely identifies this property's category.

    The id uniquely identifies this property's category. All property objects of the same kind have to use the same id which is guaranteed since they share the same PropertyKey

    Definition Classes
    PropertyMetaInformationPropertyKind
  10. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  11. final def isOrderedProperty: Boolean

    Returns true if this property inherits from OrderedProperty.

    Returns true if this property inherits from OrderedProperty.

    Definition Classes
    Property
  12. final def key: PropertyKey[MethodComplexity]

    The key uniquely identifies this property's category.

    The key uniquely identifies this property's category. All property objects of the same kind have to use the same key.

    In general each Property kind is expected to have a companion object that stores the unique PropertyKey.

    Definition Classes
    MethodComplexityPropertyMetaInformation
  13. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  14. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  15. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  16. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  17. val value: Int
  18. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  19. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  20. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Deprecated Value Members

  1. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] ) @Deprecated
    Deprecated

Inherited from Serializable

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from Property

Inherited from PropertyMetaInformation

Inherited from PropertyKind

Inherited from AnyRef

Inherited from Any

Ungrouped