From 921af44cb975113f681bcdc241a5040e443fced7 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 7 Sep 2018 15:50:39 +0300 Subject: [PATCH] Import code style if gradle.properties has kotlin.code.style option (KT-23400) --- .../idea/formatter/KotlinObsoleteCodeStyle.kt | 1 + .../formatter/KotlinStyleGuideCodeStyle.kt | 1 + .../GradlePropertiesFileUtils.kt | 31 +++++++++++++++++++ .../KotlinGradleSourceSetDataService.kt | 28 ++++++++++------- 4 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradlePropertiesFileUtils.kt diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinObsoleteCodeStyle.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinObsoleteCodeStyle.kt index 0ee092e716a..463abda5a6a 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinObsoleteCodeStyle.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinObsoleteCodeStyle.kt @@ -21,6 +21,7 @@ class KotlinObsoleteCodeStyle : KotlinPredefinedCodeStyle(CODE_STYLE_TITLE, Kotl val INSTANCE = KotlinObsoleteCodeStyle() const val CODE_STYLE_ID = "KOTLIN_OLD_DEFAULTS" + const val CODE_STYLE_SETTING = "obsolete" const val CODE_STYLE_TITLE = "Kotlin obsolete IntelliJ IDEA codestyle" fun apply(settings: CodeStyleSettings) { diff --git a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinStyleGuideCodeStyle.kt b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinStyleGuideCodeStyle.kt index 5df73343c2d..239d0821d2b 100644 --- a/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinStyleGuideCodeStyle.kt +++ b/idea/formatter/src/org/jetbrains/kotlin/idea/formatter/KotlinStyleGuideCodeStyle.kt @@ -32,6 +32,7 @@ class KotlinStyleGuideCodeStyle : KotlinPredefinedCodeStyle("Kotlin style guide" val INSTANCE = KotlinStyleGuideCodeStyle() const val CODE_STYLE_ID = "KOTLIN_OFFICIAL" + const val CODE_STYLE_SETTING = "official" const val CODE_STYLE_TITLE = "Kotlin Coding Conventions" fun apply(settings: CodeStyleSettings) { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradlePropertiesFileUtils.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradlePropertiesFileUtils.kt new file mode 100644 index 00000000000..43ffb126f95 --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradlePropertiesFileUtils.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration + +import com.intellij.openapi.project.Project +import java.util.* + +internal object GradlePropertiesFileUtils { + const val KOTLIN_CODE_STYLE_GRADLE_SETTING = "kotlin.code.style" + + private const val GRADLE_PROPERTIES_FILE_NAME = "gradle.properties" + private const val GRADLE_PROPERTIES_LOCAL_FILE_NAME = "local.properties" + + private val gradlePropertyFiles = listOf(GRADLE_PROPERTIES_LOCAL_FILE_NAME, GRADLE_PROPERTIES_FILE_NAME) + + fun readProperty(project: Project, propertyName: String): String? { + for (propertyFileName in gradlePropertyFiles) { + val propertyFile = project.baseDir.findChild(propertyFileName) ?: continue + val properties = Properties() + properties.load(propertyFile.inputStream) + properties.getProperty(propertyName)?.let { + return it + } + } + + return null + } +} \ 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 c03e6ab1152..cc5a76df964 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 @@ -42,6 +42,9 @@ import org.jetbrains.kotlin.gradle.ArgsInfo import org.jetbrains.kotlin.gradle.CompilerArgumentsBySourceSet import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCommonCompilerArgumentsHolder import org.jetbrains.kotlin.idea.facet.* +import org.jetbrains.kotlin.idea.formatter.KotlinObsoleteCodeStyle +import org.jetbrains.kotlin.idea.formatter.KotlinStyleGuideCodeStyle +import org.jetbrains.kotlin.idea.formatter.ProjectCodeStyleImporter import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.detectLibraryKind @@ -95,7 +98,7 @@ class KotlinGradleProjectSettingsDataService : AbstractProjectDataService + ProjectCodeStyleImporter.apply(project, KotlinObsoleteCodeStyle.INSTANCE) + KotlinStyleGuideCodeStyle.CODE_STYLE_SETTING -> + ProjectCodeStyleImporter.apply(project, KotlinStyleGuideCodeStyle.INSTANCE) + else -> return + } } } @@ -260,7 +272,7 @@ fun configureFacetByGradleModule( } val compilerVersion = moduleNode.findAll(BuildScriptClasspathData.KEY).firstOrNull()?.data?.let(::findKotlinPluginVersion) - ?: return null + ?: return null val platformKind = detectPlatformKindByPlugin(moduleNode) ?: detectPlatformByLibrary(moduleNode) // TODO there should be a way to figure out the correct platform version @@ -326,15 +338,7 @@ internal fun adjustClasspath(kotlinFacet: KotlinFacet, dependencyClasspath: List arguments.classpath = if (newClasspath.isNotEmpty()) newClasspath.joinToString(File.pathSeparator) else null } -private val gradlePropertyFiles = listOf("local.properties", "gradle.properties") - internal fun findKotlinCoroutinesProperty(project: Project): String { - for (propertyFileName in gradlePropertyFiles) { - val propertyFile = project.baseDir.findChild(propertyFileName) ?: continue - val properties = Properties() - properties.load(propertyFile.inputStream) - properties.getProperty("kotlin.coroutines")?.let { return it } - } - - return CoroutineSupport.getCompilerArgument(LanguageFeature.Coroutines.defaultState) + return GradlePropertiesFileUtils.readProperty(project, "kotlin.coroutines") + ?: CoroutineSupport.getCompilerArgument(LanguageFeature.Coroutines.defaultState) }