Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 44 additions & 37 deletions Changes.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
# Changes

## 7.0.0 - Released December 16th 2025
- *we are now using Scala 3.7.3*
- *we are now using sbt 1.11.7*
- various API changes due to new major Scala version
- fixed typos and minor code style issues
- introduced custom assertions, Scala 3 no longer supports -Xdisable-assertions

## 6.0.0 - Released October 9th 2025
- *we are now using sbt 1.9.7*
- *we are now using scalafmt instead of Scalariform*
- introduce auto formatting via `sbt format`
- add pre-commit hook to verify (`sbt checkFormat`) and apply formatting
- introduce auto formatting via `sbt format`
- add pre-commit hook to verify (`sbt checkFormat`) and apply formatting
- *unify command line interface for all OPAL runners using Scallop*
- all runners support the same syntax and shared subsets of arguments
- override custom configuration options via CLI arguments
- all runners support the same syntax and shared subsets of arguments
- override custom configuration options via CLI arguments
- full support for Java 20 up to 25
- support for Java 25 main entry method definitions
- rename ObjectType to ClassType according to JVM 24 specification
- support for Java 25 main entry method definitions
- rename ObjectType to ClassType according to JVM 24 specification
- OPAL can now select default analyses for properties
- support for Android call graph generation
- introduce declared fields
- explicitly provide information about field accesses (reads and writes) via dedicated analysis
- handle reflective field accesses
- field access information is computed as a triggered analysis
- explicitly provide information about field accesses (reads and writes) via dedicated analysis
- handle reflective field accesses
- field access information is computed as a triggered analysis
- add alias properties and corresponding analysis
- made points-to analysis modules configurable
- move non-Java specific code into SI subproject (analysis manager, registry and schedulers, project and project information keys)
Expand All @@ -33,33 +40,33 @@
## 5.0.0 - Released January 23rd 2023
- *we are now using sbt 1.6.2*
- *we are now using Scala 2.13*
- Scala 2.13 changes:
- replace Unicode arrows (⇒,→,←) by ASCII arrows (=>,->,<-)
- replace Traversable by scala.collection.Iterable
- replace TraversableOnce by scala.collection.IterableOnce
- changes to OPAL's custom data structures:
- replace RefIterator by scala.collection.iterator
- replace Chain by scala.collection.immutable.List
- replace RefArray and IntArray by scala.collection.immutable.ArraySeq
- replace RefArrayStack by scala.collection.immutable.Stack
- replace RefAppendChain by scala.collection.mutable.ArrayDeque
- replace RefArrayBuffer by scala.collection.mutable.ArrayBuffer
- Scala 2.13 changes:
- replace Unicode arrows (⇒,→,←) by ASCII arrows (=>,->,<-)
- replace Traversable by scala.collection.Iterable
- replace TraversableOnce by scala.collection.IterableOnce
- changes to OPAL's custom data structures:
- replace RefIterator by scala.collection.iterator
- replace Chain by scala.collection.immutable.List
- replace RefArray and IntArray by scala.collection.immutable.ArraySeq
- replace RefArrayStack by scala.collection.immutable.Stack
- replace RefAppendChain by scala.collection.mutable.ArrayDeque
- replace RefArrayBuffer by scala.collection.mutable.ArrayBuffer
- full support for Java 17 up to 19
- support for Java 17 Sealed Classes
- added isStrict attribute to classes
- ignore isStrict attribute on classes and methods for Java >= 17
- support for Java 17 Sealed Classes
- added isStrict attribute to classes
- ignore isStrict attribute on classes and methods for Java >= 17
- completed framework for call graph analyses
- introduced TypeIterator to uniformly access type information
- using contexts instead of methods to enable context-sensitive analysis (0-1-CFA, 1-1-CFA)
- support library analysis with CFA
- introduced TypeIterator to uniformly access type information
- using contexts instead of methods to enable context-sensitive analysis (0-1-CFA, 1-1-CFA)
- support library analysis with CFA
- introduced new immutability analyses
- replaced FieldMutabilityAnalysis with FieldAssignabilityAnalysis
- support for thread-safe and unsafe lazy initialization
- support for clone pattern
- introduced new FieldImmutabilityAnalysis to integrate field assignability with mutability of values
- support for transitive and non-transitive immutability
- support for immutability dependent on generic type parameters
- updated ClassImmutabilityAnalysis and TypeImmutabilityAnalysis to use new FieldImmutability properties
- replaced FieldMutabilityAnalysis with FieldAssignabilityAnalysis
- support for thread-safe and unsafe lazy initialization
- support for clone pattern
- introduced new FieldImmutabilityAnalysis to integrate field assignability with mutability of values
- support for transitive and non-transitive immutability
- support for immutability dependent on generic type parameters
- updated ClassImmutabilityAnalysis and TypeImmutabilityAnalysis to use new FieldImmutability properties
- added EntrypointsFinder for Android apps
- allow flushing caches for ClassTypes/ArrayTypes to free memory when creating many projects in a row

