Skip to content

Commit 6348748

Browse files
author
Markus Ritter
committed
added fix and test for #180
(cherry picked from commit 3dfb16b)
1 parent d529af8 commit 6348748

File tree

5 files changed

+71
-3
lines changed

5 files changed

+71
-3
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ List<MetaData> createFactoryMethodMeta() {
142142
}
143143

144144
MetaData createMeta() {
145+
String type;
146+
if (beanType.getNestingKind().isNested()) {
147+
type = beanType.getEnclosingElement().toString() + "$" + beanType.getSimpleName();
148+
} else {
149+
type = beanType.getQualifiedName().toString();
150+
}
145151
MetaData metaData = new MetaData(type, name);
146152
metaData.update(this);
147153
return metaData;

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,22 @@ class SimpleBeanWriter {
3131
this.context = context;
3232
TypeElement origin = beanReader.getBeanType();
3333
this.originName = origin.getQualifiedName().toString();
34-
this.shortName = origin.getSimpleName().toString();
35-
this.packageName = Util.packageOf(originName);
34+
if (origin.getNestingKind().isNested()) {
35+
this.packageName = Util.nestedPackageOf(originName);
36+
this.shortName = Util.nestedShortName(originName);
37+
} else {
38+
this.packageName = Util.packageOf(originName);
39+
this.shortName = Util.shortName(originName);
40+
}
3641
this.suffix = beanReader.suffix();
3742
this.proxied = beanReader.isGenerateProxy();
3843
}
3944

4045
private Writer createFileWriter() throws IOException {
46+
String originName = this.originName;
47+
if (beanReader.getBeanType().getNestingKind().isNested()) {
48+
originName = originName.replace(shortName, shortName.replace(".", "$"));
49+
}
4150
JavaFileObject jfo = context.createWriter(originName + suffix);
4251
return jfo.openWriter();
4352
}
@@ -66,7 +75,7 @@ private void writeGenericProviders() {
6675
final String sn = type.shortName();
6776
writer.append(" public static Provider<");
6877
type.writeShort(writer);
69-
writer.append("> provider%s(Builder builder) {", sn).eol();
78+
writer.append("> provider%s(Builder builder) {", sn).eol();
7079
writer.append(" return builder.getProviderFor(%s.class, TYPE_%s);", shortName, sn).eol();
7180
writer.append(" }").eol();
7281
}
@@ -221,6 +230,10 @@ private void writeClassStart() {
221230
if (beanReader.isRequestScopedController()) {
222231
writer.append(Constants.AT_SINGLETON).eol();
223232
}
233+
String shortName = this.shortName;
234+
if (beanReader.getBeanType().getNestingKind().isNested()) {
235+
shortName = shortName.replace(".", "$");
236+
}
224237
writer.append("public class ").append(shortName).append(suffix).append(" ");
225238
if (beanReader.isRequestScopedController()) {
226239
writer.append("implements ");

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import jakarta.inject.Named;
44
import jakarta.inject.Qualifier;
5+
56
import javax.lang.model.element.AnnotationMirror;
67
import javax.lang.model.element.Element;
78
import javax.lang.model.type.DeclaredType;
@@ -46,6 +47,15 @@ static String trimGenerics(String type) {
4647
return type.substring(0, i);
4748
}
4849

50+
static String nestedPackageOf(String cls) {
51+
int pos = cls.lastIndexOf('.');
52+
if (pos < 0) {
53+
return "";
54+
}
55+
pos = cls.lastIndexOf('.', pos - 1);
56+
return (pos == -1) ? "" : cls.substring(0, pos);
57+
}
58+
4959
static String packageOf(String cls) {
5060
int pos = cls.lastIndexOf('.');
5161
return (pos == -1) ? "" : cls.substring(0, pos);
@@ -73,6 +83,16 @@ static String initLower(String name) {
7383
return sb.toString();
7484
}
7585

86+
static String nestedShortName(String fullType) {
87+
int pos = fullType.lastIndexOf('.');
88+
if (pos < 0) {
89+
return fullType;
90+
} else {
91+
pos = fullType.lastIndexOf('.', pos - 1);
92+
return pos < 0 ? fullType : fullType.substring(pos + 1);
93+
}
94+
}
95+
7696
static String shortName(String fullType) {
7797
int p = fullType.lastIndexOf('.');
7898
if (p == -1) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.example.coffee;
2+
3+
import io.avaje.inject.BeanScope;
4+
import org.example.coffee.factory.BFact;
5+
import org.example.coffee.factory.BeanWithGenericInterface;
6+
import org.example.coffee.inner.InnerClassBean;
7+
import org.junit.jupiter.api.Test;
8+
9+
import static org.assertj.core.api.Assertions.assertThat;
10+
11+
class InnerClassBeanTest {
12+
13+
@Test
14+
void test() {
15+
try (BeanScope context = BeanScope.newBuilder().build()) {
16+
InnerClassBean.MyBean bean = context.get(InnerClassBean.MyBean.class);
17+
assertThat(bean).isNotNull();
18+
}
19+
}
20+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.example.coffee.inner;
2+
3+
import jakarta.inject.Singleton;
4+
5+
public class InnerClassBean {
6+
@Singleton
7+
public static class MyBean {
8+
}
9+
}

0 commit comments

Comments
 (0)