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])

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
    Definition Classes
    MethodComplexityPropertyMetaInformation → PropertyMetaInformation

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
    Definition Classes
    Property
  6. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )
  7. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  8. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  10. final def id: Int
    Definition Classes
    PropertyMetaInformation → PropertyKind
  11. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  12. final def isOrderedProperty: Boolean
    Definition Classes
    Property
  13. final def key: PropertyKey[MethodComplexity]
    Definition Classes
    MethodComplexity → PropertyMetaInformation
  14. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  16. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  17. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  18. val value: Int
  19. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  20. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  21. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @throws( ... )

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