Skip to content

Commit

Permalink
Improved the performance of the Wala framework and added caching mech…
Browse files Browse the repository at this point in the history
…anism!
  • Loading branch information
sarpsahinalp committed Dec 8, 2024
1 parent a3e384d commit e7a4efc
Show file tree
Hide file tree
Showing 5 changed files with 178 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.ibm.wala.classLoader.IClass;
import com.ibm.wala.classLoader.Language;
import com.ibm.wala.core.java11.Java9AnalysisScopeReader;
import com.ibm.wala.core.util.config.AnalysisScopeReader;
import com.ibm.wala.ipa.callgraph.*;
import com.ibm.wala.ipa.callgraph.impl.DefaultEntrypoint;
import com.ibm.wala.ipa.callgraph.impl.Util;
Expand Down Expand Up @@ -45,6 +46,10 @@ private CallGraphBuilderUtils() {

private static final AnalysisScope scope;

private static CallGraph callGraph = null;

private static String lastClassPathAnalyzed = null;

static {
try {
// Create a class file importer
Expand Down Expand Up @@ -154,4 +159,23 @@ public static CallGraph buildCallGraph(String classPathToAnalyze) {
throw new SecurityException(localize("security.architecture.build.call.graph.error")); //$NON-NLS-1$
}
}

/**
* Get the call graph
*/
public static CallGraph getCallGraph() {
return callGraph;
}

public static void setCallGraph(CallGraph callGraph) {
CallGraphBuilderUtils.callGraph = callGraph;
}

public static String getLastClassPathAnalyzed() {
return lastClassPathAnalyzed;
}

public static void setLastClassPathAnalyzed(String lastClassPathAnalyzed) {
CallGraphBuilderUtils.lastClassPathAnalyzed = lastClassPathAnalyzed;
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -230,10 +230,10 @@ private void createSecurityTestCases() {
Supplier<JavaClasses> classesSupplier = memoize(() -> new ClassFileImporter().importPath(classPath));

Supplier<CallGraph> callGraphSupplier = memoize(() -> {
if (javaArchitectureMode == JavaArchitectureMode.WALA) {
return CallGraphBuilderUtils.buildCallGraph(classPath);
if ((CallGraphBuilderUtils.getCallGraph() == null || !classPath.equals(CallGraphBuilderUtils.getLastClassPathAnalyzed())) && javaArchitectureMode == JavaArchitectureMode.WALA) {
CallGraphBuilderUtils.setCallGraph(CallGraphBuilderUtils.buildCallGraph(classPath));
}
return null;
return CallGraphBuilderUtils.getCallGraph();
});

// Access them without recomputation
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,151 @@
# The following are excluded from the classpath to make the analysis faster, as they are not relevant for the analysis
# java/util/The following are excluded from the classpath to make the analysis faster, as they are not relevant for the analysis.*
jdk/.*
java/time/.*
java/security/.*
sun/security/.*
javax/security/.*
javax/crypto/.*
sun/reflect/.*
java/text/.*
sun/util/.*
java/math/.*
java/lang/ProcessImpl.*
java/util/WeakHashMap.*
java/io/BufferedWriter.*
java/util/stream/.*
java/util/concurrent/locks/.*
java/util/AbstractCollection.*
java/util/AbstractList.*
java/util/AbstractMap.*
java/util/AbstractQueue.*
java/util/AbstractSequentialList.*
java/util/AbstractSet.*
java/util/ArrayDeque.*
java/util/ArrayList.*
java/util/ArrayPrefixHelpers.*
java/util/Arrays.*
java/util/ArraysParallelSortHelpers.*
java/util/Base64.*
java/util/BitSet.*
java/util/Calendar.*
java/util/Collection.*
java/util/Collections.*
java/util/CollSer.*
java/util/ComparableTimSort.*
java/util/Comparator.*
java/util/Comparators.*
java/util/ConcurrentModificationException.*
java/util/Currency.*
java/util/currency.data.*
java/util/Date.*
java/util/DecimalDigits.*
java/util/Deque.*
java/util/Dictionary.*
java/util/Digits.*
java/util/DoubleSummaryStatistics.*
java/util/DualPivotQuicksort.*
java/util/DuplicateFormatFlagsException.*
java/util/EmptyStackException.*
java/util/Enumeration.*
java/util/EnumMap.*
java/util/EnumSet.*
java/util/EventListener.*
java/util/EventListenerProxy.*
java/util/EventObject.*
java/util/FormatFlagsConversionMismatchException.*
java/util/FormatItem.*
java/util/FormatProcessor.*
java/util/Formattable.*
java/util/FormattableFlags.*
java/util/Formatter.*
java/util/FormatterBuilder.*
java/util/FormatterClosedException.*
java/util/GregorianCalendar.*
java/util/HashMap.*
java/util/HashSet.*
java/util/Hashtable.*
java/util/HexDigits.*
java/util/HexFormat.*
java/util/IdentityHashMap.*
java/util/IllegalFormatArgumentIndexException.*
java/util/IllegalFormatCodePointException.*
java/util/IllegalFormatConversionException.*
java/util/IllegalFormatException.*
java/util/IllegalFormatFlagsException.*
java/util/IllegalFormatPrecisionException.*
java/util/IllegalFormatWidthException.*
java/util/IllformedLocaleException.*
java/util/ImmutableCollections.*
java/util/InputMismatchException.*
java/util/IntSummaryStatistics.*
java/util/InvalidPropertiesFormatException.*
java/util/Iterator.*
java/util/JapaneseImperialCalendar.*
java/util/JumboEnumSet.*
java/util/KeyValueHolder.*
java/util/LinkedHashMap.*
java/util/LinkedHashSet.*
java/util/LinkedList.*
java/util/List.*
java/util/ListIterator.*
java/util/ListResourceBundle.*
java/util/Locale.*
java/util/LocaleISOData.*
java/util/LongSummaryStatistics.*
java/util/Map.*
java/util/MissingFormatArgumentException.*
java/util/MissingFormatWidthException.*
java/util/MissingResourceException.*
java/util/NavigableMap.*
java/util/NavigableSet.*
java/util/NoSuchElementException.*
java/util/Objects.*
java/util/Observable.*
java/util/Observer.*
java/util/OctalDigits.*
java/util/Optional.*
java/util/OptionalDouble.*
java/util/OptionalInt.*
java/util/OptionalLong.*
java/util/PrimitiveIterator.*
java/util/PriorityQueue.*
java/util/Properties.*
java/util/PropertyPermission.*
java/util/PropertyPermissionCollection.*
java/util/PropertyResourceBundle.*
java/util/Queue.*
java/util/Random.*
java/util/RandomAccess.*
java/util/RegularEnumSet.*
java/util/ResourceBundle.*
java/util/ReverseOrderDequeView.*
java/util/ReverseOrderListView.*
java/util/ReverseOrderSortedMapView.*
java/util/ReverseOrderSortedSetView.*
java/util/Scanner.*
java/util/SequencedCollection.*
java/util/SequencedMap.*
java/util/SequencedSet.*
java/util/ServiceConfigurationError.*
java/util/ServiceLoader.*
java/util/Set.*
java/util/SimpleTimeZone.*
java/util/SortedMap.*
java/util/SortedSet.*
java/util/Spliterator.*
java/util/Spliterators.*
java/util/SplittableRandom.*
java/util/Stack.*
java/util/StringJoiner.*
java/util/StringTokenizer.*
java/util/TaskQueue.*
java/util/Timer.*
java/util/TimerTask.*
java/util/TimerThread.*
java/util/TimeZone.*
java/util/TimSort.*
java/util/TooManyListenersException.*
java/util/TreeMap.*
java/util/TreeSet.*
java/util/Tripwire.*
java/util/UnknownFormatConversionException.*
java/util/UnknownFormatFlagsException.*
java/util/UUID.*
java/util/Vector.*
java/util/WeakHashMap.*
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package de.tum.cit.ase.ares.integration.testuser.subject.architectureTests.thread_manipulation;

import java.util.concurrent.ScheduledThreadPoolExecutor;

public class ThreadAccessPenguin {

void createThread() {
Thread thread = new Thread();
thread.start();
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
executor.execute(() -> System.out.println("Hello from the thread!"));
}
}

0 comments on commit e7a4efc

Please sign in to comment.