mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-27 16:57:49 +08:00
Fix missing icon in "go to symbol contributor" + use newer ChooseByNameContributorEx API
This commit is contained in:
parent
f255166cc0
commit
2fbcf27a1b
@ -1,35 +1,40 @@
|
|||||||
// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
|
|
||||||
package org.intellij.sdk.language;
|
package org.intellij.sdk.language;
|
||||||
|
|
||||||
import com.intellij.navigation.ChooseByNameContributor;
|
import com.intellij.navigation.ChooseByNameContributorEx;
|
||||||
import com.intellij.navigation.NavigationItem;
|
import com.intellij.navigation.NavigationItem;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
|
import com.intellij.util.Processor;
|
||||||
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
|
import com.intellij.util.indexing.FindSymbolParameters;
|
||||||
|
import com.intellij.util.indexing.IdFilter;
|
||||||
import org.intellij.sdk.language.psi.SimpleProperty;
|
import org.intellij.sdk.language.psi.SimpleProperty;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class SimpleChooseByNameContributor implements ChooseByNameContributor {
|
public class SimpleChooseByNameContributor implements ChooseByNameContributorEx {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String @NotNull [] getNames(Project project, boolean includeNonProjectItems) {
|
public void processNames(@NotNull Processor<? super String> processor,
|
||||||
List<SimpleProperty> properties = SimpleUtil.findProperties(project);
|
@NotNull GlobalSearchScope scope,
|
||||||
List<String> names = new ArrayList<>(properties.size());
|
@Nullable IdFilter filter) {
|
||||||
for (SimpleProperty property : properties) {
|
Project project = Objects.requireNonNull(scope.getProject());
|
||||||
if (property.getKey() != null && property.getKey().length() > 0) {
|
List<String> propertyKeys = ContainerUtil.map(SimpleUtil.findProperties(project), SimpleProperty::getKey);
|
||||||
names.add(property.getKey());
|
ContainerUtil.process(propertyKeys, processor);
|
||||||
}
|
|
||||||
}
|
|
||||||
return names.toArray(new String[names.size()]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NavigationItem @NotNull [] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) {
|
public void processElementsWithName(@NotNull String name,
|
||||||
// TODO: include non project items
|
@NotNull Processor<? super NavigationItem> processor,
|
||||||
List<SimpleProperty> properties = SimpleUtil.findProperties(project, name);
|
@NotNull FindSymbolParameters parameters) {
|
||||||
return properties.toArray(new NavigationItem[properties.size()]);
|
List<NavigationItem> properties = ContainerUtil.map(
|
||||||
|
SimpleUtil.findProperties(parameters.getProject(), name), property -> (NavigationItem) property);
|
||||||
|
ContainerUtil.process(properties, processor);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
|
|
||||||
|
package org.intellij.sdk.language;
|
||||||
|
|
||||||
|
import com.intellij.ide.IconProvider;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
|
import org.intellij.sdk.language.psi.SimpleProperty;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import javax.swing.*;
|
||||||
|
|
||||||
|
public class SimplePropertyIconProvider extends IconProvider {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Icon getIcon(@NotNull PsiElement element, int flags) {
|
||||||
|
return element instanceof SimpleProperty ? SimpleIcons.FILE : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
// Copyright 2000-2022 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||||
|
|
||||||
package org.intellij.sdk.language.psi.impl;
|
package org.intellij.sdk.language.psi.impl;
|
||||||
|
|
||||||
@ -6,7 +6,6 @@ import com.intellij.lang.ASTNode;
|
|||||||
import com.intellij.navigation.ItemPresentation;
|
import com.intellij.navigation.ItemPresentation;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.intellij.sdk.language.SimpleIcons;
|
|
||||||
import org.intellij.sdk.language.psi.SimpleElementFactory;
|
import org.intellij.sdk.language.psi.SimpleElementFactory;
|
||||||
import org.intellij.sdk.language.psi.SimpleProperty;
|
import org.intellij.sdk.language.psi.SimpleProperty;
|
||||||
import org.intellij.sdk.language.psi.SimpleTypes;
|
import org.intellij.sdk.language.psi.SimpleTypes;
|
||||||
@ -75,7 +74,7 @@ public class SimplePsiImplUtil {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Icon getIcon(boolean unused) {
|
public Icon getIcon(boolean unused) {
|
||||||
return SimpleIcons.FILE;
|
return element.getIcon(0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
<lang.parserDefinition language="Simple" implementationClass="org.intellij.sdk.language.SimpleParserDefinition"/>
|
<lang.parserDefinition language="Simple" implementationClass="org.intellij.sdk.language.SimpleParserDefinition"/>
|
||||||
<lang.syntaxHighlighterFactory language="Simple"
|
<lang.syntaxHighlighterFactory language="Simple"
|
||||||
implementationClass="org.intellij.sdk.language.SimpleSyntaxHighlighterFactory"/>
|
implementationClass="org.intellij.sdk.language.SimpleSyntaxHighlighterFactory"/>
|
||||||
|
<iconProvider implementation="org.intellij.sdk.language.SimplePropertyIconProvider"/>
|
||||||
<colorSettingsPage implementation="org.intellij.sdk.language.SimpleColorSettingsPage"/>
|
<colorSettingsPage implementation="org.intellij.sdk.language.SimpleColorSettingsPage"/>
|
||||||
<annotator language="JAVA" implementationClass="org.intellij.sdk.language.SimpleAnnotator"/>
|
<annotator language="JAVA" implementationClass="org.intellij.sdk.language.SimpleAnnotator"/>
|
||||||
<codeInsight.lineMarkerProvider language="JAVA"
|
<codeInsight.lineMarkerProvider language="JAVA"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user