From a89c088fc3eefeeeaa20c021f473a152bbf03181 Mon Sep 17 00:00:00 2001 From: Evgeny Zakrevsky Date: Fri, 13 Jan 2012 18:50:17 +0400 Subject: [PATCH 1/6] IDEA-78992 Columns in "Files Merged with Conflicts" have improper widths --- .../git4idea/src/git4idea/merge/GitMergeProvider.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java index a4517b7245c1..ca56cfa9b717 100644 --- a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java +++ b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java @@ -387,6 +387,16 @@ public class GitMergeProvider implements MergeProvider2 { throw new IllegalStateException("Unknown status " + s + " for file " + file.getPath()); } } + + @Override + public String getMaxStringValue() { + return GitBundle.message("merge.tool.column.status.modified"); + } + + @Override + public int getAdditionalWidth() { + return 10; + } } } } From 7607bd78ca980670f9fd34b2913485ec1d21e192 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 13 Jan 2012 16:04:37 +0100 Subject: [PATCH 2/6] further debugging blinking perforce tests --- .../intellij/openapi/vcs/changes/ChangeListManagerImpl.java | 4 ---- .../com/intellij/openapi/vcs/changes/LocalChangeListImpl.java | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java index 55f8ba1d6a4a..38acf759c77a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java @@ -375,10 +375,6 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec } private void updateImmediately() { - if (DEBUG) { - System.out.println("ChangeListManagerImpl.updateImmediately"); - } - final DataHolder dataHolder; final ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(myProject); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LocalChangeListImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LocalChangeListImpl.java index dfb30ff4289a..717f92eb5404 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LocalChangeListImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/LocalChangeListImpl.java @@ -124,6 +124,7 @@ public class LocalChangeListImpl extends LocalChangeList { synchronized Change removeChange(Change change) { if (ChangeListManagerImpl.DEBUG) { System.out.println("LocalChangeListImpl.removeChange: this = " + this + ", change = " + change); + System.out.println("myChanges.size() = " + myChanges.size()); } for (Change localChange : myChanges) { if (localChange.equals(change)) { From 17eb909a8e375db672d4a2f5d4c6496498ba1ae1 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 13 Jan 2012 16:13:21 +0100 Subject: [PATCH 3/6] clear appenders cache when iteration over keys --- platform/util/src/com/intellij/util/io/PersistentHashMap.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/util/src/com/intellij/util/io/PersistentHashMap.java b/platform/util/src/com/intellij/util/io/PersistentHashMap.java index bbffefd7e465..f4bf5e5fc1e7 100644 --- a/platform/util/src/com/intellij/util/io/PersistentHashMap.java +++ b/platform/util/src/com/intellij/util/io/PersistentHashMap.java @@ -327,6 +327,7 @@ public class PersistentHashMap extends PersistentEnumeratorDelegate< public final boolean processKeysWithExistingMapping(Processor processor) throws IOException { synchronized (myEnumerator) { + myAppendCache.clear(); return myEnumerator.processAllDataObject(processor, new PersistentEnumerator.DataFilter() { public boolean accept(final int id) { return readValueId(id).address != NULL_ADDR; From 553072dab55d38164040d369aa2fc99d18346469 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 13 Jan 2012 16:42:56 +0100 Subject: [PATCH 4/6] further debugging blinking perforce tests --- .../src/com/intellij/testFramework/AbstractVcsTestCase.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/AbstractVcsTestCase.java b/platform/testFramework/src/com/intellij/testFramework/AbstractVcsTestCase.java index 84500b3e0353..fb8cbe09e378 100644 --- a/platform/testFramework/src/com/intellij/testFramework/AbstractVcsTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/AbstractVcsTestCase.java @@ -27,7 +27,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsConfiguration; @@ -75,7 +74,7 @@ public abstract class AbstractVcsTestCase { } Collections.addAll(arguments, commandLine); if (myTraceClient) { - System.out.println("*** running:\n" + StringUtil.join(arguments," ")); + System.out.println("*** running:\n" + arguments); } final ProcessBuilder builder = new ProcessBuilder().command(arguments); if (workingDir != null) { From a7eb73a2b88bcdffa1f70d3463155cc8d528df3c Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 13 Jan 2012 16:53:25 +0100 Subject: [PATCH 5/6] use persistent deltas to minimize memory usage --- .../jps/incremental/java/JavaBuilder.java | 5 +- .../ether/dependencyView/Mappings.java | 131 +++++++++--------- .../org/jetbrains/ether/ProjectWrapper.java | 2 - 3 files changed, 70 insertions(+), 68 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 3a877feb1105..f0c6485d590b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -212,9 +212,6 @@ public class JavaBuilder extends Builder{ final ProjectPaths paths = context.getProjectPaths(); - final Mappings delta = context.createDelta(); - DELTA_MAPPINGS_CALLBACK_KEY.set(context, delta.getCallback()); - // todo: consider corresponding setting in CompilerWorkspaceConfiguration final boolean addNotNullAssertions = true; @@ -226,6 +223,8 @@ public class JavaBuilder extends Builder{ // begin compilation round final DiagnosticSink diagnosticSink = new DiagnosticSink(context); final OutputFilesSink outputSink = new OutputFilesSink(context); + final Mappings delta = context.createDelta(); + DELTA_MAPPINGS_CALLBACK_KEY.set(context, delta.getCallback()); try { if (hasSourcesToCompile) { final Set sourcePath = TEMPORARY_SOURCE_ROOTS_KEY.get(context,Collections.emptySet()); diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index 0507e31f5700..f961e12e63f2 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -69,14 +69,14 @@ public class Mappings { myRootDir.mkdirs(); - //createImplementation(myRootDir, myIsTansient); + createImplementation(myRootDir, true); - myClassToSubclasses = new TransientMultiMaplet(ourStringSetConstructor); - mySourceFileToClasses = new TransientMultiMaplet(ourClassSetConstructor); - mySourceFileToUsages = new TransientMaplet(); - mySourceFileToAnnotationUsages = new TransientMultiMaplet(ourUsageSetConstructor); - myClassToSourceFile = new TransientMaplet(); - myClassToClassDependency = new TransientMultiMaplet(ourStringSetConstructor); + //myClassToSubclasses = new TransientMultiMaplet(ourStringSetConstructor); + //mySourceFileToClasses = new TransientMultiMaplet(ourClassSetConstructor); + //mySourceFileToUsages = new TransientMaplet(); + //mySourceFileToAnnotationUsages = new TransientMultiMaplet(ourUsageSetConstructor); + //myClassToSourceFile = new TransientMaplet(); + //myClassToClassDependency = new TransientMultiMaplet(ourStringSetConstructor); } public Mappings(final File rootDir) throws IOException { @@ -1264,74 +1264,79 @@ public class Mappings { } public void integrate(final Mappings delta, final Collection compiled, final Collection removed) { - if (removed != null) { - for (String file : removed) { - final DependencyContext.S key = myContext.get(file); - final Set classes = (Set)mySourceFileToClasses.get(key); - final UsageRepr.Cluster cluster = mySourceFileToUsages.get(key); - final Set usages = cluster == null ? null : cluster.getUsages(); + try { + if (removed != null) { + for (String file : removed) { + final DependencyContext.S key = myContext.get(file); + final Set classes = (Set)mySourceFileToClasses.get(key); + final UsageRepr.Cluster cluster = mySourceFileToUsages.get(key); + final Set usages = cluster == null ? null : cluster.getUsages(); - if (classes != null) { - for (ClassRepr cr : classes) { - myClassToSubclasses.remove(cr.name); - myClassToSourceFile.remove(cr.name); - myClassToClassDependency.remove(cr.name); + if (classes != null) { + for (ClassRepr cr : classes) { + myClassToSubclasses.remove(cr.name); + myClassToSourceFile.remove(cr.name); + myClassToClassDependency.remove(cr.name); - for (DependencyContext.S superSomething : cr.getSupers()) { - myClassToSubclasses.removeFrom(superSomething, cr.name); - } + for (DependencyContext.S superSomething : cr.getSupers()) { + myClassToSubclasses.removeFrom(superSomething, cr.name); + } - if (usages != null) { - for (UsageRepr.Usage u : usages) { - if (u instanceof UsageRepr.ClassUsage) { - final Set residents = cluster.getResidence(u); + if (usages != null) { + for (UsageRepr.Usage u : usages) { + if (u instanceof UsageRepr.ClassUsage) { + final Set residents = cluster.getResidence(u); - if (residents != null && residents.contains(cr.name)) { - myClassToClassDependency.removeFrom(((UsageRepr.ClassUsage)u).className, cr.name); + if (residents != null && residents.contains(cr.name)) { + myClassToClassDependency.removeFrom(((UsageRepr.ClassUsage)u).className, cr.name); + } } } } } } - } - mySourceFileToClasses.remove(key); - mySourceFileToUsages.remove(key); + mySourceFileToClasses.remove(key); + mySourceFileToUsages.remove(key); + } + } + + //final Set cl = (Set) delta.mySourceFileToClasses.get(new DependencyContext.S(352)); + + //System.out.println("There: " + (cl == null ? "wow..." : cl.size())); + + myClassToSubclasses.putAll(delta.myClassToSubclasses); + mySourceFileToClasses.putAll(delta.mySourceFileToClasses); + mySourceFileToUsages.putAll(delta.mySourceFileToUsages); + mySourceFileToAnnotationUsages.putAll(delta.mySourceFileToAnnotationUsages); + myClassToSourceFile.putAll(delta.myClassToSourceFile); + + for (DependencyContext.S file : delta.myClassToClassDependency.keyCollection()) { + final Collection now = delta.myClassToClassDependency.get(file); + final Collection past = myClassToClassDependency.get(file); + + if (past == null) { + myClassToClassDependency.put(file, now); + } + else { + final Collection removeSet = new HashSet(); + + for (File c : compiled) { + removeSet.add(myContext.get(FileUtil.toSystemIndependentName(c.getAbsolutePath()))); + } + + removeSet.removeAll(now); + + past.addAll(now); + past.removeAll(removeSet); + + myClassToClassDependency.remove(file); + myClassToClassDependency.put(file, past); + } } } - - //final Set cl = (Set) delta.mySourceFileToClasses.get(new DependencyContext.S(352)); - - //System.out.println("There: " + (cl == null ? "wow..." : cl.size())); - - myClassToSubclasses.putAll(delta.myClassToSubclasses); - mySourceFileToClasses.putAll(delta.mySourceFileToClasses); - mySourceFileToUsages.putAll(delta.mySourceFileToUsages); - mySourceFileToAnnotationUsages.putAll(delta.mySourceFileToAnnotationUsages); - myClassToSourceFile.putAll(delta.myClassToSourceFile); - - for (DependencyContext.S file : delta.myClassToClassDependency.keyCollection()) { - final Collection now = delta.myClassToClassDependency.get(file); - final Collection past = myClassToClassDependency.get(file); - - if (past == null) { - myClassToClassDependency.put(file, now); - } - else { - final Collection removeSet = new HashSet(); - - for (File c : compiled) { - removeSet.add(myContext.get(FileUtil.toSystemIndependentName(c.getAbsolutePath()))); - } - - removeSet.removeAll(now); - - past.addAll(now); - past.removeAll(removeSet); - - myClassToClassDependency.remove(file); - myClassToClassDependency.put(file, past); - } + finally { + delta.close(); } } diff --git a/jps/src/org/jetbrains/ether/ProjectWrapper.java b/jps/src/org/jetbrains/ether/ProjectWrapper.java index 114eb24fd924..92ff04363b14 100644 --- a/jps/src/org/jetbrains/ether/ProjectWrapper.java +++ b/jps/src/org/jetbrains/ether/ProjectWrapper.java @@ -1170,7 +1170,6 @@ public class ProjectWrapper { } dependencyMapping.integrate(delta, files, removed); - delta.close(); if (!incremental) { affectedFiles.addAll(sources); @@ -1285,7 +1284,6 @@ public class ProjectWrapper { } dependencyMapping.integrate(delta, files, removedSources); - delta.close(); for (Module m : chunkModules) { Reporter.reportBuildSuccess(m, flags.tests()); From dc1919ccee7999167867d5888f8dc3e44fd955cd Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Fri, 13 Jan 2012 20:16:09 +0300 Subject: [PATCH 6/6] IDEA-78960 (Filtered Resources: @ delimeter and custom delimeters are not supported) --- ...nFilteredPropertyPsiReferenceProvider.java | 71 +++++++++++++++++++ .../MavenPropertyPsiReferenceContributor.java | 4 +- .../MavenPropertyPsiReferenceProvider.java | 31 ++------ ...PropertiesCompletionAndResolutionTest.java | 29 +++++++- 4 files changed, 106 insertions(+), 29 deletions(-) create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReferenceProvider.java diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReferenceProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReferenceProvider.java new file mode 100644 index 000000000000..72f4282a6ad2 --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenFilteredPropertyPsiReferenceProvider.java @@ -0,0 +1,71 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.idea.maven.dom.references; + +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.ElementManipulators; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; +import com.intellij.psi.PsiReferenceProvider; +import com.intellij.util.ProcessingContext; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.idea.maven.dom.MavenDomUtil; +import org.jetbrains.idea.maven.dom.MavenPropertyResolver; +import org.jetbrains.idea.maven.project.MavenProject; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MavenFilteredPropertyPsiReferenceProvider extends PsiReferenceProvider { + + private static final Pattern PATTERN = Pattern.compile("\\$\\{([^\\}]+?)\\}|@([^@]+?)@"); + + @NotNull + @Override + public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { + if (!MavenDomUtil.isFilteredResourceFile(element)) return PsiReference.EMPTY_ARRAY; + + String text = element.getText(); + if (StringUtil.isEmptyOrSpaces(text)) return PsiReference.EMPTY_ARRAY; + + MavenProject mavenProject = MavenDomUtil.findContainingProject(element); + if (mavenProject == null) return PsiReference.EMPTY_ARRAY; + + List result = new ArrayList(); + + Matcher matcher = PATTERN.matcher(text); + while (matcher.find()) { + String propertyName = matcher.group(1); + int from; + if (propertyName == null) { + propertyName = matcher.group(2); + from = matcher.start(2); + } + else { + from = matcher.start(1); + } + + TextRange range = TextRange.from(from, propertyName.length()); + + result.add(new MavenFilteredPropertyPsiReference(mavenProject, element, propertyName, range, MavenPropertyPsiReferenceProvider.SOFT_DEFAULT)); + } + + return result.toArray(new PsiReference[result.size()]); + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceContributor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceContributor.java index 56f722fc3e71..2ce633c361e4 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceContributor.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceContributor.java @@ -27,9 +27,9 @@ public class MavenPropertyPsiReferenceContributor extends PsiReferenceContributo @Override public void registerReferenceProviders(PsiReferenceRegistrar registrar) { ElementPattern pattern = XmlPatterns.xmlTag().withParent(DomPatterns.withDom(DomPatterns.domElement(MavenDomProperties.class))); - registrar.registerReferenceProvider(pattern, new MavenPropertyPsiReferenceProvider(false), PsiReferenceRegistrar.DEFAULT_PRIORITY); + registrar.registerReferenceProvider(pattern, new MavenPropertyPsiReferenceProvider(), PsiReferenceRegistrar.DEFAULT_PRIORITY); registrar.registerReferenceProvider(PlatformPatterns.psiElement(), - new MavenPropertyPsiReferenceProvider(true), + new MavenFilteredPropertyPsiReferenceProvider(), PsiReferenceRegistrar.DEFAULT_PRIORITY); } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceProvider.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceProvider.java index e747d920631b..e9bc5d13ae8f 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceProvider.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReferenceProvider.java @@ -33,29 +33,19 @@ import java.util.regex.Matcher; public class MavenPropertyPsiReferenceProvider extends PsiReferenceProvider { public static final boolean SOFT_DEFAULT = false; - private final boolean myFiltered; - - public MavenPropertyPsiReferenceProvider(boolean filtered) { - myFiltered = filtered; - } @NotNull @Override public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { - if (myFiltered) { - if (!MavenDomUtil.isFilteredResourceFile(element)) return PsiReference.EMPTY_ARRAY; - return getReferences(element, element.getText(), 0, true, SOFT_DEFAULT); - } return getReferences(element, SOFT_DEFAULT); } public static PsiReference[] getReferences(PsiElement element, boolean isSoft) { - String text = ElementManipulators.getValueText(element); - int textStart = ElementManipulators.getValueTextRange(element).getStartOffset(); - return getReferences(element, text, textStart, false, isSoft); - } + TextRange textRange = ElementManipulators.getValueTextRange(element); + if (textRange.isEmpty()) return PsiReference.EMPTY_ARRAY; + + String text = element.getText(); - private static PsiReference[] getReferences(PsiElement element, String text, int textStart, boolean isFiltered, boolean isSoft) { if (StringUtil.isEmptyOrSpaces(text)) return PsiReference.EMPTY_ARRAY; MavenProject mavenProject = MavenDomUtil.findContainingProject(element); @@ -63,20 +53,13 @@ public class MavenPropertyPsiReferenceProvider extends PsiReferenceProvider { List result = new ArrayList(); - Matcher matcher = MavenPropertyResolver.PATTERN.matcher(text); + Matcher matcher = MavenPropertyResolver.PATTERN.matcher(textRange.substring(text)); while (matcher.find()) { String propertyName = matcher.group(1); - int from = textStart + matcher.start(1); + int from = textRange.getStartOffset() + matcher.start(1); TextRange range = TextRange.from(from, propertyName.length()); - MavenPropertyPsiReference ref; - if (isFiltered) { - ref = new MavenFilteredPropertyPsiReference(mavenProject, element, propertyName, range, isSoft); - } - else { - ref = new MavenPropertyPsiReference(mavenProject, element, propertyName, range, isSoft); - } - result.add(ref); + result.add(new MavenPropertyPsiReference(mavenProject, element, propertyName, range, isSoft)); } return result.toArray(new PsiReference[result.size()]); 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 c013bf6ef819..a369a26811fa 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 @@ -47,6 +47,28 @@ public class MavenFilteredPropertiesCompletionAndResolutionTest extends MavenDom assertResolved(f, findTag("project.version")); } + public void testBasicAt() throws Exception { + createProjectSubDir("res"); + + importProject("test" + + "project" + + "1" + + + "" + + " " + + " " + + " res" + + " true" + + " " + + " " + + ""); + + VirtualFile f = createProjectSubFile("res/foo.properties", + "foo=abc@project.version@abc"); + + assertResolved(f, findTag("project.version")); + } + public void testCorrectlyCalculatingBaseDir() throws Exception { createProjectSubDir("res"); @@ -136,7 +158,7 @@ public class MavenFilteredPropertiesCompletionAndResolutionTest extends MavenDom importProjectWithProfiles("one"); VirtualFile f = createProjectSubFile("res/foo.properties", - "foo=${profileProp}"); + "foo=@profileProp@"); assertResolved(f, findTag(profiles, "profilesXml.profiles[0].properties.profileProp", MavenDomProfilesModel.class)); } @@ -258,10 +280,11 @@ public class MavenFilteredPropertiesCompletionAndResolutionTest extends MavenDom ""); VirtualFile f = createProjectSubFile("res/foo.properties", - "foo=${xxx}"); + "foo=${xxx}\n" + + "foo2=@xxx@"); VirtualFile filter = createProjectSubFile("filters/filter.properties", "xxx=1"); - assertSearchResultsInclude(filter, MavenDomUtil.findPropertyValue(myProject, f, "foo")); + assertSearchResultsInclude(filter, MavenDomUtil.findPropertyValue(myProject, f, "foo"), MavenDomUtil.findPropertyValue(myProject, f, "foo2")); } public void testCompletionAfterOpenBrace() throws Exception {