blob: 7ec809e1adbba811804af9fcf298b61582c4a9fe [file] [log] [blame]
// 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;
}
}