Skip to content

Commit

Permalink
Discover Android source sets (#98)
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewparmet authored Oct 10, 2022
1 parent a2cedef commit f115e0d
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 11 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
org.gradle.jvmargs=-Xmx1024m
org.gradle.jvmargs=-Xmx3g
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,19 @@ import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.plugins.AppliedPlugin
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.tasks.SourceSetContainer
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.getByName
import org.gradle.kotlin.dsl.register
import org.gradle.kotlin.dsl.the
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import kotlin.reflect.KProperty1
import kotlin.reflect.full.declaredMemberProperties

const val CREATE_SYM_LINKS_TO_MODULES_TASK_NAME = "createSymLinksToModules"
const val WRITE_WORKSPACE_YAML_TASK_NAME = "writeWorkspaceYaml"
Expand Down Expand Up @@ -105,14 +109,22 @@ private fun Task.allProtoDirs(): List<Path> =
(project.srcProtoDirs() + extractProtoDirs()).filter { project.anyProtos(it) }

internal fun Project.srcProtoDirs() =
the<SourceSetContainer>().flatMap { sourceSet ->
sourceSet.extensions
.getByName("proto")
.let { it as SourceDirectorySet }
.srcDirs
.map { projectDir.toPath().relativize(it.toPath()) }
.filter { anyProtos(it) }
}
the<SourceSetContainer>().flatMap { it.protoDirs(this) } + androidSrcProtoDirs()

private fun Project.androidSrcProtoDirs() =
extensions.findByName("android")
?.let { baseExtension ->
val prop = baseExtension::class.declaredMemberProperties.single { it.name == "sourceSets" }
@Suppress("UNCHECKED_CAST")
(prop as KProperty1<Any, Set<ExtensionAware>>).get(baseExtension)
}
.orEmpty()
.flatMap { it.protoDirs(this) }

private fun ExtensionAware.protoDirs(project: Project) =
extensions.getByName<SourceDirectorySet>("proto").srcDirs
.map { project.projectDir.toPath().relativize(it.toPath()) }
.filter { project.anyProtos(it) }

private fun extractProtoDirs() =
listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

package com.parmet.buf.gradle

import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Test

class FormatCheckWithProtobufGradleTest : AbstractFormatCheckTest() {
Expand Down Expand Up @@ -50,7 +49,6 @@ class FormatCheckWithProtobufGradleTest : AbstractFormatCheckTest() {
}

@Test
@Disabled("TODO: Discover Android source sets properly")
fun `format an incorrect message with the android library plugin`() {
assertBadWhitespace()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.parmet.buf">
</manifest>

0 comments on commit f115e0d

Please sign in to comment.