Skip to content

Commit a549757

Browse files
SentryManrbygrave
andauthored
Fix Inject Plugin CSV Generation/Parsing (#647)
* fix inject plugin parsing * fix javax workflow * Update ExternalProvider.java * Update ExternalProvider.java * Format changes --------- Co-authored-by: Rob Bygrave <[email protected]>
1 parent eb286a7 commit a549757

File tree

19 files changed

+60
-57
lines changed

19 files changed

+60
-57
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ jobs:
3333
- name: Maven version
3434
run: mvn --version
3535
- name: Build with Maven
36-
run: mvn clean install
36+
run: mvn clean test
3737
- name: Build with Maven (javax)
3838
run: ./jakarta-to-javax.sh && mvn clean test && ./javax-to-jakarta.sh

blackbox-aspect/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>avaje-inject-parent</artifactId>
77
<groupId>io.avaje</groupId>
8-
<version>10.1</version>
8+
<version>10.2-RC1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

blackbox-other/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>avaje-inject-parent</artifactId>
88
<groupId>io.avaje</groupId>
9-
<version>10.1</version>
9+
<version>10.2-RC1</version>
1010
</parent>
1111

1212
<artifactId>blackbox-other</artifactId>

blackbox-test-inject/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>avaje-inject-parent</artifactId>
77
<groupId>io.avaje</groupId>
8-
<version>10.1</version>
8+
<version>10.2-RC1</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

@@ -97,7 +97,7 @@
9797
<plugin>
9898
<groupId>io.avaje</groupId>
9999
<artifactId>avaje-inject-maven-plugin</artifactId>
100-
<version>10.0-RC9</version>
100+
<version>${project.version}</version>
101101
<executions>
102102
<execution>
103103
<phase>process-sources</phase>

inject-aop/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>io.avaje</groupId>
77
<artifactId>avaje-inject-parent</artifactId>
8-
<version>10.1</version>
8+
<version>10.2-RC1</version>
99
</parent>
1010
<artifactId>avaje-inject-aop</artifactId>
1111
<dependencies>

inject-events/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<parent>
44
<groupId>io.avaje</groupId>
55
<artifactId>avaje-inject-parent</artifactId>
6-
<version>10.1</version>
6+
<version>10.2-RC1</version>
77
</parent>
88
<artifactId>avaje-inject-events</artifactId>
99
<name>avaje inject events</name>

inject-generator/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>io.avaje</groupId>
88
<artifactId>avaje-inject-parent</artifactId>
9-
<version>10.1</version>
9+
<version>10.2-RC1</version>
1010
</parent>
1111

1212
<artifactId>avaje-inject-generator</artifactId>

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

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

3-
import static java.util.Map.entry;
4-
import static java.util.stream.Collectors.toList;
3+
import io.avaje.inject.spi.AvajeModule;
4+
import io.avaje.inject.spi.InjectPlugin;
55

6+
import javax.lang.model.element.TypeElement;
7+
import javax.lang.model.util.ElementFilter;
68
import java.lang.reflect.Type;
7-
import java.util.ArrayList;
8-
import java.util.Arrays;
9-
import java.util.Collection;
9+
import java.util.*;
1010

1111
import static java.util.List.of;
12-
13-
import java.util.List;
14-
import java.util.Map;
15-
import java.util.Objects;
16-
import java.util.Optional;
17-
import java.util.Set;
18-
import java.util.stream.Stream;
19-
20-
import javax.lang.model.element.TypeElement;
21-
import javax.lang.model.util.ElementFilter;
22-
import io.avaje.inject.spi.AvajeModule;
23-
import io.avaje.inject.spi.InjectPlugin;
12+
import static java.util.Map.entry;
13+
import static java.util.stream.Collectors.toList;
2414

2515
/**
2616
* The types provided by other modules in the classpath at compile time.
@@ -73,16 +63,27 @@ static void registerModuleProvidedTypes(Set<String> providedTypes) {
7363
for (final var module : modules) {
7464
final var name = module.getClass().getTypeName();
7565
APContext.logNote("Detected Module: " + name);
66+
final var provides = new TreeSet<String>();
67+
for (final var provide : module.provides()) {
68+
provides.add(provide.getTypeName());
69+
}
70+
for (final var provide : module.autoProvides()) {
71+
provides.add(provide.getTypeName());
72+
}
73+
for (final var provide : module.autoProvidesAspects()) {
74+
final var aspectType = Util.wrapAspect(provide.getTypeName());
75+
provides.add(aspectType);
76+
}
7677
registerExternalMetaData(name);
77-
readMetaDataProvides(providedTypes);
78-
final var provides = new ArrayList<>(providedTypes);
78+
readMetaDataProvides(provides);
79+
providedTypes.addAll(provides);
7980
final var requires = Arrays.stream(module.requires()).map(Type::getTypeName).collect(toList());
8081

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

85-
ProcessingContext.addModule(new ModuleData(name, provides, requires));
86+
ProcessingContext.addModule(new ModuleData(name, new ArrayList<>(provides), requires));
8687
}
8788
}
8889

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,11 @@ void loadProvidedFiles() {
100100
pluginFileProvided.addAll(lines("avaje-plugin-provides.txt"));
101101

102102
lines("avaje-module-dependencies.csv").stream()
103-
.skip(1)
104-
.filter(s -> !s.startsWith("External Module Type"))
103+
.filter(s -> s.contains("|") && !s.startsWith("External Module Type"))
105104
.distinct()
106105
.map(l -> l.split("\\|"))
107-
.map(ModuleData::new)
106+
.map(ModuleData::of)
107+
.flatMap(Optional::stream)
108108
.forEach(m -> {
109109
ExternalProvider.registerExternalMetaData(m.name());
110110
ExternalProvider.readMetaDataProvides(moduleFileProvided);

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

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.util.Arrays;
77
import java.util.List;
8+
import java.util.Optional;
89

910
final class ModuleData {
1011

@@ -18,10 +19,20 @@ final class ModuleData {
1819
this.requires = requires;
1920
}
2021

21-
ModuleData(String[] moduleCsv) {
22-
this.fqn = moduleCsv[0];
23-
this.provides = Arrays.stream(moduleCsv[1].split(",")).filter(not(String::isBlank)).collect(toList());
24-
this.requires = Arrays.stream(moduleCsv[2].split(",")).filter(not(String::isBlank)).collect(toList());
22+
static Optional<ModuleData> of(String[] moduleCsv) {
23+
try {
24+
return Optional.of(
25+
new ModuleData(
26+
moduleCsv[0],
27+
Arrays.stream(moduleCsv[1].split(",")).filter(not(String::isBlank)).collect(toList()),
28+
Arrays.stream(moduleCsv[2].split(","))
29+
.filter(not(String::isBlank))
30+
.collect(toList())));
31+
32+
} catch (Exception e) {
33+
System.err.println("Failed to parse" + Arrays.toString(moduleCsv));
34+
}
35+
return Optional.empty();
2536
}
2637

2738
List<String> provides() {

inject-gradle-plugin/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ plugins {
66
}
77

88
group 'io.avaje.inject'
9-
version '10.1'
9+
version '10.2-RC1'
1010

1111
repositories {
1212
mavenLocal()
1313
mavenCentral()
1414
}
1515

1616
dependencies {
17-
implementation 'io.avaje:avaje-inject:10.1'
17+
implementation 'io.avaje:avaje-inject:10.2-RC1'
1818
implementation gradleApi()
1919

2020
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'

inject-gradle-plugin/src/main/java/io/avaje/inject/plugin/AvajeInjectPlugin.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ private static URL[] createClassPath(Project project) {
110110
}
111111

112112
private void writeModuleCSV(ClassLoader classLoader, FileWriter moduleWriter) throws IOException {
113-
final Set<String> providedTypes = new HashSet<>();
114-
113+
115114
final List<AvajeModule> avajeModules = new ArrayList<>();
116115
ServiceLoader.load(Module.class, classLoader).forEach(avajeModules::add);
117116
ServiceLoader.load(InjectExtension.class, classLoader).stream()
@@ -127,17 +126,14 @@ private void writeModuleCSV(ClassLoader classLoader, FileWriter moduleWriter) th
127126
final var provides = new ArrayList<String>();
128127
for (final var provide : module.provides()) {
129128
var type = provide.getTypeName();
130-
providedTypes.add(type);
131129
provides.add(type);
132130
}
133131
for (final var provide : module.autoProvides()) {
134132
var type = provide.getTypeName();
135-
providedTypes.add(type);
136133
provides.add(type);
137134
}
138135
for (final var provide : module.autoProvidesAspects()) {
139136
var type = wrapAspect(provide.getTypeName());
140-
providedTypes.add(type);
141137
provides.add(type);
142138
}
143139

inject-maven-plugin/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<artifactId>avaje-inject-parent</artifactId>
66
<groupId>io.avaje</groupId>
7-
<version>10.1</version>
7+
<version>10.2-RC1</version>
88
</parent>
99

1010
<artifactId>avaje-inject-maven-plugin</artifactId>

inject-maven-plugin/src/main/java/io/avaje/inject/mojo/AutoProvidesMojo.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ private URLClassLoader createClassLoader(List<URL> listUrl) {
9595
}
9696

9797
private FileWriter createFileWriter(String string) throws IOException {
98-
return new FileWriter(new File(project.getBuild().getDirectory(), string), true);
98+
return new FileWriter(new File(project.getBuild().getDirectory(), string));
9999
}
100100

101101
private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter pluginWriter) throws IOException {
@@ -128,7 +128,6 @@ private void writeProvidedPlugins(URLClassLoader newClassLoader, FileWriter plug
128128
}
129129

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

133132
final Log log = getLog();
134133
final List<AvajeModule> avajeModules = new ArrayList<>();
@@ -145,17 +144,16 @@ private void writeModuleCSV(ClassLoader newClassLoader, FileWriter moduleWriter)
145144
final var provides = new ArrayList<String>();
146145
for (final var provide : module.provides()) {
147146
var type = provide.getTypeName();
148-
providedTypes.add(type);
149147
provides.add(type);
150148
}
149+
151150
for (final var provide : module.autoProvides()) {
152151
var type = provide.getTypeName();
153-
providedTypes.add(type);
154152
provides.add(type);
155153
}
154+
156155
for (final var provide : module.autoProvidesAspects()) {
157156
var type = wrapAspect(provide.getTypeName());
158-
providedTypes.add(type);
159157
provides.add(type);
160158
}
161159

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

174-
for (final String providedType : providedTypes) {
175-
moduleWriter.write(providedType);
176-
moduleWriter.write("\n");
177-
}
178-
179-
moduleWriter.write("\nExternal Module Type|Provides|Requires");
172+
moduleWriter.write("External Module Type|Provides|Requires");
180173
for (ModuleData avajeModule : modules) {
181174
moduleWriter.write("\n");
182175
moduleWriter.write(avajeModule.name());

inject-test/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>io.avaje</groupId>
66
<artifactId>avaje-inject-parent</artifactId>
7-
<version>10.1</version>
7+
<version>10.2-RC1</version>
88
</parent>
99

1010
<artifactId>avaje-inject-test</artifactId>

inject/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>io.avaje</groupId>
66
<artifactId>avaje-inject-parent</artifactId>
7-
<version>10.1</version>
7+
<version>10.2-RC1</version>
88
</parent>
99

1010
<artifactId>avaje-inject</artifactId>

jakarta-to-javax.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>
77
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-aop/pom.xml
88
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-events/pom.xml
99
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-generator/pom.xml
10+
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-maven-plugin/pom.xml
1011
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' inject-test/pom.xml
1112
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' blackbox-aspect/pom.xml
1213
sed -i -E '0,/<version>[^<]*<\/version>/ s/<version>([^-]*)-?([^<]*)(<\/version>)/<version>\1-javax\2\3/' blackbox-other/pom.xml

javax-to-jakarta.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject/pom.xml
77
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-aop/pom.xml
88
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-events/pom.xml
99
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-generator/pom.xml
10+
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-maven-plugin/pom.xml
1011
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' inject-test/pom.xml
1112
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' blackbox-aspect/pom.xml
1213
sed -i 's/\(<version>[^<]*\)-javax\([^<]*<\/version>\)/\1\2/' blackbox-other/pom.xml

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>io.avaje</groupId>
55
<artifactId>avaje-inject-parent</artifactId>
6-
<version>10.1</version>
6+
<version>10.2-RC1</version>
77
<packaging>pom</packaging>
88
<name>avaje inject parent</name>
99
<description>parent pom for avaje inject library</description>

0 commit comments

Comments
 (0)