/** * Copyright (c) 2012 Cloudsmith Inc. and other contributors, as listed below. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cloudsmith * */ package org.cloudsmith.xtext.dommodel.impl; import org.cloudsmith.xtext.dommodel.IDomNode; import org.eclipse.xtext.nodemodel.INode; /** * Adapts INode to IDomNode * */ public class NodeModelDomNodes { // public class NodeModelCompositeNode extends NodeModelNode { // // public NodeModelCompositeNode(ICompositeNode node, IDomNode parent) { // super(node, parent); // } // // @Override // public BidiIterable<IDomNode> getChildren() { // return new TransformingBidiIterable(getCompositeNode().getChildren(), this); // } // // private ICompositeNode getCompositeNode() { // return (ICompositeNode) getNode(); // } // // @Override // public boolean hasChildren() { // return getCompositeNode().hasChildren(); // } // // } // // public class NodeModelLeafNode extends NodeModelNode { // // public NodeModelLeafNode(ILeafNode node, IDomNode parent) { // super(node, parent); // } // // } // // public class NodeModelNode extends AbstractDomNode { // private INode node; // // public NodeModelNode(INode node, IDomNode parent) { // this.node = node; // this.setParent(parent); // if(node instanceof ILeafNode) { // ILeafNode leaf = (ILeafNode) node; // flip(leaf.isHidden(), NodeStatus.HIDDEN); // flip(tokenUtil.isCommentNode(node), NodeStatus.COMMENT); // flip(tokenUtil.isWhitespaceNode(node), NodeStatus.WHITESPACE); // flip(node.getSyntaxErrorMessage() == null, NodeStatus.CONTAINS_ERROR); // // // TODO: CONTAINS whitespace, comment, hidden, if this is a composite node // // search children and set status. // } // } // // @Override // public EObject getGrammarElement() { // return node.getGrammarElement(); // } // // @Override // public int getLength() { // return node.getLength(); // } // // @Override // public INode getNode() { // return node; // } // // @Override // public int getOffset() { // return node.getOffset(); // } // // @Override // public EObject getSemanticElement() { // return node.getSemanticElement(); // } // // @Override // public String getText() { // return node.getText(); // } // // @Override // public boolean hasChildren() { // return node instanceof ILeafNode == false && ((ICompositeNode) node).hasChildren(); // } // // @Override // public boolean isLeaf() { // return node instanceof ILeafNode; // } // // } // // private class TransformingBidiIterable implements BidiIterable<IDomNode> { // private class TransformingBidiIterator implements BidiIterator<IDomNode> { // // private BidiIterator<INode> delegate; // // public TransformingBidiIterator(BidiIterator<INode> delegate) { // this.delegate = delegate; // } // // @Override // public boolean hasNext() { // return delegate.hasNext(); // } // // @Override // public boolean hasPrevious() { // return delegate.hasPrevious(); // } // // @Override // public IDomNode next() { // return createDomNode(delegate.next(), parentNode); // } // // @Override // public IDomNode previous() { // return createDomNode(delegate.previous(), parentNode); // } // // @Override // public void remove() { // delegate.remove(); // // } // } // // final BidiIterable<INode> delegate; // // final IDomNode parentNode; // // TransformingBidiIterable(BidiIterable<INode> delegate, IDomNode parentNode) { // this.delegate = delegate; // this.parentNode = parentNode; // } // // @Override // public BidiIterator<IDomNode> iterator() { // return new TransformingBidiIterator(delegate.iterator()); // } // // @Override // public BidiIterable<IDomNode> reverse() { // return new ReversedBidiIterable<IDomNode>(this); // } // } // // protected TokenUtil tokenUtil; // // @Inject // public NodeModelDomNodes(TokenUtil tokenUtil) { // this.tokenUtil = tokenUtil; // } /** * Static method that adapts an INode (being either an ICompositeNode or ILeafNode) to an IDomNode * TODO: Implement this - the first implementation above creates lots of new isntances, and have * issues with part of the contract. * * @param node * @param parent * @return */ public IDomNode createDomNode(INode node, IDomNode parent) { throw new UnsupportedOperationException("Please implement this"); // // if(node instanceof ICompositeNode) // return new NodeModelCompositeNode((ICompositeNode) node, parent); // // return new NodeModelLeafNode((ILeafNode) node, parent); } }