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
2 changes: 1 addition & 1 deletion WALA
Submodule WALA updated 86 files
+9 −5 .github/workflows/continuous-integration.yml
+22 −0 .idea/dictionaries/project.xml
+4 −0 .settings/org.eclipse.jdt.core.prefs
+0 −4 CONTRIBUTING.md
+1 −1 README-Gradle.md
+4 −0 build-logic/.settings/org.eclipse.jdt.core.prefs
+1 −1 build-logic/build.gradle.kts
+8 −3 build-logic/settings.gradle.kts
+2 −3 build-logic/src/main/kotlin/com/ibm/wala/gradle/Exec-useCurrentJavaHome.kt
+2 −2 build-logic/src/main/kotlin/com/ibm/wala/gradle/NullAway.gradle.kts
+4 −8 build-logic/src/main/kotlin/com/ibm/wala/gradle/eclipse-maven-central.gradle.kts
+9 −17 build-logic/src/main/kotlin/com/ibm/wala/gradle/java.gradle.kts
+3 −0 build-logic/src/main/kotlin/com/ibm/wala/gradle/javadoc.gradle.kts
+3 −5 build-logic/src/main/kotlin/com/ibm/wala/gradle/maven-eclipse-jsdt.gradle.kts
+2 −2 build-logic/src/main/kotlin/com/ibm/wala/gradle/project.gradle.kts
+9 −10 build-logic/src/main/kotlin/com/ibm/wala/gradle/publishing.gradle.kts
+53 −0 build-logic/src/main/kotlin/com/ibm/wala/gradle/version-catalog.kt
+1 −1 build-logic/src/main/kotlin/com/ibm/wala/gradle/xml-apis-ext.gradle.kts
+9 −4 build.gradle.kts
+3 −3 cast/java/ecj/.settings/org.eclipse.jdt.core.prefs
+4 −6 cast/java/ecj/build.gradle.kts
+7 −7 cast/java/ecj/src/main/java/com/ibm/wala/cast/java/translator/jdt/JDTJava2CAstTranslator.java
+10 −7 cast/java/src/testFixtures/java/com/ibm/wala/cast/java/test/IRTests.java
+2 −2 cast/java/src/testFixtures/java/com/ibm/wala/cast/java/test/JavaIRTests.java
+5 −3 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/AbstractFieldBasedTest.java
+10 −9 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedCGGamesTest.java
+2 −1 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedComparisonTest.java
+2 −1 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/FieldBasedJQueryTest.java
+19 −18 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/TestBoundedFieldBasedCG.java
+50 −60 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/rhino/callgraph/fieldbased/test/TestFieldBasedCG.java
+12 −6 cast/js/rhino/src/test/java/com/ibm/wala/cast/js/test/TestCallGraph2JSON.java
+5 −5 cast/js/rhino/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShapeRhino.java
+8 −8 cast/js/src/test/resources/pages/crawl.html
+17 −17 cast/js/src/test/resources/tests/portal-example-simple.html
+3 −2 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestAjaxsltCallGraphShape.java
+8 −7 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestArgumentSensitivity.java
+65 −57 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestForInLoopHack.java
+33 −33 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestLexicalModRef.java
+2 −1 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestMediawikiCallGraphShape.java
+2 −1 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestPrototypeCallGraphShape.java
+375 −456 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimpleCallGraphShape.java
+208 −247 cast/js/src/testFixtures/java/com/ibm/wala/cast/js/test/TestSimplePageCallGraphShape.java
+5 −3 cast/src/test/java/com/ibm/wala/cast/test/TestCAstPattern.java
+0 −248 cast/src/test/java/com/ibm/wala/cast/test/TestCAstTranslator.java
+63 −27 cast/src/testFixtures/java/com/ibm/wala/cast/util/test/TestCallGraphShape.java
+4 −0 code-coverage-report/.settings/org.eclipse.jdt.core.prefs
+1 −1 core/build.gradle.kts
+1 −1 core/src/main/java/com/ibm/wala/cfg/exc/intra/IntraprocNullPointerAnalysis.java
+2 −0 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/AllocationSiteInNode.java
+4 −4 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/PropagationSystem.java
+1 −2 core/src/main/java/com/ibm/wala/ipa/callgraph/propagation/SSAPropagationCallGraphBuilder.java
+6 −6 core/src/main/java/com/ibm/wala/ipa/slicer/PDG.java
+1 −1 core/src/main/java/com/ibm/wala/ipa/slicer/thin/CISlicer.java
+14 −42 core/src/test/java/com/ibm/wala/core/tests/basic/PrimitivesTest.java
+4 −12 core/src/test/java/com/ibm/wala/core/tests/callGraph/CHACallGraphTest.java
+18 −32 core/src/test/java/com/ibm/wala/core/tests/callGraph/CallGraphTest.java
+20 −24 core/src/test/java/com/ibm/wala/core/tests/callGraph/ReflectionTest.java
+17 −12 core/src/test/java/com/ibm/wala/core/tests/cfg/exc/inter/NullPointerExceptionInterTest.java
+8 −6 core/src/test/java/com/ibm/wala/core/tests/cfg/exc/intra/NullPointerExceptionIntraTest.java
+4 −20 core/src/test/java/com/ibm/wala/core/tests/ir/CFGTest.java
+9 −25 core/src/test/java/com/ibm/wala/core/tests/ir/DeterministicIRTest.java
+1 −1 core/src/test/java/com/ibm/wala/core/tests/slicer/SlicerTest.java
+52 −48 core/src/test/java/com/ibm/wala/examples/analysis/dataflow/DataflowTest.java
+1 −1 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/AndroidModel.java
+6 −6 ...k/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/AndroidModelParameterManager.java
+2 −2 ...k/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/DefaultInstantiationBehavior.java
+3 −2 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/IInstantiationBehavior.java
+1 −1 ...ik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/LoadedInstantiationBehavior.java
+1 −1 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/parameters/ReuseParameters.java
+9 −9 dalvik/src/main/java/com/ibm/wala/dalvik/ipa/callgraph/androidModel/structure/AbstractAndroidModel.java
+2 −2 dalvik/src/main/java/com/ibm/wala/dalvik/util/AndroidEntryPointManager.java
+12 −12 gradle/libs.versions.toml
+2 −2 gradle/wrapper/gradle-wrapper.properties
+3 −3 ide/.settings/org.eclipse.jdt.core.prefs
+3 −3 ide/jdt/.settings/org.eclipse.jdt.core.prefs
+3 −3 ide/jsdt/.settings/org.eclipse.jdt.core.prefs
+7 −9 ide/jsdt/build.gradle.kts
+3 −3 ide/jsdt/tests/.settings/org.eclipse.jdt.core.prefs
+4 −6 ide/jsdt/tests/build.gradle.kts
+3 −3 ide/tests/.settings/org.eclipse.jdt.core.prefs
+8 −4 settings.gradle.kts
+9 −9 shrike/src/main/java/com/ibm/wala/shrike/shrikeBT/analysis/ClassHierarchy.java
+11 −11 shrike/src/main/java/com/ibm/wala/shrike/shrikeCT/ClassWriter.java
+0 −11 util/build.gradle.kts
+4 −5 util/src/main/java/com/ibm/wala/util/heapTrace/HeapTracer.java
+3 −6 util/src/test/java/com/ibm/wala/util/test/BasicGraphTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ org.eclipse.jdt.core.classpath.mainOnlyProjectHasTestOnlyDependency=error
org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
org.eclipse.jdt.core.compiler.compliance=21
org.eclipse.jdt.core.compiler.codegen.targetPlatform=25
org.eclipse.jdt.core.compiler.compliance=25
org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=21
org.eclipse.jdt.core.compiler.source=25
org.eclipse.jdt.core.incompatibleJDKLevel=ignore
org.eclipse.jdt.core.incompleteClasspath=error
39 changes: 22 additions & 17 deletions core/com.ibm.wala.cast.python.test/data/match1.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,25 @@ def sunday():
print("Sunday")


