001    package org.mesopotamia.lang.java;
002    
003    import org.mesopotamia.MesopotamiaException;
004    import org.mesopotamia.NodeData;
005    import org.mesopotamia.RepositoryLanguage;
006    import org.mesopotamia.Scan;
007    import org.mesopotamia.lang.java.ref.TypeSpecInfo;
008    
009    import biz.hammurapi.util.VisitableBase;
010    import biz.hammurapi.util.Visitor;
011    
012    public class ConditionalExpression extends AssignmentExpression implements AnnotationMemberValueInitializer {
013            
014            /**
015             * Represents ternary expression.
016             * @author Pavel
017             *
018             */
019            public class TernaryExpression extends VisitableBase {
020                    
021                    private Expression condition;
022                    private Expression truePart;
023                    private Expression falsePart;
024                    
025                    TernaryExpression(Expression condition, Expression truePart, Expression falsePart) {
026                            super();
027                            this.condition = condition;
028                            this.truePart = truePart;
029                            this.falsePart = falsePart;
030                    }
031                    
032                    protected void acceptChildren(Visitor visitor) {
033                            object2visitor(condition, visitor);
034                            object2visitor(truePart, visitor);
035                            object2visitor(falsePart, visitor);
036                    }
037                    
038                    public Expression getCondition() {
039                            return condition;
040                    }
041                    
042                    public Expression getTruePart() {
043                            return truePart;
044                    }
045                    
046                    public Expression getFalsePart() {
047                            return falsePart;
048                    }
049                    
050            }
051            
052            private TernaryExpression ternaryExpression;
053    
054            public ConditionalExpression(NodeData xData, Class<?> context, Scan scan,
055                            RepositoryLanguage language, Object environment) throws MesopotamiaException {
056                    super(xData, context, scan, language, environment);
057    
058                    if (this.getClass() == ConditionalExpression.class) {
059                            ternaryExpression = new TernaryExpression((Expression) getChild(0), (Expression) getChild(1), (Expression) getChild(2));
060                    }
061            }
062            
063            public TernaryExpression getTernaryExpression() {
064                    return ternaryExpression;
065            }
066            
067            protected void acceptChildren(Visitor visitor) {
068                    if (this.getClass() == ConditionalExpression.class) {           
069                            object2visitor(ternaryExpression, visitor);
070                    } else {
071                            super.acceptChildren(visitor);
072                    }
073            }
074    
075            public TypeSpecInfo getTypeSpecInfo() {
076                    if (ternaryExpression!=null) {
077                            return ternaryExpression.getFalsePart().getTypeSpecInfo();
078                    }
079                    return super.getTypeSpecInfo();
080            }
081    
082            
083    }