Skip to content

Commit 9024b64

Browse files
committed
Add Methods to Context History
1 parent ef48c5f commit 9024b64

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

liquidjava-verifier/src/main/java/liquidjava/processor/context/ContextHistory.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,15 @@ public class ContextHistory {
1717
private Set<GhostState> ghosts;
1818
private Set<AliasWrapper> aliases;
1919
private Set<RefinedVariable> globalVars;
20+
private Set<RefinedFunction> methods;
2021

2122
private ContextHistory() {
2223
fileScopes = new HashMap<>();
2324
localVars = new HashSet<>();
2425
globalVars = new HashSet<>();
2526
ghosts = new HashSet<>();
2627
aliases = new HashSet<>();
28+
methods = new HashSet<>();
2729
}
2830

2931
public static ContextHistory getInstance() {
@@ -38,6 +40,7 @@ public void clearHistory() {
3840
globalVars.clear();
3941
ghosts.clear();
4042
aliases.clear();
43+
methods.clear();
4144
}
4245

4346
public void saveContext(CtElement element, Context context) {
@@ -56,6 +59,7 @@ public void saveContext(CtElement element, Context context) {
5659
globalVars.addAll(context.getCtxGlobalVars());
5760
ghosts.addAll(context.getGhostStates());
5861
aliases.addAll(context.getAliases());
62+
methods.addAll(context.getCtxFunctions());
5963
}
6064

6165
private String getScopePosition(CtElement element) {
@@ -81,6 +85,10 @@ public Set<AliasWrapper> getAliases() {
8185
return aliases;
8286
}
8387

88+
public Set<RefinedFunction> getMethods() {
89+
return methods;
90+
}
91+
8492
public Map<String, Set<String>> getFileScopes() {
8593
return fileScopes;
8694
}

liquidjava-verifier/src/main/java/liquidjava/processor/context/RefinedFunction.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class RefinedFunction extends Refined {
1212
private String targetClass;
1313
private List<ObjectState> stateChange;
1414
private String signature;
15+
private PlacementInCode placementInCode;
1516

1617
public RefinedFunction() {
1718
argRefinements = new ArrayList<>();
@@ -50,6 +51,18 @@ public String getSignature() {
5051
return signature;
5152
}
5253

54+
public void setPlacementInCode(CtElement element) {
55+
placementInCode = PlacementInCode.createPlacement(element);
56+
}
57+
58+
public void setPlacementInScope(PlacementInCode placement) {
59+
placementInCode = placement;
60+
}
61+
62+
public PlacementInCode getPlacementInCode() {
63+
return placementInCode;
64+
}
65+
5366
public Predicate getRenamedRefinements(Context c, CtElement element) {
5467
return getRenamedRefinements(getAllRefinements(), c, element);
5568
}

liquidjava-verifier/src/main/java/liquidjava/processor/refinement_checker/general_checkers/MethodsFunctionsChecker.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ public void getConstructorRefinements(CtConstructor<?> c) throws LJError {
4343
RefinedFunction f = new RefinedFunction();
4444
f.setName(c.getSimpleName());
4545
f.setType(c.getType());
46+
f.setPlacementInCode(c);
4647
handleFunctionRefinements(f, c, c.getParameters());
4748
f.setRefReturn(new Predicate());
4849
CtTypeReference<?> declaring = c.getDeclaringType() != null ? c.getDeclaringType().getReference() : null;
@@ -78,6 +79,7 @@ public <R> void getMethodRefinements(CtMethod<R> method) throws LJError {
7879
RefinedFunction f = new RefinedFunction();
7980
f.setName(method.getSimpleName().replaceAll("\\p{C}", "")); // remove any empty chars from string
8081
f.setType(method.getType());
82+
f.setPlacementInCode(method);
8183
f.setRefReturn(new Predicate());
8284

8385
CtClass<?> klass = null;
@@ -115,6 +117,7 @@ public <R> void getMethodRefinements(CtMethod<R> method, String prefix) throws L
115117
RefinedFunction f = new RefinedFunction();
116118
f.setName(functionName.replaceAll("\\p{C}", "")); // remove any empty chars from string
117119
f.setType(method.getType());
120+
f.setPlacementInCode(method);
118121
f.setRefReturn(new Predicate());
119122
f.setClass(prefix);
120123
f.setSignature(String.format("%s.%s", prefix, method.getSignature()));

0 commit comments

Comments
 (0)