Skip to content

Commit

Permalink
working
Browse files Browse the repository at this point in the history
  • Loading branch information
SentryMan committed Feb 7, 2023
1 parent 65c022e commit 13c8300
Show file tree
Hide file tree
Showing 19 changed files with 128 additions and 250 deletions.
2 changes: 1 addition & 1 deletion inject-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<groupId>io.avaje</groupId>
<artifactId>avaje-inject</artifactId>
<version>8.12-RC4</version>
<!-- <optional>true</optional> -->
<optional>true</optional>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package io.avaje.inject.generator;

import io.avaje.inject.InjectModule;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

final class AllScopes {

Expand Down Expand Up @@ -59,7 +58,7 @@ void readModules(List<String> customScopeModules) {
for (String customScopeModule : customScopeModules) {
final TypeElement module = context.element(customScopeModule);
if (module != null) {
final InjectModule injectModule = module.getAnnotation(InjectModule.class);
final var injectModule = InjectModulePrism.getInstanceOn(module);
if (injectModule != null) {
final String customScopeType = injectModule.customScopeType();
final TypeElement scopeType = context.element(customScopeType);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package io.avaje.inject.generator;

import io.avaje.inject.aop.Aspect;

import javax.lang.model.element.*;
import java.util.ArrayList;
Expand All @@ -27,7 +26,7 @@ List<AspectPair> read() {
List<AspectPair> aspects = new ArrayList<>();
for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
Element anElement = annotationMirror.getAnnotationType().asElement();
Aspect aspect = anElement.getAnnotation(Aspect.class);
var aspect = AspectPrism.getInstanceOn(anElement);
if (aspect != null) {
Meta meta = readTarget(anElement);
if (meta != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
package io.avaje.inject.generator;

import io.avaje.inject.Primary;
import io.avaje.inject.Prototype;
import io.avaje.inject.Secondary;
import io.avaje.inject.spi.Proxy;

import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import java.util.*;
Expand Down Expand Up @@ -40,10 +35,10 @@ final class BeanReader {
this.beanType = beanType;
this.type = beanType.getQualifiedName().toString();
this.shortName = shortName(beanType);
this.prototype = (beanType.getAnnotation(Prototype.class) != null);
this.primary = (beanType.getAnnotation(Primary.class) != null);
this.secondary = !primary && (beanType.getAnnotation(Secondary.class) != null);
this.proxy = (beanType.getAnnotation(Proxy.class) != null);
this.prototype = (PrototypePrism.getInstanceOn(beanType) != null);
this.primary = (PrimaryPrism.getInstanceOn(beanType) != null);
this.secondary = !primary && (SecondaryPrism.getInstanceOn(beanType) != null);
this.proxy = (ProxyPrism.getInstanceOn(beanType) != null);
this.typeReader = new TypeReader(GenericType.parse(type), beanType, context, importTypes, factory);
typeReader.process();
this.requestParams = new BeanRequestParams(type);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,7 @@ final class Constants {
static final String GENERICTYPE = "io.avaje.inject.spi.GenericType";

static final String COMPONENT = "io.avaje.inject.Component";

static final String PROTOTYPE = "io.avaje.inject.Prototype";

static final String SCOPE = "jakarta.inject.Scope";

static final String INJECT_FACTORY = "io.avaje.inject.Factory";
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package io.avaje.inject.generator;

import java.util.Stack;
import java.util.ArrayDeque;
import java.util.Deque;

final class GenericTypeParser {

private final String raw;
private StringBuilder buf = new StringBuilder();
private final Stack<GenericType> stack = new Stack<>();
private final Deque<GenericType> stack = new ArrayDeque<>();

GenericTypeParser(String raw) {
this.raw = raw;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
package io.avaje.inject.generator;

import io.avaje.inject.spi.DependencyMeta;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* Holds the data as per <code>@DependencyMeta</code>
Expand Down Expand Up @@ -41,14 +38,14 @@ final class MetaData {
private boolean usesExternalDependency;
private String externalDependency;

MetaData(DependencyMeta meta) {
MetaData(DependencyMetaPrism meta) {
this.type = meta.type();
this.name = trimName(meta.name());
this.shortType = Util.shortName(type);
this.method = meta.method();
this.providesAspect = meta.providesAspect();
this.provides = asList(meta.provides());
this.dependsOn = Stream.of(meta.dependsOn()).map(Dependency::new).collect(Collectors.toList());
this.provides = meta.provides();
this.dependsOn = meta.dependsOn().stream().map(Dependency::new).collect(Collectors.toList());
this.autoProvides = meta.autoProvides();
}

Expand Down Expand Up @@ -113,13 +110,6 @@ void setWired() {
this.wired = true;
}

private List<String> asList(String[] content) {
if (content == null || content.length == 0) {
return new ArrayList<>();
}
return Arrays.asList(content);
}

void update(BeanReader beanReader) {
this.provides = beanReader.provides();
this.dependsOn = beanReader.dependsOn();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,15 @@
package io.avaje.inject.generator;

import io.avaje.inject.Bean;
import io.avaje.inject.Primary;
import io.avaje.inject.Prototype;
import io.avaje.inject.Secondary;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.type.TypeMirror;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;

final class MethodReader {

Expand Down Expand Up @@ -42,13 +38,13 @@ final class MethodReader {
this(context, element, beanType, null, null, importTypes);
}

MethodReader(ProcessingContext context, ExecutableElement element, TypeElement beanType, Bean bean, String qualifierName, ImportTypeMap importTypes) {
MethodReader(ProcessingContext context, ExecutableElement element, TypeElement beanType, BeanPrism bean, String qualifierName, ImportTypeMap importTypes) {
this.isFactory = bean != null;
this.element = element;
if (isFactory) {
prototype = element.getAnnotation(Prototype.class) != null;
primary = element.getAnnotation(Primary.class) != null;
secondary = element.getAnnotation(Secondary.class) != null;
this.prototype = (PrototypePrism.getInstanceOn(beanType) != null);
this.primary = (PrimaryPrism.getInstanceOn(beanType) != null);
this.secondary = !primary && (SecondaryPrism.getInstanceOn(beanType) != null);
} else {
prototype = false;
primary = false;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
package io.avaje.inject.generator;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.nio.file.NoSuchFileException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.processing.Filer;
import javax.annotation.processing.FilerException;
import javax.annotation.processing.Messager;
Expand All @@ -13,12 +24,6 @@
import javax.tools.FileObject;
import javax.tools.JavaFileObject;
import javax.tools.StandardLocation;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.LineNumberReader;
import java.io.Reader;
import java.nio.file.NoSuchFileException;
import java.util.*;

final class ProcessingContext {

Expand All @@ -28,15 +33,15 @@ final class ProcessingContext {
private final Elements elementUtils;
private final Types typeUtils;
private final Set<String> uniqueModuleNames = new HashSet<>();
private final ExternalProvider externalProvide = new ExternalProvider();
private final Set<String> providedTypes = new HashSet<>();

ProcessingContext(ProcessingEnvironment processingEnv, Set<String> moduleFileProvided) {
this.processingEnv = processingEnv;
this.messager = processingEnv.getMessager();
this.filer = processingEnv.getFiler();
this.elementUtils = processingEnv.getElementUtils();
this.typeUtils = processingEnv.getTypeUtils();
externalProvide.init(moduleFileProvided);
providedTypes.addAll(moduleFileProvided);
}

/**
Expand Down Expand Up @@ -144,6 +149,6 @@ boolean isDuplicateModule(String moduleFullName) {
}

boolean externallyProvided(String type) {
return externalProvide.provides(type);
return providedTypes.contains(type);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,15 @@
import java.net.URL;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.stream.Collectors;

import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.Filer;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.AnnotationMirror;
import javax.lang.model.element.Element;
Expand All @@ -24,10 +23,16 @@
import javax.lang.model.util.Elements;
import javax.tools.StandardLocation;

import io.avaje.inject.InjectModule;
import io.avaje.inject.spi.Plugin;
import io.avaje.inject.spi.Proxy;

@SupportedAnnotationTypes({
Constants.INJECTMODULE,
Constants.INJECT_FACTORY,
Constants.SINGLETON,
Constants.COMPONENT,
Constants.PROTOTYPE,
Constants.SCOPE,
Constants.TESTSCOPE,
Constants.CONTROLLER,
})
public final class Processor extends AbstractProcessor {

private ProcessingContext context;
Expand All @@ -51,7 +56,7 @@ public synchronized void init(ProcessingEnvironment processingEnv) {
this.elementUtils = processingEnv.getElementUtils();
this.allScopes = new AllScopes(context);
this.defaultScope = allScopes.defaultScope();
registerPluginProvidedTypes();
pluginFileProvided.forEach(defaultScope::pluginProvided);
}

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

/**
* Register types provided by the plugin so no compiler error when we have a dependency on these
* types and the only thing providing them is the plugin.
*/
private void registerPluginProvidedTypes() {
for (final Plugin plugin : ServiceLoader.load(Plugin.class, Processor.class.getClassLoader())) {
for (final Class<?> provide : plugin.provides()) {
defaultScope.pluginProvided(provide.getCanonicalName());
}
}
pluginFileProvided.forEach(defaultScope::pluginProvided);
}

@Override
public Set<String> getSupportedAnnotationTypes() {
final Set<String> annotations = new LinkedHashSet<>();
annotations.add(Constants.INJECTMODULE);
annotations.add(Constants.INJECT_FACTORY);
annotations.add(Constants.SINGLETON);
annotations.add(Constants.COMPONENT);
annotations.add(Constants.PROTOTYPE);
annotations.add(Constants.SCOPE);
annotations.add(Constants.TESTSCOPE);
annotations.add(Constants.CONTROLLER);
return annotations;
}

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
readModule(roundEnv);
Expand All @@ -126,7 +104,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
if (typeElement != null) {
readChangedBeans(roundEnv.getElementsAnnotatedWith(typeElement), false);
}
readChangedBeans(roundEnv.getElementsAnnotatedWith(Proxy.class), false);
readChangedBeans(roundEnv.getElementsAnnotatedWith(context.element(Constants.PROXY)), false);
allScopes.readBeans(roundEnv);
defaultScope.write(roundEnv.processingOver());
allScopes.write(roundEnv.processingOver());
Expand Down Expand Up @@ -205,7 +183,8 @@ private void readModule(RoundEnvironment roundEnv) {
/** Read InjectModule for things like package-info etc (not for custom scopes) */
private void readInjectModule(RoundEnvironment roundEnv) {
// read other that are annotated with InjectModule
for (final Element element : roundEnv.getElementsAnnotatedWith(InjectModule.class)) {
for (final Element element :
roundEnv.getElementsAnnotatedWith(context.element(Constants.INJECTMODULE))) {

final var scope = ScopePrism.getInstanceOn(element);
if (scope == null) {
Expand Down
Loading

0 comments on commit 13c8300

Please sign in to comment.