Skip to content

Commit 13e34c5

Browse files
committed
issue #138: fix compilation error when using injection within an inner class
1 parent 517198f commit 13e34c5

File tree

3 files changed

+23
-13
lines changed

3 files changed

+23
-13
lines changed

dart-common/src/main/java/com/f2prateek/dart/common/InjectionTarget.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import java.util.Map;
2222
import javax.lang.model.type.TypeMirror;
2323

24-
public final class InjectionTarget {
24+
public final class InjectionTarget implements Comparable<InjectionTarget> {
2525
public final Map<String, ExtraInjection> injectionMap = new LinkedHashMap<>();
2626
public final String classPackage;
2727
public final String className;
@@ -57,4 +57,10 @@ private ExtraInjection getOrCreateExtraBinding(String key) {
5757
public String getFqcn() {
5858
return classPackage + "." + className;
5959
}
60+
61+
@Override
62+
public int compareTo(InjectionTarget o) {
63+
if (o == null) return 0;
64+
return -this.targetClass.compareTo(o.targetClass);
65+
}
6066
}

henson-processor/src/main/java/com/f2prateek/dart/henson/processor/HensonNavigatorGenerator.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import com.squareup.javapoet.TypeName;
1111
import com.squareup.javapoet.TypeSpec;
1212
import java.util.Collection;
13-
import java.util.HashSet;
13+
import java.util.TreeSet;
1414
import javax.lang.model.element.Modifier;
1515

1616
/**
@@ -29,7 +29,7 @@ public class HensonNavigatorGenerator extends BaseGenerator {
2929
public static final String HENSON_NAVIGATOR_CLASS_NAME = "Henson";
3030
public static final String WITH_CONTEXT_SET_STATE_CLASS_NAME = "WithContextSetState";
3131
private String packageName;
32-
private Collection<String> targetClassNames;
32+
private Collection<InjectionTarget> targets;
3333

3434
public HensonNavigatorGenerator(String packageName, Collection<InjectionTarget> targets) {
3535
if (packageName != null) {
@@ -38,7 +38,7 @@ public HensonNavigatorGenerator(String packageName, Collection<InjectionTarget>
3838
this.packageName = findCommonPackage(targets);
3939
}
4040

41-
this.targetClassNames = getClassNamesWhereHensonCanGoto(targets);
41+
this.targets = getTargetsWhereHensonCanGoto(targets);
4242
}
4343

4444
private String hensonNavigatorClassName() {
@@ -78,8 +78,8 @@ private void emitNavigationMethods(TypeSpec.Builder hensonNavigatorTypeBuilder)
7878
.addParameter(ClassName.get("android.content", "Context"), "context")
7979
.addStatement("this.context = context")
8080
.build());
81-
for (String targetClassName : targetClassNames) {
82-
emitNavigationMethod(withContextSetStateBuilder, targetClassName);
81+
for (InjectionTarget target : targets) {
82+
emitNavigationMethod(withContextSetStateBuilder, target);
8383
}
8484
hensonNavigatorTypeBuilder.addType(withContextSetStateBuilder.build());
8585
}
@@ -99,7 +99,10 @@ private void emitWith(TypeSpec.Builder builder) {
9999
builder.addMethod(gotoMethodBuilder.build());
100100
}
101101

102-
private void emitNavigationMethod(TypeSpec.Builder builder, String targetClassName) {
102+
private void emitNavigationMethod(TypeSpec.Builder builder, InjectionTarget target) {
103+
String targetClassName = target.targetClass;
104+
targetClassName =
105+
targetClassName.replace(target.className.replaceAll("\\$", "."), "") + target.className;
103106
TypeName intentBuilderClassName =
104107
ClassName.bestGuess(targetClassName + IntentBuilderGenerator.BUNDLE_BUILDER_SUFFIX);
105108
String simpleTargetClassName = targetClassName.substring(targetClassName.lastIndexOf('.') + 1);
@@ -147,13 +150,14 @@ private String findCommonPackage(String commonPackageName, String packageName) {
147150
return commonRoot;
148151
}
149152

150-
private Collection<String> getClassNamesWhereHensonCanGoto(Collection<InjectionTarget> targets) {
151-
Collection<String> classNames = new HashSet<>();
153+
private Collection<InjectionTarget> getTargetsWhereHensonCanGoto(
154+
Collection<InjectionTarget> targets) {
155+
Collection<InjectionTarget> canGotoTargets = new TreeSet<>();
152156
for (InjectionTarget injectionTarget : targets) {
153157
if (!injectionTarget.isAbstractTargetClass) {
154-
classNames.add(injectionTarget.targetClass);
158+
canGotoTargets.add(injectionTarget);
155159
}
156160
}
157-
return classNames;
161+
return canGotoTargets;
158162
}
159163
}

henson-processor/src/main/java/com/f2prateek/dart/henson/processor/IntentBuilderGenerator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ private void emitConstructor(TypeSpec.Builder intentBuilderTypeBuilder) {
8686
if (usesReflection) {
8787
emitGetClassDynamically(intentBuilderTypeBuilder);
8888
constructorBuilder.addStatement("intent = new Intent(context, getClassDynamically($S))",
89-
target.getFqcn());
89+
target.getFqcn().replaceAll("\\$", "."));
9090
} else {
9191
constructorBuilder.addStatement("intent = new Intent(context, $L.class)",
92-
target.className);
92+
target.className.replaceAll("\\$", "."));
9393
}
9494
intentBuilderTypeBuilder.addMethod(constructorBuilder.build());
9595
}

0 commit comments

Comments
 (0)