diff options
author | Yigit Boyar <yboyar@google.com> | 2015-04-28 18:19:26 -0700 |
---|---|---|
committer | Yigit Boyar <yboyar@google.com> | 2015-04-28 18:19:26 -0700 |
commit | be83770af82294c1841eef414513653646b88dc6 (patch) | |
tree | 9886ca4538823330ab21795113f080183917b774 /gradlePlugin | |
parent | d33691a5725244f1bb5c4491af81b9fc67e0f39f (diff) | |
download | data-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.kt | 36 | ||||
-rw-r--r-- | gradlePlugin/src/main/kotlin/DataBindingProcessLayoutsTask.kt | 9 | ||||
-rw-r--r-- | gradlePlugin/src/main/kotlin/plugin.kt | 100 |
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 } |