day = 4

match day:
case 1:
monday()
case 2:
tuesday()
case 3:
wednesday()
case 4:
thursday()
case 5:
friday()
case 6:
saturday()
case 7:
sunday()
def otherDay():
print("other day??")


for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1:
monday()
case 2:
tuesday()
case 3:
wednesday()
case 4:
thursday()
case 5:
friday()
case 6:
saturday()
case 7:
sunday()
case x:
x()
55 changes: 55 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
def monday():
print("Monday")


def tuesday():
print("Tuesday")


def wednesday():
print("Wednesday")


def thursday():
print("Thursday")


def friday():
print("Friday")


def saturday():
print("Saturday")


def sunday():
print("Sunday")


def otherDay():
print("other day??")


def doit(month):
for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1 if 1 <= month <= 12:
monday()
case 2 if 1 <= month <= 12:
tuesday()
case 3 if 1 <= month <= 12:
wednesday()
case 4 if 1 <= month <= 12:
thursday()
case 5 if 1 <= month <= 12:
friday()
case 6 if 1 <= month <= 12:
saturday()
case 7 if 1 <= month <= 12:
sunday()
case x if callable(x):
x()


doit(4)
doit(0)
31 changes: 31 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
def weekday(day):
print("week day " + str(day))


def weekend(day):
print("week end " + str(day))


