Packages

  • package root
    Definition Classes
    root
  • package org
    Definition Classes
    root
  • package opalj

    OPAL is a Scala-based framework for the static analysis, manipulation and creation of Java bytecode.

    OPAL is a Scala-based framework for the static analysis, manipulation and creation of Java bytecode. OPAL is designed with performance, scalability and adaptability in mind.

    Its main components are:

    • a library (Common) which provides generally useful data-structures and algorithms for static analyses.
    • a framework for implementing lattice based static analyses (Static Analysis Infrastructure)
    • a framework for parsing Java bytecode (Bytecode Infrastructure) that can be used to create arbitrary representations.
    • a library to create a one-to-one in-memory representation of Java bytecode (Bytecode Disassembler).
    • a library to create a representation of Java bytecode that facilitates writing simple static analyses (Bytecode Representation - org.opalj.br).
    • a scalable, easily customizable framework for the abstract interpretation of Java bytecode (Abstract Interpretation Framework - org.opalj.ai).
    • a library to extract dependencies between code elements and to facilitate checking architecture definitions.
    • a library for the lightweight manipulation and creation of Java bytecode (Bytecode Assembler).

    General Design Decisions

    Thread Safety

    Unless explicitly noted, OPAL is thread safe. I.e., the classes defined by OPAL can be considered to be thread safe unless otherwise stated. (For example, it is possible to read and process class files concurrently without explicit synchronization on the client side.)

    No null Values

    Unless explicitly noted, OPAL does not null values I.e., fields that are accessible will never contain null values and methods will never return null. If a method accepts null as a value for a parameter or returns a null value it is always explicitly documented. In general, the behavior of methods that are passed null values is undefined unless explicitly documented.

    No Typecasts for Collections

    For efficiency reasons, OPAL sometimes uses mutable data-structures internally. After construction time, these data-structures are generally represented using their generic interfaces (e.g., scala.collection.{Set,Map}). However, a downcast (e.g., to add/remove elements) is always forbidden as it would effectively prevent thread-safety.

    Assertions

    OPAL makes heavy use of Scala's Assertion Facility to facilitate writing correct code. Hence, for production builds (after thorough testing(!)) it is highly recommend to build OPAL again using -Xdisable-assertions.

    Definition Classes
    org
  • package br

    In this representation of Java bytecode references to a Java class file's constant pool and to attributes are replaced by direct references to the corresponding constant pool entries.

    In this representation of Java bytecode references to a Java class file's constant pool and to attributes are replaced by direct references to the corresponding constant pool entries. This facilitates developing analyses and fosters comprehension.

    Based on the fact that indirect references to constant pool entries are resolved and replaced by direct references this representation is called the resolved representation.

    This representation of Java bytecode is considered as OPAL's standard representation for writing Scala based analyses. This representation is engineered such that it facilitates writing analyses that use pattern matching.

    Definition Classes
    opalj
  • package fpcf
    Definition Classes
    br
  • package properties
    Definition Classes
    fpcf
  • package immutability
    Definition Classes
    properties
  • Assignable
  • ClassImmutability
  • ClassImmutabilityPropertyMetaInformation
  • DependentlyImmutableClass
  • DependentlyImmutableField
  • DependentlyImmutableType
  • EffectivelyNonAssignable
  • FieldAssignability
  • FieldAssignabilityPropertyMetaInformation
  • FieldImmutability
  • FieldImmutabilityPropertyMetaInformation
  • LazilyInitialized
  • MutableClass
  • MutableField
  • MutableType
  • NonAssignable
  • NonAssignableField
  • NonTransitivelyImmutableClass
  • NonTransitivelyImmutableField
  • NonTransitivelyImmutableType
  • TransitivelyImmutableClass
  • TransitivelyImmutableField
  • TransitivelyImmutableType
  • TypeImmutability
  • TypeImmutabilityPropertyMetaInformation
  • UnsafelyLazilyInitialized
  • package pointsto
    Definition Classes
    properties

package immutability

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. Protected

