object DomainRegistry
Registry for all domains that can be instantiated given a Project
, and a Method
with a
body.
The registry was developed to support tools for enabling the automatic selection of a domain that satisfies a given set of requirements; it also support debugging purposes that let the user/developer choose between different domains. After choosing a domain, an abstract interpretation can be performed.
The compatible domains that are part of OPAL are already registered.
Thread Safety
The registry is thread safe.
- Source
- DomainRegistry.scala
- Alphabetic
- By Inheritance
- DomainRegistry
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Type Members
- type ClassRegistry = Map[Class[_ <: Domain], DomainMetaInformation]
- case class DomainMetaInformation(lessPreciseDomains: Set[Class[_ <: Domain]], factory: (SomeProject, Method) => Domain) extends Product with Serializable
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
- def allLessPreciseDomains(rootDomainClass: Class[_ <: Domain]): Set[Class[_ <: Domain]]
The transitive hull of all less precise domains of the given domain.
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- final val configStrategySelectionKey: String("org.opalj.ai.common.DomainRegistry.defaultStrategy")
- def domainDescriptions(): Iterable[String]
Returns an
Iterable
to make it possible to iterate over the descriptions of the domain.Returns an
Iterable
to make it possible to iterate over the descriptions of the domain. Useful to show the (end-users) some meaningful descriptions. - def domainMetaInformation(domainClass: Class[_ <: Domain]): DomainMetaInformation
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def newDomain(domainClass: Class[_ <: Domain], project: SomeProject, method: Method): Domain
Creates a new instance of the domain identified by the given
domainClass
.Creates a new instance of the domain identified by the given
domainClass
. To create the instance the registered factory method will be used.- domainClass
The class object of the domain.
- project
The project.
- method
A method with a body.
- def newDomain(domainDescription: String, project: SomeProject, method: Method): Domain
Creates a new instance of the domain identified by the given
domainDescription
.Creates a new instance of the domain identified by the given
domainDescription
.- domainDescription
The description that identifies the domain.
- project
The project.
- method
A method with a body.
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- def register(domainDescription: String, domainClass: Class[_ <: Domain], lessPreciseDomains: Set[Class[_ <: Domain]], factory: (SomeProject, Method) => Domain): Unit
Register a new domain that can be used to perform an abstract interpretation of a specific method.
Register a new domain that can be used to perform an abstract interpretation of a specific method.
- domainDescription
A short description of the properties of the domain; in particular w.r.t. the kind of computations the domain does.
- domainClass
The class of the domain.
- lessPreciseDomains
The set of domains which are less precise/costly than this domain. This basically defines a partial order between the domains.
- factory
The factory method that will be used to create instances of the domain.
- def registry: ClassRegistry
Returns the current view of the registry.
- def selectBest(requirements: Iterable[Class[_ <: AnyRef]]): Set[Class[_ <: Domain]]
Selects a domain that satisfies all requirements and which – according to the domains' partial order is the most precise one.
Selects a domain that satisfies all requirements and which – according to the domains' partial order is the most precise one. If the most precise one is not unique multiple domains are returned; if no domain satisfies the requirements an empty sequence is returned.
- returns
The best domain satisfying the stated requirements.
To get a domain use:
selectBest(Seq(classOf[RecordDefUse],classOf[IntegerRangeValues] ))
Example: - def selectCandidates(requirements: Iterable[Class[_ <: AnyRef]]): Set[Class[_ <: Domain]]
- def selectCheapest(requirements: Iterable[Class[_ <: AnyRef]]): Set[Class[_ <: Domain]]
- def selectConfigured(config: Config, requirements: Iterable[Class[_ <: AnyRef]]): Set[Class[_ <: Domain]]
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated