summaryrefslogtreecommitdiff
path: root/gradlePlugin
diff options
context:
space:
mode:
authorYigit Boyar <yboyar@google.com>2015-04-28 18:19:26 -0700
committerYigit Boyar <yboyar@google.com>2015-04-28 18:19:26 -0700
commitbe83770af82294c1841eef414513653646b88dc6 (patch)
tree9886ca4538823330ab21795113f080183917b774 /gradlePlugin
parentd33691a5725244f1bb5c4491af81b9fc67e0f39f (diff)
downloaddata-binding-be83770af82294c1841eef414513653646b88dc6.tar.gz
Move java-gen task to proper hook
Bug: 20640611
Diffstat (limited to 'gradlePlugin')
-rw-r--r--gradlePlugin/src/main/kotlin/DataBindingExportInfoTask.kt36
-rw-r--r--gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt9
-rw-r--r--gradlePlugin/src/main/kotlin/plugin.kt100
3 files changed, 86 insertions, 59 deletions
diff --git a/gradlePlugin/src/main/kotlin/DataBindingExportInfoTask.kt b/gradlePlugin/src/main/kotlin/DataBindingExportInfoTask.kt
new file mode 100644
index 00000000..77201e6a
--- /dev/null
+++ b/gradlePlugin/src/main/kotlin/DataBindingExportInfoTask.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.databinding.tool
+
+import org.gradle.api.DefaultTask
+import org.gradle.api.tasks.TaskAction
+import kotlin.properties.Delegates
+import android.databinding.tool.util.Log
+import java.io.File
+
+open class DataBindingExportInfoTask : DefaultTask() {
+ {
+ Log.d {"created data binding export info task"}
+ }
+ var xmlProcessor: LayoutXmlProcessor by Delegates.notNull()
+ var sdkDir : File by Delegates.notNull()
+ var xmlOutFolder : File by Delegates.notNull()
+ [TaskAction]
+ public fun doIt() {
+ Log.d {"running process layouts task"}
+ xmlProcessor.writeInfoClass(sdkDir, xmlOutFolder)
+ }
+} \ No newline at end of file
diff --git a/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt b/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt
index f3e1f1da..a40d5679 100644
--- a/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt
+++ b/gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt
@@ -23,17 +23,18 @@ import java.io.File
open class DataBindingProcessLayoutsTask : DefaultTask() {
{
- Log.d {"created data binding task"}
+ Log.d {"created data binding process resources task"}
}
var xmlProcessor: LayoutXmlProcessor by Delegates.notNull()
var sdkDir : File by Delegates.notNull()
+ var xmlOutFolder : File by Delegates.notNull()
[TaskAction]
public fun doIt() {
Log.d {"running process layouts task"}
xmlProcessor.processResources()
}
- public fun writeFiles(xmlOutFolder : File) {
- xmlProcessor.writeIntermediateFile(sdkDir, xmlOutFolder)
+ public fun writeLayoutXmls() {
+ xmlProcessor.writeLayoutInfoFiles(xmlOutFolder)
}
-} \ No newline at end of file
+}
diff --git a/gradlePlugin/src/main/kotlin/plugin.kt b/gradlePlugin/src/main/kotlin/plugin.kt
index fed754c5..ec731f77 100644
--- a/gradlePlugin/src/main/kotlin/plugin.kt
+++ b/gradlePlugin/src/main/kotlin/plugin.kt
@@ -72,9 +72,6 @@ class DataBinderPlugin : Plugin<Project> {
if (androidExt !is BaseExtension) {
return
}
- log("project build dir:${p.getBuildDir()}")
- // TODO this will differ per flavor
-
if (androidExt is AppExtension) {
createXmlProcessorForApp(p, androidExt)
} else if (androidExt is LibraryExtension) {
@@ -137,42 +134,29 @@ class DataBinderPlugin : Plugin<Project> {
val minSdkVersion = configuration.getMinSdkVersion()
val generateRTask = variantData.generateRClassTask
val packageName = generateRTask.getPackageForR()
- log("r task name $generateRTask . text symbols output dir: ${generateRTask.getTextSymbolOutputDir()}")
val fullName = configuration.getFullName()
- val sources = variantData.getJavaSources()
- sources.forEach({
- if (it is FileCollection) {
- it.forEach {
- log("sources for ${variantData} ${it}}")
- }
- } else {
- log("sources for ${variantData}: ${it}");
- }
- })
val resourceFolders = arrayListOf(variantData.mergeResourcesTask.getOutputDir())
- log("MERGE RES OUTPUT ${variantData.mergeResourcesTask.getOutputDir()}")
- val codeGenTargetFolder = generateRTask.getSourceOutputDir()
- // TODO unnecessary?
-
- // TODO attach to test module as well!
- variantData.addJavaSourceFoldersToModel(codeGenTargetFolder)
+ val codeGenTargetFolder = File("${project.getBuildDir()}/data-binding-info/${configuration.getDirName()}")
val writerOutBase = codeGenTargetFolder.getAbsolutePath();
val fileWriter = GradleFileWriter(writerOutBase)
val xmlProcessor = LayoutXmlProcessor(packageName, resourceFolders, fileWriter,
minSdkVersion.getApiLevel(), isLibrary)
val processResTask = generateRTask
-
- val xmlOutDir = "${project.getBuildDir()}/layout-info/${configuration.getDirName()}";
+ val xmlOutDir = File("${project.getBuildDir()}/layout-info/${configuration.getDirName()}")
log("xml output for ${variantData} is ${xmlOutDir}")
- val dataBindingTaskName = "dataBinding${processResTask.getName().capitalize()}"
- log("created task $dataBindingTaskName")
- project.getTasks().create(dataBindingTaskName,
+ val layoutTaskName = "dataBindingLayouts${processResTask.getName().capitalize()}"
+ val infoClassTaskName = "dataBindingInfoClass${processResTask.getName().capitalize()}"
+
+ var processLayoutsTask : DataBindingProcessLayoutsTask? = null
+ project.getTasks().create(layoutTaskName,
javaClass<DataBindingProcessLayoutsTask>(),
object : Action<DataBindingProcessLayoutsTask> {
override fun execute(task: DataBindingProcessLayoutsTask) {
+ processLayoutsTask = task
task.xmlProcessor = xmlProcessor
task.sdkDir = sdkDir
+ task.xmlOutFolder = xmlOutDir
Log.d { "TASK adding dependency on ${task} for ${processResTask}" }
processResTask.dependsOn(task)
processResTask.getDependsOn().filterNot { it == task }.forEach {
@@ -180,10 +164,22 @@ class DataBinderPlugin : Plugin<Project> {
task.dependsOn(it)
}
processResTask.doLast {
- task.writeFiles(File(xmlOutDir))
+ task.writeLayoutXmls()
}
}
- });
+ })
+ project.getTasks().create(infoClassTaskName,
+ javaClass<DataBindingExportInfoTask>(),
+ object : Action<DataBindingExportInfoTask>{
+ override fun execute(task: DataBindingExportInfoTask) {
+ task.dependsOn(processLayoutsTask!!)
+ task.dependsOn(processResTask)
+ task.xmlProcessor = xmlProcessor
+ task.sdkDir = sdkDir
+ task.xmlOutFolder = xmlOutDir
+ variantData.registerJavaGeneratingTask(task, codeGenTargetFolder)
+ }
+ })
if (isLibrary) {
val resourceSets = variantData.mergeResourcesTask.getInputResourceSets()
@@ -213,41 +209,35 @@ class DataBinderPlugin : Plugin<Project> {
val customBindings = ArrayList<String>()
resourceSets.forEach { set ->
- set.getSourceFiles().forEach { res ->
- val layoutDirs = res.listFiles(object : FileFilter {
- override fun accept(file : File?) : Boolean {
+ set.getSourceFiles().forEach({ res ->
+ res.listFiles(object : FileFilter {
+ override fun accept(file: File?): Boolean {
return file != null && file.isDirectory() &&
file.getName().toLowerCase().startsWith("layout")
}
- })
- if (layoutDirs != null) {
- layoutDirs.forEach { layoutDir ->
- val xmlFiles = layoutDir.listFiles(object : FileFilter {
- override fun accept(file: File?): Boolean {
- return file != null && !file.isDirectory() &&
- file.getName().toLowerCase().endsWith(".xml")
- }
- })
-
- if (xmlFiles != null) {
- xmlFiles.forEach { xmlFile : File ->
- val document = parseXml(xmlFile)
- val bindingClass = expr.evaluate(document)
- if (bindingClass != null && !bindingClass.isEmpty()) {
- if (bindingClass.startsWith('.')) {
- customBindings.add("${packageName}${bindingClass}")
- } else if (bindingClass.contains(".")) {
- customBindings.add(bindingClass)
- } else {
- customBindings.add(
- "${packageName}.databinding.${bindingClass}")
- }
- }
+ })?.forEach { layoutDir ->
+
+ layoutDir.listFiles(object : FileFilter {
+ override fun accept(file: File?): Boolean {
+ return file != null && !file.isDirectory() &&
+ file.getName().toLowerCase().endsWith(".xml")
+ }
+ })?.forEach { xmlFile: File ->
+ val document = parseXml(xmlFile)
+ val bindingClass = expr.evaluate(document)
+ if (bindingClass != null && !bindingClass.isEmpty()) {
+ if (bindingClass.startsWith('.')) {
+ customBindings.add("${packageName}${bindingClass}")
+ } else if (bindingClass.contains(".")) {
+ customBindings.add(bindingClass)
+ } else {
+ customBindings.add(
+ "${packageName}.databinding.${bindingClass}")
}
}
}
}
- }
+ })
}
return customBindings
}