summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/DocprocExecutor.java2
-rw-r--r--integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/RankProfileUsageFinder.java44
-rw-r--r--integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java7
-rw-r--r--integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionDefinitionTest.java (renamed from integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindDefinitionTest.java)6
-rw-r--r--integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionUsagesTest.java (renamed from integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java)11
-rw-r--r--integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindRankProfileUsagesTest.java32
-rw-r--r--integration/intellij/src/test/java/ai/vespa/intellij/findUsages/UsagesTester.java7
7 files changed, 92 insertions, 17 deletions
diff --git a/docproc/src/main/java/com/yahoo/docproc/DocprocExecutor.java b/docproc/src/main/java/com/yahoo/docproc/DocprocExecutor.java
index 716fee0e4d9..e54d5fa2ff5 100644
--- a/docproc/src/main/java/com/yahoo/docproc/DocprocExecutor.java
+++ b/docproc/src/main/java/com/yahoo/docproc/DocprocExecutor.java
@@ -32,7 +32,7 @@ public class DocprocExecutor {
private final String name;
private final String docCounterName;
private final Metric metric;
- private Function<String, Metric.Context> contexts;
+ private final Function<String, Metric.Context> contexts;
private final CallStack callStack;
/**
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/RankProfileUsageFinder.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/RankProfileUsageFinder.java
new file mode 100644
index 00000000000..a3083d8c712
--- /dev/null
+++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/RankProfileUsageFinder.java
@@ -0,0 +1,44 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package ai.vespa.intellij.schema.findUsages;
+
+import ai.vespa.intellij.schema.model.RankProfile;
+import ai.vespa.intellij.schema.model.Schema;
+import ai.vespa.intellij.schema.psi.SdRankProfileDefinition;
+import com.intellij.openapi.application.ReadAction;
+import com.intellij.openapi.progress.ProgressIndicatorProvider;
+import com.intellij.psi.search.SearchScope;
+import com.intellij.usageView.UsageInfo;
+import com.intellij.util.Processor;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * An instance created to find usages of a rank profile once.
+ *
+ * @author bratseth
+ */
+public class RankProfileUsageFinder extends UsageFinder {
+
+ private final RankProfile profile;
+ private final Set<RankProfile> visited = new HashSet<>();
+
+ public RankProfileUsageFinder(SdRankProfileDefinition profileDefinitionToFind, SearchScope scope, Processor<? super UsageInfo> processor) {
+ super(scope, processor);
+ this.profile = ReadAction.compute(() -> resolveSchema(profileDefinitionToFind).rankProfiles().get(profileDefinitionToFind.getName()));
+ }
+
+ public void findUsages() {
+ findUsagesBelow(profile);
+ }
+
+ private void findUsagesBelow(RankProfile profile) {
+ ProgressIndicatorProvider.checkCanceled();
+ if ( ! visited.add(profile)) return;
+
+ if ( ! profile.equals(this.profile))
+ processor().process(new UsageInfo(profile.definition()));
+ profile.children().forEach(child -> findUsagesBelow(child));
+ }
+
+}
diff --git a/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java
index cefa53addba..abcd5eb04e4 100644
--- a/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java
+++ b/integration/intellij/src/main/java/ai/vespa/intellij/schema/findUsages/SdFindUsagesHandler.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package ai.vespa.intellij.schema.findUsages;
+import ai.vespa.intellij.schema.psi.SdRankProfileDefinition;
import com.intellij.find.findUsages.FindUsagesHandler;
import com.intellij.find.findUsages.FindUsagesOptions;
import com.intellij.psi.PsiElement;
@@ -30,7 +31,11 @@ public class SdFindUsagesHandler extends FindUsagesHandler {
if (options.isUsages) {
if (elementToSearch instanceof SdFunctionDefinition) {
new FunctionUsageFinder((SdFunctionDefinition) elementToSearch, options.searchScope, processor).findUsages();
- } else {
+ }
+ else if (elementToSearch instanceof SdRankProfileDefinition) {
+ new RankProfileUsageFinder((SdRankProfileDefinition) elementToSearch, options.searchScope, processor).findUsages();
+ }
+ else {
new FunctionDefinitionFinder(elementToSearch, options.searchScope, processor).findDefinition();
}
}
diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindDefinitionTest.java b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionDefinitionTest.java
index 36fb842ce24..3ac45be4d9b 100644
--- a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindDefinitionTest.java
+++ b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionDefinitionTest.java
@@ -3,16 +3,12 @@ package ai.vespa.intellij.findUsages;
import ai.vespa.intellij.PluginTestBase;
import com.intellij.usageView.UsageInfo;
-import com.intellij.util.Processor;
import org.junit.Test;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* @author bratseth
*/
-public class FindDefinitionTest extends PluginTestBase {
+public class FindFunctionDefinitionTest extends PluginTestBase {
@Test
public void testFindUsagesInRankProfileModularity() {
diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionUsagesTest.java
index 141e5dd4b59..a5315cea8fe 100644
--- a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindUsagesTest.java
+++ b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindFunctionUsagesTest.java
@@ -2,22 +2,13 @@
package ai.vespa.intellij.findUsages;
import ai.vespa.intellij.PluginTestBase;
-import ai.vespa.intellij.schema.findUsages.SdFindUsagesHandler;
-import ai.vespa.intellij.schema.model.Schema;
-import ai.vespa.intellij.schema.utils.Path;
-import com.intellij.find.findUsages.FindUsagesOptions;
-import com.intellij.openapi.project.Project;
import com.intellij.usageView.UsageInfo;
-import com.intellij.util.Processor;
import org.junit.Test;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* @author bratseth
*/
-public class FindUsagesTest extends PluginTestBase {
+public class FindFunctionUsagesTest extends PluginTestBase {
@Test
public void testFindUsagesInRankProfileModularity() {
diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindRankProfileUsagesTest.java b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindRankProfileUsagesTest.java
new file mode 100644
index 00000000000..ef916d52c0d
--- /dev/null
+++ b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/FindRankProfileUsagesTest.java
@@ -0,0 +1,32 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package ai.vespa.intellij.findUsages;
+
+import ai.vespa.intellij.PluginTestBase;
+import com.intellij.usageView.UsageInfo;
+import org.junit.Test;
+
+/**
+ * @author bratseth
+ */
+public class FindRankProfileUsagesTest extends PluginTestBase {
+
+ @Test
+ public void testFindUsagesInRankProfileModularity() {
+ useDir("src/test/applications/rankprofilemodularity");
+ var tester = new UsagesTester("test.sd", getProject());
+ tester.assertProfileUsages(2, "in_schema1");
+ tester.assertProfileUsages(0, "in_schema2");
+ tester.assertProfileUsages(1, "outside_schema1");
+ tester.assertProfileUsages(4, "outside_schema2");
+ }
+
+ @Test
+ public void testFindUsagesInSchemaInheritance() {
+ useDir("src/test/applications/schemainheritance");
+ var tester = new UsagesTester("parent.sd", getProject());
+ UsageInfo usage = tester.assertProfileUsages(1, "parent_profile").get(0);
+ assertEquals(406, usage.getNavigationOffset());
+ assertEquals(560, usage.getNavigationRange().getEndOffset());
+ }
+
+}
diff --git a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/UsagesTester.java b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/UsagesTester.java
index f48ef7f107a..319240b9ceb 100644
--- a/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/UsagesTester.java
+++ b/integration/intellij/src/test/java/ai/vespa/intellij/findUsages/UsagesTester.java
@@ -36,6 +36,13 @@ class UsagesTester {
return usageProcessor.usages;
}
+ List<UsageInfo> assertProfileUsages(int expectedUsages, String profileName) {
+ var profile = schema.rankProfiles().get(profileName).definition();
+ findUsages(profile);
+ assertEquals(expectedUsages, usageProcessor.usages.size());
+ return usageProcessor.usages;
+ }
+
/** Finds the function referred at the given character offset in the given profile. */
UsageInfo findFunctionDefinition(String profileName, int offset) {
PsiElement referringElement = schema.rankProfiles().get(profileName).definition().findElementAt(offset);