From d4fcb59965883853af25760b59ae7333a4f0db3c Mon Sep 17 00:00:00 2001 From: NataliaUkhorskaya Date: Fri, 15 Jan 2016 14:49:02 +0300 Subject: [PATCH] Gradle plugin: fix compatibility with android-gradle plugin 2.0.0-alpha5 #KT-10676 Fixed --- .../kotlin/gradle/plugin/KotlinPlugin.kt | 2 +- .../android/AndroidGradleWrapper.groovy | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index dbd743c3e06..5b90e9d3b5f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -399,7 +399,7 @@ open class KotlinAndroidPlugin @Inject constructor(val scriptHandler: ScriptHand // getJavaSources should return the Java sources used for compilation // We want to collect only generated files, like R-class output dir // Actual java sources will be collected later - val additionalSourceFiles = variantData.getJavaSources().filterIsInstance(javaClass()) + val additionalSourceFiles = AndroidGradleWrapper.getGeneratedSourceDirs(variantData) for (file in additionalSourceFiles) { kotlinTask.source(file) logger.kotlinDebug("Source directory with generated files ${file.getAbsolutePath()} was added to kotlin source for $kotlinTaskName") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy index 774d43716a7..c2eaf5b1e8d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/android/AndroidGradleWrapper.groovy @@ -7,6 +7,7 @@ import com.android.build.gradle.api.ApkVariant import com.android.build.gradle.api.BaseVariant import com.android.build.gradle.api.TestVariant import com.android.build.gradle.internal.VariantManager +import com.android.build.gradle.internal.variant.BaseVariantData import org.gradle.api.internal.DefaultDomainObjectSet import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.util.PatternFilterable @@ -102,4 +103,37 @@ class AndroidGradleWrapper { static def VariantManager getVariantDataManager(BasePlugin plugin) { return plugin.getVariantManager() } + + static def List getGeneratedSourceDirs(BaseVariantData variantData) { + def getJavaSourcesMethod = variantData.getMetaClass().getMetaMethod("getJavaSources") + if (getJavaSourcesMethod.returnType.metaClass == Object[].metaClass) { + return variantData.getJavaSources().findAll { it instanceof File } + } + else { + def result = new ArrayList() + + if (variantData.scope.getGenerateRClassTask() != null) { + result.add(variantData.scope.getRClassSourceOutputDir()); + } + + if (variantData.scope.getGenerateBuildConfigTask() != null) { + result.add(variantData.scope.getBuildConfigSourceOutputDir()); + } + + if (variantData.scope.getAidlCompileTask() != null) { + result.add(variantData.scope.getAidlSourceOutputDir()); + } + + if (variantData.scope.getGlobalScope().getExtension().getDataBinding().isEnabled()) { + result.add(variantData.scope.getClassOutputForDataBinding()); + } + + if (!variantData.variantConfiguration.getRenderscriptNdkModeEnabled() + && variantData.scope.getRenderscriptCompileTask() != null) { + result.add(variantData.scope.getRenderscriptSourceOutputDir()); + } + + return result + } + } }