def otherDay():
print("other day??")


def somethingElse():
print("something else")


def doit(month):
for day in [1, 2, 3, 4, 5, 6, 7, otherDay]:
match day:
case 1 | 2 | 3 | 4 | 5 as day if 1 <= month <= 12:
weekday(day)
case 6 | 7 as day if 1 <= month <= 12:
weekend(day)
case x if callable(x):
x()
case _:
somethingElse()


doit(4)
doit(0)
41 changes: 41 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match4.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
def weekday(day):
print("week day " + str(day))


def weekend(day):
print("week end " + str(day))


def otherDay():
print("other day??")


def somethingElse():
print("something else")


def mten():
return 10


def mseven():
return 10


def doit(dmf):
match dmf:
case [1 | 2 | 3 | 4 | 5 as day, month] if 1 <= month() <= 12:
weekday(day)
case [6 | 7 as day, month] if 1 <= month() <= 12:
weekend(day)
case x if callable(x):
x()
case _:
somethingElse()


doit((3, mseven))
doit([7, mten])
doit([8, mten])
doit(otherDay)
doit(0)
37 changes: 37 additions & 0 deletions core/com.ibm.wala.cast.python.test/data/match5.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class Nothing:
def act(self):
print("Nothing")


def id(x):
return x


class Something:
a = 0
b = 0

def __init__(self, a, b):
self.a = id(a)
self.b = id(b)

def act(self):
print(self.a + self.b)


def doit(x):
match x:
case Nothing():
x.act()
case Something(a=5, b=7):
x.act()
case Something():
print("unexpected something")
case _:
print("unexpected value")


