From 3ce501f61b504367908ac70a07f5ed6c9098073a Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Mon, 7 Aug 2023 19:52:13 -0400 Subject: [PATCH 1/5] Fix issue #588: added JDK 17 support --- .../cg/wala/WalaCallgraphConstructor.java | 25 +++++----- .../steady/cg/wala/WalaCallGraphTest.java | 46 ++++++++++++++++++ .../src/test/resources/examplesJdk17.jar | Bin 0 -> 4719 bytes lang-java-reach/pom.xml | 10 ++-- plugin-maven/pom.xml | 2 +- 5 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 lang-java-reach-wala/src/test/resources/examplesJdk17.jar diff --git a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java index 5dc50d580..c785a02a2 100644 --- a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java +++ b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.Set; +import com.ibm.wala.classLoader.Language; import org.apache.commons.configuration.Configuration; import org.apache.logging.log4j.Logger; import org.eclipse.steady.cg.CallgraphConstructException; @@ -53,7 +54,7 @@ import com.ibm.wala.ipa.cha.ClassHierarchyFactory; import com.ibm.wala.ipa.cha.IClassHierarchy; import com.ibm.wala.types.TypeReference; -import com.ibm.wala.util.config.AnalysisScopeReader; +import com.ibm.wala.core.util.config.AnalysisScopeReader; import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; @@ -151,7 +152,7 @@ public void setEntrypoints(Set throws CallgraphConstructException { try { this.scope = - AnalysisScopeReader.makeJavaBinaryAnalysisScope( + AnalysisScopeReader.instance.makeJavaBinaryAnalysisScope( this.classpath, this.excludedPackagesFile); // The removal of ClassHierarchy.make(AnalysisScope) was made with commit @@ -207,13 +208,11 @@ public void setEntrypoints(Set && (cha.getScope() .getApplicationLoader() .equals(klass.getClassLoader().getReference()))) { - for (Iterator m_iter = klass.getDeclaredMethods().iterator(); - m_iter.hasNext(); ) { - method = (IMethod) m_iter.next(); - if (!method.isClinit()) { - method_qname = getCid(method).getQname(); - if (!method.isAbstract() && (_constructs_qname.contains(method_qname))) { - ep.add(new ArgumentTypeEntrypoint(method, cha)); + for (IMethod declaredMethod : klass.getDeclaredMethods()) { + if (!declaredMethod.isClinit()) { + method_qname = getCid(declaredMethod).getQname(); + if (!declaredMethod.isAbstract() && (_constructs_qname.contains(method_qname))) { + ep.add(new ArgumentTypeEntrypoint(declaredMethod, cha)); } } } @@ -374,17 +373,17 @@ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { if (cg_algorithm.equals("RTA")) { builder = Util.makeRTABuilder(options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-CFA")) { - builder = Util.makeZeroCFABuilder(options, cache, this.cha, this.scope); + builder = Util.makeZeroCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-ctn-CFA")) { builder = Util.makeZeroContainerCFABuilder(options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("vanilla-0-1-CFA")) { - builder = Util.makeVanillaZeroOneCFABuilder(options, cache, this.cha, this.scope); + builder = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-CFA")) { - builder = Util.makeZeroOneCFABuilder(options, cache, this.cha, this.scope); + builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-ctn-CFA")) { builder = Util.makeZeroOneContainerCFABuilder(options, cache, this.cha, this.scope); } else { - builder = Util.makeZeroOneCFABuilder(options, cache, this.cha, this.scope); + builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } // Build callgraph based on options and algorithm diff --git a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java index 121a18133..04961009d 100644 --- a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java +++ b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java @@ -128,4 +128,50 @@ public void examplesWalaTest() { e.printStackTrace(); } } + + @Test + public void examplesWalaTestJdk17() { + final ReachabilityAnalyzer ra = new ReachabilityAnalyzer(this.getGoalContext()); + ra.setCallgraphConstructor(WalaCallgraphConstructor.FRAMEWORK, false); + + // Set classpaths + final Set app_paths = new HashSet(), dep_paths = new HashSet(); + app_paths.add(Paths.get("./src/test/resources/examplesJdk17.jar")); + dep_paths.add(Paths.get("./src/test/resources/empty.jar")); + ra.setAppClasspaths(app_paths); + ra.setDependencyClasspaths(dep_paths); + + // Set the EP manually + final Set entrypoint = new HashSet(); + entrypoint.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Examples.main(String[])"))); + ra.setEntryPoints(entrypoint, PathSource.A2C, false); + ra.setAppConstructs(entrypoint); + + // Set the target constructs (manually, rather than using a bug) + final Map> target_constructs = new HashMap>(); + final Set changes = new HashSet(); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Cat.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Fish.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Dog.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Car.saySomething()"))); + target_constructs.put("does-not-exist", changes); + ra.setTargetConstructs(target_constructs); + + try { + ReachabilityAnalyzer.startAnalysis(ra, 600000); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } } diff --git a/lang-java-reach-wala/src/test/resources/examplesJdk17.jar b/lang-java-reach-wala/src/test/resources/examplesJdk17.jar new file mode 100644 index 0000000000000000000000000000000000000000..510dd8815920c91b6a6f00d6c9902369d714ff65 GIT binary patch literal 4719 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 ILy7zJe~e1q*8l(j literal 0 HcmV?d00001 diff --git a/lang-java-reach/pom.xml b/lang-java-reach/pom.xml index 8b393bc9c..a382d0227 100755 --- a/lang-java-reach/pom.xml +++ b/lang-java-reach/pom.xml @@ -37,7 +37,7 @@ false - + org.eclipse.steady @@ -51,17 +51,17 @@ com.ibm.wala com.ibm.wala.core - 1.4.3 + 1.6.2 com.ibm.wala com.ibm.wala.util - 1.4.3 + 1.6.2 com.ibm.wala com.ibm.wala.shrike - 1.4.3 + 1.6.2 @@ -80,7 +80,7 @@ org.apache.maven.plugins maven-resources-plugin - + org.apache.maven.plugins diff --git a/plugin-maven/pom.xml b/plugin-maven/pom.xml index 756ca6c8e..07ebd5a32 100644 --- a/plugin-maven/pom.xml +++ b/plugin-maven/pom.xml @@ -165,7 +165,7 @@ org.apache.maven.plugins maven-plugin-plugin - 3.5.2 + 3.9.0 steady true From 541e50a9ed604e31d80af06f65f79d1194787056 Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Mon, 7 Aug 2023 19:58:15 -0400 Subject: [PATCH 2/5] Bump to version 3.2.7-SNAPSHOT --- cli-scanner/pom.xml | 2 +- frontend-apps/pom.xml | 2 +- frontend-bugs/pom.xml | 2 +- kb-importer/pom.xml | 2 +- lang-java-reach-soot/pom.xml | 2 +- lang-java-reach-wala/pom.xml | 2 +- lang-java-reach/pom.xml | 2 +- lang-java/pom.xml | 2 +- lang-python/pom.xml | 2 +- lang/pom.xml | 2 +- patch-analyzer/pom.xml | 2 +- patch-lib-analyzer/pom.xml | 2 +- plugin-gradle/pom.xml | 2 +- plugin-maven/pom.xml | 2 +- pom.xml | 2 +- repo-client/pom.xml | 2 +- rest-backend/pom.xml | 2 +- rest-lib-utils/pom.xml | 2 +- shared/pom.xml | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/cli-scanner/pom.xml b/cli-scanner/pom.xml index a0586b357..e3b452895 100644 --- a/cli-scanner/pom.xml +++ b/cli-scanner/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT cli-scanner jar diff --git a/frontend-apps/pom.xml b/frontend-apps/pom.xml index e0f3562aa..409a9b61a 100755 --- a/frontend-apps/pom.xml +++ b/frontend-apps/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT frontend-apps war diff --git a/frontend-bugs/pom.xml b/frontend-bugs/pom.xml index 708f2be52..e185de883 100644 --- a/frontend-bugs/pom.xml +++ b/frontend-bugs/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT frontend-bugs war diff --git a/kb-importer/pom.xml b/kb-importer/pom.xml index 7679f34ac..a2091ad7c 100755 --- a/kb-importer/pom.xml +++ b/kb-importer/pom.xml @@ -26,7 +26,7 @@ root org.eclipse.steady - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT kb-importer diff --git a/lang-java-reach-soot/pom.xml b/lang-java-reach-soot/pom.xml index d14b9b15c..033f97009 100644 --- a/lang-java-reach-soot/pom.xml +++ b/lang-java-reach-soot/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang-java-reach-soot diff --git a/lang-java-reach-wala/pom.xml b/lang-java-reach-wala/pom.xml index 10c023257..6c82a2b20 100644 --- a/lang-java-reach-wala/pom.xml +++ b/lang-java-reach-wala/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang-java-reach-wala diff --git a/lang-java-reach/pom.xml b/lang-java-reach/pom.xml index a382d0227..5e58aac0c 100755 --- a/lang-java-reach/pom.xml +++ b/lang-java-reach/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang-java-reach diff --git a/lang-java/pom.xml b/lang-java/pom.xml index 944c52cf2..9e65371ec 100644 --- a/lang-java/pom.xml +++ b/lang-java/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang-java diff --git a/lang-python/pom.xml b/lang-python/pom.xml index f7a19c0b9..7a78fd0c6 100644 --- a/lang-python/pom.xml +++ b/lang-python/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang-python diff --git a/lang/pom.xml b/lang/pom.xml index cbae51289..3b684b8d0 100644 --- a/lang/pom.xml +++ b/lang/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT lang diff --git a/patch-analyzer/pom.xml b/patch-analyzer/pom.xml index 909f2e1be..46d846e4b 100644 --- a/patch-analyzer/pom.xml +++ b/patch-analyzer/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT patch-analyzer diff --git a/patch-lib-analyzer/pom.xml b/patch-lib-analyzer/pom.xml index 36730419c..7b3dd1172 100755 --- a/patch-lib-analyzer/pom.xml +++ b/patch-lib-analyzer/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT patch-lib-analyzer diff --git a/plugin-gradle/pom.xml b/plugin-gradle/pom.xml index e16ad561c..acd775566 100644 --- a/plugin-gradle/pom.xml +++ b/plugin-gradle/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT plugin-gradle pom diff --git a/plugin-maven/pom.xml b/plugin-maven/pom.xml index 07ebd5a32..d112228fb 100644 --- a/plugin-maven/pom.xml +++ b/plugin-maven/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT plugin-maven diff --git a/pom.xml b/pom.xml index ca94eb7ef..2b79aab91 100755 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT pom Eclipse Steady diff --git a/repo-client/pom.xml b/repo-client/pom.xml index 7d17d2094..421c7e705 100644 --- a/repo-client/pom.xml +++ b/repo-client/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT repo-client jar diff --git a/rest-backend/pom.xml b/rest-backend/pom.xml index 8485e01eb..618b3c829 100644 --- a/rest-backend/pom.xml +++ b/rest-backend/pom.xml @@ -32,7 +32,7 @@ org.eclipse.steady rest-backend - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT ${packaging.type} REST service to manage scan results and bugs diff --git a/rest-lib-utils/pom.xml b/rest-lib-utils/pom.xml index e91844cfd..14239330b 100644 --- a/rest-lib-utils/pom.xml +++ b/rest-lib-utils/pom.xml @@ -32,7 +32,7 @@ org.eclipse.steady rest-lib-utils - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT ${packaging.type} REST service to analyze and compare libraries diff --git a/shared/pom.xml b/shared/pom.xml index 285d4ca20..fe19ce1f8 100755 --- a/shared/pom.xml +++ b/shared/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.6-SNAPSHOT + 3.2.7-SNAPSHOT shared From 2bfc46967d76ccc34b60640fc0742256650756f8 Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Tue, 8 Aug 2023 11:04:09 -0400 Subject: [PATCH 3/5] Reformatted the code to comply with Google Java Style Guide --- .../cg/wala/WalaCallgraphConstructor.java | 49 ++++++------ .../steady/cg/wala/WalaCallGraphTest.java | 74 ++++++++----------- 2 files changed, 52 insertions(+), 71 deletions(-) diff --git a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java index c785a02a2..e782a4b51 100644 --- a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java +++ b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java @@ -1,20 +1,18 @@ /** * This file is part of Eclipse Steady. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + *

Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and * limitations under the License. * - * SPDX-License-Identifier: Apache-2.0 - * SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or an SAP affiliate company and Eclipse Steady contributors + *

