package org.netbeans.modules.ruby.elements; import java.util.Set; import org.jrubyparser.ast.ClassNode; import org.jrubyparser.ast.Colon3Node; import org.jrubyparser.ast.Node; import org.jrubyparser.ast.SClassNode; import org.jrubyparser.ast.INameNode; import org.netbeans.modules.csl.api.ElementKind; import org.netbeans.modules.csl.spi.ParserResult; public class AstClassElement extends AstElement implements ClassElement { private String fqn; private Set<String> includes; private boolean virtual; public AstClassElement(ParserResult info, Node node) { super(info, node); } @Override public String getName() { if (name == null) { if (node instanceof ClassNode) { Colon3Node n = ((ClassNode)node).getCPath(); name = n.getName(); } else if (node instanceof SClassNode) { Node n = ((SClassNode)node).getReceiverNode(); // What if it's a selfnode? if (n instanceof Colon3Node) { Colon3Node c3n = (Colon3Node)n; name = c3n.getName(); } else if (n instanceof INameNode) { name = ((INameNode)n).getName(); } else { name = n.toString(); } } if (name == null) { name = node.toString(); } } return name; } @Override public String getFqn() { if (fqn == null) { return getName(); } return fqn; } public void setName(String name) { this.name = name; } public void setFqn(String fqn) { this.fqn = fqn; } public void setIncludes(Set<String> includes) { this.includes = includes; } @Override public Set<String> getIncludes() { return includes; } @Override public ElementKind getKind() { return ElementKind.CLASS; } public boolean isVirtual() { return virtual; } public void setVirtual(boolean virtual) { this.virtual = virtual; } }