/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.tvl.goworks.editor.go.completion; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import javax.swing.ImageIcon; import org.antlr.v4.runtime.misc.IntervalSet; import org.netbeans.api.annotations.common.NonNull; import org.openide.util.ImageUtilities; import org.openide.util.Parameters; import org.tvl.goworks.editor.go.parser.GoLexer; /** * * @author Sam Harwell */ public class KeywordCompletionItem extends GoCompletionItem { public static final IntervalSet KEYWORD_TYPES = new IntervalSet(); static { KEYWORD_TYPES.add(GoLexer.Break); KEYWORD_TYPES.add(GoLexer.Case); KEYWORD_TYPES.add(GoLexer.Chan); KEYWORD_TYPES.add(GoLexer.Const); KEYWORD_TYPES.add(GoLexer.Continue); KEYWORD_TYPES.add(GoLexer.Default); KEYWORD_TYPES.add(GoLexer.Defer); KEYWORD_TYPES.add(GoLexer.Else); KEYWORD_TYPES.add(GoLexer.Fallthrough); KEYWORD_TYPES.add(GoLexer.For); KEYWORD_TYPES.add(GoLexer.Func); KEYWORD_TYPES.add(GoLexer.Go); KEYWORD_TYPES.add(GoLexer.Goto); KEYWORD_TYPES.add(GoLexer.If); KEYWORD_TYPES.add(GoLexer.Import); KEYWORD_TYPES.add(GoLexer.Interface); KEYWORD_TYPES.add(GoLexer.Map); KEYWORD_TYPES.add(GoLexer.Package); KEYWORD_TYPES.add(GoLexer.Range); KEYWORD_TYPES.add(GoLexer.Return); KEYWORD_TYPES.add(GoLexer.Select); KEYWORD_TYPES.add(GoLexer.Struct); KEYWORD_TYPES.add(GoLexer.Switch); KEYWORD_TYPES.add(GoLexer.Type); KEYWORD_TYPES.add(GoLexer.Var); } public static final Collection<String> KEYWORDS; static { ArrayList<String> keywords = new ArrayList<>(); for (int i : KEYWORD_TYPES.toArray()) { String literal = GoLexer.VOCABULARY.getLiteralName(i); if (literal == null) { continue; } String keyword = literal.substring(1, literal.length() - 1); keywords.add(keyword); } Collections.sort(keywords); KEYWORDS = keywords; } public static final Collection<KeywordCompletionItem> KEYWORD_ITEMS; static { ArrayList<KeywordCompletionItem> keywordItems = new ArrayList<>(); for (String keyword : KEYWORDS) { keywordItems.add(new KeywordCompletionItem(keyword)); } KEYWORD_ITEMS = keywordItems; } private static ImageIcon ICON; private final String keyword; private String leftText; public KeywordCompletionItem(@NonNull String keyword) { Parameters.notNull("keyword", keyword); this.keyword = keyword; } @Override public int getSortPriority() { return KEYWORD_SORT_PRIORITY; } @Override public String getSortTextImpl() { return keyword; } @Override public CharSequence getInsertPrefix() { return keyword; } @Override public String getToolTipText() { return ""; } @Override protected ImageIcon getIcon() { if (ICON == null) { ICON = new ImageIcon(ImageUtilities.loadImage("org/tvl/goworks/editor/go/resources/duke.png")); } return ICON; } @Override protected String getLeftHtmlText() { if (leftText == null) { StringBuilder builder = new StringBuilder(); builder.append(KEYWORD_COLOR); builder.append(BOLD); builder.append(keyword); builder.append(BOLD_END); builder.append(COLOR_END); leftText = builder.toString(); } return leftText; } }