package gw.rating.flow.domain uses gw.lang.reflect.IType uses gw.rating.flow.util.RateflowTypeUtils class LocalVariableOperand extends CalcStepValueOperand implements CalcStepVariable { private final var _varName : String as readonly VariableName private final var _varFieldName : String as readonly VariableFieldName private final var _varFieldTypeName : String as readonly VariableFieldTypeName private final var _varFieldType: IType as readonly VariableFieldType construct(name: String) { this(name, null, null, CalcStepOperatorType.TC_STORE, 0, 0, null) } construct(name : String, opType : CalcStepOperatorType) { this(name, null as String, null as String, opType, 0, 0, null) } construct(name: String, typeName: String, opType: CalcStepOperatorType) { this(name, null, typeName, opType, 0, 0, null) } construct(name: String, fieldName: String, fieldTypeName: String) { this(name, fieldName, fieldTypeName, CalcStepOperatorType.TC_STORE, 0, 0, null) } construct(name : String, fieldName : String, fieldType : Type, opType : CalcStepOperatorType, numLeft: int, numRight: int) { this(name, fieldName, fieldType?.Name, opType, numLeft, numRight, null) } construct(name : String, fieldName : String, fieldTypeName : String, opType : CalcStepOperatorType, numLeft: int, numRight: int) { this(name, fieldName, fieldTypeName, opType, numLeft, numRight, null) } construct(name : String, fieldName : String, fieldTypeName : String, opType : CalcStepOperatorType, numLeft: int, numRight: int, aHighlightElement: RateRoutineHighlightElement) { super(opType, numLeft, numRight) _varName = name _varFieldName = fieldName _varFieldTypeName = fieldTypeName _varFieldType = RateflowTypeUtils.parseType(_varFieldTypeName) _highlightElement = aHighlightElement } override property get TypeOfVariable(): CalcStepVariable.Type { return CalcStepVariable.Type.Local } override property get VariableKey(): String { return _varName } override property get VariableReference(): String { return _varName + (_varFieldName?.HasContent ? ("?.get(\"" + _varFieldName + "\")") : "") } override property get DisplayName(): String { return _varName + (_varFieldName?.HasContent ? (".get(\"" + _varFieldName + "\")") : "") } override function getVariableTypeName(context : GenerationContext) : String { return getVariableType(context).Name } override function getVariableType(context : GenerationContext) : IType { return _varFieldName == null ? context.VarMap.get(VariableKey) : _varFieldType } override property get ReferenceTypeName(): String { return _varFieldTypeName } override property get ReferenceType(): IType { return _varFieldType } override property get OperandType() : CalcStepOperandType { return CalcStepOperandType.TC_LOCALVAR } override protected function generateValue(context: GenerationContext) { context.append(_varName + (_varFieldName != null ? ((".get(\"" + _varFieldName) + "\") as " + _varFieldTypeName) : "")) } override function getDataType(context: GenerationContext) : IType { return _varFieldName == null ? getVariableType(context) : _varFieldType } }