Skip to content

Commit

Permalink
rebase
Browse files Browse the repository at this point in the history
  • Loading branch information
SentryMan committed Jan 27, 2024
1 parent 420dc1f commit c9584a3
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 34 deletions.
Original file line number Diff line number Diff line change
@@ -1,50 +1,36 @@
package io.avaje.inject.generator;

import static io.avaje.inject.generator.APContext.elements;
import static io.avaje.inject.generator.APContext.filer;
import static io.avaje.inject.generator.APContext.getModuleInfoReader;
import static io.avaje.inject.generator.APContext.getProjectModuleElement;
import static io.avaje.inject.generator.APContext.logError;
import static io.avaje.inject.generator.APContext.logNote;
import static io.avaje.inject.generator.APContext.logWarn;
import static io.avaje.inject.generator.APContext.typeElement;
import static io.avaje.inject.generator.APContext.asTypeElement;
import static io.avaje.inject.generator.APContext.types;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.LineNumberReader;
import java.nio.file.NoSuchFileException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;

import javax.annotation.processing.FilerException;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
import javax.tools.FileObject;
import javax.tools.StandardLocation;
import java.util.*;

import static io.avaje.inject.generator.APContext.*;
import static java.util.stream.Collectors.toSet;

final class ProcessingContext {

private static final ThreadLocal<Ctx> CTX = new ThreadLocal<>();
private static boolean processingOver;

private ProcessingContext() {}
private ProcessingContext() {
}

static final class Ctx {
private final Set<String> uniqueModuleNames = new HashSet<>();
private final Set<String> providedTypes = new HashSet<>();
private final Set<String> optionalTypes = new LinkedHashSet<>();
private final Map<String, AspectImportPrism> aspectImportPrisms = new HashMap<>();
private final List<AvajeModule> avajeModules = new ArrayList<>();
private final List<TypeElement> delayQueue = new ArrayList<>();
private boolean validated;
private boolean strictWiring;
private String injectFqn;
Expand Down Expand Up @@ -111,9 +97,9 @@ private static List<String> loadMetaInf(String fullName) {

static FileObject createMetaInfWriter(ScopeInfo.Type scopeType) throws IOException {
final var serviceName =
scopeType == ScopeInfo.Type.DEFAULT
? Constants.META_INF_MODULE
: Constants.META_INF_TESTMODULE;
scopeType == ScopeInfo.Type.DEFAULT
? Constants.META_INF_MODULE
: Constants.META_INF_TESTMODULE;
return createMetaInfWriterFor(serviceName);
}

Expand Down Expand Up @@ -207,7 +193,24 @@ static Optional<AspectImportPrism> getImportedAspect(String type) {
return Optional.ofNullable(CTX.get().aspectImportPrisms.get(type));
}

public static void clear() {
static Set<TypeElement> delayedElements() {
var set =
CTX.get().delayQueue.stream()
.map(t -> t.getQualifiedName().toString())
.map(APContext::typeElement)
.collect(toSet());
CTX.get().delayQueue.clear();
return set;
}

static boolean delayUntilNextRound(TypeElement element) {
if (!processingOver) {
CTX.get().delayQueue.add(element);
}
return !processingOver;
}

static void clear() {
CTX.remove();
APContext.clear();
}
Expand All @@ -227,4 +230,8 @@ public static void strictWiring(boolean strictWiring) {
public static boolean strictWiring() {
return CTX.get().strictWiring;
}

static void processingOver(boolean over) {
processingOver = over;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import io.avaje.prism.GenerateAPContext;
import io.avaje.prism.GenerateModuleInfoReader;
import io.avaje.prism.GenerateUtils;

import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
Expand All @@ -22,9 +23,11 @@
import static io.avaje.inject.generator.APContext.*;
import static io.avaje.inject.generator.ProcessingContext.*;

@GenerateUtils
@GenerateAPContext
@GenerateModuleInfoReader
@SupportedAnnotationTypes({
AssistFactoryPrism.PRISM_TYPE,
InjectModulePrism.PRISM_TYPE,
FactoryPrism.PRISM_TYPE,
SingletonPrism.PRISM_TYPE,
Expand Down Expand Up @@ -107,6 +110,10 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
APContext.setProjectModuleElement(annotations, roundEnv);
readModule(roundEnv);

final var processingOver = roundEnv.processingOver();
ProcessingContext.processingOver(processingOver);

readBeans(delayedElements());
addImportedAspects(importedAspects(roundEnv));
maybeElements(roundEnv, ScopePrism.PRISM_TYPE).ifPresent(this::readScopes);
maybeElements(roundEnv, FactoryPrism.PRISM_TYPE).ifPresent(this::readFactories);
Expand All @@ -121,10 +128,11 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment

maybeElements(roundEnv, Constants.CONTROLLER).ifPresent(this::readBeans);
maybeElements(roundEnv, ProxyPrism.PRISM_TYPE).ifPresent(this::readBeans);
maybeElements(roundEnv, AssistFactoryPrism.PRISM_TYPE).ifPresent(this::readAssisted);

allScopes.readBeans(roundEnv);
defaultScope.write(roundEnv.processingOver());
allScopes.write(roundEnv.processingOver());
defaultScope.write(processingOver);
allScopes.write(processingOver);

if (roundEnv.processingOver()) {

Expand Down Expand Up @@ -195,6 +203,17 @@ private void readFactories(Set<? extends Element> beans) {
readChangedBeans(ElementFilter.typesIn(beans), true, false);
}

private void readAssisted(Set<? extends Element> beans) {
ElementFilter.typesIn(beans).forEach(t -> {
var reader = new AssistBeanReader(t);
try {
new SimpleAssistWriter(reader).write();
} catch (IOException e) {
e.printStackTrace();
}
});
}

private void readBeans(Set<? extends Element> beans) {
readChangedBeans(ElementFilter.typesIn(beans), false, false);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ private void read(Element element) {
.forEach(
require -> {
requiresPackages.add(require);
requirePkg.add(Util.packageOf(require) + ".");
requirePkg.add(ProcessorUtils.packageOf(require) + ".");
});
}

Expand Down Expand Up @@ -305,7 +305,12 @@ private void readBeanMeta(TypeElement typeElement, boolean factory, boolean impo
logNote("skipping annotation type " + typeElement);
return;
}
beanReaders.add(new BeanReader(typeElement, factory, importedComponent).read());
var reader = new BeanReader(typeElement, factory, importedComponent).read();
if (reader.isDelayed() && ProcessingContext.delayUntilNextRound(typeElement)) {
readBeans.remove(typeElement.toString());
} else {
beanReaders.add(reader);
}
}

void readBuildMethodDependencyMeta(Element element) {
Expand Down Expand Up @@ -487,10 +492,10 @@ private boolean providesDependencyRecursive(String dependency) {
for (String require : requires) {
final ScopeInfo requiredScope = scopes.get(require);
// recursively search parent scope
if ((requiredScope != null) && requiredScope.providesDependencyRecursive(dependency)) {
// logWarn("dependency " + dependency + " provided by other scope " + requiredScope.name);
return true;
}
if ((requiredScope != null) && requiredScope.providesDependencyRecursive(dependency)) {
// logWarn("dependency " + dependency + " provided by other scope " + requiredScope.name);
return true;
}
}
return false;
}
Expand Down

0 comments on commit c9584a3

Please sign in to comment.