Skip to content

Commit 714abdf

Browse files
committed
Fix issue with workaround when no room library is configured
1 parent c7111b2 commit 714abdf

File tree

3 files changed

+198
-144
lines changed

3 files changed

+198
-144
lines changed

src/main/groovy/org/gradle/android/workarounds/RoomSchemaLocationWorkaround.groovy

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class RoomSchemaLocationWorkaround implements Workaround {
9494

9595
// Add a command line argument provider to the task-specific list of providers
9696
task.options.compilerArgumentProviders.add(
97-
new JavaCompilerRoomSchemaLocationArgumentProvider(taskSpecificSchemaDir)
97+
new JavaCompilerRoomSchemaLocationArgumentProvider(roomExtension.schemaLocationDir, taskSpecificSchemaDir)
9898
)
9999

100100
// Register the generated schemas to be merged back to the original specified schema directory
@@ -118,7 +118,7 @@ class RoomSchemaLocationWorkaround implements Workaround {
118118
applyToAllAndroidVariants(project) { variant ->
119119
def variantSpecificSchemaDir = project.objects.directoryProperty()
120120
variantSpecificSchemaDir.set(getVariantSpecificSchemaDir(project, "kapt${variant.name.capitalize()}Kotlin"))
121-
variant.javaCompileOptions.annotationProcessorOptions.compilerArgumentProviders.add(new KaptRoomSchemaLocationArgumentProvider(variantSpecificSchemaDir))
121+
variant.javaCompileOptions.annotationProcessorOptions.compilerArgumentProviders.add(new KaptRoomSchemaLocationArgumentProvider(roomExtension.schemaLocationDir, variantSpecificSchemaDir))
122122

123123
// Register the variant-specific directory with the merge task
124124
roomExtension.registerOutputDirectory(variantSpecificSchemaDir)
@@ -290,10 +290,14 @@ class RoomSchemaLocationWorkaround implements Workaround {
290290
}
291291

292292
static abstract class RoomSchemaLocationArgumentProvider implements CommandLineArgumentProvider {
293+
@Internal
294+
final Provider<Directory> configuredSchemaLocationDir
295+
293296
@OutputDirectory
294-
Provider<Directory> schemaLocationDir
297+
final Provider<Directory> schemaLocationDir
295298

296-
RoomSchemaLocationArgumentProvider(Provider<Directory> schemaLocationDir) {
299+
RoomSchemaLocationArgumentProvider(Provider<Directory> configuredSchemaLocationDir, Provider<Directory> schemaLocationDir) {
300+
this.configuredSchemaLocationDir = configuredSchemaLocationDir
297301
this.schemaLocationDir = schemaLocationDir
298302
}
299303

@@ -304,7 +308,7 @@ class RoomSchemaLocationWorkaround implements Workaround {
304308

305309
@Override
306310
Iterable<String> asArguments() {
307-
if (schemaLocationDir.isPresent()) {
311+
if (configuredSchemaLocationDir.isPresent()) {
308312
return ["-A${ROOM_SCHEMA_LOCATION}=${schemaLocationPath}" as String]
309313
} else {
310314
return []
@@ -313,16 +317,16 @@ class RoomSchemaLocationWorkaround implements Workaround {
313317
}
314318

315319
static class JavaCompilerRoomSchemaLocationArgumentProvider extends RoomSchemaLocationArgumentProvider {
316-
JavaCompilerRoomSchemaLocationArgumentProvider(Provider<Directory> schemaLocationDir) {
317-
super(schemaLocationDir)
320+
JavaCompilerRoomSchemaLocationArgumentProvider(Provider<Directory> configuredSchemaLocationDir, Provider<Directory> schemaLocationDir) {
321+
super(configuredSchemaLocationDir, schemaLocationDir)
318322
}
319323
}
320324

321325
static class KaptRoomSchemaLocationArgumentProvider extends RoomSchemaLocationArgumentProvider {
322326
private Provider<Directory> temporarySchemaLocationDir
323327

324-
KaptRoomSchemaLocationArgumentProvider(Provider<Directory> schemaLocationDir) {
325-
super(schemaLocationDir)
328+
KaptRoomSchemaLocationArgumentProvider(Provider<Directory> configuredSchemaLocationDir, Provider<Directory> schemaLocationDir) {
329+
super(configuredSchemaLocationDir, schemaLocationDir)
326330
this.temporarySchemaLocationDir = schemaLocationDir.map {it.dir("../${it.asFile.name}Temp") }
327331
}
328332

@@ -333,8 +337,8 @@ class RoomSchemaLocationWorkaround implements Workaround {
333337
}
334338

335339
static class MergeAssociations {
336-
ObjectFactory objectFactory
337-
Map<Provider<Directory>, ConfigurableFileCollection> mergeAssociations = [:]
340+
final ObjectFactory objectFactory
341+
final Map<Provider<Directory>, ConfigurableFileCollection> mergeAssociations = [:]
338342

339343
@Inject
340344
MergeAssociations(ObjectFactory objectFactory) {

src/test/groovy/org/gradle/android/RoomSchemaLocationWorkaroundTest.groovy

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,34 @@ class RoomSchemaLocationWorkaroundTest extends AbstractTest {
277277
assertNotExecuted(buildResult, ':app:mergeRoomSchemaLocations')
278278
}
279279
280+
def "builds with no errors when room library is not on the classpath"() {
281+
def androidVersion = Versions.getLatestVersionForAndroid("4.1")
282+
SimpleAndroidApp.builder(temporaryFolder.root, cacheDir)
283+
.withAndroidVersion(androidVersion)
284+
.withNoRoomLibrary()
285+
.build()
286+
.writeProject()
287+
288+
cacheDir.deleteDir()
289+
cacheDir.mkdirs()
290+
291+
when:
292+
BuildResult buildResult = withGradleVersion(Versions.latestSupportedGradleVersionFor(androidVersion).version)
293+
.forwardOutput()
294+
.withProjectDir(temporaryFolder.root)
295+
.withArguments(CLEAN_BUILD)
296+
.build()
297+
298+
then:
299+
noExceptionThrown()
300+
301+
and:
302+
assertNotExecuted(buildResult, ':app:mergeRoomSchemaLocations')
303+
304+
and:
305+
!buildResult.output.contains('warning: The following options were not recognized by any processor: \'[room.schemaLocation')
306+
}
307+
280308
void assertNotExecuted(buildResult, String taskPath) {
281309
assert !buildResult.tasks.collect {it.path }.contains(taskPath)
282310
}

0 commit comments

Comments
 (0)