aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/lombok/javac/apt/LombokFileObjects.java178
1 files changed, 91 insertions, 87 deletions
diff --git a/src/core/lombok/javac/apt/LombokFileObjects.java b/src/core/lombok/javac/apt/LombokFileObjects.java
index 71d1a95c..d0d67b17 100644
--- a/src/core/lombok/javac/apt/LombokFileObjects.java
+++ b/src/core/lombok/javac/apt/LombokFileObjects.java
@@ -120,13 +120,8 @@ final class LombokFileObjects {
try {
Field wrappedField = Class.forName("com.sun.tools.javac.api.ClientCodeWrapper$WrappedJavaFileManager").getDeclaredField("clientJavaFileManager");
wrappedField.setAccessible(true);
- JavaFileManager wrappedManager = (JavaFileManager)wrappedField.get(jfm);
- Class<?> superType = Class.forName("com.sun.tools.javac.file.BaseFileManager");
- if (superType.isInstance(wrappedManager)) {
- return new Java9Compiler(wrappedManager);
- } else {
- return new Java9Compiler(new BaseFileManagerWrapper(wrappedManager));
- }
+ JavaFileManager wrappedManager = (JavaFileManager) wrappedField.get(jfm);
+ return new Java9Compiler(wrappedManager);
}
catch (Exception e) {}
}
@@ -149,80 +144,6 @@ final class LombokFileObjects {
throw new IllegalArgumentException(sb.toString());
}
- static class BaseFileManagerWrapper extends BaseFileManager {
- JavaFileManager manager;
-
- public BaseFileManagerWrapper(JavaFileManager manager) {
- super(null);
- this.manager = manager;
- }
-
- @Override
- public int isSupportedOption(String option) {
- return manager.isSupportedOption(option);
- }
-
- @Override
- public ClassLoader getClassLoader(Location location) {
- return manager.getClassLoader(location);
- }
-
- @Override
- public Iterable<JavaFileObject> list(Location location, String packageName, Set<Kind> kinds, boolean recurse) throws IOException {
- return manager.list(location, packageName, kinds, recurse);
- }
-
- @Override
- public String inferBinaryName(Location location, JavaFileObject file) {
- return manager.inferBinaryName(location, file);
- }
-
- @Override
- public boolean isSameFile(FileObject a, FileObject b) {
- return manager.isSameFile(a, b);
- }
-
- @Override
- public boolean handleOption(String current, Iterator<String> remaining) {
- return manager.handleOption(current, remaining);
- }
-
- @Override
- public boolean hasLocation(Location location) {
- return manager.hasLocation(location);
- }
-
- @Override
- public JavaFileObject getJavaFileForInput(Location location, String className, Kind kind) throws IOException {
- return manager.getJavaFileForInput(location, className, kind);
- }
-
- @Override
- public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
- return manager.getJavaFileForOutput(location, className, kind, sibling);
- }
-
- @Override
- public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
- return manager.getFileForInput(location, packageName, relativeName);
- }
-
- @Override
- public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling) throws IOException {
- return manager.getFileForOutput(location, packageName, relativeName, sibling);
- }
-
- @Override
- public void flush() throws IOException {
- manager.flush();
- }
-
- @Override
- public void close() throws IOException {
- manager.close();
- }
- }
-
static JavaFileObject createEmpty(Compiler compiler, String name, Kind kind) {
return compiler.wrap(new EmptyLombokFileObject(name, kind));
}
@@ -235,25 +156,108 @@ final class LombokFileObjects {
private final BaseFileManager fileManager;
public Java9Compiler(JavaFileManager jfm) {
- fileManager = (BaseFileManager) jfm;
+ fileManager = asBaseFileManager(jfm);
}
@Override public JavaFileObject wrap(LombokFileObject fileObject) {
+ return new Javac9BaseFileObjectWrapper(fileManager, toPath(fileObject), fileObject);
+ }
+
+ @Override public Method getDecoderMethod() {
+ return null;
+ }
+
+ private static Path toPath(LombokFileObject fileObject) {
URI uri = fileObject.toUri();
if (uri.getScheme() == null) {
uri = URI.create("file:///" + uri);
}
- Path path;
try {
- path = Paths.get(uri);
+ return Paths.get(uri);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("Problems in URI '" + uri + "' (" + fileObject.toUri() + ")", e);
}
- return new Javac9BaseFileObjectWrapper(fileManager, path, fileObject);
}
- @Override public Method getDecoderMethod() {
- throw new UnsupportedOperationException();
+ private static BaseFileManager asBaseFileManager(JavaFileManager jfm) {
+ if (jfm instanceof BaseFileManager) {
+ return (BaseFileManager) jfm;
+ }
+ return new FileManagerWrapper(jfm);
+ }
+
+ static class FileManagerWrapper extends BaseFileManager {
+ JavaFileManager manager;
+
+ public FileManagerWrapper(JavaFileManager manager) {
+ super(null);
+ this.manager = manager;
+ }
+
+ @Override
+ public int isSupportedOption(String option) {
+ return manager.isSupportedOption(option);
+ }
+
+ @Override
+ public ClassLoader getClassLoader(Location location) {
+ return manager.getClassLoader(location);
+ }
+
+ @Override
+ public Iterable<JavaFileObject> list(Location location, String packageName, Set<Kind> kinds, boolean recurse) throws IOException {
+ return manager.list(location, packageName, kinds, recurse);
+ }
+
+ @Override
+ public String inferBinaryName(Location location, JavaFileObject file) {
+ return manager.inferBinaryName(location, file);
+ }
+
+ @Override
+ public boolean isSameFile(FileObject a, FileObject b) {
+ return manager.isSameFile(a, b);
+ }
+
+ @Override
+ public boolean handleOption(String current, Iterator<String> remaining) {
+ return manager.handleOption(current, remaining);
+ }
+
+ @Override
+ public boolean hasLocation(Location location) {
+ return manager.hasLocation(location);
+ }
+
+ @Override
+ public JavaFileObject getJavaFileForInput(Location location, String className, Kind kind) throws IOException {
+ return manager.getJavaFileForInput(location, className, kind);
+ }
+
+ @Override
+ public JavaFileObject getJavaFileForOutput(Location location, String className, Kind kind, FileObject sibling) throws IOException {
+ return manager.getJavaFileForOutput(location, className, kind, sibling);
+ }
+
+ @Override
+ public FileObject getFileForInput(Location location, String packageName, String relativeName) throws IOException {
+ return manager.getFileForInput(location, packageName, relativeName);
+ }
+
+ @Override
+ public FileObject getFileForOutput(Location location, String packageName, String relativeName, FileObject sibling) throws IOException {
+ return manager.getFileForOutput(location, packageName, relativeName, sibling);
+ }
+
+ @Override
+ public void flush() throws IOException {
+ manager.flush();
+ }
+
+ @Override
+ public void close() throws IOException {
+ manager.close();
+ }
}
}
}