package org.rubypeople.rdt.refactoring.nodewrapper; import java.util.ArrayList; import java.util.Collection; import org.jruby.ast.ConstNode; import org.jruby.ast.DefsNode; import org.jruby.ast.ModuleNode; import org.jruby.ast.Node; import org.rubypeople.rdt.refactoring.core.NodeProvider; public class ModuleNodeWrapper implements INodeWrapper { private final ModuleNode moduleNode; private ModuleNodeWrapper parentModule; private ArrayList<ConstNode> moduleMethodNodes = new ArrayList<ConstNode>();; public ModuleNodeWrapper(ModuleNode moduleNode, ModuleNodeWrapper parentModule) { this.moduleNode = moduleNode; this.parentModule = parentModule; initModuleMethodConstNodes(); } public ModuleNode getWrappedNode() { return moduleNode; } public ModuleNodeWrapper getParentModule() { return parentModule; } public void setParentModule(ModuleNodeWrapper parentModule) { this.parentModule = parentModule; } public String getName() { return moduleNode.getCPath().getName(); } public String getFullName() { return (parentModule != null ? parentModule.getFullName() + "::" : "") + getName(); } public Collection<ConstNode> getModuleMethodConstNodes() { return moduleMethodNodes; } private void initModuleMethodConstNodes() { for (Node node : NodeProvider.getSubNodes(getWrappedNode(), DefsNode.class)) { DefsNode defsNode = (DefsNode) node; if(defsNode.getReceiverNode() instanceof ConstNode) { ConstNode constNode = (ConstNode) defsNode.getReceiverNode(); if(constNode.getName().equals(getName())) { moduleMethodNodes.add(constNode); } } } } }