Skip to content

Commit

Permalink
Fix Inject Plugin CSV Generation/Parsing (#647)
Browse files Browse the repository at this point in the history
* fix inject plugin parsing

* fix javax workflow

* Update ExternalProvider.java

* Update ExternalProvider.java

* Format changes

---------

Co-authored-by: Rob Bygrave <[email protected]>
  • Loading branch information
SentryMan and rbygrave authored Jul 19, 2024
1 parent eb286a7 commit a549757
Show file tree
Hide file tree
Showing 19 changed files with 60 additions and 57 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,6 @@ jobs:
- name: Maven version
run: mvn --version
- name: Build with Maven
run: mvn clean install
run: mvn clean test
- name: Build with Maven (javax)
run: ./jakarta-to-javax.sh && mvn clean test && ./javax-to-jakarta.sh
2 changes: 1 addition & 1 deletion blackbox-aspect/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion blackbox-other/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>

<artifactId>blackbox-other</artifactId>
Expand Down
4 changes: 2 additions & 2 deletions blackbox-test-inject/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down Expand Up @@ -97,7 +97,7 @@
<plugin>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-maven-plugin</artifactId>
<version>10.0-RC9</version>
<version>${project.version}</version>
<executions>
<execution>
<phase>process-sources</phase>
Expand Down
2 changes: 1 addition & 1 deletion inject-aop/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>
<artifactId>avaje-inject-aop</artifactId>
<dependencies>
Expand Down
2 changes: 1 addition & 1 deletion inject-events/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>
<artifactId>avaje-inject-events</artifactId>
<name>avaje inject events</name>
Expand Down
2 changes: 1 addition & 1 deletion inject-generator/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>

<artifactId>avaje-inject-generator</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,16 @@
package io.avaje.inject.generator;

import static java.util.Map.entry;
import static java.util.stream.Collectors.toList;
import io.avaje.inject.spi.AvajeModule;
import io.avaje.inject.spi.InjectPlugin;

import javax.lang.model.element.TypeElement;
import javax.lang.model.util.ElementFilter;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.*;

import static java.util.List.of;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Stream;

import javax.lang.model.element.TypeElement;
import javax.lang.model.util.ElementFilter;
import io.avaje.inject.spi.AvajeModule;
import io.avaje.inject.spi.InjectPlugin;
import static java.util.Map.entry;
import static java.util.stream.Collectors.toList;

/**
* The types provided by other modules in the classpath at compile time.
Expand Down Expand Up @@ -73,16 +63,27 @@ static void registerModuleProvidedTypes(Set<String> providedTypes) {
for (final var module : modules) {
final var name = module.getClass().getTypeName();
APContext.logNote("Detected Module: " + name);
final var provides = new TreeSet<String>();
for (final var provide : module.provides()) {
provides.add(provide.getTypeName());
}
for (final var provide : module.autoProvides()) {
provides.add(provide.getTypeName());
}
for (final var provide : module.autoProvidesAspects()) {
final var aspectType = Util.wrapAspect(provide.getTypeName());
provides.add(aspectType);
}
registerExternalMetaData(name);
readMetaDataProvides(providedTypes);
final var provides = new ArrayList<>(providedTypes);
readMetaDataProvides(provides);
providedTypes.addAll(provides);
final var requires = Arrays.stream(module.requires()).map(Type::getTypeName).collect(toList());

Arrays.stream(module.autoRequires()).map(Type::getTypeName).forEach(requires::add);
Arrays.stream(module.requiresPackages()).map(Type::getTypeName).forEach(requires::add);
Arrays.stream(module.autoRequiresAspects()).map(Type::getTypeName).map(Util::wrapAspect).forEach(requires::add);

ProcessingContext.addModule(new ModuleData(name, provides, requires));
ProcessingContext.addModule(new ModuleData(name, new ArrayList<>(provides), requires));
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,11 @@ void loadProvidedFiles() {
pluginFileProvided.addAll(lines("avaje-plugin-provides.txt"));

lines("avaje-module-dependencies.csv").stream()
.skip(1)
.filter(s -> !s.startsWith("External Module Type"))
.filter(s -> s.contains("|") && !s.startsWith("External Module Type"))
.distinct()
.map(l -> l.split("\\|"))
.map(ModuleData::new)
.map(ModuleData::of)
.flatMap(Optional::stream)
.forEach(m -> {
ExternalProvider.registerExternalMetaData(m.name());
ExternalProvider.readMetaDataProvides(moduleFileProvided);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

final class ModuleData {

Expand All @@ -18,10 +19,20 @@ final class ModuleData {
this.requires = requires;
}

ModuleData(String[] moduleCsv) {
this.fqn = moduleCsv[0];
this.provides = Arrays.stream(moduleCsv[1].split(",")).filter(not(String::isBlank)).collect(toList());
this.requires = Arrays.stream(moduleCsv[2].split(",")).filter(not(String::isBlank)).collect(toList());
static Optional<ModuleData> of(String[] moduleCsv) {
try {
return Optional.of(
new ModuleData(
moduleCsv[0],
Arrays.stream(moduleCsv[1].split(",")).filter(not(String::isBlank)).collect(toList()),
Arrays.stream(moduleCsv[2].split(","))
.filter(not(String::isBlank))
.collect(toList())));

} catch (Exception e) {
System.err.println("Failed to parse" + Arrays.toString(moduleCsv));
}
return Optional.empty();
}

List<String> provides() {
Expand Down
4 changes: 2 additions & 2 deletions inject-gradle-plugin/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ plugins {
}

group 'io.avaje.inject'
version '10.1'
version '10.2-RC1'

repositories {
mavenLocal()
mavenCentral()
}

dependencies {
implementation 'io.avaje:avaje-inject:10.1'
implementation 'io.avaje:avaje-inject:10.2-RC1'
implementation gradleApi()

testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ private static URL[] createClassPath(Project project) {
}

private void writeModuleCSV(ClassLoader classLoader, FileWriter moduleWriter) throws IOException {
final Set<String> providedTypes = new HashSet<>();


final List<AvajeModule> avajeModules = new ArrayList<>();
ServiceLoader.load(Module.class, classLoader).forEach(avajeModules::add);
ServiceLoader.load(InjectExtension.class, classLoader).stream()
Expand All @@ -127,17 +126,14 @@ private void writeModuleCSV(ClassLoader classLoader, FileWriter moduleWriter) th
final var provides = new ArrayList<String>();
for (final var provide : module.provides()) {
var type = provide.getTypeName();
providedTypes.add(type);
provides.add(type);
}
for (final var provide : module.autoProvides()) {
var type = provide.getTypeName();
providedTypes.add(type);
provides.add(type);
}
for (final var provide : module.autoProvidesAspects()) {
var type = wrapAspect(provide.getTypeName());
providedTypes.add(type);
provides.add(type);
}

Expand Down
2 changes: 1 addition & 1 deletion inject-maven-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<artifactId>avaje-inject-parent</artifactId>
<groupId>io.avaje</groupId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>

<artifactId>avaje-inject-maven-plugin</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ private URLClassLoader createClassLoader(List<URL> listUrl) {
}

private FileWriter createFileWriter(String string) throws IOException {
return new FileWriter(new File(project.getBuild().getDirectory(), string), true);
return new FileWriter(new File(project.getBuild().getDirectory(), string));
}

private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter pluginWriter) throws IOException {
Expand Down Expand Up @@ -128,7 +128,6 @@ private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter plug
}

private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter) throws IOException {
final Set<String> providedTypes = new HashSet<>();

final Log log = getLog();
final List<AvajeModule> avajeModules = new ArrayList<>();
Expand All @@ -145,17 +144,16 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter)
final var provides = new ArrayList<String>();
for (final var provide : module.provides()) {
var type = provide.getTypeName();
providedTypes.add(type);
provides.add(type);
}

for (final var provide : module.autoProvides()) {
var type = provide.getTypeName();
providedTypes.add(type);
provides.add(type);
}

for (final var provide : module.autoProvidesAspects()) {
var type = wrapAspect(provide.getTypeName());
providedTypes.add(type);
provides.add(type);
}

Expand All @@ -171,12 +169,7 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter)
modules.add(new ModuleData(name, provides, requires));
}

for (final String providedType : providedTypes) {
moduleWriter.write(providedType);
moduleWriter.write("\n");
}

moduleWriter.write("\nExternal Module Type|Provides|Requires");
moduleWriter.write("External Module Type|Provides|Requires");
for (ModuleData avajeModule : modules) {
moduleWriter.write("\n");
moduleWriter.write(avajeModule.name());
Expand Down
2 changes: 1 addition & 1 deletion inject-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>

<artifactId>avaje-inject-test</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion inject/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
</parent>

<artifactId>avaje-inject</artifactId>
Expand Down
1 change: 1 addition & 0 deletions jakarta-to-javax.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-aop/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-events/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-generator/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-maven-plugin/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-test/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' blackbox-aspect/pom.xml
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' blackbox-other/pom.xml
Expand Down
1 change: 1 addition & 0 deletions javax-to-jakarta.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-aop/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-events/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-generator/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-maven-plugin/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-test/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' blackbox-aspect/pom.xml
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' blackbox-other/pom.xml
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>io.avaje</groupId>
<artifactId>avaje-inject-parent</artifactId>
<version>10.1</version>
<version>10.2-RC1</version>
<packaging>pom</packaging>
<name>avaje inject parent</name>
<description>parent pom for avaje inject library</description>
Expand Down

0 comments on commit a549757

Please sign in to comment.