mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
243 lines
8.5 KiB
Java
243 lines
8.5 KiB
Java
|
|
public class Operations implements AutoCloseable {
|
|
interface NoBodies {
|
|
NoBodies append(String s);
|
|
}
|
|
|
|
interface NoBodiesSubtype extends NoBodies {
|
|
NoBodies append(String s);
|
|
}
|
|
|
|
public Operations open() { return this; }
|
|
public Operations create() { return this; }
|
|
public boolean isOpen() { return true; }
|
|
public void close() { return; }
|
|
public boolean add(String s) { return true; }
|
|
public boolean addAll(String...strings) { return true; }
|
|
public Operations chain() { return this; }
|
|
|
|
public void missingClose() {
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.close(); }
|
|
{ Operations ops = open(); if (ops.isOpen()) ops.open(); }
|
|
}
|
|
|
|
public void missingAdd() {
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.add("something"); }
|
|
{ Operations ops = create(); if (ops.isOpen()) ops.addAll("the", "things"); }
|
|
}
|
|
|
|
public void missingUse() {
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
System.out.println(this.toString());
|
|
this.toString();
|
|
}
|
|
|
|
public void designedForChaining() {
|
|
StringBuilder b = new StringBuilder();
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object use = b.append("a").append("b"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
{ Object unchainedUse = b.append("c"); }
|
|
b.append("d");
|
|
}
|
|
|
|
public void noBodies() {
|
|
NoBodiesSubtype t = null;
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object use = t.append("a").append("b"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
{ Object unchainedUse = t.append("c"); }
|
|
t.append("d");
|
|
}
|
|
|
|
public void notMissingAfterAll(Operations ops) {
|
|
ops = open(); ops.close();
|
|
}
|
|
|
|
private static class Builder {
|
|
|
|
private int val;
|
|
|
|
public Builder withVal(int val) {
|
|
this.val = val;
|
|
return this;
|
|
}
|
|
|
|
public String build() {
|
|
return Integer.toString(val);
|
|
}
|
|
}
|
|
|
|
public void missingBuild() {
|
|
Builder builder = new Builder();
|
|
String result;
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.build();
|
|
result = builder.withVal(1).build();
|
|
}
|
|
|
|
public void testConn(java.sql.Connection conn) throws java.sql.SQLException {
|
|
java.sql.PreparedStatement pstmt = null;
|
|
java.sql.ResultSet rs = null;
|
|
try {
|
|
pstmt = conn.prepareStatement("SELECT something FROM table");
|
|
rs = pstmt.executeQuery();
|
|
while(rs.next()) { // OK
|
|
}
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
pstmt.executeQuery().next();
|
|
} finally {
|
|
}
|
|
}
|
|
{
|
|
String test = "test";
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
test = searchReplace(test);
|
|
String test2 = "test2";
|
|
test2 = searchReplace(test2); // OK (do not report methods called on their own result)
|
|
}
|
|
private String searchReplace(String s) {
|
|
return s;
|
|
}
|
|
|
|
public void autoClose() {
|
|
try(Operations ops = open()) {
|
|
if (ops.isOpen()) ops.open();
|
|
}
|
|
}
|
|
|
|
}
|