| // 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.FidlBitsDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlBitsOrEnumMemberImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlConstDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlEnumDeclarationImpl; |
| 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.FidlStructDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlTableDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlTypeAliasDeclarationImpl; |
| import fuchsia.developer.plugin.fidl.psi.impl.FidlUnionDeclarationImpl; |
| 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(FidlBitsDeclarationImpl.class, IconLoader.getIcon(path + "B.png")) |
| .put(FidlConstDeclarationImpl.class, IconLoader.getIcon(path + "C.png")) |
| .put(FidlEnumDeclarationImpl.class, IconLoader.getIcon(path + "E.png")) |
| .put(FidlProtocolDeclarationImpl.class, IconLoader.getIcon(path + "P.png")) |
| .put(FidlStructDeclarationImpl.class, IconLoader.getIcon(path + "S.png")) |
| .put(FidlTableDeclarationImpl.class, IconLoader.getIcon(path + "T.png")) |
| .put(FidlUnionDeclarationImpl.class, IconLoader.getIcon(path + "U.png")) |
| .put(FidlTypeAliasDeclarationImpl.class, IconLoader.getIcon(path + "U.png")) |
| .put(FidlBitsOrEnumMemberImpl.class, IconLoader.getIcon(path + "M.png")) |
| .put(FidlProtocolMethodImpl.class, IconLoader.getIcon(path + "M.png")) |
| .put(FidlProtocolEventImpl.class, IconLoader.getIcon(path + "E.png")) |
| .put(FidlMemberFieldImpl.class, IconLoader.getIcon(path + "F.png")) |
| .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; |
| } |
| } |