/*
* 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.netbeans.api.annotations.common.NonNull;
import org.openide.util.ImageUtilities;
import org.openide.util.Parameters;
import org.tvl.goworks.editor.go.codemodel.TypeAliasModel;
import org.tvl.goworks.editor.go.codemodel.TypeKind;
import org.tvl.goworks.editor.go.codemodel.TypeModel;
/**
*
* @author Sam Harwell
*/
public class TypeReferenceCompletionItem extends GoCompletionItem {
private final TypeModel typeModel;
private final String typeName;
private String leftText;
public TypeReferenceCompletionItem(@NonNull String typeName) {
Parameters.notNull("typeName", typeName);
this.typeModel = null;
this.typeName = typeName;
}
public TypeReferenceCompletionItem(@NonNull TypeModel typeModel) {
Parameters.notNull("typeModel", typeModel);
this.typeModel = typeModel;
this.typeName = typeModel.getName();
}
@Override
public TypeModel getCodeElementModel() {
return typeModel;
}
@Override
public String getToolTipText() {
if (typeModel != null) {
return typeModel.getSimpleName();
}
return typeName;
}
@Override
protected ImageIcon getIcon() {
String resourceLocation = "org/tvl/goworks/editor/go/resources/";
String imageName;
TypeKind kind = typeModel != null ? typeModel.getKind() : TypeKind.UNKNOWN;
if (typeModel instanceof TypeAliasModel) {
kind = ((TypeAliasModel)typeModel).getType().getKind();
}
switch (kind) {
case ALIAS:
imageName = "typedef_16.png";
break;
case STRUCT:
imageName = "struct_16.png";
break;
case INTERFACE:
imageName = "interface.png";
break;
case ARRAY:
case CHANNEL:
case FUNCTION:
case INTRINSIC:
case MAP:
case POINTER:
case SLICE:
case UNKNOWN:
default:
imageName = "typedef_16.png";
break;
}
return new ImageIcon(ImageUtilities.loadImage(resourceLocation + imageName));
}
@Override
public int getSortPriority() {
return TYPE_SORT_PRIORITY;
}
@Override
public String getSortTextImpl() {
return typeName;
}
@Override
public CharSequence getInsertPrefix() {
return typeName;
}
@Override
protected String getLeftHtmlText() {
if (leftText == null) {
StringBuilder builder = new StringBuilder();
builder.append(TYPE_COLOR);
builder.append(typeName);
builder.append(COLOR_END);
leftText = builder.toString();
}
return leftText;
}
@Override
protected String getRightHtmlText() {
// if (typeModel != null) {
// String name = typeModel.getClass().getSimpleName();
// name = name.substring(name.lastIndexOf('.') + 1);
// return name;
// }
return "";
}
}