From 48b120eb628afca9dda503353a0c037d4ff9fc3d Mon Sep 17 00:00:00 2001 From: Alexander Bubenchikov Date: Mon, 13 Jan 2020 14:28:02 +0300 Subject: [PATCH] IJP-670 - plugin for dependency search - fix maven tests GitOrigin-RevId: c4e8cb15f52194b2f2f36fc94a038336c1a03eaf --- .../MavenArtifactIdCompletionContributor.kt | 4 +- .../MavenGroupIdCompletionContributor.kt | 21 +++++- ...DependencyCompletionAndResolutionTest.java | 74 ++++++++++--------- .../idea/maven/dom/MavenDomTestCase.java | 35 +++++++-- 4 files changed, 92 insertions(+), 42 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenArtifactIdCompletionContributor.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenArtifactIdCompletionContributor.kt index 90b29fa00110..191ba60bd849 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenArtifactIdCompletionContributor.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenArtifactIdCompletionContributor.kt @@ -45,8 +45,8 @@ class MavenArtifactIdCompletionContributor : MavenCoordinateCompletionContributo val set = HashSet() while (promise.state == Promise.State.PENDING || !cld.isEmpty()) { ProgressManager.checkCanceled() - val item = cld.poll() as? MavenRepositoryArtifactInfo ?: continue - if (item != null && set.add(item.artifactId)) { + val item = cld.poll() + if (item is MavenRepositoryArtifactInfo && set.add(item.artifactId)) { result .addElement( MavenDependencyCompletionUtil.lookupElement(item, item.artifactId).withInsertHandler( diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenGroupIdCompletionContributor.kt b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenGroupIdCompletionContributor.kt index 2ea707e134f3..328011347f60 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenGroupIdCompletionContributor.kt +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenGroupIdCompletionContributor.kt @@ -2,13 +2,18 @@ package org.jetbrains.idea.maven.dom.model.completion import com.intellij.codeInsight.completion.CompletionParameters +import com.intellij.codeInsight.completion.CompletionResultSet import com.intellij.openapi.editor.Editor +import com.intellij.openapi.progress.ProgressManager import org.jetbrains.concurrency.Promise +import org.jetbrains.idea.maven.dom.converters.MavenDependencyCompletionUtil import org.jetbrains.idea.maven.dom.model.MavenDomShortArtifactCoordinates +import org.jetbrains.idea.maven.dom.model.completion.insert.MavenDependencyInsertionHandler import org.jetbrains.idea.maven.indices.IndicesBundle import org.jetbrains.idea.maven.onlinecompletion.model.MavenRepositoryArtifactInfo import org.jetbrains.idea.reposearch.DependencySearchService import org.jetbrains.idea.reposearch.RepositoryArtifactData +import java.util.concurrent.ConcurrentLinkedDeque import java.util.function.Consumer import java.util.function.Predicate @@ -32,5 +37,19 @@ class MavenGroupIdCompletionContributor : MavenCoordinateCompletionContributor(" Predicate { it is MavenRepositoryArtifactInfo && (artifactId.isEmpty() || artifactId == it.artifactId) })) } - + override fun fillResults(result: CompletionResultSet, + coordinates: MavenDomShortArtifactCoordinates, + cld: ConcurrentLinkedDeque, + promise: Promise) { + val set = HashSet() + while (promise.state == Promise.State.PENDING || !cld.isEmpty()) { + ProgressManager.checkCanceled() + val item = cld.poll() + if (item is MavenRepositoryArtifactInfo && set.add(item.groupId)) { + result + .addElement( + MavenDependencyCompletionUtil.lookupElement(item, item.groupId).withInsertHandler(MavenDependencyInsertionHandler.INSTANCE)) + } + } + } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java index ca2b66951221..af3f3420e729 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDependencyCompletionAndResolutionTest.java @@ -56,7 +56,7 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariantsInclude(myProjectPom, "junit:junit:3.8.1", "jmock:jmock:1.0.0", "test:project:1"); + assertCompletionVariantsInclude(myProjectPom, RENDERING_TEXT, "junit", "jmock", "test"); } public void testArtifactIdCompletion() { @@ -71,7 +71,7 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(myProjectPom, "junit:junit:3.8.1"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "junit"); } public void testDoNotCompleteArtifactIdOnUnknownGroup() { @@ -144,17 +144,18 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi importProject(); createModulePom("m2", "project-group" + - "m2" + - "2" + + "m2" + + "2" + - "" + - " " + - " project-group" + - " " + - " " + - ""); + "" + + " " + + " project-group" + + " " + + " " + + ""); - assertCompletionVariants(m, "project-group:project:1", "project-group:m1:1", "project-group:m2:2"); + assertCompletionVariants(m, LOOKUP_STRING, "project-group:project:1", "project-group:m1:1", "project-group:m2:2"); + assertCompletionVariants(m, RENDERING_TEXT, "project", "m1", "m2"); } public void testResolvingPropertiesForLocalProjectsInCompletion() { @@ -251,7 +252,8 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(m1, "test:project:1", "test:m1:1", "test:m2:1"); + assertCompletionVariants(m1, LOOKUP_STRING, "test:project:1", "test:m1:1", "test:m2:1"); + assertCompletionVariants(m1, RENDERING_TEXT, "project", "m1", "m2"); createModulePom("m1", "test" + "m1" + @@ -274,7 +276,8 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(m1, "test:project:1", "test:m1:1", "test:m2_new:1"); + assertCompletionVariants(m1, LOOKUP_STRING, "test:project:1", "test:m1:1", "test:m2_new:1"); + assertCompletionVariants(m1, RENDERING_TEXT, "project", "m1", "m2_new"); } public void testChangingExistingProjectsWithArtifactIdsRemoval() { @@ -296,7 +299,7 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi importProjectsWithErrors(myProjectPom, m); - assertCompletionVariants(myProjectPom, "project-group:m1:1"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "m1"); createModulePom("m1", ""); importProjectsWithErrors(myProjectPom, m); @@ -322,19 +325,20 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi "1"); configureProjectPom("test" + - "project" + - "1" + + "project" + + "1" + - "" + - " " + - " project-group" + - " " + - " " + - ""); + "" + + " " + + " project-group" + + " " + + " " + + ""); importProjectsWithErrors(myProjectPom, m); - assertCompletionVariantsInclude(myProjectPom, "project-group:m1:1"); + assertCompletionVariantsInclude(myProjectPom, RENDERING_TEXT, "m1"); + assertCompletionVariantsInclude(myProjectPom, LOOKUP_STRING, "project-group:m1:1"); WriteAction.runAndWait(() -> m.delete(null)); @@ -661,7 +665,7 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(myProjectPom, "junit-4.0.jar"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "junit-4.0.jar"); } public void testResolvingSystemScopeDependenciesFromSystemPath() throws Throwable { @@ -747,16 +751,17 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi public void testTypeCompletion() { configureProjectPom("test" + - "project" + - "1" + + "project" + + "1" + - "" + - " " + - " " + - " " + - ""); + "" + + " " + + " " + + " " + + ""); - assertCompletionVariants(myProjectPom, "jar", "test-jar", "pom", "ear", "ejb", "ejb-client", "war", "bundle", "jboss-har", "jboss-sar", "maven-plugin"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "jar", "test-jar", "pom", "ear", "ejb", "ejb-client", "war", "bundle", + "jboss-har", "jboss-sar", "maven-plugin"); } public void testDoNotHighlightUnknownType() { @@ -787,7 +792,7 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(myProjectPom, "compile", "provided", "runtime", "test", "system"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "compile", "provided", "runtime", "test", "system"); } public void testDoNotHighlightUnknownScopes() { @@ -1097,9 +1102,10 @@ public class MavenDependencyCompletionAndResolutionTest extends MavenDomWithIndi " " + ""); - assertCompletionVariants(myProjectPom, "jmock:jmock:1.0.0"); + assertCompletionVariants(myProjectPom, RENDERING_TEXT, "jmock"); } + public void testDoNotHighlightUnknownExclusions() { createProjectPom("test" + "project" + diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java index 31d62415df9a..294f6bf7860a 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenDomTestCase.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.documentation.DocumentationManager; import com.intellij.codeInsight.highlighting.HighlightUsagesHandler; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.intellij.find.findUsages.PsiElement2UsageTargetAdapter; import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.openapi.actionSystem.CommonDataKeys; @@ -62,12 +63,21 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.function.Function; public abstract class MavenDomTestCase extends MavenImportingTestCase { protected CodeInsightTestFixture myFixture; private final Map myConfigTimestamps = new THashMap<>(); private boolean myOriginalAutoCompletion; + protected static final Function RENDERING_TEXT = li -> { + LookupElementPresentation presentation = new LookupElementPresentation(); + li.renderElement(presentation); + return presentation.getItemText(); + }; + + protected static final Function LOOKUP_STRING = LookupElement::getLookupString; + @Override protected void setUpFixtures() throws Exception { myTestFixture = IdeaTestFixtureFactory.getFixtureFactory().createFixtureBuilder(getName()).getFixture(); @@ -255,12 +265,23 @@ public abstract class MavenDomTestCase extends MavenImportingTestCase { } protected void assertCompletionVariants(VirtualFile f, String... expected) { - List actual = getCompletionVariants(f); + assertCompletionVariants(f, LOOKUP_STRING, expected); + } + + protected void assertCompletionVariants(VirtualFile f, Function lookupElementStringFunction, String... expected) { + List actual = getCompletionVariants(f, lookupElementStringFunction); assertUnorderedElementsAreEqual(actual, expected); } - protected void assertCompletionVariantsInclude(VirtualFile f, String... expected) { - assertContain(getCompletionVariants(f), expected); + protected void assertCompletionVariantsInclude(VirtualFile f, + String... expected) { + assertCompletionVariantsInclude(f, LOOKUP_STRING, expected); + } + + protected void assertCompletionVariantsInclude(VirtualFile f, + Function lookupElementStringFunction, + String... expected) { + assertContain(getCompletionVariants(f, lookupElementStringFunction), expected); } protected void assertCompletionVariantsDoNotInclude(VirtualFile f, String... expected) { @@ -268,12 +289,16 @@ public abstract class MavenDomTestCase extends MavenImportingTestCase { } protected List getCompletionVariants(VirtualFile f) { + return getCompletionVariants(f, li -> li.getLookupString()); + } + + protected List getCompletionVariants(VirtualFile f, Function lookupElementStringFunction) { configTest(f); LookupElement[] variants = myFixture.completeBasic(); List result = new ArrayList<>(); - for (LookupElement each: variants) { - result.add(each.getLookupString()); + for (LookupElement each : variants) { + result.add(lookupElementStringFunction.apply(each)); } return result; }