/*
* 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 javax.swing.ImageIcon;
import org.antlr.netbeans.editor.navigation.Description;
import org.netbeans.api.annotations.common.NonNull;
import org.openide.util.ImageUtilities;
import org.openide.util.Parameters;
import org.tvl.goworks.editor.go.codemodel.VarModel;
/**
*
* @author Sam Harwell
*/
public class VarReferenceCompletionItem extends GoCompletionItem {
private static ImageIcon ICON;
private static ImageIcon ICON_PROTECTED;
private static ImageIcon ICON_LOCAL;
private final VarModel varModel;
private final String varName;
private final boolean localScope;
private String leftText;
public VarReferenceCompletionItem(@NonNull String varName, boolean localScope) {
Parameters.notNull("varName", varName);
this.varModel = null;
this.varName = varName;
this.localScope = localScope;
}
public VarReferenceCompletionItem(@NonNull VarModel varModel, boolean localScope) {
Parameters.notNull("varModel", varModel);
this.varModel = varModel;
this.varName = varModel.getName();
this.localScope = localScope;
}
@Override
public VarModel getCodeElementModel() {
return varModel;
}
public String getVarName() {
return varName;
}
@Override
public int getSortPriority() {
return MEMBER_SORT_PRIORITY;
}
@Override
public String getSortTextImpl() {
return varName;
}
@Override
public CharSequence getInsertPrefix() {
return varName;
}
@Override
public String getToolTipText() {
if (varModel != null) {
switch (varModel.getVarKind()) {
case PARAMETER:
return "(Parameter) " + varModel;
case LOCAL:
return "(Local variable) " + varModel;
case RECEIVER:
return "(Receiver) " + varModel;
case RETURN:
return "(Return variable) " + varModel;
default:
return varModel.toString();
}
}
return varName;
}
@Override
protected ImageIcon getIcon() {
ImageIcon icon;
if (localScope) {
if (ICON_LOCAL == null) {
ICON_LOCAL = new ImageIcon(ImageUtilities.loadImage("org/tvl/goworks/editor/go/resources/fields.png"));
}
icon = ICON_LOCAL;
} else if (Character.isUpperCase(varName.charAt(0))) {
if (ICON == null) {
ICON = new ImageIcon(ImageUtilities.loadImage("org/tvl/goworks/editor/go/resources/field_static_16.png"));
}
icon = ICON;
} else {
if (ICON_PROTECTED == null) {
ICON_PROTECTED = new ImageIcon(ImageUtilities.loadImage("org/tvl/goworks/editor/go/resources/field_static_protected_16.png"));
}
icon = ICON_PROTECTED;
}
return icon;
}
@Override
protected String getLeftHtmlText() {
if (leftText == null) {
StringBuilder builder = new StringBuilder();
builder.append(FIELD_COLOR);
builder.append(varName);
builder.append(COLOR_END);
leftText = builder.toString();
}
return leftText;
}
@Override
protected String getRightHtmlText() {
if (varModel != null) {
String name = Description.htmlEscape(varModel.getVarType().getSimpleName());
return " " + name;
//String name = varModel.getClass().getSimpleName();
//name = name.substring(name.lastIndexOf('.') + 1);
//return name;
}
return "";
}
}