From c5ac4647dd6eadb2de4c76ad45c49bda66d2dfb1 Mon Sep 17 00:00:00 2001 From: Alexander Bubenchikov Date: Fri, 10 Jan 2020 13:46:53 +0300 Subject: [PATCH] IP-670 - make seach api experimental GitOrigin-RevId: 8e963d068215dd5c9876828978c17d0a6d3d0355 --- .../idea/reposearch/DependencySearchProvider.java | 3 +++ .../DependencySearchProvidersFactory.java | 2 ++ .../idea/reposearch/DependencySearchService.kt | 14 +++++++++----- .../idea/reposearch/RepositoryArtifactData.java | 3 +++ .../idea/reposearch/SearchParameters.java | 3 +++ 5 files changed, 20 insertions(+), 5 deletions(-) diff --git a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvider.java b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvider.java index 32f9e0aa85f8..855cab7f8945 100644 --- a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvider.java +++ b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvider.java @@ -1,10 +1,13 @@ package org.jetbrains.idea.reposearch; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.function.Consumer; + +@ApiStatus.Experimental public interface DependencySearchProvider { void fulltextSearch(@NotNull String searchString, diff --git a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvidersFactory.java b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvidersFactory.java index 239c3d290b2d..ef5d21e59443 100644 --- a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvidersFactory.java +++ b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchProvidersFactory.java @@ -2,9 +2,11 @@ package org.jetbrains.idea.reposearch; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.ApiStatus; import java.util.Collection; +@ApiStatus.Experimental public interface DependencySearchProvidersFactory { ExtensionPointName EXTENSION_POINT_NAME = ExtensionPointName.create("org.jetbrains.idea.reposearch.provider"); diff --git a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchService.kt b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchService.kt index 74b53769713e..2bce4dff154f 100644 --- a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchService.kt +++ b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/DependencySearchService.kt @@ -5,6 +5,7 @@ import com.intellij.openapi.extensions.PluginDescriptor import com.intellij.openapi.project.Project import com.intellij.util.concurrency.AppExecutorUtil import com.intellij.util.containers.ContainerUtil +import org.jetbrains.annotations.ApiStatus import org.jetbrains.annotations.TestOnly import org.jetbrains.concurrency.AsyncPromise import org.jetbrains.concurrency.Promise @@ -13,13 +14,14 @@ import org.jetbrains.concurrency.resolvedPromise import java.util.* import java.util.concurrent.CompletableFuture import java.util.concurrent.CompletableFuture.completedFuture -import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ExecutorService import java.util.function.BiConsumer import java.util.function.Consumer +import kotlin.collections.LinkedHashSet typealias ResultConsumer = (RepositoryArtifactData) -> Unit +@ApiStatus.Experimental class DependencySearchService(private val myProject: Project) { private val myExecutorService: ExecutorService private val cache: MutableMap>> = ContainerUtil.createConcurrentWeakKeyWeakValueMap() @@ -67,16 +69,18 @@ class DependencySearchService(private val myProject: Project) { } } - val resultSet: MutableSet = ConcurrentHashMap.newKeySet() - localProviders.forEach { lp -> searchMethod(lp) { resultSet.add(it) } } - resultSet.forEach(consumer) + val localResultSet: MutableSet = LinkedHashSet() + localProviders.forEach { lp -> searchMethod(lp) { localResultSet.add(it) } } + localResultSet.forEach(consumer) + + if (parameters.isLocalOnly || remoteProviders.size == 0) { return resolvedPromise(0) } val promises: MutableList> = ArrayList(remoteProviders.size) - + val resultSet = Collections.synchronizedSet(localResultSet); for (provider in remoteProviders) { val promise = AsyncPromise() promises.add(promise) diff --git a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/RepositoryArtifactData.java b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/RepositoryArtifactData.java index 6c6ec04a0f6e..b21d1f9eebce 100644 --- a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/RepositoryArtifactData.java +++ b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/RepositoryArtifactData.java @@ -1,5 +1,8 @@ package org.jetbrains.idea.reposearch; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Experimental public interface RepositoryArtifactData { String getKey(); } diff --git a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/SearchParameters.java b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/SearchParameters.java index c90dbe5d3d4b..01c16913a996 100644 --- a/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/SearchParameters.java +++ b/plugins/repository-search/src/main/java/org/jetbrains/idea/reposearch/SearchParameters.java @@ -1,5 +1,8 @@ package org.jetbrains.idea.reposearch; +import org.jetbrains.annotations.ApiStatus; + +@ApiStatus.Experimental public class SearchParameters { private final boolean myCache;