Skip to content

Commit 48d78da

Browse files
committed
refactoring
1 parent 2aaeaaf commit 48d78da

File tree

4 files changed

+47
-21
lines changed

4 files changed

+47
-21
lines changed

compiler/src/main/java/io/jbock/simple/processor/ContextComponent.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package io.jbock.simple.processor;
22

33
import io.jbock.simple.Component;
4-
import io.jbock.simple.Provides;
54
import io.jbock.simple.processor.binding.ComponentElement;
65
import io.jbock.simple.processor.binding.InjectBindingFactory;
76
import io.jbock.simple.processor.binding.KeyFactory;
87
import io.jbock.simple.processor.graph.TopologicalSorter;
9-
import io.jbock.simple.processor.util.SafeElements;
108
import io.jbock.simple.processor.util.TypeTool;
119
import io.jbock.simple.processor.writing.Generator;
1210

compiler/src/main/java/io/jbock/simple/processor/step/ComponentStep.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ private void process(TypeElement typeElement) {
9191
ContextComponent componentComponent = ContextComponent.create(
9292
component, tool, injectBindingFactory, keyFactory);
9393
Generator generator = componentComponent.generator();
94-
List<Binding> sorted = componentComponent.topologicalSorter().sortedBindings();
95-
TypeSpec typeSpec = generator.generate(sorted);
94+
List<Binding> bindings = componentComponent.topologicalSorter().sortedBindings();
95+
TypeSpec typeSpec = generator.generate(bindings);
9696
specWriter.write(component.generatedClass(), typeSpec);
9797
}
9898
}

compiler/src/main/java/io/jbock/simple/processor/writing/ComponentImpl.java

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import javax.annotation.processing.Generated;
2020
import javax.lang.model.element.ExecutableElement;
2121
import java.util.Collection;
22-
import java.util.HashMap;
2322
import java.util.Map;
2423
import java.util.function.Function;
2524
import java.util.stream.Collectors;
@@ -33,22 +32,21 @@
3332
public class ComponentImpl {
3433

3534
private final ComponentElement component;
35+
private final Map<Key, NamedBinding> sorted;
36+
private final Function<Key, ParameterSpec> names;
3637

37-
@Inject
38-
public ComponentImpl(ComponentElement component) {
38+
private ComponentImpl(
39+
ComponentElement component,
40+
Map<Key, NamedBinding> sorted,
41+
Function<Key, ParameterSpec> names) {
3942
this.component = component;
43+
this.sorted = sorted;
44+
this.names = names;
4045
}
4146

42-
TypeSpec generate(Map<Key, NamedBinding> sorted) {
47+
TypeSpec generate() {
4348
TypeSpec.Builder spec = TypeSpec.classBuilder(component.generatedClass()).addSuperinterface(component.element().asType());
4449
MethodSpec.Builder constructor = MethodSpec.constructorBuilder().addModifiers(PRIVATE);
45-
Map<Key, ParameterSpec> parameterCache = new HashMap<>();
46-
Function<Key, ParameterSpec> names = key -> {
47-
return parameterCache.computeIfAbsent(key, k -> {
48-
String name = sorted.get(k).name();
49-
return ParameterSpec.builder(k.typeName(), name).build();
50-
});
51-
};
5250
for (NamedBinding namedBinding : sorted.values()) {
5351
Binding b = namedBinding.binding();
5452
Key key = b.key();
@@ -121,4 +119,19 @@ private TypeSpec createFactory(
121119
spec.addMethod(method.build());
122120
return spec.build();
123121
}
122+
123+
public static final class Factory {
124+
private final ComponentElement component;
125+
126+
@Inject
127+
public Factory(ComponentElement component) {
128+
this.component = component;
129+
}
130+
131+
ComponentImpl create(
132+
Map<Key, NamedBinding> sorted,
133+
Function<Key, ParameterSpec> names) {
134+
return new ComponentImpl(component, sorted, names);
135+
}
136+
}
124137
}

compiler/src/main/java/io/jbock/simple/processor/writing/Generator.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.jbock.simple.processor.writing;
22

3+
import io.jbock.javapoet.ParameterSpec;
34
import io.jbock.javapoet.TypeSpec;
45
import io.jbock.simple.Inject;
56
import io.jbock.simple.processor.binding.Binding;
@@ -8,37 +9,51 @@
89
import io.jbock.simple.processor.util.UniqueNameSet;
910

1011
import javax.lang.model.SourceVersion;
12+
import java.util.HashMap;
1113
import java.util.LinkedHashMap;
1214
import java.util.List;
1315
import java.util.Map;
16+
import java.util.function.Function;
1417

1518
public class Generator {
1619

17-
private final ComponentImpl componentImpl;
20+
private final ComponentImpl.Factory componentImpl;
1821
private final ComponentElement component;
1922

2023
@Inject
2124
public Generator(
22-
ComponentImpl componentImpl,
25+
ComponentImpl.Factory componentImpl,
2326
ComponentElement component) {
2427
this.componentImpl = componentImpl;
2528
this.component = component;
2629
}
2730

28-
public TypeSpec generate(List<Binding> sorted) {
29-
return componentImpl.generate(addNames(sorted));
31+
public TypeSpec generate(List<Binding> bindings) {
32+
Map<Key, NamedBinding> sorted = addNames(bindings);
33+
return componentImpl.create(sorted, createNames(sorted)).generate();
3034
}
3135

32-
Map<Key, NamedBinding> addNames(List<Binding> sorted) {
36+
private Map<Key, NamedBinding> addNames(List<Binding> bindings) {
3337
UniqueNameSet uniqueNameSet = new UniqueNameSet();
3438
Map<Key, NamedBinding> result = new LinkedHashMap<>();
35-
for (Binding b : sorted) {
39+
for (Binding b : bindings) {
3640
String name = uniqueNameSet.getUniqueName(validJavaName(b.suggestedVariableName()));
3741
result.put(b.key(), new NamedBinding(b, name, component.isComponentRequest(b)));
3842
}
3943
return result;
4044
}
4145

46+
private static Function<Key, ParameterSpec> createNames(
47+
Map<Key, NamedBinding> sorted) {
48+
Map<Key, ParameterSpec> cache = new HashMap<>();
49+
return key -> {
50+
return cache.computeIfAbsent(key, k -> {
51+
String name = sorted.get(k).name();
52+
return ParameterSpec.builder(k.typeName(), name).build();
53+
});
54+
};
55+
}
56+
4257
private static String validJavaName(String name) {
4358
if (SourceVersion.isIdentifier(name)) {
4459
return protectAgainstKeywords(name);

0 commit comments

Comments
 (0)