blob: 66891e45a0e5cce7ed9ee1fd7df84876cb479ea1 [file] [log] [blame]
import java.util.HashMap;
import java.util.Map;
import org.checkerframework.checker.nullness.qual.*;
// See issue 241: https://github.com/typetools/checker-framework/issues/241
// Cover all 8 combinations of:
// -(Non)static class
// -(Non)static field
// -(Non)static method
// Also test:
// -(Non)static field initialization
public class JavaExprContext {
// Classes to perform tests on
// The methods return booleans instead of void simply so they can
// be tested as field initializers.
public static class staticGraphClass {
private Map<String, Integer> adjList = new HashMap<>();
public boolean addEdge(@KeyFor("adjList") String source) {
return true;
}
public static boolean addEdge2(@KeyFor("#2.adjList") String source, staticGraphClass theGraph) {
return true;
}
public boolean addEdge3(@KeyFor("this.adjList") String source) {
return true;
}
}
public class nonstaticGraphClass {
private Map<String, Integer> adjList = new HashMap<>();
public boolean addEdge(@KeyFor("adjList") String source) {
return true;
}
public boolean addEdge2(@KeyFor("this.adjList") String source) {
return true;
}
}
// Non-static field initialization
staticGraphClass graphField1 = new staticGraphClass();
nonstaticGraphClass graphField2 = new nonstaticGraphClass();
@SuppressWarnings("assignment")
@KeyFor("graphField1.adjList") String key1 = "";
@SuppressWarnings("assignment")
@KeyFor("graphField2.adjList") String key2 = "";
boolean b1 = staticGraphClass.addEdge2(key1, graphField1);
boolean b2 = graphField1.addEdge(key1);
boolean b3 = graphField1.addEdge2(key1, graphField1);
boolean b4 = graphField1.addEdge3(key1);
boolean b5 = graphField2.addEdge(key2);
boolean b6 = graphField2.addEdge2(key2);
// Classes that perform tests
public class nonstaticTestClass {
staticGraphClass graphField1 = new staticGraphClass();
nonstaticGraphClass graphField2 = new nonstaticGraphClass();
public void buildGraph1(@KeyFor("graphField1.adjList") String hero) {
staticGraphClass.addEdge2(hero, graphField1);
graphField1.addEdge(hero);
graphField1.addEdge2(
hero, graphField1); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
graphField1.addEdge3(hero);
}
public void buildGraph2(@KeyFor("graphField2.adjList") String hero) {
graphField2.addEdge(hero);
graphField2.addEdge2(hero);
}
public void buildGraph3(staticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
staticGraphClass.addEdge2(hero, myGraph);
myGraph.addEdge(hero);
myGraph.addEdge2(
hero, myGraph); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
myGraph.addEdge3(hero);
}
public void buildGraph4(nonstaticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
myGraph.addEdge(hero);
myGraph.addEdge2(hero);
}
}
public static class staticTestClass {
staticGraphClass graphField1 = new staticGraphClass();
static staticGraphClass graphField2 = new staticGraphClass();
public void buildGraph1(@KeyFor("graphField1.adjList") String hero) {
staticGraphClass.addEdge2(hero, graphField1);
graphField1.addEdge(hero);
graphField1.addEdge2(
hero, graphField1); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
graphField1.addEdge3(hero);
}
public void buildGraph3(@KeyFor("graphField2.adjList") String hero) {
staticGraphClass.addEdge2(hero, graphField2);
graphField2.addEdge(hero);
graphField2.addEdge2(
hero, graphField2); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
graphField2.addEdge3(hero);
}
public void buildGraph5(staticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
staticGraphClass.addEdge2(hero, myGraph);
myGraph.addEdge(hero);
myGraph.addEdge2(
hero, myGraph); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
myGraph.addEdge3(hero);
}
public void buildGraph6(nonstaticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
myGraph.addEdge(hero);
myGraph.addEdge2(hero);
}
public static void buildGraph7(@KeyFor("graphField2.adjList") String hero) {
staticGraphClass.addEdge2(hero, graphField2);
graphField2.addEdge(hero);
graphField2.addEdge2(
hero, graphField2); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
graphField2.addEdge3(hero);
}
public static void buildGraph9(staticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
staticGraphClass.addEdge2(hero, myGraph);
myGraph.addEdge(hero);
myGraph.addEdge2(
hero, myGraph); // Calling a static method from an instance object. Ensuring this
// doesn't confuse the JavaExpression parsing.
myGraph.addEdge3(hero);
}
public static void buildGraph10(
nonstaticGraphClass myGraph, @KeyFor("#1.adjList") String hero) {
myGraph.addEdge(hero);
myGraph.addEdge2(hero);
}
}
}