| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package fuchsia.developer.plugin.fidl.psi; |
| |
| import com.google.common.collect.ImmutableMap; |
| import com.intellij.extapi.psi.ASTWrapperPsiElement; |
| import com.intellij.lang.ASTNode; |
| import com.intellij.navigation.ItemPresentation; |
| import com.intellij.openapi.util.IconLoader; |
| import com.intellij.util.PlatformIcons; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlConstDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlLayoutDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlMemberFieldImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolEventImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlProtocolMethodImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlTypeAliasDeclarationImpl; |
| import java.util.Map; |
| import javax.swing.Icon; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| public abstract class FidlNamedElementImpl extends ASTWrapperPsiElement |
| implements FidlNamedElement { |
| |
| private static final Map<Class<? extends FidlNamedElementImpl>, Icon> icons; |
| |
| static { |
| String path = "/fuchsia/developer/plugin/fidl/icons/"; |
| icons = |
| ImmutableMap.<Class<? extends FidlNamedElementImpl>, Icon>builder() |
| .put( |
| FidlConstDeclarationImpl.class, |
| IconLoader.getIcon(path + "C.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlProtocolDeclarationImpl.class, |
| IconLoader.getIcon(path + "P.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlLayoutDeclarationImpl.class, |
| IconLoader.getIcon(path + "T.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlTypeAliasDeclarationImpl.class, |
| IconLoader.getIcon(path + "U.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlProtocolMethodImpl.class, |
| IconLoader.getIcon(path + "M.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlProtocolEventImpl.class, |
| IconLoader.getIcon(path + "E.png", FidlNamedElementImpl.class)) |
| .put( |
| FidlMemberFieldImpl.class, |
| IconLoader.getIcon(path + "F.png", FidlNamedElementImpl.class)) |
| .build(); |
| } |
| |
| private final ItemPresentation presentation = |
| new ItemPresentation() { |
| @Nullable |
| @Override |
| public String getPresentableText() { |
| return getIdentifierToken().getText(); |
| } |
| |
| @Nullable |
| @Override |
| public String getLocationString() { |
| return ""; |
| } |
| |
| @Nullable |
| @Override |
| public Icon getIcon(boolean unused) { |
| Icon value = icons.get(FidlNamedElementImpl.this.getClass()); |
| return (value == null) ? PlatformIcons.FOLDER_ICON : value; |
| } |
| }; |
| |
| public FidlNamedElementImpl(@NotNull ASTNode node) { |
| super(node); |
| } |
| |
| @Override |
| @Nullable |
| public ItemPresentation getPresentation() { |
| return presentation; |
| } |
| |
| @Override |
| public Icon getIcon(int flags) { |
| return PlatformIcons.LIBRARY_ICON; |
| } |
| } |