diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java index 96714f12193d..7e67171ca8f8 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java @@ -60,6 +60,8 @@ import static icons.OpenapiIcons.RepositoryLibraryLogo; public class MavenPropertyPsiReference extends MavenPsiReference implements LocalQuickFixProvider { public static final String TIMESTAMP_PROP = "maven.build.timestamp"; public static final String MULTIPROJECT_DIR_PROP = "maven.multiModuleProjectDirectory"; + public static final Set PROPS_RESOLVING_TO_MY_ELEMENT = Set.of( + TIMESTAMP_PROP, "build.timestamp", "maven.home", "maven.version", "maven.build.version"); @Nullable protected final MavenDomProjectModel myProjectDom; @@ -153,8 +155,7 @@ public class MavenPropertyPsiReference extends MavenPsiReference implements Loca return getBaseDir(mavenProject); } - - if (myText.equals(TIMESTAMP_PROP)) { + if (PROPS_RESOLVING_TO_MY_ELEMENT.contains(myText)) { return myElement; } @@ -219,10 +220,6 @@ public class MavenPropertyPsiReference extends MavenPsiReference implements Loca if (result != null) return result; } - if ("maven.home".equals(myText)) { - return myElement; - } - if ("java.home".equals(myText)) { PsiElement element = resolveToCustomSystemProperty("java.home", MavenUtil.getModuleJreHome(myProjectsManager, mavenProject)); if (element != null) { @@ -408,8 +405,10 @@ public class MavenPropertyPsiReference extends MavenPsiReference implements Loca if (prefix == null) { result.add(createLookupElement(baseDir, "project.baseUri", RepositoryLibraryLogo)); result.add(createLookupElement(baseDir, "pom.baseUri", RepositoryLibraryLogo)); - result.add(LookupElementBuilder.create(TIMESTAMP_PROP).withIcon(RepositoryLibraryLogo)); result.add(LookupElementBuilder.create(MULTIPROJECT_DIR_PROP).withIcon(RepositoryLibraryLogo)); + for (String property : PROPS_RESOLVING_TO_MY_ELEMENT) { + result.add(LookupElementBuilder.create(property).withIcon(RepositoryLibraryLogo)); + } } processSchema(MavenSchemaProvider.MAVEN_PROJECT_SCHEMA_URL, (property, descriptor) -> { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.kt b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.kt index b04606515503..a1a878ecae35 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.kt +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.kt @@ -11,6 +11,7 @@ import com.intellij.psi.xml.XmlTag import kotlinx.coroutines.runBlocking import org.jetbrains.idea.maven.dom.model.MavenDomProfiles import org.jetbrains.idea.maven.dom.model.MavenDomSettingsModel +import org.jetbrains.idea.maven.dom.references.MavenPropertyPsiReference import org.jetbrains.idea.maven.model.MavenExplicitProfiles import org.jetbrains.idea.maven.server.MavenServerManager import org.jetbrains.idea.maven.utils.MavenUtil @@ -890,16 +891,17 @@ class MavenPropertyCompletionAndResolutionTest : MavenDomTestCase() { } @Test - fun testMavenHome() = runBlocking { - updateProjectPom(""" - test - project - 1 - ${'$'}{maven.home} - """.trimIndent()) - val ref = getReferenceAtCaret(projectPom)!! - // the reference for maven.home property resolves to its PsiElement - assertResolved(projectPom, ref.element) + fun testResolvingPropertiesToThemselves() = runBlocking { + MavenPropertyPsiReference.PROPS_RESOLVING_TO_MY_ELEMENT.forEach { propertyName -> + updateProjectPom(""" + test + project + 1 + ${'$'}{$propertyName} + """.trimIndent()) + val ref = getReferenceAtCaret(projectPom)!! + assertResolved(projectPom, ref.element) + } } @Test @@ -1111,8 +1113,12 @@ class MavenPropertyCompletionAndResolutionTest : MavenDomTestCase() { assertContain(variants, "artifactId", "project.artifactId", "pom.artifactId") assertContain(variants, "basedir", "project.basedir", "pom.basedir", "project.baseUri", "pom.basedir") assertDoNotContain(variants, "baseUri") + assertContain(variants, "build.timestamp") assertContain(variants, "maven.build.timestamp") assertContain(variants, "maven.multiModuleProjectDirectory") + assertContain(variants, "maven.home") + assertContain(variants, "maven.version") + assertContain(variants, "maven.build.version") assertDoNotContain(variants, "project.maven.build.timestamp") assertContain(variants, "settingsXmlProp") assertContain(variants, "settings.localRepository")