Skip to content

Commit d92bc59

Browse files
committed
fix issue projectlombok#1440, projectlombok#1472: wrap BasedFileManager for jdk9
1 parent f5a2a79 commit d92bc59

File tree

2 files changed

+85
-1
lines changed

2 files changed

+85
-1
lines changed

src/core/lombok/javac/apt/LombokFileObjects.java

+81
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,18 @@
2222

2323
package lombok.javac.apt;
2424

25+
import java.io.IOException;
2526
import java.lang.reflect.Field;
2627
import java.lang.reflect.Method;
2728
import java.net.URI;
29+
import java.nio.charset.StandardCharsets;
2830
import java.nio.file.Path;
2931
import java.nio.file.Paths;
32+
import java.util.Iterator;
33+
import java.util.Set;
3034
import java.util.concurrent.atomic.AtomicBoolean;
3135

36+
import javax.tools.FileObject;
3237
import javax.tools.JavaFileManager;
3338
import javax.tools.JavaFileObject;
3439
import javax.tools.JavaFileObject.Kind;
@@ -120,6 +125,8 @@ static Compiler getCompiler(JavaFileManager jfm) {
120125
Class<?> superType = Class.forName("com.sun.tools.javac.file.BaseFileManager");
121126
if (superType.isInstance(wrappedManager)) {
122127
return new Java9Compiler(wrappedManager);
128+
} else {
129+
return new Java9Compiler(new BaseFileManagerWrapper(wrappedManager));
123130
}
124131
}
125132
catch (Exception e) {}
@@ -142,6 +149,80 @@ static Compiler getCompiler(JavaFileManager jfm) {
142149
}
143150
throw new IllegalArgumentException(sb.toString());
144151
}
152+
153+
static class BaseFileManagerWrapper extends BaseFileManager {
154+
JavaFileManager manager;
155+
156+
public BaseFileManagerWrapper(JavaFileManager manager) {
157+
super(StandardCharsets.UTF_8); // TODO:
158+
this.manager = manager;
159+
}
160+
161+
@Override
162+
public int isSupportedOption(String option) {
163+
return manager.isSupportedOption(option);
164+
}
165+
166+
@Override
167+
public ClassLoader getClassLoader(Location location) {
168+
return manager.getClassLoader(location);
169+
}
170+
171+
@Override
172+
public Iterable<JavaFileObject> list(Location location, String packageName, Set<Kind> kinds, boolean recurse) throws IOException {
173+
return manager.list(location, packageName, kinds, recurse);
174+
}
175+
176+
@Override
177+
public String inferBinaryName(Location location, JavaFileObject file) {
178+
return manager.inferBinaryName(location, file);
179+
}
180+
181+
@Override
182+
public boolean isSameFile(FileObject a, FileObject b) {
183+
return manager.isSameFile(a, b);
184+
}
185+
186+
@Override
187+
public boolean handleOption(String current, Iterator<String> remaining) {
188+
return manager.handleOption(current, remaining);
189+
}
190+
191+
@Override
192+
public boolean hasLocation(Location location) {
193+
return manager.hasLocation(location);
194+
}
195+
196+
@Override
197+
public JavaFileObject getJavaFileForInput(Location location, String className, Kind kind) throws IOException {
198+
return manager.getJavaFileForInput(location, className, kind);
199+
}
200+
201+
@Override
202+
public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
203+
return manager.getJavaFileForOutput(location, className, kind, sibling);
204+
}
205+
206+
@Override
207+
public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
208+
return manager.getFileForInput(location, packageName, relativeName);
209+
}
210+
211+
@Override
212+
public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling) throws IOException {
213+
return manager.getFileForOutput(location, packageName, relativeName, sibling);
214+
}
215+
216+
@Override
217+
public void flush() throws IOException {
218+
manager.flush();
219+
}
220+
221+
@Override
222+
public void close() throws IOException {
223+
manager.close();
224+
}
225+
}
145226

146227
static JavaFileObject createEmpty(Compiler compiler, String name, Kind kind) {
147228
return compiler.wrap(new EmptyLombokFileObject(name, kind));

src/stubs/com/sun/tools/javac/file/BaseFileManager.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,8 @@
44
package com.sun.tools.javac.file;
55

66
import javax.tools.JavaFileManager;
7+
import java.nio.charset.Charset;
78

8-
public abstract class BaseFileManager implements JavaFileManager{}
9+
public abstract class BaseFileManager implements JavaFileManager {
10+
protected BaseFileManager(Charset charset) {}
11+
}

0 commit comments

Comments
 (0)