* Copyright (C) 2010 Robert Futrell
* robert_futrell at users.sourceforge.net
* http://fifesoft.com/rsyntaxtextarea
* This library is distributed under a modified BSD license. See the included
* RSTALanguageSupport.License.txt file for details.
package org.fife.rsta.ac.java.tree;
import org.fife.rsta.ac.java.DecoratableIcon;
import org.fife.rsta.ac.java.IconFactory;
import org.fife.rsta.ac.java.rjc.ast.CodeBlock;
import org.fife.rsta.ac.java.rjc.ast.Field;
import org.fife.rsta.ac.java.rjc.ast.FormalParameter;
import org.fife.rsta.ac.java.rjc.ast.Method;
import org.fife.rsta.ac.java.rjc.lang.Modifiers;
import org.fife.rsta.ac.java.rjc.lang.Type;
import org.fife.ui.autocomplete.Util;
* Tree node for a field or method.
class MemberTreeNode extends JavaTreeNode {
public MemberTreeNode(CodeBlock cb) {
text = "<html>" + cb.getName();
IconFactory fact = IconFactory.get();
Icon base = fact.getIcon(IconFactory.METHOD_PRIVATE_ICON);
DecoratableIcon di = new DecoratableIcon(base);
int priority = PRIORITY_METHOD;
di.addDecorationIcon(fact.getIcon(IconFactory.STATIC_ICON));
priority += PRIORITY_BOOST_STATIC;
setSortPriority(priority);
public MemberTreeNode(Field field) {
Modifiers mods = field.getModifiers();
icon = IconFactory.FIELD_DEFAULT_ICON;
else if (mods.isPrivate()) {
icon = IconFactory.FIELD_PRIVATE_ICON;
else if (mods.isProtected()) {
icon = IconFactory.FIELD_PROTECTED_ICON;
else if (mods.isPublic()) {
icon = IconFactory.FIELD_PUBLIC_ICON;
icon = IconFactory.FIELD_DEFAULT_ICON;
StringBuffer sb = new StringBuffer();
sb.append(field.getName());
sb.append("<font color='#888888'>");
appendType(field.getType(), sb);
int priority = PRIORITY_FIELD;
IconFactory fact = IconFactory.get();
Icon base = fact.getIcon(icon);
DecoratableIcon di = new DecoratableIcon(base);
di.setDeprecated(field.isDeprecated());
di.addDecorationIcon(fact.getIcon(IconFactory.STATIC_ICON));
priority += PRIORITY_BOOST_STATIC;
di.addDecorationIcon(fact.getIcon(IconFactory.FINAL_ICON));
setSortPriority(priority);
public MemberTreeNode(Method method) {
int priority = PRIORITY_METHOD;
Modifiers mods = method.getModifiers();
icon = IconFactory.METHOD_DEFAULT_ICON;
else if (mods.isPrivate()) {
icon = IconFactory.METHOD_PRIVATE_ICON;
else if (mods.isProtected()) {
icon = IconFactory.METHOD_PROTECTED_ICON;
else if (mods.isPublic()) {
icon = IconFactory.METHOD_PUBLIC_ICON;
icon = IconFactory.METHOD_DEFAULT_ICON;
StringBuffer sb = new StringBuffer();
sb.append(method.getName());
int paramCount = method.getParameterCount();
for (int i=0; i<paramCount; i++) {
FormalParameter param = method.getParameter(i);
appendType(param.getType(), sb);
if (method.getType()!=null) {
sb.append("<font color='#888888'>");
appendType(method.getType(), sb);
IconFactory fact = IconFactory.get();
Icon base = fact.getIcon(icon);
DecoratableIcon di = new DecoratableIcon(base);
di.setDeprecated(method.isDeprecated());
di.addDecorationIcon(fact.getIcon(IconFactory.ABSTRACT_ICON));
if (method.isConstructor()) {
di.addDecorationIcon(fact.getIcon(IconFactory.CONSTRUCTOR_ICON));
priority = PRIORITY_CONSTRUCTOR; // Overrides previous value
di.addDecorationIcon(fact.getIcon(IconFactory.STATIC_ICON));
priority += PRIORITY_BOOST_STATIC;
di.addDecorationIcon(fact.getIcon(IconFactory.FINAL_ICON));
setSortPriority(priority);
static void appendType(Type type, StringBuffer sb) {
String t = type.toString();
t = t.replaceAll("<", "<");
t = t.replaceAll(">", ">");
public String getText(boolean selected) {
return selected ? Util.stripHtml(text).
replaceAll("<", "<").replaceAll(">", ">") : text;