forked from typetools/checker-framework-inference
-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathJsonSerializerSolver.java
More file actions
61 lines (49 loc) · 2.22 KB
/
Copy pathJsonSerializerSolver.java
File metadata and controls
61 lines (49 loc) · 2.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package checkers.inference.model.serialization;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.checkerframework.framework.type.QualifierHierarchy;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.Map;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.AnnotationMirror;
import checkers.inference.InferenceResult;
import checkers.inference.InferenceSolver;
import checkers.inference.model.Constraint;
import checkers.inference.model.Slot;
/** InferenceSolver that serializes constraints to a file in JSON format. */
public class JsonSerializerSolver implements InferenceSolver {
private static final String FILE_KEY = "constraint-file";
private static final String DEFAULT_FILE = "./constraints.json";
private Map<String, String> configuration;
@Override
public InferenceResult solve(
Map<String, String> configuration,
Collection<Slot> slots,
Collection<Constraint> constraints,
QualifierHierarchy qualHierarchy,
ProcessingEnvironment processingEnvironment) {
this.configuration = configuration;
AnnotationMirror top = qualHierarchy.getTopAnnotations().iterator().next();
AnnotationMirror bottom = qualHierarchy.getBottomAnnotations().iterator().next();
SimpleAnnotationMirrorSerializer annotationSerializer =
new SimpleAnnotationMirrorSerializer(top, bottom);
JsonSerializer serializer =
new JsonSerializer(slots, constraints, null, annotationSerializer);
printJson(serializer);
return null;
}
protected void printJson(JsonSerializer serializer) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(serializer.generateConstraintFile());
String outFile =
configuration.containsKey(FILE_KEY) ? configuration.get(FILE_KEY) : DEFAULT_FILE;
try (PrintWriter writer = new PrintWriter(new FileOutputStream(outFile))) {
writer.print(json);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}