Import Kotlin code style from Maven properties (KT-23400)

This commit is contained in:
Nikolay Krasko
2018-09-08 18:54:10 +03:00
parent 1820028086
commit f679b3f6dd
3 changed files with 104 additions and 0 deletions
@@ -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<MavenProject, String>?,
postTasks: MutableList<MavenProjectsProcessorTask>
) {
if (mavenProject !in mavenModel.rootProjects) return
ProjectCodeStyleImporter.apply(module.project, getCodeStyleString(mavenProject))
}
}
@@ -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(
"""
<groupId>test</groupId>
<artifactId>project</artifactId>
<version>1.0.0</version>
<properties>
<kotlin.code.style>obsolete</kotlin.code.style>
</properties>
"""
)
Assert.assertEquals(
KotlinObsoleteCodeStyle.CODE_STYLE_ID,
CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults()
)
}
fun testImportOfficialCodeStyle() {
Assert.assertNull(CodeStyleSettingsManager.getSettings(myProject).kotlinCodeStyleDefaults())
importProject(
"""
<groupId>test</groupId>
<artifactId>project</artifactId>
<version>1.0.0</version>
<properties>
<kotlin.code.style>official</kotlin.code.style>
</properties>
"""
)
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")
+2
View File
@@ -17,6 +17,8 @@
<extensions defaultExtensionNs="org.jetbrains.idea.maven">
<importer implementation="org.jetbrains.kotlin.idea.maven.KotlinMavenImporter" />
<importer implementation="org.jetbrains.kotlin.idea.maven.KotlinCodeStyleMavenImporter" />
<archetypesProvider implementation="org.jetbrains.kotlin.idea.maven.KotlinMavenArchetypesProvider" />
<pluginDescriptor mavenId="org.jetbrains.kotlin:kotlin-maven-plugin">