mirror of
https://github.com/github/codeql.git
synced 2025-12-18 01:33:15 +01:00
Add test for a JavacTool-based compiler that doesn't use standard JavaFileObjects
This commit is contained in:
@@ -0,0 +1,93 @@
|
|||||||
|
import javax.lang.model.element.Modifier;
|
||||||
|
import javax.lang.model.element.NestingKind;
|
||||||
|
import javax.tools.JavaCompiler;
|
||||||
|
import javax.tools.JavaFileObject;
|
||||||
|
import javax.tools.ToolProvider;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class Compiler {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
|
||||||
|
JavaCompiler.CompilationTask jc = ToolProvider.getSystemJavaCompiler().getTask(
|
||||||
|
null, null, null, null, null,
|
||||||
|
List.of(
|
||||||
|
new JavaFileObject() {
|
||||||
|
@Override
|
||||||
|
public Kind getKind() {
|
||||||
|
return Kind.SOURCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isNameCompatible(String simpleName, Kind kind) {
|
||||||
|
return Objects.equals(simpleName, "Main");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NestingKind getNestingKind() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Modifier getAccessLevel() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URI toUri() {
|
||||||
|
return URI.create("https://nonesuch.imaginary/somedir/Main.java");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "Main.java";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream openInputStream() throws IOException {
|
||||||
|
return new ByteArrayInputStream(this.getCharContent(true).toString().getBytes());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OutputStream openOutputStream() throws IOException {
|
||||||
|
throw new IOException("No output allowed");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Reader openReader(boolean ignoreEncodingErrors) throws IOException {
|
||||||
|
return new StringReader(this.getCharContent(ignoreEncodingErrors).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
|
||||||
|
return "public class Main { }";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Writer openWriter() throws IOException {
|
||||||
|
throw new IOException("No output allowed");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getLastModified() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean delete() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "In-memory file with URI " + this.toUri();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
jc.call();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
| Main |
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import commands
|
||||||
|
|
||||||
|
def test(codeql, java):
|
||||||
|
commands.run("javac Compiler.java")
|
||||||
|
codeql.database.create(command = "java Compiler")
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import java
|
||||||
|
|
||||||
|
from Class c
|
||||||
|
where c.fromSource()
|
||||||
|
select c.getName()
|
||||||
Reference in New Issue
Block a user