diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java index 8aa780abbaa2..6eb495d27c26 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaReflectionCompletionTest.java @@ -64,6 +64,7 @@ public class JavaReflectionCompletionTest extends LightFixtureCompletionTestCase } public void testGenerics() throws Exception { + myFixture.addFileToProject("a.properties", "foo=bar"); // check that property variants don't override reflection ones doTest(0, "foo"); } diff --git a/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java b/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java index e356771d5812..1f9cd18b41f3 100644 --- a/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java +++ b/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java @@ -30,9 +30,11 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; -import com.intellij.util.*; +import com.intellij.util.ArrayUtil; +import com.intellij.util.NullableFunction; +import com.intellij.util.PlatformIcons; +import com.intellij.util.ProcessingContext; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.FilteringIterator; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -55,12 +57,11 @@ public class PropertiesCompletionContributor extends CompletionContributor { }); } - private static final Condition PROPERTY_REFERENCE = FilteringIterator.instanceOf(PropertyReference.class); - private void doAdd(CompletionParameters parameters, final CompletionResultSet result) { + private static void doAdd(CompletionParameters parameters, final CompletionResultSet result) { PsiElement position = parameters.getPosition(); PsiReference[] references = ArrayUtil.mergeArrays(position.getReferences(), position.getParent().getReferences()); - PropertyReference propertyReference = (PropertyReference)ContainerUtil.find(references, PROPERTY_REFERENCE); - if (propertyReference != null) { + PropertyReference propertyReference = ContainerUtil.findInstance(references, PropertyReference.class); + if (propertyReference != null && !hasMoreImportantReference(references, propertyReference)) { final int startOffset = parameters.getOffset(); PsiElement element = propertyReference.getElement(); final int offsetInElement = startOffset - element.getTextRange().getStartOffset(); @@ -73,13 +74,15 @@ public class PropertiesCompletionContributor extends CompletionContributor { result.stopHere(); } } - //if (parameters.isExtendedCompletion()) { - // CompletionService.getCompletionService().getVariantsFromContributors(parameters.delegateToClassName(), null, new Consumer() { - // public void consume(final CompletionResult completionResult) { - // result.passResult(completionResult); - // } - // }); - //} + } + + private static boolean hasMoreImportantReference(PsiReference[] references, PropertyReference propertyReference) { + return propertyReference.isSoft() && ContainerUtil.or(references, new Condition() { + @Override + public boolean value(PsiReference reference) { + return !reference.isSoft(); + } + }); } public static final LookupElementRenderer LOOKUP_ELEMENT_RENDERER = new LookupElementRenderer() {