Skip to content

Commit 13c8300

Browse files
committed
working
1 parent 65c022e commit 13c8300

19 files changed

+128
-250
lines changed

inject-generator/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<groupId>io.avaje</groupId>
2020
<artifactId>avaje-inject</artifactId>
2121
<version>8.12-RC4</version>
22-
<!-- <optional>true</optional> -->
22+
<optional>true</optional>
2323
<scope>provided</scope>
2424
</dependency>
2525
<dependency>

inject-generator/src/main/java/io/avaje/inject/generator/AllScopes.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package io.avaje.inject.generator;
22

3-
import io.avaje.inject.InjectModule;
3+
import java.util.HashMap;
4+
import java.util.List;
5+
import java.util.Map;
46

57
import javax.annotation.processing.RoundEnvironment;
68
import javax.lang.model.element.Element;
79
import javax.lang.model.element.TypeElement;
8-
import java.util.HashMap;
9-
import java.util.List;
10-
import java.util.Map;
1110

1211
final class AllScopes {
1312

@@ -59,7 +58,7 @@ void readModules(List<String> customScopeModules) {
5958
for (String customScopeModule : customScopeModules) {
6059
final TypeElement module = context.element(customScopeModule);
6160
if (module != null) {
62-
final InjectModule injectModule = module.getAnnotation(InjectModule.class);
61+
final var injectModule = InjectModulePrism.getInstanceOn(module);
6362
if (injectModule != null) {
6463
final String customScopeType = injectModule.customScopeType();
6564
final TypeElement scopeType = context.element(customScopeType);

inject-generator/src/main/java/io/avaje/inject/generator/AspectAnnotationReader.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.avaje.inject.generator;
22

3-
import io.avaje.inject.aop.Aspect;
43

54
import javax.lang.model.element.*;
65
import java.util.ArrayList;
@@ -27,7 +26,7 @@ List<AspectPair> read() {
2726
List<AspectPair> aspects = new ArrayList<>();
2827
for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
2928
Element anElement = annotationMirror.getAnnotationType().asElement();
30-
Aspect aspect = anElement.getAnnotation(Aspect.class);
29+
var aspect = AspectPrism.getInstanceOn(anElement);
3130
if (aspect != null) {
3231
Meta meta = readTarget(anElement);
3332
if (meta != null) {

inject-generator/src/main/java/io/avaje/inject/generator/BeanReader.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
package io.avaje.inject.generator;
22

3-
import io.avaje.inject.Primary;
4-
import io.avaje.inject.Prototype;
5-
import io.avaje.inject.Secondary;
6-
import io.avaje.inject.spi.Proxy;
7-
83
import javax.lang.model.element.Element;
94
import javax.lang.model.element.TypeElement;
105
import java.util.*;
@@ -40,10 +35,10 @@ final class BeanReader {
4035
this.beanType = beanType;
4136
this.type = beanType.getQualifiedName().toString();
4237
this.shortName = shortName(beanType);
43-
this.prototype = (beanType.getAnnotation(Prototype.class) != null);
44-
this.primary = (beanType.getAnnotation(Primary.class) != null);
45-
this.secondary = !primary && (beanType.getAnnotation(Secondary.class) != null);
46-
this.proxy = (beanType.getAnnotation(Proxy.class) != null);
38+
this.prototype = (PrototypePrism.getInstanceOn(beanType) != null);
39+
this.primary = (PrimaryPrism.getInstanceOn(beanType) != null);
40+
this.secondary = !primary && (SecondaryPrism.getInstanceOn(beanType) != null);
41+
this.proxy = (ProxyPrism.getInstanceOn(beanType) != null);
4742
this.typeReader = new TypeReader(GenericType.parse(type), beanType, context, importTypes, factory);
4843
typeReader.process();
4944
this.requestParams = new BeanRequestParams(type);

inject-generator/src/main/java/io/avaje/inject/generator/Constants.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,7 @@ final class Constants {
4848
static final String GENERICTYPE = "io.avaje.inject.spi.GenericType";
4949

5050
static final String COMPONENT = "io.avaje.inject.Component";
51-
5251
static final String PROTOTYPE = "io.avaje.inject.Prototype";
53-
5452
static final String SCOPE = "jakarta.inject.Scope";
55-
5653
static final String INJECT_FACTORY = "io.avaje.inject.Factory";
5754
}

inject-generator/src/main/java/io/avaje/inject/generator/ExternalProvider.java

Lines changed: 0 additions & 45 deletions
This file was deleted.

inject-generator/src/main/java/io/avaje/inject/generator/GenericTypeParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
package io.avaje.inject.generator;
22

3-
import java.util.Stack;
3+
import java.util.ArrayDeque;
4+
import java.util.Deque;
45

56
final class GenericTypeParser {
67

78
private final String raw;
89
private StringBuilder buf = new StringBuilder();
9-
private final Stack<GenericType> stack = new Stack<>();
10+
private final Deque<GenericType> stack = new ArrayDeque<>();
1011

1112
GenericTypeParser(String raw) {
1213
this.raw = raw;

inject-generator/src/main/java/io/avaje/inject/generator/MetaData.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package io.avaje.inject.generator;
22

3-
import io.avaje.inject.spi.DependencyMeta;
43

54
import java.util.ArrayList;
6-
import java.util.Arrays;
75
import java.util.List;
86
import java.util.Set;
97
import java.util.stream.Collectors;
10-
import java.util.stream.Stream;
118

129
/**
1310
* Holds the data as per <code>@DependencyMeta</code>
@@ -41,14 +38,14 @@ final class MetaData {
4138
private boolean usesExternalDependency;
4239
private String externalDependency;
4340

44-
MetaData(DependencyMeta meta) {
41+
MetaData(DependencyMetaPrism meta) {
4542
this.type = meta.type();
4643
this.name = trimName(meta.name());
4744
this.shortType = Util.shortName(type);
4845
this.method = meta.method();
4946
this.providesAspect = meta.providesAspect();
50-
this.provides = asList(meta.provides());
51-
this.dependsOn = Stream.of(meta.dependsOn()).map(Dependency::new).collect(Collectors.toList());
47+
this.provides = meta.provides();
48+
this.dependsOn = meta.dependsOn().stream().map(Dependency::new).collect(Collectors.toList());
5249
this.autoProvides = meta.autoProvides();
5350
}
5451

@@ -113,13 +110,6 @@ void setWired() {
113110
this.wired = true;
114111
}
115112

116-
private List<String> asList(String[] content) {
117-
if (content == null || content.length == 0) {
118-
return new ArrayList<>();
119-
}
120-
return Arrays.asList(content);
121-
}
122-
123113
void update(BeanReader beanReader) {
124114
this.provides = beanReader.provides();
125115
this.dependsOn = beanReader.dependsOn();

inject-generator/src/main/java/io/avaje/inject/generator/MethodReader.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,15 @@
11
package io.avaje.inject.generator;
22

3-
import io.avaje.inject.Bean;
4-
import io.avaje.inject.Primary;
5-
import io.avaje.inject.Prototype;
6-
import io.avaje.inject.Secondary;
3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Set;
77

88
import javax.lang.model.element.ExecutableElement;
99
import javax.lang.model.element.Modifier;
1010
import javax.lang.model.element.TypeElement;
1111
import javax.lang.model.element.VariableElement;
1212
import javax.lang.model.type.TypeMirror;
13-
import java.util.ArrayList;
14-
import java.util.Collections;
15-
import java.util.List;
16-
import java.util.Set;
1713

1814
final class MethodReader {
1915

@@ -42,13 +38,13 @@ final class MethodReader {
4238
this(context, element, beanType, null, null, importTypes);
4339
}
4440

45-
MethodReader(ProcessingContext context, ExecutableElement element, TypeElement beanType, Bean bean, String qualifierName, ImportTypeMap importTypes) {
41+
MethodReader(ProcessingContext context, ExecutableElement element, TypeElement beanType, BeanPrism bean, String qualifierName, ImportTypeMap importTypes) {
4642
this.isFactory = bean != null;
4743
this.element = element;
4844
if (isFactory) {
49-
prototype = element.getAnnotation(Prototype.class) != null;
50-
primary = element.getAnnotation(Primary.class) != null;
51-
secondary = element.getAnnotation(Secondary.class) != null;
45+
this.prototype = (PrototypePrism.getInstanceOn(beanType) != null);
46+
this.primary = (PrimaryPrism.getInstanceOn(beanType) != null);
47+
this.secondary = !primary && (SecondaryPrism.getInstanceOn(beanType) != null);
5248
} else {
5349
prototype = false;
5450
primary = false;

inject-generator/src/main/java/io/avaje/inject/generator/ProcessingContext.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
package io.avaje.inject.generator;
22

3+
import java.io.FileNotFoundException;
4+
import java.io.IOException;
5+
import java.io.LineNumberReader;
6+
import java.io.Reader;
7+
import java.nio.file.NoSuchFileException;
8+
import java.util.ArrayList;
9+
import java.util.Collections;
10+
import java.util.HashSet;
11+
import java.util.List;
12+
import java.util.Set;
13+
314
import javax.annotation.processing.Filer;
415
import javax.annotation.processing.FilerException;
516
import javax.annotation.processing.Messager;
@@ -13,12 +24,6 @@
1324
import javax.tools.FileObject;
1425
import javax.tools.JavaFileObject;
1526
import javax.tools.StandardLocation;
16-
import java.io.FileNotFoundException;
17-
import java.io.IOException;
18-
import java.io.LineNumberReader;
19-
import java.io.Reader;
20-
import java.nio.file.NoSuchFileException;
21-
import java.util.*;
2227

2328
final class ProcessingContext {
2429

@@ -28,15 +33,15 @@ final class ProcessingContext {
2833
private final Elements elementUtils;
2934
private final Types typeUtils;
3035
private final Set<String> uniqueModuleNames = new HashSet<>();
31-
private final ExternalProvider externalProvide = new ExternalProvider();
36+
private final Set<String> providedTypes = new HashSet<>();
3237

3338
ProcessingContext(ProcessingEnvironment processingEnv, Set<String> moduleFileProvided) {
3439
this.processingEnv = processingEnv;
3540
this.messager = processingEnv.getMessager();
3641
this.filer = processingEnv.getFiler();
3742
this.elementUtils = processingEnv.getElementUtils();
3843
this.typeUtils = processingEnv.getTypeUtils();
39-
externalProvide.init(moduleFileProvided);
44+
providedTypes.addAll(moduleFileProvided);
4045
}
4146

4247
/**
@@ -144,6 +149,6 @@ boolean isDuplicateModule(String moduleFullName) {
144149
}
145150

146151
boolean externallyProvided(String type) {
147-
return externalProvide.provides(type);
152+
return providedTypes.contains(type);
148153
}
149154
}

inject-generator/src/main/java/io/avaje/inject/generator/Processor.java

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@
66
import java.net.URL;
77
import java.util.Collections;
88
import java.util.HashSet;
9-
import java.util.LinkedHashSet;
109
import java.util.List;
11-
import java.util.ServiceLoader;
1210
import java.util.Set;
1311
import java.util.stream.Collectors;
1412

1513
import javax.annotation.processing.AbstractProcessor;
1614
import javax.annotation.processing.Filer;
1715
import javax.annotation.processing.ProcessingEnvironment;
1816
import javax.annotation.processing.RoundEnvironment;
17+
import javax.annotation.processing.SupportedAnnotationTypes;
1918
import javax.lang.model.SourceVersion;
2019
import javax.lang.model.element.AnnotationMirror;
2120
import javax.lang.model.element.Element;
@@ -24,10 +23,16 @@
2423
import javax.lang.model.util.Elements;
2524
import javax.tools.StandardLocation;
2625

27-
import io.avaje.inject.InjectModule;
28-
import io.avaje.inject.spi.Plugin;
29-
import io.avaje.inject.spi.Proxy;
30-
26+
@SupportedAnnotationTypes({
27+
Constants.INJECTMODULE,
28+
Constants.INJECT_FACTORY,
29+
Constants.SINGLETON,
30+
Constants.COMPONENT,
31+
Constants.PROTOTYPE,
32+
Constants.SCOPE,
33+
Constants.TESTSCOPE,
34+
Constants.CONTROLLER,
35+
})
3136
public final class Processor extends AbstractProcessor {
3237

3338
private ProcessingContext context;
@@ -51,7 +56,7 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
5156
this.elementUtils = processingEnv.getElementUtils();
5257
this.allScopes = new AllScopes(context);
5358
this.defaultScope = allScopes.defaultScope();
54-
registerPluginProvidedTypes();
59+
pluginFileProvided.forEach(defaultScope::pluginProvided);
5560
}
5661

5762
/** Loads provider files generated by avaje-inject-maven-plugin */
@@ -81,33 +86,6 @@ private static String targetProvides(Filer filer, String relativeName) throws IO
8186
.replace("/target/classes", "");
8287
}
8388

84-
/**
85-
* Register types provided by the plugin so no compiler error when we have a dependency on these
86-
* types and the only thing providing them is the plugin.
87-
*/
88-
private void registerPluginProvidedTypes() {
89-
for (final Plugin plugin : ServiceLoader.load(Plugin.class, Processor.class.getClassLoader())) {
90-
for (final Class<?> provide : plugin.provides()) {
91-
defaultScope.pluginProvided(provide.getCanonicalName());
92-
}
93-
}
94-
pluginFileProvided.forEach(defaultScope::pluginProvided);
95-
}
96-
97-
@Override
98-
public Set<String> getSupportedAnnotationTypes() {
99-
final Set<String> annotations = new LinkedHashSet<>();
100-
annotations.add(Constants.INJECTMODULE);
101-
annotations.add(Constants.INJECT_FACTORY);
102-
annotations.add(Constants.SINGLETON);
103-
annotations.add(Constants.COMPONENT);
104-
annotations.add(Constants.PROTOTYPE);
105-
annotations.add(Constants.SCOPE);
106-
annotations.add(Constants.TESTSCOPE);
107-
annotations.add(Constants.CONTROLLER);
108-
return annotations;
109-
}
110-
11189
@Override
11290
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
11391
readModule(roundEnv);
@@ -126,7 +104,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
126104
if (typeElement != null) {
127105
readChangedBeans(roundEnv.getElementsAnnotatedWith(typeElement), false);
128106
}
129-
readChangedBeans(roundEnv.getElementsAnnotatedWith(Proxy.class), false);
107+
readChangedBeans(roundEnv.getElementsAnnotatedWith(context.element(Constants.PROXY)), false);
130108
allScopes.readBeans(roundEnv);
131109
defaultScope.write(roundEnv.processingOver());
132110
allScopes.write(roundEnv.processingOver());
@@ -205,7 +183,8 @@ private void readModule(RoundEnvironment roundEnv) {
205183
/** Read InjectModule for things like package-info etc (not for custom scopes) */
206184
private void readInjectModule(RoundEnvironment roundEnv) {
207185
// read other that are annotated with InjectModule
208-
for (final Element element : roundEnv.getElementsAnnotatedWith(InjectModule.class)) {
186+
for (final Element element :
187+
roundEnv.getElementsAnnotatedWith(context.element(Constants.INJECTMODULE))) {
209188

210189
final var scope = ScopePrism.getInstanceOn(element);
211190
if (scope == null) {

0 commit comments

Comments
 (0)