Type Members

  1. sealed trait ClassImmutability extends OrderedProperty with ClassImmutabilityPropertyMetaInformation

    Describes the class immutability of org.opalj.br.ClassFile.

    Describes the class immutability of org.opalj.br.ClassFile. The immutability of the classes are represented via the lower bound of the immutability of their instance fields and the immutability of its supertype.

    MutableClass The class has mutable fields.

    NonTransitivelyImmutableClass A class that's transitive state is not immutable but the values or objects representing this transitive state (are not / can not be) exchanged.

    DependentlyImmutableClass A class that is at least non-transitively immutable. Whether it is non-transitively or transitively immutable depends on (a) generic parameter(s).

    TransitivelyImmutableClass A class with a transitively immutable state.

  2. sealed trait ClassImmutabilityPropertyMetaInformation extends PropertyMetaInformation
  3. case class DependentlyImmutableClass(parameters: SortedSet[String]) extends ClassImmutability with Product with Serializable
  4. case class DependentlyImmutableField(parameters: SortedSet[String]) extends FieldImmutability with Product with Serializable
  5. case class DependentlyImmutableType(parameters: SortedSet[String]) extends TypeImmutability with Product with Serializable
  6. sealed trait FieldAssignability extends OrderedProperty with FieldAssignabilityPropertyMetaInformation

    Describes the assignability of org.opalj.br.Field.

    Describes the assignability of org.opalj.br.Field.

    Assignable The referenced object can be exchanged.

    UnsafelyLazilyInitialized The field is lazily initialized in a not thread safe way.

    LazilyInitialized The field reference is lazily initialized in a thread safe way.

    EffectivelyNonAssignable The value or object the field refers to is not exchanged.

    NonAssignable The field is final.

  7. sealed trait FieldAssignabilityPropertyMetaInformation extends PropertyMetaInformation
  8. sealed trait FieldImmutability extends OrderedProperty with FieldImmutabilityPropertyMetaInformation

    Describes the field immutability of org.opalj.br.Field

    Describes the field immutability of org.opalj.br.Field

    MutableField The field is assignable

    NonTransitivelyImmutableField A not assignable field and a non-transitively immutable or mutable data type

    DependentlyImmutableField A not assignable field with a generic type and parts of it are not substantiated in an non-transitively or transitively immutable

    TransitivelyImmutableField A not assignable field with a transitively immutable field type or a referenced object that can not escape or its state cannot be mutated.

  9. sealed trait FieldImmutabilityPropertyMetaInformation extends PropertyMetaInformation
  10. sealed trait NonAssignableField extends FieldAssignability
  11. sealed trait TypeImmutability extends OrderedProperty with TypeImmutabilityPropertyMetaInformation

    Specifies the immutability of a given type.

    Specifies the immutability of a given type.

    This property is of particular interest if the precise type cannot be computed statically. This property basically depends on the org.opalj.br.analyses.cg.TypeExtensibilityKey and ClassImmutability.

  12. sealed trait TypeImmutabilityPropertyMetaInformation extends PropertyMetaInformation

Value Members

  1. case object Assignable extends FieldAssignability with Product with Serializable
  2. object ClassImmutability extends ClassImmutabilityPropertyMetaInformation
  3. case object EffectivelyNonAssignable extends NonAssignableField with Product with Serializable
  4. object FieldAssignability extends FieldAssignabilityPropertyMetaInformation
  5. object FieldImmutability extends FieldImmutabilityPropertyMetaInformation
  6. case object LazilyInitialized extends NonAssignableField with Product with Serializable
  7. case object MutableClass extends ClassImmutability with Product with Serializable
  8. case object MutableField extends FieldImmutability with Product with Serializable
  9. case object MutableType extends TypeImmutability with Product with Serializable
  10. case object NonAssignable extends NonAssignableField with Product with Serializable
  11. case object NonTransitivelyImmutableClass extends ClassImmutability with Product with Serializable
  12. case object NonTransitivelyImmutableField extends FieldImmutability with Product with Serializable
  13. case object NonTransitivelyImmutableType extends TypeImmutability with Product with Serializable
  14. case object TransitivelyImmutableClass extends ClassImmutability with Product with Serializable
  15. case object TransitivelyImmutableField extends FieldImmutability with Product with Serializable
  16. case object TransitivelyImmutableType extends TypeImmutability with Product with Serializable

    An instance of the respective class is effectively immutable.

    An instance of the respective class is effectively immutable. I.e., after creation it is not possible for a client to set a field or to call a method that updates the internal state

  17. object TypeImmutability extends TypeImmutabilityPropertyMetaInformation
  18. case object UnsafelyLazilyInitialized extends FieldAssignability with Product with Serializable

Ungrouped