/velocity/plugins/com.liferay.ide.velocity/src/com/liferay/ide/velocity/vaulttec/ui/editor/parser/NodeVisitor.java
https://gitlab.com/4615833/liferay-ide · Java · 547 lines · 339 code · 51 blank · 157 comment · 21 complexity · 44ec78430fce47d46bbd69afb87b346f MD5 · raw file
- package com.liferay.ide.velocity.vaulttec.ui.editor.parser;
- import com.liferay.ide.velocity.vaulttec.ui.editor.VelocityEditorEnvironment;
- import com.liferay.ide.velocity.vaulttec.ui.model.Directive;
- import com.liferay.ide.velocity.vaulttec.ui.model.IBlock;
- import com.liferay.ide.velocity.vaulttec.ui.model.ITreeNode;
- import com.liferay.ide.velocity.vaulttec.ui.model.Template;
- import java.util.Stack;
- import org.apache.velocity.runtime.parser.node.ASTAddNode;
- import org.apache.velocity.runtime.parser.node.ASTAndNode;
- import org.apache.velocity.runtime.parser.node.ASTAssignment;
- import org.apache.velocity.runtime.parser.node.ASTBlock;
- import org.apache.velocity.runtime.parser.node.ASTComment;
- import org.apache.velocity.runtime.parser.node.ASTDirective;
- import org.apache.velocity.runtime.parser.node.ASTDivNode;
- import org.apache.velocity.runtime.parser.node.ASTEQNode;
- import org.apache.velocity.runtime.parser.node.ASTElseIfStatement;
- import org.apache.velocity.runtime.parser.node.ASTElseStatement;
- import org.apache.velocity.runtime.parser.node.ASTEscape;
- import org.apache.velocity.runtime.parser.node.ASTEscapedDirective;
- import org.apache.velocity.runtime.parser.node.ASTExpression;
- import org.apache.velocity.runtime.parser.node.ASTFalse;
- import org.apache.velocity.runtime.parser.node.ASTFloatingPointLiteral;
- import org.apache.velocity.runtime.parser.node.ASTGENode;
- import org.apache.velocity.runtime.parser.node.ASTGTNode;
- import org.apache.velocity.runtime.parser.node.ASTIdentifier;
- import org.apache.velocity.runtime.parser.node.ASTIfStatement;
- import org.apache.velocity.runtime.parser.node.ASTIntegerLiteral;
- import org.apache.velocity.runtime.parser.node.ASTIntegerRange;
- import org.apache.velocity.runtime.parser.node.ASTLENode;
- import org.apache.velocity.runtime.parser.node.ASTLTNode;
- import org.apache.velocity.runtime.parser.node.ASTMap;
- import org.apache.velocity.runtime.parser.node.ASTMethod;
- import org.apache.velocity.runtime.parser.node.ASTModNode;
- import org.apache.velocity.runtime.parser.node.ASTMulNode;
- import org.apache.velocity.runtime.parser.node.ASTNENode;
- import org.apache.velocity.runtime.parser.node.ASTNotNode;
- import org.apache.velocity.runtime.parser.node.ASTObjectArray;
- import org.apache.velocity.runtime.parser.node.ASTOrNode;
- import org.apache.velocity.runtime.parser.node.ASTReference;
- import org.apache.velocity.runtime.parser.node.ASTSetDirective;
- import org.apache.velocity.runtime.parser.node.ASTStringLiteral;
- import org.apache.velocity.runtime.parser.node.ASTSubtractNode;
- import org.apache.velocity.runtime.parser.node.ASTText;
- import org.apache.velocity.runtime.parser.node.ASTTrue;
- import org.apache.velocity.runtime.parser.node.ASTWord;
- import org.apache.velocity.runtime.parser.node.ASTprocess;
- import org.apache.velocity.runtime.parser.node.Node;
- import org.apache.velocity.runtime.parser.node.ParserVisitor;
- import org.apache.velocity.runtime.parser.node.SimpleNode;
- /**
- * DOCUMENT ME!
- *
- * @version $Revision: 26 $
- * @author <a href="mailto:akmal.sarhan@gmail.com">Akmal Sarhan </a>
- */
- public class NodeVisitor implements ParserVisitor
- {
- private String fName;
- private Template fTemplate;
- private Stack fBlocks = new Stack();
- private IBlock fCurrentBlock;
- public NodeVisitor(String aName)
- {
- fName = aName;
- }
- /**
- * DOCUMENT ME!
- *
- * @return DOCUMENT ME!
- */
- public Template getTemplate()
- {
- return fTemplate;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.SimpleNode,
- * java.lang.Object)
- */
- public Object visit(SimpleNode aNode, Object aData)
- {
- return aNode.childrenAccept(this, aData);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTprocess,
- * java.lang.Object)
- */
- public Object visit(ASTprocess aNode, Object aData)
- {
- fTemplate = new Template(fName);
- fCurrentBlock = fTemplate;
- return aNode.childrenAccept(this, aData);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTComment,
- * java.lang.Object)
- */
- public Object visit(ASTComment aNode, Object aData)
- {
- return null;
- }
-
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTStringLiteral,
- * java.lang.Object)
- */
- public Object visit(ASTStringLiteral aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTIdentifier,
- * java.lang.Object)
- */
- public Object visit(ASTIdentifier aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTWord,
- * java.lang.Object)
- */
- public Object visit(ASTWord aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTDirective,
- * java.lang.Object)
- */
- public Object visit(ASTDirective aNode, Object aData)
- {
- String name = aNode.getDirectiveName();
- int type = Directive.getType('#' + name);
- Directive directive;
- String id = null;
- switch (type)
- {
- case Directive.TYPE_MACRO:
- if ((aNode.jjtGetNumChildren() > 0) && aNode.jjtGetChild(0) instanceof ASTWord)
- {
- name = aNode.jjtGetChild(0).literal();
- } else
- {
- name = "";
- }
- id = name;
- break;
- case Directive.TYPE_FOREACH:
- if (aNode.jjtGetNumChildren() > 2)
- {
- name = aNode.jjtGetChild(2).literal();
- } else
- {
- name = "";
- }
- if ((aNode.jjtGetNumChildren() > 0) && aNode.jjtGetChild(0) instanceof ASTReference)
- {
- id = aNode.jjtGetChild(0).literal();
- } else
- {
- id = "";
- }
- break;
- case Directive.TYPE_INCLUDE:
- case Directive.TYPE_PARSE:
- if (aNode.jjtGetNumChildren() > 0)
- {
- name = aNode.jjtGetChild(0).literal();
- } else
- {
- name = "";
- }
- id = "";
- break;
- case Directive.TYPE_MACRO_CALL:
- // Check if an already defined macro is referenced
- if (VelocityEditorEnvironment.getParser().isVelocimacro(name, fTemplate.getName()))
- {
- id = "";
- } else
- {
- id = null;
- }
- break;
- case Directive.TYPE_USER_DIRECTIVE:
- id = "";
- break;
- }
- // If valid directive then visit embedded nodes too
- if (id != null)
- {
- directive = new Directive(type, name, id, (ITreeNode) fCurrentBlock, aNode.getFirstToken().beginLine, aNode.getLastToken().endLine);
- aData = visitBlockDirective(aNode, aData, directive, false);
- // Add parameters of macro definition
- if ((type == Directive.TYPE_MACRO) && (aNode.jjtGetNumChildren() > 1))
- {
- for (int i = 1; i < aNode.jjtGetNumChildren(); i++)
- {
- Node node = aNode.jjtGetChild(i);
- if (node instanceof ASTReference)
- {
- directive.addParameter(node.literal());
- } else
- {
- break;
- }
- }
- }
- }
- return aData;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTBlock,
- * java.lang.Object)
- */
- public Object visit(ASTBlock aNode, Object aData)
- {
- return aNode.childrenAccept(this, aData);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTObjectArray,
- * java.lang.Object)
- */
- public Object visit(ASTObjectArray aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTMethod,
- * java.lang.Object)
- */
- public Object visit(ASTMethod aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTReference,
- * java.lang.Object)
- */
- public Object visit(ASTReference aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTTrue,
- * java.lang.Object)
- */
- public Object visit(ASTTrue aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTFalse,
- * java.lang.Object)
- */
- public Object visit(ASTFalse aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTText,
- * java.lang.Object)
- */
- public Object visit(ASTText aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTIfStatement,
- * java.lang.Object)
- */
- public Object visit(ASTIfStatement aNode, Object aData)
- {
- // Check for first embedded #ELSE or #ELSEIF directive to get end line
- int endLine = aNode.getLastToken().endLine;
- int numChildren = aNode.jjtGetNumChildren();
- for (int i = 1; i < numChildren; i++)
- {
- Node node = aNode.jjtGetChild(i);
- if (node instanceof ASTElseStatement || node instanceof ASTElseIfStatement)
- {
- endLine = node.getFirstToken().beginLine - 1;
- break;
- }
- }
- Directive directive = new Directive(Directive.TYPE_IF, aNode.jjtGetChild(0).literal(), "", (ITreeNode) fCurrentBlock, aNode.getFirstToken().beginLine, endLine);
- return visitBlockDirective(aNode, aData, directive, false);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTElseStatement,
- * java.lang.Object)
- */
- public Object visit(ASTElseStatement aNode, Object aData)
- {
- Directive directive = new Directive(Directive.TYPE_ELSE, null, "", (ITreeNode) fCurrentBlock, aNode.getFirstToken().beginLine, aNode.getLastToken().next.endLine);
- return visitBlockDirective(aNode, aData, directive, true);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTElseIfStatement,
- * java.lang.Object)
- */
- public Object visit(ASTElseIfStatement aNode, Object aData)
- {
- Directive directive = new Directive(Directive.TYPE_ELSEIF, aNode.jjtGetChild(0).literal(), "", (ITreeNode) fCurrentBlock, aNode.getFirstToken().beginLine, aNode.getLastToken().endLine);
- return visitBlockDirective(aNode, aData, directive, true);
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTSetDirective,
- * java.lang.Object)
- */
- public Object visit(ASTSetDirective aNode, Object aData)
- {
- String expr = aNode.jjtGetChild(0).literal();
- int pos = expr.indexOf('=');
- if (pos >= 0)
- {
- expr = expr.substring(0, pos).trim();
- }
- Directive directive = new Directive(Directive.TYPE_SET, expr, expr, (ITreeNode) fCurrentBlock, aNode.getFirstToken().beginLine, aNode.getLastToken().endLine);
- fCurrentBlock.addDirective(directive);
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTExpression,
- * java.lang.Object)
- */
- public Object visit(ASTExpression aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTAssignment,
- * java.lang.Object)
- */
- public Object visit(ASTAssignment aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTOrNode,
- * java.lang.Object)
- */
- public Object visit(ASTOrNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTAndNode,
- * java.lang.Object)
- */
- public Object visit(ASTAndNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTEQNode,
- * java.lang.Object)
- */
- public Object visit(ASTEQNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTNENode,
- * java.lang.Object)
- */
- public Object visit(ASTNENode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTLTNode,
- * java.lang.Object)
- */
- public Object visit(ASTLTNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTGTNode,
- * java.lang.Object)
- */
- public Object visit(ASTGTNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTLENode,
- * java.lang.Object)
- */
- public Object visit(ASTLENode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTGENode,
- * java.lang.Object)
- */
- public Object visit(ASTGENode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTAddNode,
- * java.lang.Object)
- */
- public Object visit(ASTAddNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTSubtractNode,
- * java.lang.Object)
- */
- public Object visit(ASTSubtractNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTMulNode,
- * java.lang.Object)
- */
- public Object visit(ASTMulNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTDivNode,
- * java.lang.Object)
- */
- public Object visit(ASTDivNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTModNode,
- * java.lang.Object)
- */
- public Object visit(ASTModNode aNode, Object aData)
- {
- return null;
- }
- /**
- * @see org.apache.velocity.runtime.parser.node.ParserVisitor#visit(org.apache.velocity.runtime.parser.node.ASTNotNode,
- * java.lang.Object)
- */
- public Object visit(ASTNotNode aNode, Object aData)
- {
- return null;
- }
- private Object visitBlockDirective(Node aNode, Object aData, Directive aDirective, boolean anAddToParentBlock)
- {
- if (anAddToParentBlock && fCurrentBlock instanceof Directive)
- {
- IBlock parent = (IBlock) ((Directive) fCurrentBlock).getParent();
- parent.addDirective(aDirective);
- } else
- {
- fCurrentBlock.addDirective(aDirective);
- }
- fBlocks.push(fCurrentBlock);
- fCurrentBlock = aDirective;
- aData = aNode.childrenAccept(this, aData);
- fCurrentBlock = (IBlock) fBlocks.pop();
- return aData;
- }
- public Object visit(ASTEscapedDirective arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- public Object visit(ASTEscape arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- public Object visit(ASTFloatingPointLiteral arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- public Object visit(ASTIntegerLiteral arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- public Object visit(ASTMap arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- public Object visit(ASTIntegerRange arg0, Object arg1)
- {
- // TODO Auto-generated method stub
- return null;
- }
- }