1 package org.codehaus.plexus.compiler.manager;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 import javax.inject.Inject;
27 import javax.inject.Named;
28 import javax.inject.Provider;
29
30 import java.util.Map;
31
32 import org.codehaus.plexus.compiler.Compiler;
33 import org.slf4j.Logger;
34 import org.slf4j.LoggerFactory;
35
36
37
38
39 @Named
40 public class DefaultCompilerManager implements CompilerManager {
41 private static final String ERROR_MESSAGE = "Compiler '{}' could not be instantiated or injected properly. "
42 + "If you spelled the compiler ID correctly and all necessary dependencies are on the classpath, "
43 + "then next you can try running the build with -Dsisu.debug, looking for exceptions.";
44 private static final String ERROR_MESSAGE_DETAIL = "TypeNotPresentException caused by UnsupportedClassVersionError "
45 + "might indicate, that the compiler needs a more recent Java runtime. "
46 + "IllegalArgumentException in ClassReader.<init> might mean, that you need to upgrade Maven.";
47
48 @Inject
49 private Map<String, Provider<Compiler>> compilers;
50
51 private final Logger log = LoggerFactory.getLogger(getClass());
52
53
54
55
56
57 public Compiler getCompiler(String compilerId) throws NoSuchCompilerException {
58
59 Provider<Compiler> compilerProvider = compilers.get(compilerId);
60
61 if (compilerProvider == null) {
62
63 log.error(ERROR_MESSAGE + " " + ERROR_MESSAGE_DETAIL, compilerId);
64 throw new NoSuchCompilerException(compilerId);
65 }
66
67
68 try {
69 return compilerProvider.get();
70 } catch (Exception e) {
71
72 log.error(ERROR_MESSAGE, compilerId);
73 throw new NoSuchCompilerException(compilerId, e);
74 }
75 }
76 }