package org.netbeans.modules.ruby.elements; import java.util.Collections; import java.util.EnumSet; import java.util.Set; import org.jrubyparser.ast.ClassVarDeclNode; import org.jrubyparser.ast.ClassVarNode; import org.jrubyparser.ast.Node; import org.jrubyparser.ast.INameNode; import org.netbeans.modules.csl.api.ElementKind; import org.netbeans.modules.csl.api.Modifier; import org.netbeans.modules.csl.spi.ParserResult; public class AstFieldElement extends AstElement { public AstFieldElement(ParserResult info, Node node) { super(info, node); } @Override public String getName() { if (name == null) { if (node instanceof INameNode) { // InstVarNode, ClassDeclVarNode, ConstNode, etc. name = ((INameNode)node).getName(); } else if (node instanceof ClassVarNode) { // should be INameNode) name = ((ClassVarNode)node).getName(); } if (name == null) { name = node.toString(); } // Chop off "@" and "@@" if (name.startsWith("@@")) { name = name.substring(2); } else if (name.startsWith("@")) { name = name.substring(1); } } return name; } @Override public Set<Modifier> getModifiers() { if (modifiers == null) { // TODO - find access level! if (node instanceof ClassVarNode || node instanceof ClassVarDeclNode) { modifiers = EnumSet.of(Modifier.STATIC); } else { // instance variables are always private modifiers = Collections.singleton(Modifier.PRIVATE); } } return modifiers; } @Override public ElementKind getKind() { return ElementKind.FIELD; } }