mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[maven] [IDEA-376310] add xmlns:xsi attribute on quickfix
GitOrigin-RevId: 07b9e826a1b5d1a737305b972c8782a478966c2c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
cf4be5bdc3
commit
625a719b35
+5
-1
@@ -12,7 +12,7 @@ import org.jetbrains.idea.maven.model.MavenConstants.MAVEN_4_XLMNS
|
||||
import org.jetbrains.idea.maven.model.MavenConstants.MAVEN_4_XSD
|
||||
import org.jetbrains.idea.maven.project.MavenProjectBundle
|
||||
|
||||
internal class UpdateXmlsTo410 : LocalQuickFix {
|
||||
class UpdateXmlsTo410 : LocalQuickFix {
|
||||
override fun getName(): String {
|
||||
return MavenProjectBundle.message("maven.project.updating.model.command.name", "modelVersion")
|
||||
}
|
||||
@@ -24,7 +24,11 @@ internal class UpdateXmlsTo410 : LocalQuickFix {
|
||||
override fun applyFix(project: Project, descriptor: ProblemDescriptor) {
|
||||
|
||||
val rootTag = findProjectTag(descriptor) ?: return
|
||||
val xmlnsXsi = rootTag.getAttribute("xmlns:xsi")
|
||||
rootTag.setAttribute("xmlns", MAVEN_4_XLMNS)
|
||||
if (xmlnsXsi == null) {
|
||||
rootTag.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
|
||||
}
|
||||
rootTag.setAttribute("xsi:schemaLocation", "$MAVEN_4_XLMNS $MAVEN_4_XSD")
|
||||
val modelVersion = rootTag.findSubTags("modelVersion")
|
||||
if (modelVersion.isNotEmpty()) {
|
||||
|
||||
+6
-5
@@ -13,7 +13,6 @@ import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.application.writeAction
|
||||
import com.intellij.openapi.command.executeCommand
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager
|
||||
import com.intellij.openapi.progress.Cancellation.checkCancelled
|
||||
import com.intellij.openapi.progress.runBlockingMaybeCancellable
|
||||
@@ -44,7 +43,6 @@ import org.jetbrains.idea.maven.project.MavenProject
|
||||
import org.jetbrains.idea.maven.project.MavenProjectBundle
|
||||
import org.jetbrains.idea.maven.project.MavenProjectsManager
|
||||
import org.jetbrains.idea.maven.utils.MavenCoroutineScopeProvider
|
||||
import org.jetbrains.idea.maven.utils.MavenLog
|
||||
import java.nio.file.Path
|
||||
import java.util.concurrent.CompletableFuture
|
||||
import java.util.function.Consumer
|
||||
@@ -211,9 +209,12 @@ class UpdateVersionQuickFix(val path: Path) : BuildIssueQuickFix {
|
||||
if (modelVersion.exists()) {
|
||||
modelVersion.stringValue = MavenConstants.MODEL_VERSION_4_1_0
|
||||
}
|
||||
val rootTag = psiFile.document?.rootTag
|
||||
rootTag?.setAttribute("xmlns", NEW_XMLNS)
|
||||
rootTag?.setAttribute("xsi:schemaLocation", NEW_SCHEMA_LOCATION)
|
||||
val rootTag = psiFile.document?.rootTag ?: return@executeCommand
|
||||
if (rootTag.getAttribute("xmlns:xsi") == null) {
|
||||
rootTag.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance")
|
||||
}
|
||||
rootTag.setAttribute("xmlns", NEW_XMLNS)
|
||||
rootTag.setAttribute("xsi:schemaLocation", NEW_SCHEMA_LOCATION)
|
||||
}
|
||||
|
||||
documentManager.doPostponedOperationsAndUnblockDocument(document)
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.idea.maven.quickfixes
|
||||
|
||||
import com.intellij.codeInspection.ProblemDescriptor
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.command.writeCommandAction
|
||||
import com.intellij.psi.xml.XmlFile
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.jetbrains.idea.maven.buildtool.quickfix.UpdateXmlsTo410
|
||||
import org.jetbrains.idea.maven.model.MavenConstants
|
||||
import org.jetbrains.idea.maven.model.MavenConstants.MAVEN_4_XLMNS
|
||||
import org.jetbrains.idea.maven.model.MavenConstants.MAVEN_4_XSD
|
||||
import org.mockito.Mockito.mock
|
||||
import org.mockito.Mockito.`when`
|
||||
|
||||
class UpdateXmlsTo410Test : LightJavaCodeInsightFixtureTestCase() {
|
||||
|
||||
private lateinit var quickFix: UpdateXmlsTo410
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
quickFix = UpdateXmlsTo410()
|
||||
}
|
||||
|
||||
override fun runInDispatchThread(): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
fun testUpdateMavenXmlTo410() = runBlocking {
|
||||
val xmlContent = """
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
</project>
|
||||
""".trimIndent()
|
||||
|
||||
val xmlFile = myFixture.configureByText("pom.xml", xmlContent) as XmlFile
|
||||
val projectTag = readAction { xmlFile.document?.rootTag }
|
||||
|
||||
val descriptor = mock(ProblemDescriptor::class.java)
|
||||
`when`(descriptor.psiElement).thenReturn(projectTag)
|
||||
|
||||
writeCommandAction(project, quickFix.name) {
|
||||
quickFix.applyFix(project, descriptor)
|
||||
}
|
||||
|
||||
readAction {
|
||||
val updatedProjectTag = xmlFile.document?.rootTag
|
||||
assertEquals(MavenConstants.MAVEN_4_XLMNS, updatedProjectTag?.getAttribute("xmlns")?.value)
|
||||
assertEquals("http://www.w3.org/2001/XMLSchema-instance", updatedProjectTag?.getAttribute("xmlns:xsi")?.value)
|
||||
assertEquals("$MAVEN_4_XLMNS $MAVEN_4_XSD", updatedProjectTag?.getAttribute("xsi:schemaLocation")?.value)
|
||||
assertEquals(MavenConstants.MODEL_VERSION_4_1_0,
|
||||
updatedProjectTag?.findFirstSubTag("modelVersion")?.value?.text)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user