doit(Nothing())
doit(Something(5, 7))
doit(Something(3, 4))
doit(10)
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.ibm.wala.ipa.callgraph.CallGraph;
import com.ibm.wala.ipa.callgraph.propagation.PropagationCallGraphBuilder;
import com.ibm.wala.ipa.cha.ClassHierarchyException;
import com.ibm.wala.ssa.SSAOptions;
import com.ibm.wala.types.MethodReference;
import com.ibm.wala.types.TypeName;
import com.ibm.wala.types.TypeReference;
Expand All @@ -24,6 +25,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
Expand Down Expand Up @@ -83,7 +85,8 @@ public String getName() {

protected PythonAnalysisEngine<?> createEngine(List<File> pythonPath)
throws ClassHierarchyException, IllegalArgumentException, CancelException, IOException {
return new PythonAnalysisEngine<Void>(pythonPath) {
return new PythonAnalysisEngine<Void>(
pythonPath, PythonAnalysisEngine.makeSSAOptions(SSAOptions.defaultOptions())) {
@Override
public Void performAnalysis(PropagationCallGraphBuilder builder) throws CancelException {
assert false;
Expand Down Expand Up @@ -130,4 +133,12 @@ StringBuffer dump(CallGraph CG) {
}
return sb;
}

protected void verifyGraphAssertions(CallGraph CG, Object[][] data) {
List<GraphAssertion> asserts = new ArrayList<>();
for (int i = 0; i < data.length; i++) {
asserts.add(new GraphAssertion(data[i][0], (String[]) data[i][1]));
}
verifyGraphAssertions(CG, asserts);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource=error
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
org.eclipse.jdt.core.compiler.codegen.targetPlatform=25
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=21
org.eclipse.jdt.core.compiler.compliance=25
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
Expand All @@ -24,6 +24,6 @@ org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=21
org.eclipse.jdt.core.compiler.source=25
org.eclipse.jdt.core.incompatibleJDKLevel=ignore
org.eclipse.jdt.core.incompleteClasspath=error
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.ibm.wala.cast.python.ipa.summaries.PythonSuper;
import com.ibm.wala.cast.python.ir.PythonLanguage;
import com.ibm.wala.cast.python.loader.PythonLoaderFactory;
import com.ibm.wala.cast.python.ssa.IsInstancePiPolicy;
import com.ibm.wala.cast.python.types.PythonTypes;
import com.ibm.wala.cast.types.AstMethodReference;
import com.ibm.wala.cast.util.Util;
Expand Down Expand Up @@ -52,7 +53,9 @@
import com.ibm.wala.ipa.summaries.BypassSyntheticClassLoader;
import com.ibm.wala.ipa.summaries.XMLMethodSummaryReader;
import com.ibm.wala.shrike.shrikeBT.Constants;
import com.ibm.wala.ssa.CompoundPiPolicy;
import com.ibm.wala.ssa.IRFactory;
import com.ibm.wala.ssa.InstanceOfPiPolicy;
import com.ibm.wala.ssa.SSAOptions;
import com.ibm.wala.ssa.SSAOptions.DefaultValues;
import com.ibm.wala.ssa.SymbolTable;
Expand Down Expand Up @@ -135,10 +138,13 @@ public static void setLoaderFactory(Class<? extends PythonLoaderFactory> lf) {

private final IRFactory<IMethod> irs = AstIRFactory.makeDefaultFactory();

public PythonAnalysisEngine(List<File> pythonPath) {
public PythonAnalysisEngine(List<File> pythonPath, SSAOptions ssaOptions) {
PythonLoaderFactory f;
try {
f = loaders.getConstructor(java.util.List.class).newInstance(pythonPath);
f =
loaders
.getConstructor(java.util.List.class, SSAOptions.class)
.newInstance(pythonPath, ssaOptions);
} catch (InstantiationException
| IllegalAccessException
| InvocationTargetException
Expand All @@ -150,7 +156,7 @@ public PythonAnalysisEngine(List<File> pythonPath) {
}

public PythonAnalysisEngine() {
this(emptyList());
this(emptyList(), makeSSAOptions(SSAOptions.defaultOptions()));
}

@Override
Expand Down Expand Up @@ -363,16 +369,7 @@ protected PythonSSAPropagationCallGraphBuilder getCallGraphBuilder(
addBypassLogic(cha, options);

options.setUseConstantSpecificKeys(true);

SSAOptions ssaOptions = options.getSSAOptions();
ssaOptions.setDefaultValues(
new DefaultValues() {
@Override
public int getDefaultValue(SymbolTable symtab, int valueNumber) {
return symtab.getNullConstant();
}
});
options.setSSAOptions(ssaOptions);
options.setSSAOptions(makeSSAOptions(options));

PythonSSAPropagationCallGraphBuilder builder = makeBuilder(cha, options, cache);

Expand All @@ -392,6 +389,24 @@ public int getDefaultValue(SymbolTable symtab, int valueNumber) {
return this.builder = builder;
}

public static SSAOptions makeSSAOptions(AnalysisOptions options) {
return makeSSAOptions(options.getSSAOptions());
}

public static SSAOptions makeSSAOptions(SSAOptions ssaOptions) {
ssaOptions.setDefaultValues(
new DefaultValues() {
@Override
public int getDefaultValue(SymbolTable symtab, int valueNumber) {
return symtab.getNullConstant();
}
});
ssaOptions.setPiNodePolicy(
CompoundPiPolicy.createCompoundPiPolicy(
InstanceOfPiPolicy.createInstanceOfPiPolicy(), new IsInstancePiPolicy()));
return ssaOptions;
}

public PythonSSAPropagationCallGraphBuilder getCachedCallGraphBuilder() {
return this.builder;
}
Expand Down
Loading
Loading