diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt index ac829af6b71..29dfa1cc3a3 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/PomFile.kt @@ -44,8 +44,9 @@ import java.util.* fun kotlinPluginId(version: String?) = MavenId(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID, version) -class PomFile(val xmlFile: XmlFile) { - val domModel = MavenDomUtil.getMavenDomProjectModel(xmlFile.project, xmlFile.virtualFile) ?: throw IllegalStateException("No DOM model found for pom ${xmlFile.name}") +class PomFile private constructor(val xmlFile: XmlFile, val domModel: MavenDomProjectModel) { + constructor(xmlFile: XmlFile) : this(xmlFile, MavenDomUtil.getMavenDomProjectModel(xmlFile.project, xmlFile.virtualFile) ?: throw IllegalStateException("No DOM model found for pom ${xmlFile.name}")) + private val nodesByName = HashMap() private val projectElement: XmlTag @@ -483,6 +484,8 @@ class PomFile(val xmlFile: XmlFile) { } companion object { + fun forFileOrNull(xmlFile: XmlFile): PomFile? = MavenDomUtil.getMavenDomProjectModel(xmlFile.project, xmlFile.virtualFile)?.let { PomFile(xmlFile, it) } + @Deprecated("We shouldn't use phase but additional compiler configuration in most cases") fun getPhase(hasJavaFiles: Boolean, isTest: Boolean) = when { hasJavaFiles -> when { diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPluginSourcesSwap.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPluginSourcesSwap.kt index f95ed06d0d7..6c03c44b5d7 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPluginSourcesSwap.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPluginSourcesSwap.kt @@ -54,7 +54,7 @@ class MavenPluginSourcesMoveToExecutionIntention : PsiElementBaseIntentionAction return false } - val pom = PomFile(file as XmlFile) + val pom = PomFile.forFileOrNull(file as XmlFile) ?: return false if (domElement.getParentOfType(MavenDomBuild::class.java, false)?.sourceDirectory === domElement) { return pom.findKotlinExecutions(PomFile.KotlinGoals.Compile, PomFile.KotlinGoals.Js).isNotEmpty() } @@ -69,7 +69,7 @@ class MavenPluginSourcesMoveToExecutionIntention : PsiElementBaseIntentionAction override fun invoke(project: Project, editor: Editor, element: PsiElement) { val xmlFile = element.containingFile as? XmlFile ?: return - val pomFile = PomFile(xmlFile) + val pomFile = PomFile.forFileOrNull(xmlFile) ?: return val tag = element.getParentOfType(false) ?: return val domElement = DomManager.getDomManager(project).getDomElement(tag) as? GenericDomValue<*> ?: return @@ -126,7 +126,7 @@ class MavenPluginSourcesMoveToBuild : PsiElementBaseIntentionAction() { .filterIsInstance() .firstOrNull { it.localName == "sourceDirs" } ?: return false - val pom = PomFile(element.containingFile as XmlFile) + val pom = PomFile.forFileOrNull(element.containingFile as XmlFile) ?: return false val sourceDirsToMove = pom.executionSourceDirs(execution) if (sourceDirsToMove.size != 1) { diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPomActions.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPomActions.kt index 0d677b3e7da..adfaf9a031d 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPomActions.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/actions/MavenPomActions.kt @@ -61,7 +61,7 @@ private class KotlinMavenPluginProvider : AbstractDomGenerateProvider knownVersion } - val pom = PomFile(DomUtil.getFile(parent)) + val pom = PomFile.forFileOrNull(DomUtil.getFile(parent)) ?: return null return pom.addPlugin(MavenId(KotlinMavenConfigurator.GROUP_ID, KotlinMavenConfigurator.MAVEN_PLUGIN_ID, version)) } @@ -78,7 +78,7 @@ private class KotlinMavenPluginProvider : AbstractDomGenerateProvider plugin.isKotlinMavenPlugin() } + return parent.build.plugins.plugins.none(MavenDomPlugin::isKotlinMavenPlugin) } } @@ -89,7 +89,7 @@ private class KotlinMavenExecutionProvider(val goal: String, val phase: String) return null } - val file = PomFile(DomUtil.getFile(parent)) + val file = PomFile.forFileOrNull(DomUtil.getFile(parent)) ?: return null val execution = file.addExecution(parent, goal, phase, listOf(goal)) if (editor != null) { diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt index babcddb28b1..81671e9259e 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/configuration/KotlinMavenConfigurator.kt @@ -68,7 +68,7 @@ abstract class KotlinMavenConfigurator private fun checkKotlinPlugin(module: Module): ConfigureKotlinStatus { val psi = findModulePomFile(module) as? XmlFile ?: return ConfigureKotlinStatus.BROKEN - val pom = PomFile(psi) + val pom = PomFile.forFileOrNull(psi) ?: return ConfigureKotlinStatus.NON_APPLICABLE if (hasKotlinPlugin(pom)) { return ConfigureKotlinStatus.CONFIGURED @@ -137,7 +137,7 @@ abstract class KotlinMavenConfigurator return } - val pom = PomFile(file as XmlFile) + val pom = PomFile.forFileOrNull(file as XmlFile) ?: return pom.addProperty(KOTLIN_VERSION_PROPERTY, version) pom.addDependency(MavenId(GROUP_ID, getStdlibArtifactId(module), "\${$KOTLIN_VERSION_PROPERTY}"), MavenArtifactScope.COMPILE, null, false, null) diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentKotlinMavenVersionInspection.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentKotlinMavenVersionInspection.kt index b9db18ada1e..f222d67bdc7 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentKotlinMavenVersionInspection.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentKotlinMavenVersionInspection.kt @@ -45,7 +45,7 @@ class DifferentKotlinMavenVersionInspection : DomElementsInspection createProblem(holder, plugin) } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentMavenStdlibVersionInspection.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentMavenStdlibVersionInspection.kt index 44164498ae2..41c22a6f1b4 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentMavenStdlibVersionInspection.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/DifferentMavenStdlibVersionInspection.kt @@ -30,7 +30,6 @@ import org.jetbrains.idea.maven.model.MavenId import org.jetbrains.idea.maven.project.MavenProject import org.jetbrains.idea.maven.project.MavenProjectsManager import org.jetbrains.kotlin.idea.maven.PomFile -import org.jetbrains.kotlin.idea.maven.configuration.KotlinJavaMavenConfigurator import org.jetbrains.kotlin.idea.maven.configuration.KotlinMavenConfigurator import org.jetbrains.kotlin.idea.versions.MAVEN_STDLIB_ID @@ -52,7 +51,7 @@ class DifferentMavenStdlibVersionInspection : DomElementsInspection val fixes = plugin.version.stringValue?.let { version -> createFixes(project, plugin.version, stdlibVersion + version) diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt index d167e6cc7b2..5a7ec8ff22f 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenPluginPhaseInspection.kt @@ -54,7 +54,7 @@ class KotlinMavenPluginPhaseInspection : DomElementsInspection + val plugin = pom.addKotlinPlugin(version) + pom.addKotlinExecution(module, plugin, "compile", PomFile.getPhase(module.hasJavaFiles(), false), false, listOf(goal)) + } } } } diff --git a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt index b45a870bded..077130d54e7 100644 --- a/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt +++ b/idea/idea-maven/src/org/jetbrains/kotlin/idea/maven/inspections/KotlinMavenUnresolvedReferenceQuickFixProvider.kt @@ -100,10 +100,10 @@ class AddMavenDependencyQuickFix(val className: String, val smartPsiElementPoint val isTestSource = ProjectRootManager.getInstance(project).fileIndex.isInTestSourceContent(virtualFile) val scope = if (isTestSource) MavenArtifactScope.TEST else null - val pom = PomFile(xmlFile) - - ids.forEach { - pom.addDependency(it, scope) + PomFile.forFileOrNull(xmlFile)?.let { pom -> + ids.forEach { + pom.addDependency(it, scope) + } } } }