Trait/Object

org.opalj.fpcf.properties

CallBySignature

Related Docs: object CallBySignature | package properties

Permalink

sealed trait CallBySignature extends Property

This property encapsulates for each interface method those method that are potentially called by call-by-signature means only. Since the property assumes that the current codebase can be extended, it does not make sense to compute this property when a closed-world program/whole application is analyzed.

When an incomplete application or library is analyzed the unknown code could contain subtypes that introduce valid call edges within the known code base. This is in particular the case when it exists an interface and a - from the interface independent - class within the codebase which share a method with the same signature. The unknown codebase could contain a subtype which extends both the class and the interface but does not override the method. If there exists a call on an interface method which fulfills the previously described scenario the method of the class becomes a possible call target even if it does not implement the interface. The following example illustrates this case:

/* Known codebase */

public interface Logger {
  public void log();
}

public class ConcreteLogger {
  public void log(){ /* */} // this method becomes a call target of an interface invocation because of the ApplicationLogger class
}

  /* unknown/hypothetical codebase */

public class ApplicationLogger extends ConcreteLogger implements Logger {
  // if the log method of the interface is invoked the log method of ConcreteLogger is called.
}

Fallback

The CallBySignature property has only a save fallback in the closed-world application scenario where the codebase can not be extended. Hence, in this case it is save to yield NoCBSTargets as fallback. In any other case there is no save fallback. Due to the unavailability of a save fallhback a very simple computation is triggered that returns either NoCBSTargets if no call-by-signature targets could be found and CBSTargets if a sound approximation of possible call-by-signature targets could be found. This computation returns all possible call targets that fulfill the following criteria:

Cycle Resolution Strategy

This property does not depend on other entities since there can not be any cycles.

Linear Supertypes
Property, PropertyMetaInformation, PropertyKind, AnyRef, Any
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. CallBySignature
  2. Property
  3. PropertyMetaInformation
  4. PropertyKind
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. final type Self = CallBySignature

    Permalink
    Definition Classes
    CallBySignature → PropertyMetaInformation

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  8. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  9. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  10. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  11. final def id: Int

    Permalink
    Definition Classes
    PropertyMetaInformation → PropertyKind
  12. final def isFinal: Boolean

    Permalink
    Definition Classes
    Property
  13. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  14. final def isRefineable: Boolean

    Permalink
    Definition Classes
    CallBySignature → Property
  15. final def key: PropertyKey[CallBySignature]

    Permalink

    Returns the key used by all CallBySignature properties.

    Returns the key used by all CallBySignature properties.

    Definition Classes
    CallBySignature → PropertyMetaInformation
  16. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  17. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  18. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  19. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  20. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  21. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  22. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  23. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Property

Inherited from PropertyMetaInformation

Inherited from PropertyKind

Inherited from AnyRef

Inherited from Any

Ungrouped