SPDX-License-Identifier: Apache-2.0 SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or + * an SAP affiliate company and Eclipse Steady contributors */ package org.eclipse.steady.cg.wala; @@ -58,9 +56,7 @@ import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; -/** - * Callgraph constructor using wala framework; implementing the interface ICallgraphConstructor - */ +/** Callgraph constructor using wala framework; implementing the interface ICallgraphConstructor */ public class WalaCallgraphConstructor implements ICallgraphConstructor { private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(); @@ -70,15 +66,13 @@ public class WalaCallgraphConstructor implements ICallgraphConstructor { // Packages to be excluded for call graph construction, which is read from wala-cfg.properties private File excludedPackagesFile = null; - /** - * The context information of the application JAR to be analyzed - */ + /** The context information of the application JAR to be analyzed */ private Application appContext = null; private VulasConfiguration vulasConfiguration = null; /** - *

getFramework.

+ * getFramework. * * @return a {@link java.lang.String} object. */ @@ -87,7 +81,7 @@ public String getFramework() { } /** - *

Getter for the field appContext.

+ * Getter for the field appContext. * * @return a {@link org.eclipse.steady.shared.json.model.Application} object. */ @@ -100,9 +94,7 @@ public void setVulasConfiguration(VulasConfiguration _cfg) { this.vulasConfiguration = _cfg; } - /** - * The JAR to be analyzed. - */ + /** The JAR to be analyzed. */ // private String appJar = null; private String classpath = null; @@ -146,7 +138,7 @@ public void setDepClasspath(String _dependenciesClasspath) { /** * {@inheritDoc} * - * Filter and find all entrypoints in scope + *

Filter and find all entrypoints in scope */ public void setEntrypoints(Set _constructs) throws CallgraphConstructException { @@ -266,7 +258,8 @@ private static String getRefType(TypeReference _t) { } /** - * Given an IMethod, identify whether it's an object constructor<clinit>, class initializer<clinit> or a method, return the ConstructId + * Given an IMethod, identify whether it's an object constructor<clinit>, class + * initializer<clinit> or a method, return the ConstructId * * @param _method * @return @@ -313,7 +306,8 @@ private static org.eclipse.steady.shared.json.model.ConstructId getCid(IMethod _ } /** - * Returns the time required for building the call graph (in nanoseconds), or -1 if the construction did not finish. + * Returns the time required for building the call graph (in nanoseconds), or -1 if the + * construction did not finish. * * @return the time required for building the call graph (in nanoseconds) */ @@ -333,7 +327,7 @@ public Configuration getConstructorConfiguration() { /** * {@inheritDoc} * - * Parse command line arguments, and then build callgraph based on these properties + *

Parse command line arguments, and then build callgraph based on these properties */ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { WalaCallgraphConstructor.log.info( @@ -377,7 +371,8 @@ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { } else if (cg_algorithm.equals("0-ctn-CFA")) { builder = Util.makeZeroContainerCFABuilder(options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("vanilla-0-1-CFA")) { - builder = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); + builder = + Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-CFA")) { builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-ctn-CFA")) { @@ -502,7 +497,7 @@ public Graph getCallgraph() { } /** - *

Getter for the field entrypoints.

+ * Getter for the field entrypoints. * * @return a {@link java.util.Set} object. */ diff --git a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java index 04961009d..49aac05c3 100644 --- a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java +++ b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java @@ -1,41 +1,46 @@ /** * This file is part of Eclipse Steady. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + *

Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and * limitations under the License. * - * SPDX-License-Identifier: Apache-2.0 - * SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or an SAP affiliate company and Eclipse Steady contributors + *

SPDX-License-Identifier: Apache-2.0 SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or + * an SAP affiliate company and Eclipse Steady contributors */ package org.eclipse.steady.cg.wala; /** * This file is part of Eclipse Steady. * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + *

Unless required by applicable law or agreed to in writing, software distributed under the + * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either + * express or implied. See the License for the specific language governing permissions and * limitations under the License. * - * SPDX-License-Identifier: Apache-2.0 + *

SPDX-License-Identifier: Apache-2.0 * - * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + *

Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. */ +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import org.eclipse.steady.cg.ReachabilityAnalyzer; import org.eclipse.steady.cg.spi.CallgraphConstructorFactory; import org.eclipse.steady.cg.spi.ICallgraphConstructor; @@ -48,16 +53,6 @@ import org.eclipse.steady.shared.util.VulasConfiguration; import org.junit.Test; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - public class WalaCallGraphTest { static { @@ -144,26 +139,17 @@ public void examplesWalaTestJdk17() { // Set the EP manually final Set entrypoint = new HashSet(); entrypoint.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Examples.main(String[])"))); + JavaId.toSharedType(JavaId.parseMethodQName("org.example.Examples.main(String[])"))); ra.setEntryPoints(entrypoint, PathSource.A2C, false); ra.setAppConstructs(entrypoint); // Set the target constructs (manually, rather than using a bug) final Map> target_constructs = new HashMap>(); final Set changes = new HashSet(); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Cat.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Fish.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Dog.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Car.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Cat.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Fish.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Dog.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Car.saySomething()"))); target_constructs.put("does-not-exist", changes); ra.setTargetConstructs(target_constructs); From edd2e5e3778f1210ff58c27ce824890b35879cc7 Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Fri, 11 Aug 2023 14:20:17 -0400 Subject: [PATCH 4/5] Revert last two commits: (1) bumping the version, and (2) reformating some java classes --- cli-scanner/pom.xml | 2 +- frontend-apps/pom.xml | 2 +- frontend-bugs/pom.xml | 2 +- kb-importer/pom.xml | 2 +- lang-java-reach-soot/pom.xml | 2 +- lang-java-reach-wala/pom.xml | 2 +- .../cg/wala/WalaCallgraphConstructor.java | 49 ++++++------ .../steady/cg/wala/WalaCallGraphTest.java | 74 +++++++++++-------- lang-java-reach/pom.xml | 2 +- lang-java/pom.xml | 2 +- lang-python/pom.xml | 2 +- lang/pom.xml | 2 +- patch-analyzer/pom.xml | 2 +- patch-lib-analyzer/pom.xml | 2 +- plugin-gradle/pom.xml | 2 +- plugin-maven/pom.xml | 2 +- pom.xml | 2 +- repo-client/pom.xml | 2 +- rest-backend/pom.xml | 2 +- rest-lib-utils/pom.xml | 2 +- shared/pom.xml | 2 +- 21 files changed, 90 insertions(+), 71 deletions(-) diff --git a/cli-scanner/pom.xml b/cli-scanner/pom.xml index e3b452895..a0586b357 100644 --- a/cli-scanner/pom.xml +++ b/cli-scanner/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT cli-scanner jar diff --git a/frontend-apps/pom.xml b/frontend-apps/pom.xml index 409a9b61a..e0f3562aa 100755 --- a/frontend-apps/pom.xml +++ b/frontend-apps/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT frontend-apps war diff --git a/frontend-bugs/pom.xml b/frontend-bugs/pom.xml index e185de883..708f2be52 100644 --- a/frontend-bugs/pom.xml +++ b/frontend-bugs/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT frontend-bugs war diff --git a/kb-importer/pom.xml b/kb-importer/pom.xml index a2091ad7c..7679f34ac 100755 --- a/kb-importer/pom.xml +++ b/kb-importer/pom.xml @@ -26,7 +26,7 @@ root org.eclipse.steady - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT kb-importer diff --git a/lang-java-reach-soot/pom.xml b/lang-java-reach-soot/pom.xml index 033f97009..d14b9b15c 100644 --- a/lang-java-reach-soot/pom.xml +++ b/lang-java-reach-soot/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang-java-reach-soot diff --git a/lang-java-reach-wala/pom.xml b/lang-java-reach-wala/pom.xml index 6c82a2b20..10c023257 100644 --- a/lang-java-reach-wala/pom.xml +++ b/lang-java-reach-wala/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang-java-reach-wala diff --git a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java index e782a4b51..c785a02a2 100644 --- a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java +++ b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java @@ -1,18 +1,20 @@ /** * This file is part of Eclipse Steady. * - *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - *

http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - *

Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and * limitations under the License. * - *

SPDX-License-Identifier: Apache-2.0 SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or - * an SAP affiliate company and Eclipse Steady contributors + * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or an SAP affiliate company and Eclipse Steady contributors */ package org.eclipse.steady.cg.wala; @@ -56,7 +58,9 @@ import com.ibm.wala.util.graph.Graph; import com.ibm.wala.util.graph.impl.SlowSparseNumberedGraph; -/** Callgraph constructor using wala framework; implementing the interface ICallgraphConstructor */ +/** + * Callgraph constructor using wala framework; implementing the interface ICallgraphConstructor + */ public class WalaCallgraphConstructor implements ICallgraphConstructor { private static final Logger log = org.apache.logging.log4j.LogManager.getLogger(); @@ -66,13 +70,15 @@ public class WalaCallgraphConstructor implements ICallgraphConstructor { // Packages to be excluded for call graph construction, which is read from wala-cfg.properties private File excludedPackagesFile = null; - /** The context information of the application JAR to be analyzed */ + /** + * The context information of the application JAR to be analyzed + */ private Application appContext = null; private VulasConfiguration vulasConfiguration = null; /** - * getFramework. + *

getFramework.

* * @return a {@link java.lang.String} object. */ @@ -81,7 +87,7 @@ public String getFramework() { } /** - * Getter for the field appContext. + *

Getter for the field appContext.

* * @return a {@link org.eclipse.steady.shared.json.model.Application} object. */ @@ -94,7 +100,9 @@ public void setVulasConfiguration(VulasConfiguration _cfg) { this.vulasConfiguration = _cfg; } - /** The JAR to be analyzed. */ + /** + * The JAR to be analyzed. + */ // private String appJar = null; private String classpath = null; @@ -138,7 +146,7 @@ public void setDepClasspath(String _dependenciesClasspath) { /** * {@inheritDoc} * - *

Filter and find all entrypoints in scope + * Filter and find all entrypoints in scope */ public void setEntrypoints(Set _constructs) throws CallgraphConstructException { @@ -258,8 +266,7 @@ private static String getRefType(TypeReference _t) { } /** - * Given an IMethod, identify whether it's an object constructor<clinit>, class - * initializer<clinit> or a method, return the ConstructId + * Given an IMethod, identify whether it's an object constructor<clinit>, class initializer<clinit> or a method, return the ConstructId * * @param _method * @return @@ -306,8 +313,7 @@ private static org.eclipse.steady.shared.json.model.ConstructId getCid(IMethod _ } /** - * Returns the time required for building the call graph (in nanoseconds), or -1 if the - * construction did not finish. + * Returns the time required for building the call graph (in nanoseconds), or -1 if the construction did not finish. * * @return the time required for building the call graph (in nanoseconds) */ @@ -327,7 +333,7 @@ public Configuration getConstructorConfiguration() { /** * {@inheritDoc} * - *

Parse command line arguments, and then build callgraph based on these properties + * Parse command line arguments, and then build callgraph based on these properties */ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { WalaCallgraphConstructor.log.info( @@ -371,8 +377,7 @@ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { } else if (cg_algorithm.equals("0-ctn-CFA")) { builder = Util.makeZeroContainerCFABuilder(options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("vanilla-0-1-CFA")) { - builder = - Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); + builder = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-CFA")) { builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-ctn-CFA")) { @@ -497,7 +502,7 @@ public Graph getCallgraph() { } /** - * Getter for the field entrypoints. + *

Getter for the field entrypoints.

* * @return a {@link java.util.Set} object. */ diff --git a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java index 49aac05c3..04961009d 100644 --- a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java +++ b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java @@ -1,46 +1,41 @@ /** * This file is part of Eclipse Steady. * - *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - *

http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - *

Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and * limitations under the License. * - *

SPDX-License-Identifier: Apache-2.0 SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or - * an SAP affiliate company and Eclipse Steady contributors + * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or an SAP affiliate company and Eclipse Steady contributors */ package org.eclipse.steady.cg.wala; /** * This file is part of Eclipse Steady. * - *

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - *

http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * - *

Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and * limitations under the License. * - *

SPDX-License-Identifier: Apache-2.0 + * SPDX-License-Identifier: Apache-2.0 * - *

Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. + * Copyright (c) 2018 SAP SE or an SAP affiliate company. All rights reserved. */ -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; import org.eclipse.steady.cg.ReachabilityAnalyzer; import org.eclipse.steady.cg.spi.CallgraphConstructorFactory; import org.eclipse.steady.cg.spi.ICallgraphConstructor; @@ -53,6 +48,16 @@ import org.eclipse.steady.shared.util.VulasConfiguration; import org.junit.Test; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + public class WalaCallGraphTest { static { @@ -139,17 +144,26 @@ public void examplesWalaTestJdk17() { // Set the EP manually final Set entrypoint = new HashSet(); entrypoint.add( - JavaId.toSharedType(JavaId.parseMethodQName("org.example.Examples.main(String[])"))); + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Examples.main(String[])"))); ra.setEntryPoints(entrypoint, PathSource.A2C, false); ra.setAppConstructs(entrypoint); // Set the target constructs (manually, rather than using a bug) final Map> target_constructs = new HashMap>(); final Set changes = new HashSet(); - changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Cat.saySomething()"))); - changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Fish.saySomething()"))); - changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Dog.saySomething()"))); - changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Car.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Cat.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Fish.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Dog.saySomething()"))); + changes.add( + JavaId.toSharedType( + JavaId.parseMethodQName("org.example.Car.saySomething()"))); target_constructs.put("does-not-exist", changes); ra.setTargetConstructs(target_constructs); diff --git a/lang-java-reach/pom.xml b/lang-java-reach/pom.xml index 5e58aac0c..a382d0227 100755 --- a/lang-java-reach/pom.xml +++ b/lang-java-reach/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang-java-reach diff --git a/lang-java/pom.xml b/lang-java/pom.xml index 9e65371ec..944c52cf2 100644 --- a/lang-java/pom.xml +++ b/lang-java/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang-java diff --git a/lang-python/pom.xml b/lang-python/pom.xml index 7a78fd0c6..f7a19c0b9 100644 --- a/lang-python/pom.xml +++ b/lang-python/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang-python diff --git a/lang/pom.xml b/lang/pom.xml index 3b684b8d0..cbae51289 100644 --- a/lang/pom.xml +++ b/lang/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT lang diff --git a/patch-analyzer/pom.xml b/patch-analyzer/pom.xml index 46d846e4b..909f2e1be 100644 --- a/patch-analyzer/pom.xml +++ b/patch-analyzer/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT patch-analyzer diff --git a/patch-lib-analyzer/pom.xml b/patch-lib-analyzer/pom.xml index 7b3dd1172..36730419c 100755 --- a/patch-lib-analyzer/pom.xml +++ b/patch-lib-analyzer/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT patch-lib-analyzer diff --git a/plugin-gradle/pom.xml b/plugin-gradle/pom.xml index acd775566..e16ad561c 100644 --- a/plugin-gradle/pom.xml +++ b/plugin-gradle/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT plugin-gradle pom diff --git a/plugin-maven/pom.xml b/plugin-maven/pom.xml index d112228fb..07ebd5a32 100644 --- a/plugin-maven/pom.xml +++ b/plugin-maven/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT plugin-maven diff --git a/pom.xml b/pom.xml index 2b79aab91..ca94eb7ef 100755 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT pom Eclipse Steady diff --git a/repo-client/pom.xml b/repo-client/pom.xml index 421c7e705..7d17d2094 100644 --- a/repo-client/pom.xml +++ b/repo-client/pom.xml @@ -26,7 +26,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT repo-client jar diff --git a/rest-backend/pom.xml b/rest-backend/pom.xml index 618b3c829..8485e01eb 100644 --- a/rest-backend/pom.xml +++ b/rest-backend/pom.xml @@ -32,7 +32,7 @@ org.eclipse.steady rest-backend - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT ${packaging.type} REST service to manage scan results and bugs diff --git a/rest-lib-utils/pom.xml b/rest-lib-utils/pom.xml index 14239330b..e91844cfd 100644 --- a/rest-lib-utils/pom.xml +++ b/rest-lib-utils/pom.xml @@ -32,7 +32,7 @@ org.eclipse.steady rest-lib-utils - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT ${packaging.type} REST service to analyze and compare libraries diff --git a/shared/pom.xml b/shared/pom.xml index fe19ce1f8..285d4ca20 100755 --- a/shared/pom.xml +++ b/shared/pom.xml @@ -27,7 +27,7 @@ org.eclipse.steady root - 3.2.7-SNAPSHOT + 3.2.6-SNAPSHOT shared From 52dc457f23e433b8721cecd0eae48439a2d6e10e Mon Sep 17 00:00:00 2001 From: Rahim Mayaba Date: Sat, 12 Aug 2023 10:47:40 -0400 Subject: [PATCH 5/5] (1) Introduced some Java 17 syntax, (2) included the jar and the Java 17 example class, (3) reformat the code I added to comply with Google Java Style Guide --- .../cg/wala/WalaCallgraphConstructor.java | 7 +- .../steady/cg/wala/WalaCallGraphTest.java | 19 ++--- .../src/test/resources/ExamplesJdk17.java | 80 ++++++++++++++++++ .../src/test/resources/examplesJdk17.jar | Bin 4719 -> 4877 bytes 4 files changed, 89 insertions(+), 17 deletions(-) create mode 100644 lang-java-reach-wala/src/test/resources/ExamplesJdk17.java diff --git a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java index c785a02a2..d0f68d2e3 100644 --- a/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java +++ b/lang-java-reach-wala/src/main/java/org/eclipse/steady/cg/wala/WalaCallgraphConstructor.java @@ -146,7 +146,7 @@ public void setDepClasspath(String _dependenciesClasspath) { /** * {@inheritDoc} * - * Filter and find all entrypoints in scope + *

Filter and find all entrypoints in scope */ public void setEntrypoints(Set _constructs) throws CallgraphConstructException { @@ -333,7 +333,7 @@ public Configuration getConstructorConfiguration() { /** * {@inheritDoc} * - * Parse command line arguments, and then build callgraph based on these properties + *

Parse command line arguments, and then build callgraph based on these properties */ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { WalaCallgraphConstructor.log.info( @@ -377,7 +377,8 @@ public void buildCallgraph(boolean _policy) throws CallgraphConstructException { } else if (cg_algorithm.equals("0-ctn-CFA")) { builder = Util.makeZeroContainerCFABuilder(options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("vanilla-0-1-CFA")) { - builder = Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); + builder = + Util.makeVanillaZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-CFA")) { builder = Util.makeZeroOneCFABuilder(Language.JAVA, options, cache, this.cha, this.scope); } else if (cg_algorithm.equals("0-1-ctn-CFA")) { diff --git a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java index 04961009d..1c12ef48e 100644 --- a/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java +++ b/lang-java-reach-wala/src/test/java/org/eclipse/steady/cg/wala/WalaCallGraphTest.java @@ -144,26 +144,17 @@ public void examplesWalaTestJdk17() { // Set the EP manually final Set entrypoint = new HashSet(); entrypoint.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Examples.main(String[])"))); + JavaId.toSharedType(JavaId.parseMethodQName("org.example.ExamplesJdk17.main(String[])"))); ra.setEntryPoints(entrypoint, PathSource.A2C, false); ra.setAppConstructs(entrypoint); // Set the target constructs (manually, rather than using a bug) final Map> target_constructs = new HashMap>(); final Set changes = new HashSet(); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Cat.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Fish.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Dog.saySomething()"))); - changes.add( - JavaId.toSharedType( - JavaId.parseMethodQName("org.example.Car.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Cat.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Fish.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Dog.saySomething()"))); + changes.add(JavaId.toSharedType(JavaId.parseMethodQName("org.example.Car.saySomething()"))); target_constructs.put("does-not-exist", changes); ra.setTargetConstructs(target_constructs); diff --git a/lang-java-reach-wala/src/test/resources/ExamplesJdk17.java b/lang-java-reach-wala/src/test/resources/ExamplesJdk17.java new file mode 100644 index 000000000..bc535652e --- /dev/null +++ b/lang-java-reach-wala/src/test/resources/ExamplesJdk17.java @@ -0,0 +1,80 @@ +/** + * This file is part of Eclipse Steady. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * SPDX-FileCopyrightText: Copyright (c) 2018-2020 SAP SE or an SAP affiliate company and Eclipse Steady contributors + */ +package org.example; + +import java.util.SortedSet; +import java.util.TreeSet; + +sealed abstract class Animal implements Comparable permits Cat, Dog, Fish { + + public abstract void saySomething(); + + public int compareTo(Animal _a) { + return getClass().getName().compareTo(_a.getClass().getName()); + } +} + +final class Cat extends Animal { + public void saySomething() { + System.out.println("purr"); + } +} + +final class Dog extends Animal { + public void saySomething() { + System.out.println("woof"); + } +} + +final class Fish extends Animal { + public void saySomething() { + System.out.println("..."); + } +} + +class Car { + public void saySomething() { + System.out.println("honk!"); + } +} + +public class ExamplesJdk17 { + static SortedSet animals = new TreeSet<>(); + + private static Animal createFish() { + return new Fish(); + } + + private static Animal createCat() { + Animal cat = new Cat(); + animals.add(cat); + return cat; + } + + public static void main(String[] args) { + Animal animal; + if (args.length == 0) { + animal = createCat(); + animal.saySomething(); + } else { + animal = createFish(); + animal.saySomething(); + } + } +} diff --git a/lang-java-reach-wala/src/test/resources/examplesJdk17.jar b/lang-java-reach-wala/src/test/resources/examplesJdk17.jar index 510dd8815920c91b6a6f00d6c9902369d714ff65..7ed42895c76422a1114fea72b7f2ff76680ab212 100644 GIT binary patch delta 3231 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 delta 3107 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