diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java index c462fb40ced8..95b50f81e0f0 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomProjectProcessorUtils.java @@ -152,7 +152,6 @@ public class MavenDomProjectProcessorUtils { return property[0]; } - @Nullable public static Set collectProperties(@NotNull MavenDomProjectModel projectDom, @NotNull final Project project) { final Set properties = new HashSet(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReference.java index 4638e44917d3..26dafe7f8319 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReference.java @@ -55,7 +55,7 @@ public class MavenFilteredPropertyPsiReference extends MavenPropertyPsiReference for (String each : myMavenProject.getFilters()) { VirtualFile file = LocalFileSystem.getInstance().findFileByPath(each); if (file == null) continue; - collectPropertiesFileVariants(MavenDomUtil.getPropertiesFile(myProject, file), "", result); + collectPropertiesFileVariants(MavenDomUtil.getPropertiesFile(myProject, file), null, result); } } 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 1dbbd29ab12b..25defa028289 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 @@ -28,11 +28,8 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlTagChild; import com.intellij.util.ArrayUtil; -import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.PlatformIcons; -import com.intellij.util.containers.CollectionFactory; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.DomElement; import com.intellij.util.xml.DomUtil; import com.intellij.xml.XmlElementDescriptor; @@ -46,19 +43,18 @@ import org.jetbrains.idea.maven.dom.MavenSchemaProvider; import org.jetbrains.idea.maven.dom.model.MavenDomProfile; import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel; import org.jetbrains.idea.maven.dom.model.MavenDomSettingsModel; +import org.jetbrains.idea.maven.model.MavenId; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.utils.MavenIcons; import org.jetbrains.idea.maven.vfs.MavenPropertiesVirtualFileSystem; import javax.swing.*; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; public class MavenPropertyPsiReference extends MavenPsiReference { - private static final Set BASEDIR_PROPS = - CollectionFactory.newTroveSet("basedir", "project.basedir", "pom.basedir", "baseUri", "project.baseUri", "pom.baseUri"); - private static final String TIMESTAMP_PROP = "maven.build.timestamp"; protected final MavenDomProjectModel myProjectDom; @@ -86,79 +82,103 @@ public class MavenPropertyPsiReference extends MavenPsiReference { return result; } - // precedence - // 1. user/system - // 2. settings.xml - // 3. current profile (if property is used inside one) - // 4. profiles.xml - // 5. profiles in pom.xml - // 6. pom.xml - // 7. parent profiles.xml - // 8. profiles in parent pom.xml - // 9. parent pom.xml - // 10. model + // See org.apache.maven.project.interpolation.AbstractStringBasedModelInterpolator.createValueSources() @Nullable protected PsiElement doResolve() { - if (myText.startsWith("env.")) { - return resolveEnvPropety(); + boolean hasPrefix = false; + String unprefixed = myText; + + if (myText.startsWith("pom.")) { + unprefixed = myText.substring("pom.".length()); + hasPrefix = true; + } + else if (myText.startsWith("project.")) { + unprefixed = myText.substring("project.".length()); + hasPrefix = true; } - if (BASEDIR_PROPS.contains(myText)) { - return resolveBasedir(); + MavenProject mavenProject = myMavenProject; + + while (unprefixed.startsWith("parent.")) { + if (unprefixed.equals("parent.groupId") || unprefixed.equals("parent.artifactId") || unprefixed.equals("parent.version") + || unprefixed.equals("parent.relativePath")) { + break; + } + + MavenId parentId = mavenProject.getParentId(); + if (parentId == null) return null; + + mavenProject = myProjectsManager.findProject(parentId); + if (mavenProject == null) return null; + + unprefixed = unprefixed.substring("parent.".length()); + } + + if (unprefixed.equals("basedir") || (hasPrefix && mavenProject == myMavenProject && unprefixed.equals("baseUri"))) { + return getBaseDir(mavenProject); } if (myText.equals(TIMESTAMP_PROP)) { return myElement; } - PsiElement result = resolveSystemPropety(); - if (result != null) return result; + if (hasPrefix) { + MavenDomProjectModel domProjectModel = MavenDomUtil.getMavenDomProjectModel(myProject, mavenProject.getFile()); + if (domProjectModel != null) { + PsiElement res = resolveModelProperty(domProjectModel, "project." + unprefixed, new HashSet()); + if (res != null) { + return res; + } + } + } + + // todo resolve properties from config. MavenDomProfile profile = DomUtil.findDomElement(myElement, MavenDomProfile.class); if (profile != null) { - result = MavenDomProjectProcessorUtils.searchPropertyInProfile(myText, profile); + PsiElement result = MavenDomProjectProcessorUtils.searchPropertyInProfile(myText, profile); if (result != null) return result; } - result = MavenDomProjectProcessorUtils.searchProperty(myText, myProjectDom, myProject); + PsiElement result = MavenDomProjectProcessorUtils.searchProperty(myText, myProjectDom, myProject); if (result != null) return result; + IProperty property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, myText); + if (property != null) return property.getPsiElement(); + + if (myText.startsWith("env.")) { + property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, + myText.substring("env.".length())); + if (property != null) return property.getPsiElement(); + } + + String textWithEnv = "env." + myText; + + property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, textWithEnv); + if (property != null) return property.getPsiElement(); + + property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, textWithEnv); + if (property != null) return property.getPsiElement(); + + if (!hasPrefix) { + MavenDomProjectModel domProjectModel = MavenDomUtil.getMavenDomProjectModel(myProject, mavenProject.getFile()); + if (domProjectModel != null) { + PsiElement res = resolveModelProperty(domProjectModel, "project." + unprefixed, new HashSet()); + if (res != null) { + return res; + } + } + } + if (myText.startsWith("settings.")) { return resolveSettingsModelProperty(); } - String modelProperty = myText; - if (!modelProperty.startsWith("project.")) { - modelProperty = modelProperty.startsWith("pom.") - ? "project." + modelProperty.substring("pom.".length()) - : "project." + modelProperty; - } - return resolveModelProperty(myProjectDom, modelProperty, new THashSet()); + return null; } - @Nullable - private PsiElement resolveSystemPropety() { - IProperty property = MavenDomUtil.findProperty(myProject, - MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, - myText); - return property == null ? null : property.getPsiElement(); - } - - @Nullable - private PsiElement resolveEnvPropety() { - IProperty property = MavenDomUtil.findProperty(myProject, - MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, - myText.substring("env.".length())); - return property == null ? null : property.getPsiElement(); - } - - @Nullable - private PsiElement resolveBasedir() { - return getBaseDir(); - } - - private PsiDirectory getBaseDir() { - return PsiManager.getInstance(myProject).findDirectory(myMavenProject.getDirectoryFile()); + private PsiDirectory getBaseDir(@NotNull MavenProject mavenProject) { + return PsiManager.getInstance(myProject).findDirectory(mavenProject.getDirectoryFile()); } @Nullable @@ -178,8 +198,7 @@ public class MavenPropertyPsiReference extends MavenPsiReference { private PsiElement resolveModelProperty(@NotNull MavenDomProjectModel projectDom, @NotNull final String path, @NotNull final Set recursionGuard) { - if (recursionGuard.contains(projectDom)) return null; - recursionGuard.add(projectDom); + if (!recursionGuard.add(projectDom)) return null; if (!schemaHasProperty(MavenSchemaProvider.MAVEN_PROJECT_SCHEMA_URL, path)) return null; @@ -187,7 +206,7 @@ public class MavenPropertyPsiReference extends MavenPsiReference { if (result != null) return result; if (path.equals("project.groupId") || path.equals("project.version")) { - return MavenDomUtil.findTag(projectDom, path.replace("project.", "project.parent.")); + return MavenDomUtil.findTag(projectDom, "project.parent." + path.substring("project.".length())); } result = new MavenDomProjectProcessorUtils.DomParentProjectFileProcessor(myProjectsManager) { @@ -224,72 +243,98 @@ public class MavenPropertyPsiReference extends MavenPsiReference { return ArrayUtil.toObjectArray(result); } - protected void collectVariants(List result) { - collectStandardVariants(result); - collectProjectSchemaVariants(result); - collectSettingsXmlSchemaVariants(result); + protected void collectVariants(final List result) { + int prefixLength = 0; + if (myText.startsWith("pom.")) { + prefixLength = "pom.".length(); + } + else if (myText.startsWith("project.")) { + prefixLength = "project.".length(); + } + + MavenProject mavenProject = myMavenProject; + while (myText.startsWith("parent.", prefixLength)) { + MavenId parentId = mavenProject.getParentId(); + if (parentId == null) return; + + mavenProject = myProjectsManager.findProject(parentId); + if (mavenProject == null) return; + + prefixLength += "parent.".length(); + } + + final String prefix = prefixLength == 0 ? null : myText.substring(0, prefixLength); + + PsiDirectory baseDir = getBaseDir(mavenProject); + addVariant(result, "basedir", baseDir, prefix, MavenIcons.MAVEN_ICON); + if (prefix == null) { + result.add(createLookupElement(baseDir, "project.baseUri", MavenIcons.MAVEN_ICON)); + result.add(createLookupElement(baseDir, "pom.baseUri", MavenIcons.MAVEN_ICON)); + result.add(createLookupElement(myElement, TIMESTAMP_PROP, MavenIcons.MAVEN_ICON)); + } + + processSchema(MavenSchemaProvider.MAVEN_PROJECT_SCHEMA_URL, new SchemaProcessor() { + @Override + public Object process(@NotNull String property, XmlElementDescriptor descriptor) { + if (property.startsWith("project.")) { + addVariant(result, property.substring("project.".length()), descriptor, prefix, MavenIcons.MAVEN_ICON); + } + return null; + } + }); + + processSchema(MavenSchemaProvider.MAVEN_SETTINGS_SCHEMA_URL, new SchemaProcessor(){ + + @Override + public Object process(@NotNull String property, XmlElementDescriptor descriptor) { + result.add(createLookupElement(descriptor, property, MavenIcons.MAVEN_ICON)); + return null; + } + }); + collectPropertiesVariants(result); collectSystemEnvProperties(MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, null, result); collectSystemEnvProperties(MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, "env.", result); } - private void collectStandardVariants(List result) { - PsiDirectory basedir = getBaseDir(); - for (String each : BASEDIR_PROPS) { - result.add(createLookupElement(basedir, each, MavenIcons.MAVEN_ICON)); + private static void addVariant(List result, String name, @NotNull Object element, @Nullable String prefix, @NotNull Icon icon) { + String nameWithPrefix; + if (prefix == null) { + nameWithPrefix = name; + result.add(createLookupElement(element, "pom." + name, icon)); + result.add(createLookupElement(element, "project." + name, icon)); + } + else { + nameWithPrefix = prefix + name; } - result.add(createLookupElement(myElement, TIMESTAMP_PROP, MavenIcons.MAVEN_ICON)); - } - private void collectProjectSchemaVariants(final List result) { - processSchema(MavenSchemaProvider.MAVEN_PROJECT_SCHEMA_URL, new CollectingSchemaProcessor(result) { - @Override - public Object process(@NotNull String property, XmlElementDescriptor descriptor) { - super.process(property, descriptor); - String prefix = "project."; - if (property.length() > prefix.length()) { - String unqualified = property.substring(prefix.length()); - super.process("pom." + unqualified, descriptor); - super.process(unqualified, descriptor); - } - return null; - } - }); - } - - private void collectSettingsXmlSchemaVariants(final List result) { - processSchema(MavenSchemaProvider.MAVEN_SETTINGS_SCHEMA_URL, new CollectingSchemaProcessor(result)); + result.add(createLookupElement(element, nameWithPrefix, icon)); } private void collectPropertiesVariants(final List result) { - Set properties = MavenDomProjectProcessorUtils.collectProperties(myProjectDom, myProject); - result.addAll(ContainerUtil.map(properties, new Function() { - public LookupElement fun(XmlTag xmlTag) { - return createLookupElement(xmlTag, xmlTag.getName()); - } - })); + for (XmlTag xmlTag : MavenDomProjectProcessorUtils.collectProperties(myProjectDom, myProject)) { + result.add(createLookupElement(xmlTag, xmlTag.getName(), PlatformIcons.PROPERTY_ICON)); + } } - private void collectSystemEnvProperties(String propertiesFileName, String prefix, List result) { + private void collectSystemEnvProperties(String propertiesFileName, @Nullable String prefix, List result) { PropertiesFile file = MavenDomUtil.getPropertiesFile(myProject, propertiesFileName); collectPropertiesFileVariants(file, prefix, result); } - protected void collectPropertiesFileVariants(@Nullable PropertiesFile file, String prefix, List result) { + protected static void collectPropertiesFileVariants(@Nullable PropertiesFile file, @Nullable String prefix, List result) { if (file == null) return; for (IProperty each : file.getProperties()) { String name = each.getKey(); - if (prefix != null) name = prefix + name; - result.add(createLookupElement(each, name)); + if (name != null) { + if (prefix != null) name = prefix + name; + result.add(createLookupElement(each, name, PlatformIcons.PROPERTY_ICON)); + } } } - private static LookupElement createLookupElement(Object element, String name) { - return createLookupElement(element, name, PlatformIcons.PROPERTY_ICON); - } - - private static LookupElement createLookupElement(Object element, String name, Icon icon) { + private static LookupElement createLookupElement(@NotNull Object element, @NotNull String name, @Nullable Icon icon) { return LookupElementBuilder.create(element, name) .setIcon(icon) .setPresentableText(name); @@ -314,9 +359,8 @@ public class MavenPropertyPsiReference extends MavenPsiReference { Set recursionGuard) { for (XmlElementDescriptor each : descriptors) { if (isCollection(each)) continue; + if (!recursionGuard.add(each)) continue; - if (recursionGuard.contains(each)) continue; - recursionGuard.add(each); try { String name = each.getName(); if (prefix != null) name = prefix + "." + name; @@ -335,7 +379,7 @@ public class MavenPropertyPsiReference extends MavenPsiReference { return null; } - private static boolean isCollection(XmlElementDescriptor each) { + private static boolean isCollection(XmlElementDescriptor each) { XmlTag declaration = (XmlTag)each.getDeclaration(); if (declaration != null) { XmlTag complexType = declaration.findFirstSubTag("xs:complexType"); @@ -356,17 +400,4 @@ public class MavenPropertyPsiReference extends MavenPsiReference { T process(@NotNull String property, XmlElementDescriptor descriptor); } - private static class CollectingSchemaProcessor implements SchemaProcessor { - private final List myResult; - - public CollectingSchemaProcessor(List result) { - myResult = result; - } - - @Nullable - public Object process(@NotNull String property, XmlElementDescriptor descriptor) { - myResult.add(createLookupElement(descriptor, property, MavenIcons.MAVEN_ICON)); - return null; - } - } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java index ce1cb6907529..12f38490477e 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectReader.java @@ -64,7 +64,7 @@ public class MavenProjectReader { new THashSet()); } - private File getBaseDir(VirtualFile file) { + private static File getBaseDir(VirtualFile file) { return new File(file.getParent().getPath()); } @@ -109,7 +109,7 @@ public class MavenProjectReader { return new RawModelReadResult(result, problems, alwaysOnProfiles); } - MavenParent parent = new MavenParent(new MavenId(UNKNOWN, UNKNOWN, UNKNOWN), "../pom.xml"); + MavenParent parent; if (MavenJDOMUtil.hasChildByPath(xmlProject, "parent")) { parent = new MavenParent(new MavenId(MavenJDOMUtil.findChildValueByPath(xmlProject, "parent.groupId", UNKNOWN), MavenJDOMUtil.findChildValueByPath(xmlProject, "parent.artifactId", UNKNOWN), @@ -117,6 +117,9 @@ public class MavenProjectReader { MavenJDOMUtil.findChildValueByPath(xmlProject, "parent.relativePath", "../pom.xml")); result.setParent(parent); } + else { + parent = new MavenParent(new MavenId(UNKNOWN, UNKNOWN, UNKNOWN), "../pom.xml"); + } result.setMavenId(new MavenId(MavenJDOMUtil.findChildValueByPath(xmlProject, "groupId", parent.getMavenId().getGroupId()), MavenJDOMUtil.findChildValueByPath(xmlProject, "artifactId", UNKNOWN), @@ -336,7 +339,7 @@ public class MavenProjectReader { return true; } - private void collectProperties(Element xmlProperties, MavenModelBase mavenModelBase) { + private static void collectProperties(Element xmlProperties, MavenModelBase mavenModelBase) { if (xmlProperties == null) return; Properties props = mavenModelBase.getProperties(); @@ -469,13 +472,14 @@ public class MavenProjectReader { } } - public MavenProjectReaderResult generateSources(MavenEmbedderWrapper embedder, - MavenImportingSettings importingSettings, - VirtualFile file, - Collection profiles, - MavenConsole console) throws MavenProcessCanceledException { + @Nullable + public static MavenProjectReaderResult generateSources(MavenEmbedderWrapper embedder, + MavenImportingSettings importingSettings, + VirtualFile file, + Collection profiles, + MavenConsole console) throws MavenProcessCanceledException { try { - List goals = Arrays.asList(importingSettings.getUpdateFoldersOnImportPhase()); + List goals = Collections.singletonList(importingSettings.getUpdateFoldersOnImportPhase()); MavenServerExecutionResult result = embedder.execute(file, profiles, goals); if (result.projectData == null) return null; diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenFilteredPropertiesCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenFilteredPropertiesCompletionAndResolutionTest.java index 8abc1192fb12..f3a1c49b1b41 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenFilteredPropertiesCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenFilteredPropertiesCompletionAndResolutionTest.java @@ -488,11 +488,11 @@ public class MavenFilteredPropertiesCompletionAndResolutionTest extends MavenDom VirtualFile f = createProjectSubFile("res/foo1.properties", "foo1=${basedir}\n" + - "foo2=|baseUri|\n" + + "foo2=|pom.baseUri|\n" + "foo3=a(ve|rsion]"); assertNotNull(resolveReference(f, "basedir")); - assertNotNull(resolveReference(f, "baseUri")); + assertNotNull(resolveReference(f, "pom.baseUri")); assertNotNull(getReference(f, "ve|rsion")); } @@ -526,10 +526,10 @@ public class MavenFilteredPropertiesCompletionAndResolutionTest extends MavenDom VirtualFile f = createProjectSubFile("res/foo1.properties", "foo1=${basedir}\n" + - "foo2=|baseUri|"); + "foo2=|pom.baseUri|"); assert !(getReference(f, "basedir") instanceof MavenPropertyPsiReference); - assertNotNull(resolveReference(f, "baseUri")); + assertNotNull(resolveReference(f, "pom.baseUri")); } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java index 1049aca502e2..dedbb32e2952 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java @@ -36,16 +36,6 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { "1"); } - public void testBasicResolution() throws Exception { - createProjectPom("test" + - "project" + - "1" + - - "${foo}"); - - assertUnresolved(myProjectPom); - } - public void testResolutionToProject() throws Exception { createProjectPom("test" + "project" + @@ -101,24 +91,6 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { "${pom.basedir}"); assertResolved(myProjectPom, baseDir); - - createProjectPom("testproject" + - "1" + - - "${baseUri}"); - - assertResolved(myProjectPom, baseDir); - } - - public void testBuiltInTimestampProperty() throws Exception { - createProjectPom("testproject" + - "1" + - - "${maven.build.timestamp}"); - - assertResolved(myProjectPom, findTag("project.name")); } public void testResolutionWithSeveralProperties() throws Exception { @@ -186,16 +158,6 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { assertUnresolved(myProjectPom); } - public void testResolutionToUnknownExtraProjectProperty() throws Exception { - createProjectPom("test" + - "project" + - "1" + - - "${project.version.bar}"); - - assertUnresolved(myProjectPom); - } - public void testResolutionToAbsentProjectProperty() throws Exception { createProjectPom("test" + "project" + @@ -745,14 +707,31 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { } public void testHighlightUnresolvedProperties() throws Exception { - createProjectPom("test" + - "project" + - "1" + - "${xxx}" + + createProjectPom("test\n" + + "child\n" + + "1\n" + + "${xxx}\n" + - "" + - " ${zzz}" + - ""); + "\n" + + " test\n" + + " parent\n" + + " 1\n" + + "\n" + + + "\n" + + " \n" + + "${zzz}\n" + + "${pom.maven.build.timestamp}\n" + + "${project.maven.build.timestamp}\n" + + "${parent.maven.build.timestamp}\n" + + "${baseUri}\n" + + "${unknownProperty}\n" + + "${project.version.bar}\n" + + + "${maven.build.timestamp}\n" + + "\n" + + "" + ); checkHighlighting(); } @@ -841,8 +820,10 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { "parentPomProfilesProp", "parentProfilesXmlProp"); assertContain(variants, "artifactId", "project.artifactId", "pom.artifactId"); - assertContain(variants, "basedir", "project.basedir", "pom.basedir", "baseUri", "project.baseUri", "pom.basedir"); + assertContain(variants, "basedir", "project.basedir", "pom.basedir", "project.baseUri", "pom.basedir"); + assert !variants.contains("baseUri"); assertContain(variants, "maven.build.timestamp"); + assert !variants.contains("project.maven.build.timestamp"); assertContain(variants, "settingsXmlProp"); assertContain(variants, "settings.localRepository"); assertContain(variants, "user.home", "env." + getEnvVar());