mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-13 06:47:40 +07:00
[maven] IDEA-163551 Adds resolve and autocomplete for properties in pom.xml, supported in Maven Model interpolation
Resolving and autocomplete were already implemented before for the most part of such properties. These changes add support for some cases were not considered yet:
- ${maven.home}
- ${maven.version}
- ${maven.build.version}
- ${build.timestamp}
These properties will be resolved to their PsiElement's, just to remove the red highlighting.
More about Maven Model interpolation:
https://maven.apache.org/components/ref/3-LATEST/maven-model-builder/#model-interpolation
GitOrigin-RevId: ae75a11de118b305fc33ee73511fc2f10671ecea
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1e3ca1555f
commit
eea037b50b
@@ -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<String> 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) -> {
|
||||
|
||||
@@ -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("""
|
||||
<groupId>test</groupId>
|
||||
<artifactId>project</artifactId>
|
||||
<version>1</version>
|
||||
<name>${'$'}{<caret>maven.home}</name>
|
||||
""".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("""
|
||||
<groupId>test</groupId>
|
||||
<artifactId>project</artifactId>
|
||||
<version>1</version>
|
||||
<name>${'$'}{<caret>$propertyName}</name>
|
||||
""".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")
|
||||
|
||||
Reference in New Issue
Block a user