From f679b3f6dd607d11cec541778b804f7d9427ff63 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Sat, 8 Sep 2018 18:54:10 +0300 Subject: [PATCH] Import Kotlin code style from Maven properties (KT-23400) --- .../maven/KotlinCodeStyleMavenImporter.kt | 56 +++++++++++++++++++ .../idea/maven/KotlinMavenImporterTest.kt | 46 +++++++++++++++ idea/src/META-INF/maven.xml | 2 + 3 files changed, 104 insertions(+) create mode 100644 idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinCodeStyleMavenImporter.kt diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinCodeStyleMavenImporter.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinCodeStyleMavenImporter.kt new file mode 100644 index 00000000000..c8a4d9ecb1d --- /dev/null +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/KotlinCodeStyleMavenImporter.kt @@ -0,0 +1,56 @@ +/* + * 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.maven + +import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider +import com.intellij.openapi.module.Module +import org.jetbrains.idea.maven.importing.MavenImporter +import org.jetbrains.idea.maven.importing.MavenRootModelAdapter +import org.jetbrains.idea.maven.project.MavenProject +import org.jetbrains.idea.maven.project.MavenProjectChanges +import org.jetbrains.idea.maven.project.MavenProjectsProcessorTask +import org.jetbrains.idea.maven.project.MavenProjectsTree +import org.jetbrains.kotlin.idea.formatter.ProjectCodeStyleImporter +import org.jetbrains.kotlin.idea.maven.KotlinMavenImporter.Companion.KOTLIN_PLUGIN_ARTIFACT_ID +import org.jetbrains.kotlin.idea.maven.KotlinMavenImporter.Companion.KOTLIN_PLUGIN_GROUP_ID + +class KotlinCodeStyleMavenImporter : MavenImporter(KOTLIN_PLUGIN_GROUP_ID, KOTLIN_PLUGIN_ARTIFACT_ID) { + companion object { + private const val KOTLIN_CODE_STYLE_MAVEN_SETTING = "kotlin.code.style" + + fun getCodeStyleString(mavenProject: MavenProject): String? { + return mavenProject.properties.getProperty(KOTLIN_CODE_STYLE_MAVEN_SETTING) + } + } + + override fun isApplicable(mavenProject: MavenProject): Boolean { + return getCodeStyleString(mavenProject) != null + } + + override fun preProcess( + module: Module?, + mavenProject: MavenProject?, + changes: MavenProjectChanges?, + modifiableModelsProvider: IdeModifiableModelsProvider? + ) { + // Do nothing + } + + override fun process( + modifiableModelsProvider: IdeModifiableModelsProvider?, + module: Module, + rootModel: MavenRootModelAdapter?, + mavenModel: MavenProjectsTree, + mavenProject: MavenProject, + changes: MavenProjectChanges?, + mavenProjectToModuleName: MutableMap?, + postTasks: MutableList + ) { + if (mavenProject !in mavenModel.rootProjects) return + + ProjectCodeStyleImporter.apply(module.project, getCodeStyleString(mavenProject)) + } +} \ No newline at end of file diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt index f5d2b4e7605..49985578662 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.CompilerModuleExtension import com.intellij.openapi.roots.LibraryOrderEntry import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.impl.libraries.LibraryEx +import com.intellij.psi.codeStyle.CodeStyleSettingsManager import com.intellij.util.PathUtil import junit.framework.TestCase import org.jetbrains.jps.model.java.JavaResourceRootType @@ -36,6 +37,9 @@ import org.jetbrains.kotlin.idea.caches.project.productionSourceInfo import org.jetbrains.kotlin.idea.caches.project.testSourceInfo import org.jetbrains.kotlin.idea.caches.resolve.analyzeAndGetResult import org.jetbrains.kotlin.idea.facet.KotlinFacet +import org.jetbrains.kotlin.idea.formatter.KotlinObsoleteCodeStyle +import org.jetbrains.kotlin.idea.formatter.KotlinStyleGuideCodeStyle +import org.jetbrains.kotlin.idea.formatter.kotlinCodeStyleDefaults import org.jetbrains.kotlin.idea.framework.CommonLibraryKind import org.jetbrains.kotlin.idea.framework.JSLibraryKind import org.jetbrains.kotlin.idea.framework.KotlinSdkType @@ -267,6 +271,48 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { assertTestSources("project", "src/test/java", "src/test/kotlin") } + fun testImportObsoleteCodeStyle() { + Assert.assertNull(CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults()) + + importProject( + """ + test + project + 1.0.0 + + + obsolete + + """ + ) + + Assert.assertEquals( + KotlinObsoleteCodeStyle.CODE_STYLE_ID, + CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults() + ) + } + + fun testImportOfficialCodeStyle() { + Assert.assertNull(CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults()) + + importProject( + """ + test + project + 1.0.0 + + + official + + """ + ) + + Assert.assertEquals( + KotlinStyleGuideCodeStyle.CODE_STYLE_ID, + CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults() + ) + } + fun testReImportRemoveDir() { createProjectSubDirs("src/main/kotlin", "src/main/kotlin.jvm", "src/test/kotlin", "src/test/kotlin.jvm") diff --git a/idea/src/META-INF/maven.xml b/idea/src/META-INF/maven.xml index cb94ddcb0a7..65fc421080e 100644 --- a/idea/src/META-INF/maven.xml +++ b/idea/src/META-INF/maven.xml @@ -17,6 +17,8 @@ + +