Skip to content

Commit b33aca9

Browse files
committed
WIP
1 parent ffad9b3 commit b33aca9

8 files changed

Lines changed: 90 additions & 33 deletions

File tree

‎dummy/src/foo/bar/Bar.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package foo.bar;
2+
3+
class Bar {
4+
static int test() {
5+
return Doh.test();
6+
}
7+
}

‎dummy/src/foo/bar/Doh.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package foo.bar;
2+
3+
class Doh {
4+
static int test() {
5+
return 1;
6+
}
7+
}

‎dummy/src/foo/bar/Foo.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package foo.bar;
2+
3+
class Foo {
4+
static void test() {
5+
var x = Bar.test();
6+
}
7+
}

‎modules/jdk.compiler.jar‎

3.04 MB
Binary file not shown.

‎pom.xml‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
<artifactId>javac-services</artifactId>
88
<packaging>jar</packaging>
99
<version>0.1-SNAPSHOT</version>
10+
1011
<distributionManagement>
1112
<repository>
1213
<id>distribution-repository</id>
1314
<name>Temporary Staging Repository</name>
1415
<url>file://${basedir}/dist</url>
1516
</repository>
1617
</distributionManagement>
18+
1719
<dependencies>
1820
<!-- JSON support -->
1921
<dependency>
@@ -58,6 +60,10 @@
5860
<configuration>
5961
<source>11</source>
6062
<target>11</target>
63+
<compilerArgs>
64+
<arg>--patch-module</arg>
65+
<arg>jdk.compiler=modules/jdk.compiler.jar</arg>
66+
</compilerArgs>
6167
<!-- Workaround of https://issues.apache.org/jira/browse/MCOMPILER-369 -->
6268
<annotationProcessorPaths>
6369
<path>

‎scripts/test.sh‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
JAVA_HOME=$(/usr/libexec/java_home -v 11)
2+
3+
mvn test-compile
4+
5+
java \
6+
-cp $(cat target/cp.txt):$(pwd)/target/classes:$(pwd)/target/test-classes \
7+
--patch-module jdk.compiler=modules/jdk.compiler.jar \
8+
org.junit.runner.JUnitCore org.javacs.SimpleTest
9+
10+
# --upgrade-module-path /Users/georgefraser/Documents/jdk11/build/macosx-x86_64-normal-server-release/jdk/modules \

‎src/main/java/org/javacs/SourceFileManager.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ private static void logError(Diagnostic<?> error) {
2222
LOG.warning(error.getMessage(null));
2323
}
2424

25+
// TODO if .class files get moved around, this could become wrong
26+
// class path includes generated .class files, so this can definitely happen
2527
private final LruCache<String, Iterable<JavaFileObject>> cacheClassPath = new LruCache<>(1000, this::listClassPath);
2628

2729
@Override

‎src/test/java/org/javacs/SimpleTest.java‎

Lines changed: 51 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package org.javacs;
22

3-
import com.sun.source.util.JavacTask;
4-
import com.sun.source.util.TaskEvent;
5-
import com.sun.source.util.TaskListener;
3+
import static org.hamcrest.Matchers.*;
4+
import static org.junit.Assert.*;
5+
6+
import com.sun.source.tree.*;
7+
import com.sun.source.util.*;
8+
import com.sun.tools.javac.TaskPoolProvider;
69
import java.io.IOException;
710
import java.nio.charset.Charset;
811
import java.nio.file.Path;
@@ -15,7 +18,8 @@
1518

1619
public class SimpleTest implements TaskListener, DiagnosticListener<JavaFileObject> {
1720
final JavaCompiler compiler = ServiceLoader.load(JavaCompiler.class).iterator().next();
18-
final Path src = Paths.get("src/main/java").toAbsolutePath();
21+
final Path src = Paths.get("dummy/src").toAbsolutePath();
22+
final Path foo = src.resolve("foo/bar/Foo.java");
1923
final List<String> options = List.of("-sourcepath", src.toString(), "-verbose", "-proc:none");
2024

2125
@Before
@@ -24,42 +28,56 @@ public void setLogFormat() {
2428
}
2529

2630
@Test
27-
public void standardFileManager() throws IOException {
31+
public void freshTask() throws IOException {
2832
var fileManager = compiler.getStandardFileManager(this, null, Charset.defaultCharset());
29-
30-
LOG.info("Compile once...");
31-
var files = fileManager.getJavaFileObjects(src.resolve("org/javacs/JavaLanguageServer.java"));
32-
var task = (JavacTask) compiler.getTask(null, fileManager, this, options, null, files);
33-
34-
task.addTaskListener(this);
35-
task.analyze();
36-
37-
LOG.info("Compile twice...");
38-
task = (JavacTask) compiler.getTask(null, fileManager, this, options, null, files);
39-
task.addTaskListener(this);
40-
task.analyze();
33+
for (var i = 0; i < 2; i++) {
34+
LOG.info(String.format("Compile %d...", i));
35+
var files = fileManager.getJavaFileObjects(foo);
36+
var task = (JavacTask) compiler.getTask(null, fileManager, this, options, null, files);
37+
checkInvokeType(task);
38+
}
4139
}
4240

4341
@Test
44-
public void sourceFileManager() throws IOException {
45-
FileStore.setWorkspaceRoots(Set.of(Paths.get(".").toAbsolutePath()));
46-
var fileManager = new SourceFileManager();
42+
public void taskPool() throws IOException {
43+
var fileManager = compiler.getStandardFileManager(this, null, Charset.defaultCharset());
44+
var pool = TaskPoolProvider.createTaskPool(1);
45+
for (var i = 0; i < 2; i++) {
46+
var files = fileManager.getJavaFileObjects(foo);
47+
LOG.info(String.format("Compile %d...", i));
48+
pool.getTask(
49+
null,
50+
fileManager,
51+
this,
52+
options,
53+
null,
54+
files,
55+
task -> {
56+
checkInvokeType(task);
57+
return "Done!";
58+
});
59+
}
60+
}
4761

48-
LOG.info("Compile once...");
49-
var files =
50-
fileManager.getJavaFileObjectsFromFiles(
51-
List.of(src.resolve("org/javacs/JavaLanguageServer.java").toFile()));
52-
var task = (JavacTask) compiler.getTask(null, fileManager, this, options, null, files);
62+
private void checkInvokeType(JavacTask task) {
5363
task.addTaskListener(this);
54-
task.analyze();
55-
LOG.info("...finished once");
56-
57-
for (var i = 0; i < 3; i++) {
58-
LOG.info(String.format("Compile again %d...", i));
59-
task = (JavacTask) compiler.getTask(null, fileManager, this, options, null, files);
60-
task.addTaskListener(this);
64+
try {
65+
var root = task.parse().iterator().next();
6166
task.analyze();
62-
LOG.info(String.format("...finished %d", i));
67+
LOG.info("Scan " + root);
68+
new TreePathScanner<Void, Void>() {
69+
@Override
70+
public Void visitMethodInvocation(MethodInvocationTree t, Void __) {
71+
if (t.getMethodSelect().toString().equals("Bar.test")) {
72+
var type = Trees.instance(task).getTypeMirror(getCurrentPath());
73+
LOG.info("Check " + t + ": " + type);
74+
assertThat(type.toString(), equalTo("int"));
75+
}
76+
return null;
77+
}
78+
}.scan(root, null);
79+
} catch (IOException e) {
80+
throw new RuntimeException(e);
6381
}
6482
}
6583

0 commit comments

Comments
 (0)