Skip to content

Commit a3f6577

Browse files
committed
Proper support for merging isExclusive
1 parent bd0587b commit a3f6577

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/provider/MergingSummaryProvider.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,9 @@ public ClassMethodSummaries getMethodFlows(String className, String methodSignat
5252
for (IMethodSummaryProvider provider : innerProviders) {
5353
ClassMethodSummaries providerSummaries = provider.getMethodFlows(className, methodSignature);
5454
if (providerSummaries != null) {
55-
if (summaries == null)
56-
summaries = new ClassMethodSummaries(className);
55+
if (summaries == null) {
56+
summaries = new ClassMethodSummaries(providerSummaries);
57+
}
5758
summaries.merge(providerSummaries);
5859
}
5960
}
@@ -80,8 +81,9 @@ public ClassMethodSummaries getClassFlows(String clazz) {
8081
for (IMethodSummaryProvider provider : innerProviders) {
8182
ClassMethodSummaries providerSummaries = provider.getClassFlows(clazz);
8283
if (providerSummaries != null) {
83-
if (summaries == null)
84-
summaries = new ClassMethodSummaries(clazz);
84+
if (summaries == null) {
85+
summaries = new ClassMethodSummaries(providerSummaries);
86+
}
8587
summaries.merge(providerSummaries);
8688
}
8789
}

soot-infoflow-summaries/src/soot/jimple/infoflow/methodSummary/data/summary/ClassMethodSummaries.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,19 @@ public class ClassMethodSummaries {
1919

2020
private boolean isExclusiveForClass = true;
2121

22+
/**
23+
* Creates a shallow copy from an existing class method summary instance.
24+
* @param from the source from which to copy
25+
*/
26+
public ClassMethodSummaries(ClassMethodSummaries from) {
27+
this.className = from.className;
28+
//shallow copy
29+
this.methodSummaries = from.methodSummaries;
30+
this.isInterface = from.isInterface;
31+
this.interfaces.addAll(from.interfaces);
32+
this.superClass = from.superClass;
33+
}
34+
2235
public ClassMethodSummaries(String className) {
2336
this.className = className;
2437
this.methodSummaries = new MethodSummaries();
@@ -126,6 +139,9 @@ public boolean merge(ClassMethodSummaries methodFlows) {
126139
if (isInterface == null && methodFlows.isInterface != null)
127140
this.isInterface = methodFlows.isInterface;
128141

142+
if (methodFlows.isExclusiveForClass())
143+
setExclusiveForClass(true);
144+
129145
return hasNewData;
130146
}
131147

0 commit comments

Comments
 (0)