From 5f0d270e9e8239cb7ca7258566558d07a14ebd3a Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 29 Nov 2016 23:17:27 +0300 Subject: [PATCH] Kapt3: Clear javac's boot classpath (KT-15001) --- .../org/jetbrains/kotlin/gradle/Kapt3IT.kt | 11 ++++++ .../kapt2/kt15001/app/build.gradle | 34 +++++++++++++++++++ .../kapt2/kt15001/app/proguard-rules.pro | 17 ++++++++++ .../kt15001/app/src/main/AndroidManifest.xml | 19 +++++++++++ .../kt15001/app/src/main/java/MainActivity.kt | 15 ++++++++ .../kt15001/app/src/main/java/MyComponent.kt | 10 ++++++ .../kt15001/app/src/main/java/MyModule.kt | 15 ++++++++ .../app/src/main/res/layout/activity_main.xml | 19 +++++++++++ .../app/src/main/res/values-w820dp/dimens.xml | 6 ++++ .../app/src/main/res/values/colors.xml | 6 ++++ .../app/src/main/res/values/dimens.xml | 5 +++ .../app/src/main/res/values/strings.xml | 3 ++ .../app/src/main/res/values/styles.xml | 11 ++++++ .../testProject/kapt2/kt15001/build.gradle | 21 ++++++++++++ .../kapt2/kt15001/gradle.properties | 1 + .../testProject/kapt2/kt15001/settings.gradle | 1 + .../kotlin/kapt3/annotationProcessing.kt | 8 ++++- .../AbstractKotlinKapt3IntegrationTest.kt | 3 +- .../kapt3/test/AbstractKotlinKapt3Test.kt | 2 +- .../kotlin/kapt3/test/JavaKaptContextTest.kt | 3 +- .../converter/methodPropertySignatureClash.kt | 0 21 files changed, 206 insertions(+), 4 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/proguard-rules.pro create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/AndroidManifest.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MainActivity.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyComponent.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyModule.kt create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/layout/activity_main.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values-w820dp/dimens.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/colors.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/dimens.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/strings.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/styles.xml create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/build.gradle create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/gradle.properties create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/settings.gradle create mode 100644 plugins/kapt3/testData/converter/methodPropertySignatureClash.kt diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt index 61aba5ac0db..7c7436d1e66 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3IT.kt @@ -159,6 +159,17 @@ class Kapt3IT : BaseGradleIT() { } } + @Test + fun testKt15001() { + val project = Project("kt15001", GRADLE_VERSION, directoryPrefix = "kapt2") + val options = androidBuildOptions() + + project.build("compileReleaseSources", options = options) { + assertSuccessful() + assertKaptSuccessful() + } + } + @Test fun testDbFlow() { val project = Project("android-dbflow", GRADLE_VERSION, directoryPrefix = "kapt2") diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/build.gradle new file mode 100644 index 00000000000..8f3d20cd60a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/build.gradle @@ -0,0 +1,34 @@ +apply plugin: 'android-sdk-manager' +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion 23 + buildToolsVersion "23.0.1" + + defaultConfig { + applicationId "com.example.kt15001" + minSdkVersion 23 + targetSdkVersion 23 + versionCode 1 + versionName "1.0" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + compile fileTree(dir: 'libs', include: ['*.jar']) + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" + + compile 'com.google.dagger:dagger:2.8' + kapt 'com.google.dagger:dagger-compiler:2.8' + + compile 'com.android.support:appcompat-v7:23.3.0' +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/proguard-rules.pro b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/proguard-rules.pro new file mode 100644 index 00000000000..039a2eaa556 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/proguard-rules.pro @@ -0,0 +1,17 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in /Users/bradcampbell/Library/Android/sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/AndroidManifest.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000000..2dc0faad8a5 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/AndroidManifest.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MainActivity.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MainActivity.kt new file mode 100644 index 00000000000..64d58d676ac --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MainActivity.kt @@ -0,0 +1,15 @@ +package com.example.kt15001 + +import android.content.Context +import android.support.v7.app.AppCompatActivity +import android.os.Bundle +import javax.inject.Inject + +class MainActivity : AppCompatActivity() { + @Inject lateinit var context: Context + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyComponent.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyComponent.kt new file mode 100644 index 00000000000..9347bc5931c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyComponent.kt @@ -0,0 +1,10 @@ +package com.example.kt15001 + +import dagger.Component +import javax.inject.Singleton + +@Singleton +@Component(modules = arrayOf(MyModule::class)) +interface MyComponent { + fun inject(activity: MainActivity) +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyModule.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyModule.kt new file mode 100644 index 00000000000..0287ddd2c17 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/java/MyModule.kt @@ -0,0 +1,15 @@ +package com.example.kt15001 + +import android.content.Context +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +@Module +class MyModule(private val context: Context) { + @Provides @Singleton fun provideContext() = context + + override fun hashCode(): Int { + return super.hashCode() + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/layout/activity_main.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/layout/activity_main.xml new file mode 100644 index 00000000000..51af5231f5c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values-w820dp/dimens.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values-w820dp/dimens.xml new file mode 100644 index 00000000000..308a1947aff --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values-w820dp/dimens.xml @@ -0,0 +1,6 @@ + + + 64dp + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/colors.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/colors.xml new file mode 100644 index 00000000000..5a077b3a78f --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/colors.xml @@ -0,0 +1,6 @@ + + + #3F51B5 + #303F9F + #FF4081 + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/dimens.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/dimens.xml new file mode 100644 index 00000000000..acf94cc67b3 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 16dp + 16dp + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/strings.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/strings.xml new file mode 100644 index 00000000000..47c91964612 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Kapt2DaggerBug + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/styles.xml b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/styles.xml new file mode 100644 index 00000000000..705be277649 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/app/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/build.gradle new file mode 100644 index 00000000000..8775ff8d1c2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/build.gradle @@ -0,0 +1,21 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + ext.kotlin_version = "0.1-SNAPSHOT" + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.+' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath "com.jakewharton.sdkmanager:gradle-plugin:0.12.+" + } +} + +allprojects { + repositories { + mavenLocal() + mavenCentral() + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/gradle.properties new file mode 100644 index 00000000000..dc3793168f1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/gradle.properties @@ -0,0 +1 @@ +kapt.verbose=true \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/settings.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/settings.gradle new file mode 100644 index 00000000000..e7b4def49cb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/kt15001/settings.gradle @@ -0,0 +1 @@ +include ':app' diff --git a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt index 175c74fcb5b..d08c34b4606 100644 --- a/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt +++ b/plugins/kapt3/src/org/jetbrains/kotlin/kapt3/annotationProcessing.kt @@ -37,10 +37,16 @@ fun KaptContext.doAnnotationProcessing( annotationProcessingClasspath: List, sourcesOutputDir: File, classesOutputDir: File, - additionalSources: JavacList = JavacList.nil() + additionalSources: JavacList = JavacList.nil(), + withJdk: Boolean = false ) { with (options) { put(Option.PROC, "only") // Only process annotations + + if (!withJdk) { + put(Option.BOOTCLASSPATH, "") // No boot classpath + } + put(Option.CLASSPATH, compileClasspath.joinToString(File.pathSeparator) { it.canonicalPath }) put(Option.PROCESSORPATH, annotationProcessingClasspath.joinToString(File.pathSeparator) { it.canonicalPath }) put(Option.S, sourcesOutputDir.canonicalPath) diff --git a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3IntegrationTest.kt b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3IntegrationTest.kt index 04b8d22bad9..d9355e66eef 100644 --- a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3IntegrationTest.kt +++ b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3IntegrationTest.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF +import org.jetbrains.kotlin.utils.PathUtil import java.io.File import java.nio.file.Files import javax.annotation.processing.Completion @@ -139,7 +140,7 @@ abstract class AbstractKotlinKapt3IntegrationTest : CodegenTestCase() { javaSourceRoots: List, outputDir: File, options: Map - ) : AbstractKapt3Extension(emptyList(), emptyList(), javaSourceRoots, outputDir, outputDir, + ) : AbstractKapt3Extension(PathUtil.getJdkClassesRoots(), emptyList(), javaSourceRoots, outputDir, outputDir, options, true, System.currentTimeMillis(), KaptLogger(true) ) { internal var savedStubs: String? = null diff --git a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3Test.kt b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3Test.kt index 4e82ad02d15..303c5e6b949 100644 --- a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3Test.kt +++ b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/AbstractKotlinKapt3Test.kt @@ -102,7 +102,7 @@ abstract class AbstractKotlinKaptContextTest : AbstractKotlinKapt3Test() { kaptRunner.doAnnotationProcessing(emptyList(), listOf(JavaKaptContextTest.simpleProcessor()), compileClasspath = emptyList(), annotationProcessingClasspath = emptyList(), sourcesOutputDir = sourceOutputDir, classesOutputDir = sourceOutputDir, - additionalSources = compilationUnits) + additionalSources = compilationUnits, withJdk = true) val javaFiles = sourceOutputDir.walkTopDown().filter { it.isFile && it.extension == "java" } val actualRaw = javaFiles.sortedBy { it.name }.joinToString(FILE_SEPARATOR) { it.name + ":\n\n" + it.readText() } diff --git a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/JavaKaptContextTest.kt b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/JavaKaptContextTest.kt index e8545f54cc1..971192e2987 100644 --- a/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/JavaKaptContextTest.kt +++ b/plugins/kapt3/test/org/jetbrains/kotlin/kapt3/test/JavaKaptContextTest.kt @@ -85,7 +85,8 @@ class JavaKaptContextTest { emptyList(), // compile classpath emptyList(), // annotation processing classpath outputDir, - outputDir) + outputDir, + withJdk = true) } @Test diff --git a/plugins/kapt3/testData/converter/methodPropertySignatureClash.kt b/plugins/kapt3/testData/converter/methodPropertySignatureClash.kt new file mode 100644 index 00000000000..e69de29bb2d