001    package org.mesopotamia.lang.java;
002    
003    import java.util.List;
004    
005    import org.mesopotamia.LanguageElement;
006    import org.mesopotamia.MesopotamiaException;
007    import org.mesopotamia.MesopotamiaRuntimeException;
008    import org.mesopotamia.NodeData;
009    import org.mesopotamia.RepositoryLanguage;
010    import org.mesopotamia.Scan;
011    import org.mesopotamia.lang.java.ref.Scope;
012    import org.mesopotamia.lang.java.ref.TypeSpecInfo;
013    
014    import biz.hammurapi.util.CollectionVisitable;
015    import biz.hammurapi.util.Visitor;
016    
017    public class Expression extends JavaLanguageElement implements Initializer, Statement {
018    
019            public Expression(NodeData xData, Class<?> context, Scan scan,
020                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
021                    super(xData, context, scan, language, environment);
022                    
023            }
024    
025            protected void acceptChildren(Visitor visitor) {
026                    super.acceptChildren(visitor);
027                    // Visiting non-text attributes
028                    try {
029                            new CollectionVisitable(getChildren(), false).accept(visitor);
030                    } catch (MesopotamiaException e) {
031                            throw new MesopotamiaRuntimeException("Cannot retrieve children", e);
032                    }               
033            }
034            
035            /**
036             * Override to inform visualizer to show children.
037             */
038            @SuppressWarnings("unchecked")
039            public synchronized List getChildren() throws MesopotamiaException {
040                    return super.getChildren();
041            }
042            
043            public TypeSpecInfo getTypeSpecInfo() {
044                    try {
045                            LanguageElement firstOperand = getChild(0);
046                            return firstOperand instanceof Expression ? ((Expression) firstOperand).getTypeSpecInfo() : null;
047                    } catch (MesopotamiaException e) {
048                            throw new MesopotamiaRuntimeException(e);
049                    }
050            }
051            
052    }