package org.jacorb.notification.filter.etcl; /* * JacORB - a free Java ORB * * Copyright (C) 1999-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ import antlr.collections.AST; /** * Visitor for TCL Trees. Does some Restructuration of a TCL Tree. * * @author Alphonse Bendt */ public class TCLCleanUp extends AbstractTCLVisitor implements TCLParserTokenTypes { public void fix( AbstractTCLNode node ) { try { node.acceptPostOrder( this ); } catch ( VisitorException e ) { throw new RuntimeException(e.toString()); } } public void visitComponent( ETCLComponentName component ) throws VisitorException { insertComponentName( component ); } public void visitUnionPosition( UnionPositionOperator op ) throws VisitorException { fixUnionPosition( op ); } /** * insert the Complete Name of a Component in the * ComponentOperator node. */ void insertComponentName( ETCLComponentName comp ) { StringBuffer _name = new StringBuffer( comp.toString() ); AbstractTCLNode _cursor = comp.left(); while ( _cursor != null ) { _name.append( _cursor.toString() ); _cursor = ( AbstractTCLNode ) _cursor.getNextSibling(); } comp.setComponentName( _name.toString() ); } private void fixUnionPosition( UnionPositionOperator node ) { AST _nextSibling = node.getNextSibling(); if ( _nextSibling == null ) { node.setDefault(); } else { switch ( _nextSibling.getType() ) { case NUMBER: Double _position = ( ( NumberValue ) _nextSibling ).getNumber(); node.setPosition( _position ); node.setNextSibling( _nextSibling.getNextSibling() ); // fallthrough case PLUS: // fallthrough case MINUS: // fallthrough case STRING: break; default: node.setDefault(); break; } } } }