From 6f9228bf029366c3f07fa793070f8db0b65ec368 Mon Sep 17 00:00:00 2001 From: Viktor Wysluch Date: Mon, 20 Jan 2025 19:26:31 +0100 Subject: [PATCH 1/4] Fixed some missing uses in the DoPrivilegedCGAnalysis and in the ReflectionRelatedFieldAccessesAnalysis. --- .../opalj/tac/fpcf/analyses/cg/DoPrivilegedCGAnalysis.scala | 5 ++++- .../reflection/ReflectionRelatedFieldAccessesAnalysis.scala | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/DoPrivilegedCGAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/DoPrivilegedCGAnalysis.scala index 6dbb90df42..1f2a263fac 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/DoPrivilegedCGAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/DoPrivilegedCGAnalysis.scala @@ -305,7 +305,10 @@ object DoPrivilegedAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { override def requiredProjectInformation: ProjectInformationKeys = Seq(DeclaredMethodsKey, VirtualFormalParametersKey, DefinitionSitesKey, TypeIteratorKey) - override def uses: Set[PropertyBounds] = Set.empty + override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, Callees) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds override def derivesCollaboratively: Set[PropertyBounds] = PropertyBounds.ubs(Callers, Callees) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/fieldaccess/reflection/ReflectionRelatedFieldAccessesAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/fieldaccess/reflection/ReflectionRelatedFieldAccessesAnalysis.scala index 5edf2f2e39..94aabbad42 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/fieldaccess/reflection/ReflectionRelatedFieldAccessesAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/fieldaccess/reflection/ReflectionRelatedFieldAccessesAnalysis.scala @@ -37,6 +37,7 @@ import org.opalj.br.analyses.SomeProject import org.opalj.br.fpcf.BasicFPCFEagerAnalysisScheduler import org.opalj.br.fpcf.FPCFAnalysis import org.opalj.br.fpcf.properties.Context +import org.opalj.br.fpcf.properties.cg.Callers import org.opalj.br.fpcf.properties.cg.ForNameClasses import org.opalj.br.fpcf.properties.fieldaccess.AccessParameter import org.opalj.br.fpcf.properties.fieldaccess.AccessReceiver @@ -1198,6 +1199,8 @@ object ReflectionRelatedFieldAccessesAnalysisScheduler extends BasicFPCFEagerAna override def uses: Set[PropertyBounds] = PropertyBounds.ubs( ForNameClasses, + Callers, + TACAI, FieldReadAccessInformation, FieldWriteAccessInformation, MethodFieldReadAccessInformation, From d1e7ce3e9a93c7e8901ccc4c4e1540b8df67d0c5 Mon Sep 17 00:00:00 2001 From: Dominik Helm Date: Tue, 21 Jan 2025 10:56:20 +0100 Subject: [PATCH 2/4] Add missing uses of properties required by the TypeIterator --- .../BackwardClassForNameTaintAnalysisScheduler.scala | 7 +++++-- .../ForwardClassForNameTaintAnalysisScheduler.scala | 6 +++++- .../fpcf/ifds/BackwardTaintAnalysisFixture.scala | 7 +++++-- .../opalj/fpcf/ifds/ForwardTaintAnalysisFixture.scala | 9 ++++++++- .../tac/fpcf/analyses/FieldImmutabilityAnalysis.scala | 4 ++++ .../analyses/SystemPropertiesAnalysisScheduler.scala | 8 ++++---- .../cg/reflection/TamiFlexCallGraphAnalysis.scala | 3 +++ .../analyses/cg/xta/ArrayInstantiationsAnalysis.scala | 4 ++++ .../analyses/cg/xta/TypePropagationAnalysis.scala | 3 +++ .../analyses/pointsto/AbstractPointsToAnalysis.scala | 4 ++-- .../pointsto/AbstractPointsToBasedAnalysis.scala | 11 +++++++++-- .../analyses/pointsto/ArraycopyPointsToAnalysis.scala | 4 ++-- .../pointsto/ConfiguredMethodsPointsToAnalysis.scala | 4 ++-- .../analyses/pointsto/LibraryPointsToAnalysis.scala | 4 ++-- .../fpcf/analyses/pointsto/NewInstanceAnalysis.scala | 4 ++-- .../pointsto/ReflectionAllocationsAnalysis.scala | 4 ++-- .../pointsto/SerializationAllocationsAnalysis.scala | 4 ++-- .../analyses/pointsto/TamiFlexPointsToAnalysis.scala | 4 ++-- .../analyses/pointsto/UnsafePointsToAnalysis.scala | 4 ++-- 19 files changed, 68 insertions(+), 30 deletions(-) diff --git a/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/BackwardClassForNameTaintAnalysisScheduler.scala b/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/BackwardClassForNameTaintAnalysisScheduler.scala index e0c233cd21..74f35f391e 100644 --- a/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/BackwardClassForNameTaintAnalysisScheduler.scala +++ b/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/BackwardClassForNameTaintAnalysisScheduler.scala @@ -137,8 +137,11 @@ object BackwardClassForNameTaintAnalysisScheduler override def property: IFDSPropertyMetaInformation[JavaStatement, TaintFact] = Taint - override def uses: Set[PropertyBounds] = - Set(PropertyBounds.finalP(TACAI), PropertyBounds.finalP(Callers)) + override def uses: Set[PropertyBounds] = PropertyBounds.finalPs(TACAI, Callers) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = { + p.get(TypeIteratorKey).usedPropertyKinds + } override def requiredProjectInformation: ProjectInformationKeys = Seq(DeclaredMethodsKey, TypeIteratorKey, PropertyStoreKey, RTACallGraphKey) diff --git a/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/ForwardClassForNameTaintAnalysisScheduler.scala b/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/ForwardClassForNameTaintAnalysisScheduler.scala index 847592025e..52b726afd7 100644 --- a/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/ForwardClassForNameTaintAnalysisScheduler.scala +++ b/DEVELOPING_OPAL/demos/src/main/scala/org/opalj/tac/fpcf/analyses/taint/ForwardClassForNameTaintAnalysisScheduler.scala @@ -109,7 +109,11 @@ object ForwardClassForNameTaintAnalysisScheduler extends IFDSAnalysisScheduler[T override def requiredProjectInformation: ProjectInformationKeys = Seq(DeclaredMethodsKey, TypeIteratorKey, PropertyStoreKey, RTACallGraphKey) - override def uses: Set[PropertyBounds] = Set(PropertyBounds.finalP(TACAI), PropertyBounds.finalP(Callers)) + override def uses: Set[PropertyBounds] = PropertyBounds.finalPs(TACAI, Callers) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = { + p.get(TypeIteratorKey).usedPropertyKinds + } } class ForwardClassForNameAnalysisRunnerIFDS extends IFDSEvaluationRunner { diff --git a/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/BackwardTaintAnalysisFixture.scala b/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/BackwardTaintAnalysisFixture.scala index 2604932438..f90b4e91d4 100644 --- a/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/BackwardTaintAnalysisFixture.scala +++ b/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/BackwardTaintAnalysisFixture.scala @@ -111,7 +111,10 @@ object BackwardTaintAnalysisFixtureScheduler extends IFDSAnalysisScheduler[Taint override def property: IFDSPropertyMetaInformation[JavaStatement, TaintFact] = Taint - override val uses: Set[PropertyBounds] = Set(PropertyBounds.ub(Taint)) - override def requiredProjectInformation: ProjectInformationKeys = Seq(TypeIteratorKey, DeclaredMethodsKey, PropertyStoreKey) + + override val uses: Set[PropertyBounds] = PropertyBounds.ubs(Taint) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds } \ No newline at end of file diff --git a/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/ForwardTaintAnalysisFixture.scala b/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/ForwardTaintAnalysisFixture.scala index 483d006330..eaed115ec6 100644 --- a/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/ForwardTaintAnalysisFixture.scala +++ b/DEVELOPING_OPAL/validateCross/src/test/java/org/opalj/fpcf/ifds/ForwardTaintAnalysisFixture.scala @@ -89,8 +89,15 @@ class ForwardTaintProblemFixture(p: SomeProject) extends AbstractJavaForwardTain } object ForwardTaintAnalysisFixtureScheduler extends IFDSAnalysisScheduler[TaintFact, Method, JavaStatement] { + override def init(p: SomeProject, ps: PropertyStore) = new ForwardTaintAnalysisFixture()(p) + override def property: IFDSPropertyMetaInformation[JavaStatement, TaintFact] = Taint - override val uses: Set[PropertyBounds] = Set(PropertyBounds.ub(Taint)) + override def requiredProjectInformation: ProjectInformationKeys = Seq(TypeIteratorKey, DeclaredMethodsKey, PropertyStoreKey) + + override val uses: Set[PropertyBounds] = PropertyBounds.ubs(Taint) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds } diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/FieldImmutabilityAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/FieldImmutabilityAnalysis.scala index c5b23e2861..1f42b5c250 100755 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/FieldImmutabilityAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/FieldImmutabilityAnalysis.scala @@ -339,8 +339,12 @@ trait FieldImmutabilityAnalysisScheduler extends FPCFAnalysisScheduler { PropertyBounds.lub(FieldImmutability) ) + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds + override def requiredProjectInformation: ProjectInformationKeys = Seq(TypeIteratorKey, DeclaredFieldsKey, TypeExtensibilityKey) + final def derivedProperty: PropertyBounds = PropertyBounds.lub(FieldImmutability) } diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/SystemPropertiesAnalysisScheduler.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/SystemPropertiesAnalysisScheduler.scala index e35ccd3c9e..d63a07b079 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/SystemPropertiesAnalysisScheduler.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/SystemPropertiesAnalysisScheduler.scala @@ -138,10 +138,10 @@ object SystemPropertiesAnalysisScheduler extends BasicFPCFTriggeredAnalysisSched override def requiredProjectInformation: ProjectInformationKeys = Seq(DeclaredMethodsKey, TypeIteratorKey) - override def uses: Set[PropertyBounds] = Set( - PropertyBounds.ub(Callers), - PropertyBounds.ub(TACAI) - ) + override def uses: Set[PropertyBounds] = PropertyBounds.ubs(TACAI, Callers) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds override def triggeredBy: PropertyKey[Callers] = Callers.key diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/reflection/TamiFlexCallGraphAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/reflection/TamiFlexCallGraphAnalysis.scala index 8725d8d631..2f49bd5a95 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/reflection/TamiFlexCallGraphAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/reflection/TamiFlexCallGraphAnalysis.scala @@ -162,6 +162,9 @@ object TamiFlexCallGraphAnalysisScheduler extends BasicFPCFEagerAnalysisSchedule TACAI ) + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds + override def derivesCollaboratively: Set[PropertyBounds] = PropertyBounds.ubs( Callers, Callees diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/ArrayInstantiationsAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/ArrayInstantiationsAnalysis.scala index 25d111036f..f00715bed2 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/ArrayInstantiationsAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/ArrayInstantiationsAnalysis.scala @@ -127,6 +127,10 @@ class ArrayInstantiationsAnalysisScheduler( } override def uses: Set[PropertyBounds] = PropertyBounds.ubs(TACAI) + + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds + override def derivesEagerly: Set[PropertyBounds] = Set.empty override def derivesCollaboratively: Set[PropertyBounds] = PropertyBounds.ubs(InstantiatedTypes) override def triggeredBy: PropertyKind = Callers.key diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/TypePropagationAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/TypePropagationAnalysis.scala index c9d7318881..db53198acf 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/TypePropagationAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/cg/xta/TypePropagationAnalysis.scala @@ -599,6 +599,9 @@ final class TypePropagationAnalysisScheduler( MethodFieldWriteAccessInformation ) + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds + override def derivesEagerly: Set[PropertyBounds] = Set.empty override def derivesCollaboratively: Set[PropertyBounds] = PropertyBounds.ubs(InstantiatedTypes) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToAnalysis.scala index 2a8c5efedd..29697514fd 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToAnalysis.scala @@ -799,14 +799,14 @@ trait AbstractPointsToAnalysis extends PointsToAnalysisBase with ReachableMethod } } -trait AbstractPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler { +trait AbstractPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => AbstractPointsToAnalysis override type InitializationData = Null override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs( Callers, diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala index b14f87e4bb..07b4d1c0d3 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala @@ -9,13 +9,17 @@ import org.opalj.br.ReferenceType import org.opalj.br.analyses.DeclaredFields import org.opalj.br.analyses.DeclaredFieldsKey import org.opalj.br.analyses.ProjectInformationKeys +import org.opalj.br.analyses.SomeProject import org.opalj.br.analyses.VirtualFormalParameters import org.opalj.br.analyses.VirtualFormalParametersKey import org.opalj.br.fpcf.FPCFAnalysis +import org.opalj.br.fpcf.FPCFAnalysisScheduler import org.opalj.br.fpcf.properties.pointsto.PointsToSetLike import org.opalj.fpcf.Entity import org.opalj.fpcf.EOptionP +import org.opalj.fpcf.PropertyBounds import org.opalj.fpcf.PropertyKey +import org.opalj.fpcf.PropertyStore import org.opalj.tac.cg.TypeIteratorKey import org.opalj.tac.common.DefinitionSites import org.opalj.tac.common.DefinitionSitesKey @@ -66,7 +70,10 @@ trait AbstractPointsToBasedAnalysis extends FPCFAnalysis with ContextualAnalysis } } -object AbstractPointsToBasedAnalysis { - val requiredProjectInformation: ProjectInformationKeys = +trait PointsToBasedAnalysisScheduler { self: FPCFAnalysisScheduler => + def requiredProjectInformation: ProjectInformationKeys = Seq(TypeIteratorKey, DefinitionSitesKey, VirtualFormalParametersKey, DeclaredFieldsKey) + + def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + p.get(TypeIteratorKey).usedPropertyKinds } diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ArraycopyPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ArraycopyPointsToAnalysis.scala index 64119cae0a..232146c073 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ArraycopyPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ArraycopyPointsToAnalysis.scala @@ -85,7 +85,7 @@ abstract class ArraycopyPointsToAnalysis private[pointsto] ( } } -trait ArraycopyPointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +trait ArraycopyPointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { val propertyKind: PropertyMetaInformation val createAnalysis: SomeProject => ArraycopyPointsToAnalysis @@ -93,7 +93,7 @@ trait ArraycopyPointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler override type InitializationData = Null override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, propertyKind) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala index fbafab7c5d..8317f2c5b3 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala @@ -303,14 +303,14 @@ abstract class ConfiguredMethodsPointsToAnalysis private[analyses] ( } } -trait ConfiguredMethodsPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler { +trait ConfiguredMethodsPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => ConfiguredMethodsPointsToAnalysis override type InitializationData = Null override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs( Callers, diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/LibraryPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/LibraryPointsToAnalysis.scala index 856a292f13..b3a783e9e0 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/LibraryPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/LibraryPointsToAnalysis.scala @@ -232,13 +232,13 @@ abstract class LibraryPointsToAnalysis(final val project: SomeProject) } -trait LibraryPointsToAnalysisScheduler extends FPCFEagerAnalysisScheduler { +trait LibraryPointsToAnalysisScheduler extends FPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { val propertyKind: PropertyMetaInformation val createAnalysis: SomeProject => LibraryPointsToAnalysis override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :++ + super.requiredProjectInformation :++ Seq(DeclaredMethodsKey, ClosedPackagesKey, InitialEntryPointsKey, InitialInstantiatedTypesKey) override type InitializationData = LibraryPointsToAnalysis diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/NewInstanceAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/NewInstanceAnalysis.scala index 96cee0ed7f..f8605091f3 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/NewInstanceAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/NewInstanceAnalysis.scala @@ -193,12 +193,12 @@ abstract class NewInstanceMethodAnalysis( } } -trait NewInstanceAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +trait NewInstanceAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => NewInstanceAnalysis override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callees, propertyKind) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala index abe4f3bc62..46ceee1fee 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala @@ -284,9 +284,9 @@ class ReflectionMethodAllocationsAnalysis( } } -object ReflectionAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +object ReflectionAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, AllocationSitePointsToSet) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala index c3812457ab..49d3d41a2f 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala @@ -143,12 +143,12 @@ abstract class SerializationAllocationsAnalysis( } } -trait SerializationAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +trait SerializationAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => SerializationAllocationsAnalysis override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, propertyKind) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/TamiFlexPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/TamiFlexPointsToAnalysis.scala index cde4e0ee8c..fb84240616 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/TamiFlexPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/TamiFlexPointsToAnalysis.scala @@ -204,13 +204,13 @@ abstract class TamiFlexPointsToAnalysis private[analyses] ( } } -trait TamiFlexPointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +trait TamiFlexPointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { val propertyKind: PropertyMetaInformation val createAnalysis: SomeProject => TamiFlexPointsToAnalysis override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :++ Seq(DeclaredMethodsKey, TamiFlexKey) + super.requiredProjectInformation :++ Seq(DeclaredMethodsKey, TamiFlexKey) override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, propertyKind) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/UnsafePointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/UnsafePointsToAnalysis.scala index ad55683fe2..c44aedc5f7 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/UnsafePointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/UnsafePointsToAnalysis.scala @@ -267,7 +267,7 @@ abstract class UnsafePutPointsToAnalysis( } } -trait UnsafePointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { +trait UnsafePointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { val propertyKind: PropertyMetaInformation val createAnalysis: SomeProject => UnsafePointsToAnalysis @@ -275,7 +275,7 @@ trait UnsafePointsToAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler { override type InitializationData = Null override def requiredProjectInformation: ProjectInformationKeys = - AbstractPointsToBasedAnalysis.requiredProjectInformation :+ DeclaredMethodsKey + super.requiredProjectInformation :+ DeclaredMethodsKey override def uses: Set[PropertyBounds] = PropertyBounds.ubs(Callers, propertyKind) From 727d49310943f5f768ede11254d8d1ed96f74a6a Mon Sep 17 00:00:00 2001 From: Dominik Helm Date: Tue, 21 Jan 2025 10:57:46 +0100 Subject: [PATCH 3/4] Formatting --- .../analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala | 3 ++- .../fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala | 3 ++- .../analyses/pointsto/SerializationAllocationsAnalysis.scala | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala index 8317f2c5b3..edfc9b3b13 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ConfiguredMethodsPointsToAnalysis.scala @@ -303,7 +303,8 @@ abstract class ConfiguredMethodsPointsToAnalysis private[analyses] ( } } -trait ConfiguredMethodsPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler with PointsToBasedAnalysisScheduler { +trait ConfiguredMethodsPointsToAnalysisScheduler extends FPCFTriggeredAnalysisScheduler + with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => ConfiguredMethodsPointsToAnalysis diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala index 46ceee1fee..2182ddd207 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/ReflectionAllocationsAnalysis.scala @@ -284,7 +284,8 @@ class ReflectionMethodAllocationsAnalysis( } } -object ReflectionAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { +object ReflectionAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler + with PointsToBasedAnalysisScheduler { override def requiredProjectInformation: ProjectInformationKeys = super.requiredProjectInformation :+ DeclaredMethodsKey diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala index 49d3d41a2f..700ec08534 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/SerializationAllocationsAnalysis.scala @@ -143,7 +143,8 @@ abstract class SerializationAllocationsAnalysis( } } -trait SerializationAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler with PointsToBasedAnalysisScheduler { +trait SerializationAllocationsAnalysisScheduler extends BasicFPCFEagerAnalysisScheduler + with PointsToBasedAnalysisScheduler { def propertyKind: PropertyMetaInformation def createAnalysis: SomeProject => SerializationAllocationsAnalysis From 0298f1ea22c221e83d243e53678a66a8a83b0a7c Mon Sep 17 00:00:00 2001 From: Dominik Helm Date: Tue, 21 Jan 2025 11:04:30 +0100 Subject: [PATCH 4/4] Fix conflicting inheritance --- .../analyses/pointsto/AbstractPointsToBasedAnalysis.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala index 07b4d1c0d3..695305dd12 100644 --- a/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala +++ b/OPAL/tac/src/main/scala/org/opalj/tac/fpcf/analyses/pointsto/AbstractPointsToBasedAnalysis.scala @@ -70,10 +70,10 @@ trait AbstractPointsToBasedAnalysis extends FPCFAnalysis with ContextualAnalysis } } -trait PointsToBasedAnalysisScheduler { self: FPCFAnalysisScheduler => +trait PointsToBasedAnalysisScheduler extends FPCFAnalysisScheduler { def requiredProjectInformation: ProjectInformationKeys = Seq(TypeIteratorKey, DefinitionSitesKey, VirtualFormalParametersKey, DeclaredFieldsKey) - def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = - p.get(TypeIteratorKey).usedPropertyKinds + override def uses(p: SomeProject, ps: PropertyStore): Set[PropertyBounds] = + super.uses(p, ps) ++ p.get(TypeIteratorKey).usedPropertyKinds }