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 }