Skip to content

Commit 99723e3

Browse files
TWiStErRobsjudd
authored andcommitted
Fix best guess related APT compiler crash with underscore in package name.
1 parent a1f5f10 commit 99723e3

File tree

5 files changed

+175
-3
lines changed

5 files changed

+175
-3
lines changed

annotation/compiler/src/main/java/com/bumptech/glide/annotation/compiler/AppModuleGenerator.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,12 @@ private MethodSpec generateConstructor(ClassName appGlideModule,
250250
"Discovered AppGlideModule from annotation: " + appGlideModule);
251251
// Excluded GlideModule classes from the manifest are logged in Glide's singleton.
252252
for (String glideModule : libraryGlideModuleClassNames) {
253-
ClassName moduleClassName = ClassName.bestGuess(glideModule);
254253
if (excludedGlideModuleClassNames.contains(glideModule)) {
255254
constructorBuilder.addStatement("$T.d($S, $S)", androidLogName, GLIDE_LOG_TAG,
256-
"AppGlideModule excludes LibraryGlideModule from annotation: " + moduleClassName);
255+
"AppGlideModule excludes LibraryGlideModule from annotation: " + glideModule);
257256
} else {
258257
constructorBuilder.addStatement("$T.d($S, $S)", androidLogName, GLIDE_LOG_TAG,
259-
"Discovered LibraryGlideModule from annotation: " + moduleClassName);
258+
"Discovered LibraryGlideModule from annotation: " + glideModule);
260259
}
261260
}
262261
constructorBuilder.endControlFlow();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.bumptech.glide.annotation.compiler;
2+
3+
import static com.bumptech.glide.annotation.compiler.test.Util.appResource;
4+
import static com.bumptech.glide.annotation.compiler.test.Util.asUnixChars;
5+
import static com.bumptech.glide.annotation.compiler.test.Util.glide;
6+
import static com.bumptech.glide.annotation.compiler.test.Util.subpackage;
7+
import static com.google.testing.compile.CompilationSubject.assertThat;
8+
import static com.google.testing.compile.Compiler.javac;
9+
10+
import com.bumptech.glide.annotation.compiler.test.ReferencedResource;
11+
import com.bumptech.glide.annotation.compiler.test.RegenerateResourcesRule;
12+
import com.bumptech.glide.annotation.compiler.test.Util;
13+
import com.google.testing.compile.Compilation;
14+
import java.io.IOException;
15+
import javax.tools.JavaFileObject;
16+
import org.junit.Before;
17+
import org.junit.Rule;
18+
import org.junit.Test;
19+
import org.junit.runner.RunWith;
20+
import org.junit.runners.JUnit4;
21+
22+
/**
23+
* Tests AppGlideModules that use the @Excludes annotation
24+
* with a single excluded Module class in a strangely named subpackage.
25+
*/
26+
@RunWith(JUnit4.class)
27+
public class AppGlideModuleWithLibraryInPackageTest {
28+
@Rule public final RegenerateResourcesRule regenerateResourcesRule =
29+
new RegenerateResourcesRule(getClass());
30+
private Compilation compilation;
31+
32+
@Before
33+
public void setUp() {
34+
compilation =
35+
javac()
36+
.withProcessors(new GlideAnnotationProcessor())
37+
.compile(
38+
forResource("AppModuleWithLibraryInPackage.java"),
39+
forResource("LibraryModuleInPackage.java"));
40+
assertThat(compilation).succeededWithoutWarnings();
41+
}
42+
43+
@Test
44+
@ReferencedResource
45+
public void compilation_generatesExpectedGlideOptionsClass() throws IOException {
46+
assertThat(compilation)
47+
.generatedSourceFile(subpackage("GlideOptions"))
48+
.contentsAsUtf8String()
49+
.isEqualTo(asUnixChars(appResource("GlideOptions.java").getCharContent(true)));
50+
}
51+
52+
@Test
53+
@ReferencedResource
54+
public void compilation_generatesExpectedGlideRequestClass() throws IOException {
55+
assertThat(compilation)
56+
.generatedSourceFile(subpackage("GlideRequest"))
57+
.contentsAsUtf8String()
58+
.isEqualTo(asUnixChars(appResource("GlideRequest.java").getCharContent(true)));
59+
}
60+
61+
@Test
62+
@ReferencedResource
63+
public void compilation_generatesExpectedGlideRequestsClass() throws IOException {
64+
assertThat(compilation)
65+
.generatedSourceFile(subpackage("GlideRequests"))
66+
.contentsAsUtf8String()
67+
.isEqualTo(asUnixChars(appResource("GlideRequests.java").getCharContent(true)));
68+
}
69+
70+
@Test
71+
@ReferencedResource
72+
public void compilationGeneratesExpectedGlideAppClass() throws IOException {
73+
assertThat(compilation)
74+
.generatedSourceFile(subpackage("GlideApp"))
75+
.contentsAsUtf8String()
76+
.isEqualTo(asUnixChars(appResource("GlideApp.java").getCharContent(true)));
77+
}
78+
79+
@Test
80+
public void compilation_generatesExpectedGeneratedAppGlideModuleImpl() throws IOException {
81+
assertThat(compilation)
82+
.generatedSourceFile(glide("GeneratedAppGlideModuleImpl"))
83+
.contentsAsUtf8String()
84+
.isEqualTo(
85+
asUnixChars(forResource("GeneratedAppGlideModuleImpl.java").getCharContent(true)));
86+
}
87+
88+
@Test
89+
@ReferencedResource
90+
public void compilation_generatesExpectedGeneratedRequestManagerFactory() throws IOException {
91+
assertThat(compilation)
92+
.generatedSourceFile(glide("GeneratedRequestManagerFactory"))
93+
.contentsAsUtf8String()
94+
.isEqualTo(
95+
asUnixChars(appResource("GeneratedRequestManagerFactory.java").getCharContent(true)));
96+
}
97+
98+
private JavaFileObject forResource(String name) {
99+
return Util.forResource(getClass().getSimpleName(), name);
100+
}
101+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.bumptech.glide.test;
2+
3+
import com.bumptech.glide.annotation.Excludes;
4+
import com.bumptech.glide.annotation.GlideModule;
5+
import com.bumptech.glide.module.AppGlideModule;
6+
import com.bumptech.glide.test._package.LibraryModuleInPackage;
7+
8+
@GlideModule
9+
@Excludes(LibraryModuleInPackage.class)
10+
public final class AppModuleWithLibraryInPackage extends AppGlideModule {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.bumptech.glide;
2+
3+
import android.content.Context;
4+
import android.support.annotation.NonNull;
5+
import android.util.Log;
6+
import com.bumptech.glide.test.AppModuleWithLibraryInPackage;
7+
import java.lang.Class;
8+
import java.lang.Override;
9+
import java.lang.SuppressWarnings;
10+
import java.util.HashSet;
11+
import java.util.Set;
12+
13+
@SuppressWarnings("deprecation")
14+
final class GeneratedAppGlideModuleImpl extends GeneratedAppGlideModule {
15+
private final AppModuleWithLibraryInPackage appGlideModule;
16+
17+
GeneratedAppGlideModuleImpl() {
18+
appGlideModule = new AppModuleWithLibraryInPackage();
19+
if (Log.isLoggable("Glide", Log.DEBUG)) {
20+
Log.d("Glide", "Discovered AppGlideModule from annotation: com.bumptech.glide.test.AppModuleWithLibraryInPackage");
21+
Log.d("Glide", "AppGlideModule excludes LibraryGlideModule from annotation: com.bumptech.glide.test._package.LibraryModuleInPackage");
22+
}
23+
}
24+
25+
@Override
26+
public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
27+
appGlideModule.applyOptions(context, builder);
28+
}
29+
30+
@Override
31+
public void registerComponents(@NonNull Context context, @NonNull Glide glide,
32+
@NonNull Registry registry) {
33+
appGlideModule.registerComponents(context, glide, registry);
34+
}
35+
36+
@Override
37+
public boolean isManifestParsingEnabled() {
38+
return appGlideModule.isManifestParsingEnabled();
39+
}
40+
41+
@Override
42+
@NonNull
43+
public Set<Class<?>> getExcludedModuleClasses() {
44+
Set<Class<?>> excludedClasses = new HashSet<Class<?>>();
45+
excludedClasses.add(com.bumptech.glide.test._package.LibraryModuleInPackage.class);
46+
return excludedClasses;
47+
}
48+
49+
@Override
50+
@NonNull
51+
GeneratedRequestManagerFactory getRequestManagerFactory() {
52+
return new GeneratedRequestManagerFactory();
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// _ in the name is important otherwise everything would work
2+
package com.bumptech.glide.test._package;
3+
4+
import com.bumptech.glide.annotation.GlideModule;
5+
import com.bumptech.glide.module.LibraryGlideModule;
6+
7+
@GlideModule
8+
public final class LibraryModuleInPackage extends LibraryGlideModule {}

0 commit comments

Comments
 (0)