blob: 993e520c0b6d4167620d08c3af2d67598417c7d9 [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.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;
}
}