Expand All @@ -73,9 +80,9 @@
- parallel implementation for the PropertyStore
- FPCF analyses now use sets for their dependencies
- added preliminary framework for FPCF call graphs
- includes CHA, RTA, XTA/MTA/FTA/CTA and points-to based call graphs
- also includes modules for reflection, static initializers, finalizers, serialization, threads, selected native methods and to load dynamic data on reflective calls recorded by TamiFlex
- allows resolution of calls by method signature for library analyses
- includes CHA, RTA, XTA/MTA/FTA/CTA and points-to based call graphs
- also includes modules for reflection, static initializers, finalizers, serialization, threads, selected native methods and to load dynamic data on reflective calls recorded by TamiFlex
- allows resolution of calls by method signature for library analyses
- added an analysis to collect information about the usage of a class within a project
- added `LongTrieSet`, `LongLinkedTrieSet` and `LongTrieSetWithList` to optimize storage of Long values
- removed `PrecomputedPartialResult`
Expand Down Expand Up @@ -136,7 +143,7 @@
- fixed issues in some tests which open a huge number of files
- fixed a rare issue in the identification of closed strongly connected components
- completely reimplemented the property store
- added various analyses related to deriving the purity of methods, the immutability of classes, escape information etc.
- added various analyses related to deriving the purity of methods, the immutability of classes, escape information etc.
- very much improved OPAL's collection library w.r.t. optimized data structures for Int values

