1
1
package org .mdkt .compiler ;
2
2
3
- import java .io .FileNotFoundException ;
4
- import java .io .IOException ;
5
- import java .util .ArrayList ;
6
- import java .util .Arrays ;
7
- import java .util .List ;
8
3
9
4
import javax .tools .FileObject ;
10
5
import javax .tools .ForwardingJavaFileManager ;
11
6
import javax .tools .JavaFileManager ;
12
7
import javax .tools .JavaFileObject ;
8
+ import java .io .IOException ;
9
+ import java .util .Arrays ;
10
+ import java .util .Map ;
11
+ import java .util .stream .Collectors ;
13
12
14
13
/**
15
14
* Created by trung on 5/3/15. Edited by turpid-monkey on 9/25/15, completed
18
17
public class ExtendedStandardJavaFileManager extends
19
18
ForwardingJavaFileManager <JavaFileManager > {
20
19
21
- private List < CompiledCode > compiledCode = new ArrayList < CompiledCode >() ;
20
+ private Map < String , CompiledCode > compiledCode ;
22
21
private DynamicClassLoader cl ;
23
22
24
23
/**
25
24
* Creates a new instance of ForwardingJavaFileManager.
26
25
*
27
- * @param fileManager
28
- * delegate to this file manager
26
+ * @param fileManager delegate to this file manager
29
27
* @param cl
30
28
*/
31
29
protected ExtendedStandardJavaFileManager (JavaFileManager fileManager ,
32
- DynamicClassLoader cl ) {
30
+ DynamicClassLoader cl , CompiledCode [] compiledCode ) {
33
31
super (fileManager );
34
32
this .cl = cl ;
33
+ this .compiledCode = Arrays .stream (compiledCode ).collect (Collectors .toMap (CompiledCode ::getClassName , c -> c ));
35
34
}
36
35
37
36
@ Override
@@ -40,8 +39,11 @@ public JavaFileObject getJavaFileForOutput(
40
39
JavaFileObject .Kind kind , FileObject sibling ) throws IOException {
41
40
42
41
try {
43
- CompiledCode innerClass = new CompiledCode (className );
44
- compiledCode .add (innerClass );
42
+ CompiledCode innerClass = compiledCode .get (className );
43
+ if (innerClass == null ) {
44
+ innerClass = new CompiledCode (className );
45
+ compiledCode .put (className , innerClass );
46
+ }
45
47
cl .addCode (innerClass );
46
48
return innerClass ;
47
49
} catch (Exception e ) {
0 commit comments