22
22
23
23
package lombok .javac .apt ;
24
24
25
+ import java .io .IOException ;
25
26
import java .lang .reflect .Field ;
26
27
import java .lang .reflect .Method ;
27
28
import java .net .URI ;
29
+ import java .nio .charset .StandardCharsets ;
28
30
import java .nio .file .Path ;
29
31
import java .nio .file .Paths ;
32
+ import java .util .Iterator ;
33
+ import java .util .Set ;
30
34
import java .util .concurrent .atomic .AtomicBoolean ;
31
35
36
+ import javax .tools .FileObject ;
32
37
import javax .tools .JavaFileManager ;
33
38
import javax .tools .JavaFileObject ;
34
39
import javax .tools .JavaFileObject .Kind ;
@@ -120,6 +125,8 @@ static Compiler getCompiler(JavaFileManager jfm) {
120
125
Class <?> superType = Class .forName ("com.sun.tools.javac.file.BaseFileManager" );
121
126
if (superType .isInstance (wrappedManager )) {
122
127
return new Java9Compiler (wrappedManager );
128
+ } else {
129
+ return new Java9Compiler (new BaseFileManagerWrapper (wrappedManager ));
123
130
}
124
131
}
125
132
catch (Exception e ) {}
@@ -142,6 +149,80 @@ static Compiler getCompiler(JavaFileManager jfm) {
142
149
}
143
150
throw new IllegalArgumentException (sb .toString ());
144
151
}
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
+ }
145
226
146
227
static JavaFileObject createEmpty (Compiler compiler , String name , Kind kind ) {
147
228
return compiler .wrap (new EmptyLombokFileObject (name , kind ));
0 commit comments