## 1.0.0 - Released Oct. 25th 2017
Expand Down
62 changes: 31 additions & 31 deletions DEVELOPING_OPAL/validate/src/it/resources/hermes-test-fixtures.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,130 +5,130 @@
"projects": [
{
"id" : "JVM Features",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/jvm_features-1.8-g-parameters-genericsignature.jar",
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/jvm_features-1.8-g-parameters-genericsignature.jar",
"libcp_defaults" : "RTJar"
},
{
"id": "ai",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/ai.jar",
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/ai.jar",
"libcp_defaults" : "JRE"
},
{
"id": "arrays",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/arrays.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/arrays.jar"
},
{
"id": "bugs",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/bugs.jar",
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/bugs.jar",
"libcp_defaults" : "RTJar"
},
{
"id": "classhierarchy",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/classhierarchy.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/classhierarchy.jar"
},
{
"id": "code",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/code.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/code.jar"
},
{
"id": "constants",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/constants.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/constants.jar"
},
{
"id": "controlflow",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/controlflow.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/controlflow.jar"
},
{
"id": "cornercases",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/cornercases.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/cornercases.jar"
},
{
"id": "dependencies",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/dependencies-1.8-g-parameters-genericsignature-preserveAllLocals.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/dependencies-1.8-g-parameters-genericsignature-preserveAllLocals.jar"
},
{
"id": "deprecated",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/deprecated.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/deprecated.jar"
},
{
"id": "equals_hashcode",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/equals_hashcode.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/equals_hashcode.jar"
},
{
"id": "fields-g-8",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/fields-g-8-parameters-genericsignature.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/fields-g-8-parameters-genericsignature.jar"
},
{
"id": "fields-g=none",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/fields-g=none-5.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/fields-g=none-5.jar"
},
{
"id": "generictypes",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/generictypes.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/generictypes.jar"
},
{
"id": "immutability",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/immutability.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/immutability.jar"
},
{
"id": "immutable",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/immutable.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/immutable.jar"
},
{
"id": "innerclasses",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/innerclasses-1.8-g-parameters-genericsignature.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/innerclasses-1.8-g-parameters-genericsignature.jar"
},
{
"id": "java8methodresolution",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/java8methodresolution.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/java8methodresolution.jar"
},
{
"id": "jsr_ret",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/jsr_ret-1.3-g-preserveAllLocals-nowarn.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/jsr_ret-1.3-g-preserveAllLocals-nowarn.jar"
},
{
"id": "lambdas",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/lambdas-1.8-g-parameters-genericsignature.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/lambdas-1.8-g-parameters-genericsignature.jar"
},
{
"id": "methods_types",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/method_types.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/method_types.jar"
},
{
"id": "methods",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/methods.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/methods.jar"
},
{
"id": "metrics",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/metrics.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/metrics.jar"
},
{
"id": "polymorphism",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/polymorphism.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/polymorphism.jar"
},
{
"id": "proxy",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/proxy.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/proxy.jar"
},
{
"id": "pureness",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/pureness.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/pureness.jar"
},
{
"id": "signatures",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/signatures.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/signatures.jar"
},
{
"id": "tactest",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/tactest-8-preserveAllLocals.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/tactest-8-preserveAllLocals.jar"
},
{
"id": "type_annotations",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/type_annotations.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/type_annotations.jar"
},
{
"id": "types",
"cp": "OPAL/bi/target/scala-2.13/resource_managed/test/types.jar"
"cp": "OPAL/bi/target/scala-3.7.3/resource_managed/test/types.jar"
}
]
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,6 @@ class InvokedynamicRewritingExecutionTest extends AnyFunSpec with Matchers {
new File("OPAL/ai/src/main/resources/").toURI.toURL,
new File("OPAL/ba/src/main/resources/").toURI.toURL,
new File("OPAL/bi/src/main/resources/").toURI.toURL,
new File("OPAL/bp/src/main/resources/").toURI.toURL,
new File("OPAL/br/src/main/resources/").toURI.toURL,
new File("OPAL/common/src/main/resources/").toURI.toURL
) ++ opalDependencies
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ import org.opalj.br.Method
/**
* Enables to perform invocations.
*
* ==Example==
* (PerformInvocationsWithRecursionDetection is in particular used by BugPicker's domain.)
*
* @author Michael Eichberg
*/
trait PerformInvocationsWithRecursionDetection extends PerformInvocations with TheMemoryLayout {
Expand Down
2 changes: 1 addition & 1 deletion README.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ OPAL also comes with a growing number of tools that are intended to help develop
The following applies to the "Master/Develop" branch.

OPAL uses SBT as its build tool and working with OPAL is particularly easy using the SBT console.
Make sure that you have at least Java 16 (running OPAL, i.e., not compiling the test fixtures, should still work with Java 8), Scala 2.13.11, and SBT 1.6.2 installed and running and that SBT can use at least 4GB of RAM (-Xmx4G). Download a recent snapshot of OPAL or clone the repository.
Make sure that you have at least Java 16 (running OPAL, i.e., not compiling the test fixtures, should still work with Java 8), Scala 3.7.3, and SBT 1.11.7 installed and running and that SBT can use at least 4GB of RAM (-Xmx4G). Download a recent snapshot of OPAL or clone the repository.
Go to OPAL's root folder.

* Call `sbt cleanBuild`. This compiles all core projects (including tests), generates the project-wide ScalaDoc documentation and publishes the project to your local ivy directory.
Expand Down
Loading