diff --git a/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinGradleAndroidModuleModelProjectDataService.kt b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinGradleAndroidModuleModelProjectDataService.kt new file mode 100644 index 00000000000..1d94b56d68f --- /dev/null +++ b/idea/idea-android/src/org/jetbrains/kotlin/android/configure/KotlinGradleAndroidModuleModelProjectDataService.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * 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 org.jetbrains.kotlin.android.configure + +import com.android.tools.idea.gradle.project.model.AndroidModuleModel +import com.intellij.openapi.externalSystem.model.DataNode +import com.intellij.openapi.externalSystem.model.Key +import com.intellij.openapi.externalSystem.model.ProjectKeys +import com.intellij.openapi.externalSystem.model.project.ProjectData +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider +import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjectDataService +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.configuration.GradleProjectImportHandler +import org.jetbrains.kotlin.idea.configuration.configureFacetByGradleModule + +class KotlinGradleAndroidModuleModelProjectDataService : AbstractProjectDataService() { + companion object { + val KEY = Key(AndroidModuleModel::class.qualifiedName!!, 0) + } + + override fun getTargetDataKey() = KEY + + override fun postProcess( + toImport: MutableCollection>, + projectData: ProjectData?, + project: Project, + modelsProvider: IdeModifiableModelsProvider + ) { + super.postProcess(toImport, projectData, project, modelsProvider) + for (moduleModelNode in toImport) { + val moduleNode = ExternalSystemApiUtil.findParent(moduleModelNode, ProjectKeys.MODULE) ?: continue + val moduleData = moduleNode.data + val ideModule = modelsProvider.findIdeModule(moduleData) ?: continue + val sourceSetName = moduleModelNode.data.selectedVariant.name + val kotlinFacet = configureFacetByGradleModule(ideModule, modelsProvider, moduleNode, null, sourceSetName) ?: continue + GradleProjectImportHandler.getInstances(project).forEach { it.importByModule(kotlinFacet, moduleNode) } + } + } +} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 7739cef497a..f7e55b00d0a 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -77,7 +77,7 @@ class KotlinGradleSourceSetDataService : AbstractProjectDataService): TargetPla return detectedPlatforms.singleOrNull() ?: detectedPlatforms.firstOrNull { it != TargetPlatformKind.Common } } -private fun configureFacetByGradleModule( +fun configureFacetByGradleModule( + ideModule: Module, + modelsProvider: IdeModifiableModelsProvider, moduleNode: DataNode, sourceSetNode: DataNode?, - ideModule: Module, - modelsProvider: IdeModifiableModelsProvider + sourceSetName: String? = sourceSetNode?.data?.id?.let { it.substring(it.lastIndexOf(':') + 1) } ): KotlinFacet? { if (!moduleNode.isResolved) return null @@ -201,8 +202,6 @@ private fun configureFacetByGradleModule( val kotlinFacet = ideModule.getOrCreateFacet(modelsProvider, false) kotlinFacet.configureFacet(compilerVersion, coroutinesProperty, platformKind, modelsProvider) - val sourceSetName = sourceSetNode?.data?.id?.let { it.substring(it.lastIndexOf(':') + 1) } - val argsInfo = moduleNode.compilerArgumentsBySourceSet?.get(sourceSetName ?: "main") if (argsInfo != null) { val currentCompilerArguments = argsInfo.currentArguments diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index 3cf9e7a2c1d..988c7f69de3 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -1407,13 +1407,11 @@ compileTestKotlin { buildscript { repositories { jcenter() - maven { - url='https://dl.bintray.com/kotlin/kotlin-eap-1.1' - } + mavenCentral() } dependencies { classpath "com.android.tools.build:gradle:2.3.0" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0" + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.50" } } @@ -1451,6 +1449,12 @@ compileTestKotlin { } } } + + tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { + kotlinOptions { + freeCompilerArgs = ['-Xprogressive'] + } + } """ ) createProjectSubFile( @@ -1468,7 +1472,8 @@ compileTestKotlin { ) importProject() - Assert.assertNotNull(KotlinFacet.get(getModule("project"))) + val kotlinFacet = KotlinFacet.get(getModule("project"))!! + Assert.assertTrue(kotlinFacet.configuration.settings.mergedCompilerArguments!!.progressiveMode) } @Test diff --git a/idea/src/META-INF/android.xml b/idea/src/META-INF/android.xml index 4cf452c0bff..c2ac8d2e142 100644 --- a/idea/src/META-INF/android.xml +++ b/idea/src/META-INF/android.xml @@ -26,6 +26,8 @@ + + org.jetbrains.kotlin.android.intention.KotlinAndroidAddStringResource Kotlin Android