| «IMPORT org::eclipse::xtend::backend::aop» |
| «IMPORT org::eclipse::xtend::backend::common» |
| «IMPORT org::eclipse::xtend::backend::expr» |
| «IMPORT org::eclipse::xtend::backend::functions» |
| «IMPORT org::eclipse::xtend::middleend::plugins» |
| «IMPORT org::eclipse::xtend::backend::util» |
| «IMPORT org::eclipse::xtend::backend::compiler» |
| «IMPORT org::eclipse::xtend::middleend::javaannotations::internal» |
| |
| «EXTENSION org::eclipse::xtend::backend::compiler::templates::expressions» |
| «EXTENSION org::eclipse::xtend::backend::compiler::templates::functions» |
| «EXTENSION org::eclipse::xtend::backend::compiler::templates::names» |
| «EXTENSION org::eclipse::xtend::backend::compiler::templates::types» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR Object» |
| «ENDDEFINE» |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR ExpressionBase» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR AndExpression» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (getVarName(left, "leftVarName", "_"+varIdx), "Boolean", true, resource) FOR left-» |
| «EXPAND compileExpression (getVarName(right, "rightVarName", "_"+varIdx), "Boolean", true, resource) FOR right-» |
| if («getVarName(left, "leftVarName", "_"+varIdx)» && «getVarName(right, "rightVarName", "_"+varIdx)») |
| «IF declareResultVar»Boolean «ENDIF»«resultVarName» = Boolean.TRUE; |
| else |
| «IF declareResultVar»Boolean «ENDIF»«resultVarName» = Boolean.FALSE; |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR ConcatExpression» |
| «LET getNextVarIdx() AS varIdx-» |
| List<Object> «resultVarName»_Parts = new ArrayList<Object> («parts.size»); |
| «FOREACH parts AS p ITERATOR it-» |
| «EXPAND compileExpression (p.getVarName (resultVarName, "_ConcatPart_" +it.counter1), "Object", true, resource) FOR p-» |
| «resultVarName»_Parts.add («p.getVarName (resultVarName, "_ConcatPart_" +it.counter1)»); |
| «ENDFOREACH-» |
| «IF declareResultVar»EfficientLazyString «ENDIF»«resultVarName» = Concatenator.append (_ctx, «resultVarName»_Parts); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR CreateCachedExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| final List<Object> params_«varIdx» = new ArrayList<Object>(); |
| «FOREACH paramExpr AS p ITERATOR it-» |
| «EXPAND compileExpression (getVarName(p, "createParamVarName", "_"+ varIdx + "_" +it.counter1), "Object", true, resource) FOREACH paramExpr-» |
| params_«varIdx».add ( createParamVarName_«varIdx»_«it.counter0»); |
| «ENDFOREACH-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»_ctx.getCreationCache().createRaw (_ctx.getTypesystem ().findType ("«type.uniqueRepresentation»"), params_«varIdx»); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR CreateUncachedExpression» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»_ctx.getTypesystem ().findType ("«type.uniqueRepresentation»").create(); |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR CurryingExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «LET getNamedFunction (function, resource) AS f» |
| Function «getVarName(f.name.simpleName + "UnCurried", f.name.simpleName + "UnCurried", "_" +varIdx)» = _ctx.getFunctionDefContext().getMatch («f.name.getQualifiedNameBuilder()», «f.function.getFunctionParameterTypes()»); |
| List<Object> «getVarName(f.name.simpleName+"BoundParams", "boundParams", "_" + varIdx)» = new ArrayList<Object>(); |
| «FOREACH boundParams.typeSelect(ExpressionBase) AS p ITERATOR it-» |
| «EXPAND compileExpression(getVarName(p, "boundParamVarName", "_" + varIdx + "_" + it.counter1), "Object", true, resource) FOR p-» |
| «getVarName(f.name.simpleName+"BoundParams", "boundParams", "_" + varIdx)».add («getVarName(p, "boundParamVarName", "_" + varIdx + "_" + it.counter1)»); |
| «ENDFOREACH-» |
| «IF declareResultVar»Function «ENDIF»«resultVarName» = new CurriedFunction («getVarName(f.name.simpleName + "UnCurried", f.name.simpleName + "UnCurried", "_" +varIdx)», «getVarName(f.name.simpleName+"BoundParams", "boundParams", "_" + varIdx)», _ctx); |
| «ENDLET-» |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR DeferredEvalExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = new FutureResultHolder (new AbstractFunction () { |
| public Object invoke (ExecutionContext _ctx, Object[] params) { |
| «EXPAND compileExpression (getVarName(innerExpr, "deferredExprVarName", "_"+varIdx), "Object", true, resource) FOR innerExpr-» |
| return «getVarName(innerExpr, "deferredExprVarName", "_"+varIdx)»; |
| } |
| }); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR HidingLocalVarDefExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| final Object oldValue_«varIdx» = _ctx.getLocalVarContext().getLocalVars().get(«localVarName»); |
| «EXPAND compileExpression (getVarName (defExpression, "defExprResult", "_" + varIdx), "Object", true, resource) FOR defExpression-» |
| _ctx.getLocalVarContext().getLocalVars().put («localVarName», «getVarName (defExpression, "defExprResult", "_" + varIdx)»); |
| |
| if (_ctx.isLogStacktrace()) |
| _ctx.getStacktrace().add (new StacktraceEntry («pos.buildSourcePos()», _ctx)); |
| |
| try { |
| «EXPAND compileExpression (resultVarName, "Object", true, resource) FOR innerExpression-» |
| } |
| finally { |
| _ctx.getStacktrace ().remove (_ctx.getStacktrace().size() - 1); |
| _ctx.getLocalVarContext().getLocalVars().put(«localVarName», oldValue_«varIdx»); |
| } |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR IfExpression-» |
| «LET getNextVarIdx() AS varIdx» |
| Boolean «getVarName (condition, "condExprVarName", "_" + varIdx)» = Boolean.FALSE; |
| «EXPAND compileExpression (getVarName (condition, "condExprVarName", "_" + varIdx), "Boolean", false, resource) FOR condition-» |
| «EXPAND initVar (resultType, declareResultVar) FOR resultVarName» |
| if («getVarName (condition, "condExprVarName", "_" + varIdx)») { |
| «EXPAND compileExpression (resultVarName, resultType, false, resource) FOR ifPart-» |
| } else { |
| «EXPAND compileExpression (resultVarName, resultType, false, resource) FOR elsePart-» |
| } |
| «ENDLET» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR InitClosureExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| List<String> paramNames_«varIdx» = Arrays.asList («IF !paramNames.isEmpty»"«FOREACH paramNames AS pName SEPARATOR ","»«pName»«ENDFOREACH»"«ENDIF»); |
| List<BackendType> paramTypes_«varIdx» = new ArrayList<BackendType>(); |
| «FOREACH paramTypes.typeSelect(BackendType) AS pt-» |
| paramTypes_«varIdx».add (_ctx.getTypesystem ().findType ("«pt.uniqueRepresentation»")); |
| «ENDFOREACH-» |
| Function «resultVarName» = new AbstractClosure (_ctx.getLocalVarContext(), _ctx.getFunctionDefContext(), paramNames_«varIdx», paramTypes_«varIdx») { |
| protected Object apply (ExecutionContext _ctx) { |
| «EXPAND compileExpression (getVarName (defExpression, "defExpr", "_" +varIdx), "Object", true, resource) FOR defExpression-» |
| return «getVarName (defExpression, "defExpr", "_" +varIdx)»; |
| } |
| }; |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR InvocationOnCollectionExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (getVarName(collection, "coll", "_" +varIdx), "Collection", true, resource) FOR collection-» |
| «IF params.size > 0 && LocalVarEvalExpression.isInstance(params.first())-» |
| «IF (((LocalVarEvalExpression)params.first()).localVarName == "this")-» |
| boolean firstParamIsThis_«varIdx» = true; |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| final List<Object> params_«varIdx» = new ArrayList<Object>(); |
| params_«varIdx».add (null); //placeholder |
| «FOREACH params AS e-» |
| «EXPAND compileExpression (getVarName (e, "param", "_"+varIdx), "Object", true, resource) FOR e-» |
| params_«varIdx».add («getVarName (e, "param", "_"+varIdx)»); |
| «ENDFOREACH-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeOnCollection(«functionName.getQualifiedNameBuilder()», coll_«varIdx», params_«varIdx», _ctx, firstParamIsThis_«varIdx», SourcePos); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR InvocationOnObjectExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «REM»MATCH THE TWO OF THEM«ENDREM» |
| final List<Object> params_«varIdx» = new ArrayList<Object> (); |
| «IF params.size > 0 && LocalVarEvalExpression.isInstance (params.first())-» |
| «IF (((LocalVarEvalExpression) params.first()).localVarName == "this")-» |
| boolean firstParamIsThis_«varIdx» = true; |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| «FOREACH params AS e ITERATOR it-» |
| «EXPAND compileExpression (getVarName (e, "paramExprRes", "_"+varIdx+"_"+it.counter1), "Object", true, resource) FOR e-» |
| params_«varIdx».add («getVarName (e, "paramExprRes", "_"+varIdx+"_"+it.counter1)»); |
| «ENDFOREACH-» |
| «IF nullIfFirstParamIsNull && params.size > 0-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeOnObjectNullChecked(«functionName.getQualifiedNameBuilder()», params_«varIdx», _ctx, firstParamIsThis_«varIdx», «pos.buildSourcePos()»); |
| «ELSE-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeOnObject(«functionName.getQualifiedNameBuilder()», params_«varIdx», _ctx, firstParamIsThis_«varIdx»); |
| «ENDIF-» |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR InvocationOnWhateverExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «IF params.size > 0 && LocalVarEvalExpression.isInstance(params.first())» |
| «IF (((LocalVarEvalExpression) params.first()).localVarName == "this")-» |
| boolean firstParamIsThis_«varIdx» = true; |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| «ELSE» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF» |
| final List<Object> params_«varIdx» = new ArrayList<Object> (); |
| «FOREACH params AS e ITERATOR it-» |
| «EXPAND compileExpression (getVarName (e, "paramExprRes", "_"+varIdx+"_"+it.counter1), "Object", true, resource) FOR e-» |
| params_«varIdx».add («getVarName (e, "paramExprRes", "_"+varIdx+"_"+it.counter1)»); |
| «ENDFOREACH-» |
| «IF nullIfFirstParamIsNull && params.size > 0-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeOnWhatEverNullChecked(«functionName.getQualifiedNameBuilder()», params_«varIdx», _ctx, firstParamIsThis_«varIdx», «pos.buildSourcePos()»); |
| «ELSE-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeOnWhatEver(«functionName.getQualifiedNameBuilder()», params_«varIdx», _ctx, firstParamIsThis_«varIdx»); |
| «ENDIF-» |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression (String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR ListLiteralExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| final List<Object> «resultVarName» = new ArrayList<Object>(); |
| «FOREACH innerExpression AS e ITERATOR it-» |
| «EXPAND compileExpression (getVarName (e, "exprRes", "_"+ varIdx + "_" + it.counter1), "Object", true, resource) FOR e-» |
| «resultVarName».add (exprRes_«varIdx»); |
| «ENDFOREACH-» |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR LiteralExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «this.toJavaLiteral()»; |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR LocalVarEvalExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»_ctx.getLocalVarContext().getLocalVars().get ("«localVarName»"); |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR MethodInvocationExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «IF params.size > 0 && LocalVarEvalExpression.isInstance(params.first())» |
| «IF (((LocalVarEvalExpression) params.first()).localVarName == "this")-» |
| boolean firstParamIsThis_«varIdx» = true; |
| «ELSE-» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF-» |
| «ELSE» |
| boolean firstParamIsThis_«varIdx» = false; |
| «ENDIF» |
| Class cls = «method.declaringClass.name».class; |
| «IF method.parameterTypes.size > 0-» |
| Method mtd = cls.getMethod(«method.name», «FOREACH method.parameterTypes AS pt SEPARATOR ", "»«pt.name»«ENDFOREACH»); |
| «ELSE-» |
| Method mtd = cls.getMethod(«method.name»); |
| «ENDIF-» |
| List<Object> «method.name»_params_«varIdx» = new ArrayList<Object>(); |
| «FOREACH params.typeSelect(ExpressionBase) AS p ITERATOR it-» |
| «EXPAND compileExpression (getVarName (p, "paramVarName", "_" + varIdx + "_" +it.counter1), "Object", true, resource) FOR p-» |
| «method.name»_params_«varIdx».add(«getVarName (p, "paramVarName", "_" + varIdx + "_" +it.counter1)»); |
| «ENDFOREACH-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»Invoker.invokeMethod (mtd, «method.name»_params_«varIdx», «static», _ctx, «nullIfFirstParamIsNull», firstParamIsThis_«varIdx», «pos.buildSourcePos()») |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR NewLocalVarDefExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (getVarName(defExpression, "varDefExpr", "_" + varIdx), "Object", true, resource) FOR defExpression-» |
| _ctx.getLocalVarContext().getLocalVars().put («localVarName», «getVarName(defExpression, "varDefExpr", "_" + varIdx)»); |
| if (_ctx.isLogStacktrace()) |
| _ctx.getStacktrace().add (new StacktraceEntry («pos.buildSourcePos()», _ctx)); |
| try { |
| «EXPAND compileExpression (getVarName (innerExpression, "newLocalVarDefExpr", "_inner_"+varIdx), "Object", true, resource ) FOR innerExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»«getVarName (innerExpression, "newLocalVarDefExpr", "_inner_"+varIdx)»; |
| } |
| finally { |
| if (_ctx.isLogStacktrace()) |
| _ctx.getStacktrace ().remove (_ctx.getStacktrace().size() - 1); |
| _ctx.getLocalVarContext ().getLocalVars ().remove («localVarName»); |
| } |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR OrExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (getVarName (left, "leftVarName", "_" +varIdx), "Boolean", true, resource) FOR left-» |
| «EXPAND compileExpression (getVarName (right, "rightVarName", "_" +varIdx), "Boolean", true, resource) FOR right-» |
| if (leftVarName_«varIdx» || rightVarName_«varIdx») |
| «IF declareResultVar»Boolean «ENDIF»«resultVarName» = Boolean.TRUE; |
| else |
| «IF declareResultVar»Boolean «ENDIF»«resultVarName» = Boolean.FALSE; |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR PropertyOnCollectionExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (getVarName (innerExpression, "coll", "_"+varIdx), "Object", true, resource ) FOR innerExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»PropertyAccessor.propertyOnCollection(«getVarName (innerExpression, "coll", "_"+varIdx)», "«propertyName»", _ctx, «pos.buildSourcePos()»); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR PropertyOnObjectExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (innerExpression.getVarName ("innerPropertyOnObjectExpr", "_" + varIdx), "Object", true, resource) FOR innerExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»PropertyAccessor.propertyOnObject(«innerExpression.getVarName ("innerPropertyOnObjectExpr", "_" + varIdx)», "«propertyName»", _ctx, «pos.buildSourcePos()»); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR PropertyOnWhateverExpression-» |
| «LET getNextVarIdx() AS varIdx-» |
| «EXPAND compileExpression (innerExpression.getVarName("innerPropertyExpr", "_" + varIdx),"Object", true, resource) FOR innerExpression-» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»PropertyAccessor.propertyOnWhatever(«innerExpression.getVarName("innerPropertyExpr", "_" + varIdx)», "«propertyName»", _ctx, «pos.buildSourcePos()»); |
| «ENDLET-» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR RegisterAdviceExpression-» |
| «LET getNextVarIdx() AS varIdx» |
| «EXPAND compileAdvice (advice.getVarName ("advVarName", "_" +varIdx), resource) FOR advice» |
| final AdviceContext oldContext_«varIdx» = _ctx.getAdviceContext(); |
| _ctx.setAdviceContext (_ctx.getAdviceContext ().copyWithAdvice (_advice)); |
| try { |
| «EXPAND compileExpression (innerExpression.getVarName("innerRegisterAdviceExpr", "_" + varIdx), "Object", true, resource) FOR innerExpression» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = «resultType.getResultType().cast()»«innerExpression.getVarName("innerRegisterAdviceExpr", "_" + varIdx)»; |
| } |
| finally { |
| _ctx.setAdviceContext (oldContext_«varIdx»); |
| } |
| «ENDLET» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR SequenceExpression» |
| «LET getNextVarIdx() AS varIdx» |
| «IF inner.size > 0 -» |
| «FOREACH inner AS e ITERATOR it-» |
| «IF it.firstIteration-» |
| «EXPAND compileExpression (resultVarName, resultType, true, resource) FOR e» |
| «ELSE-» |
| «EXPAND compileExpression (resultVarName, resultType, false, resource) FOR e» |
| «ENDIF-» |
| «ENDFOREACH» |
| «ELSE-» |
| «IF resultType == "boolean"-» |
| «IF declareResultVar»boolean «ENDIF»«resultVarName» = false; |
| «ELSEIF resultType == "Boolean" -» |
| «IF declareResultVar»Boolean «ENDIF»«resultVarName» = Boolean.FALSE; |
| «ELSE -» |
| «IF declareResultVar»«resultType.getResultType()» «ENDIF»«resultVarName» = null; |
| «ENDIF-» |
| «ENDIF-» |
| «ENDLET» |
| «ENDDEFINE» |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR SetPropertyExpression» |
| «LET getNextVarIdx() AS varIdx» |
| «EXPAND compileExpression (resultVarName+"Inner", "Object", true, resource) FOR innerExpression» |
| if («resultVarName» == null) { |
| _ctx.logNullDeRef («pos.buildSourcePos()»); |
| «EXPAND initVar (resultType, declareResultVar) FOR resultVarName» |
| } else { |
| final BackendType «resultVarName»InnerType = _ctx.getTypesystem().findType(«resultVarName»); |
| «EXPAND compileExpression (getVarName (resultVarName+"Inner"+propertyName.toFirstUpper()+"Value", "value", "_" + varIdx), "Object", true, resource) FOR valueExpr» |
| «resultVarName»InnerType.setProperty (_ctx, «resultVarName»Inner, "«propertyName»", «getVarName (resultVarName+"Inner"+propertyName.toFirstUpper()+"Value", "value", "_" + varIdx)»); |
| «resultVarName» = «resultVarName»Inner; |
| } |
| «ENDLET» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileExpression(String resultVarName, String resultType, boolean declareResultVar, ParsedResource resource) FOR SwitchExpression» |
| «LET getNextVarIdx() AS varIdx» |
| «IF switchExpr != null-» |
| «EXPAND compileExpression (getVarName (switchExpr, "switchVal", "_" +varIdx), "Object", true, resource) FOR switchExpr» |
| «ELSE-» |
| Object «getVarName (switchExpr, "switchVal", "_" +varIdx)» = Boolean.TRUE; |
| «ENDIF-» |
| List<Pair<Function, Function>> «getVarName(resultVarName + "Cases", "cases", "_"+varIdx)» = new ArrayList<Pair<Function, Function>> (); |
| «FOREACH cases AS c ITERATOR it-» |
| Function «resultVarName»_Cond_«it.counter1» = new AbstractClosure(_ctx.getLocalVarContext(), _ctx.getFunctionDefContext(), new ArrayList<String> (), new ArrayList<BackendType>()) { |
| |
| @Override |
| protected Object apply(ExecutionContext ctx) { |
| «EXPAND compileExpression (c.firstAsObject.getVarName (resultVarName + "_CondResult", "_" +it.counter1), "Object", true, resource) FOR c.firstAsObject-» |
| return «c.firstAsObject.getVarName (resultVarName + "_CondResult", "_" +it.counter1)»; |
| } |
| }; |
| Function «resultVarName»_Yield_«it.counter1» = new AbstractClosure(_ctx.getLocalVarContext(), _ctx.getFunctionDefContext(), new ArrayList<String> (), new ArrayList<BackendType>()) { |
| |
| @Override |
| protected Object apply(ExecutionContext ctx) { |
| «EXPAND compileExpression (c.secondAsObject.getVarName (resultVarName + "_YieldResult", "_" +it.counter1), "Object", true, resource) FOR c.secondAsObject-» |
| return «c.secondAsObject.getVarName (resultVarName + "_YieldResult", "_" +it.counter1)»; |
| } |
| }; |
| Pair<Function, Function> «resultVarName»_Case_«it.counter1» = new Pair<Function, Function> («resultVarName»_Cond_«it.counter1», «resultVarName»_Yield_«it.counter1»); |
| «getVarName(resultVarName + "Cases", "cases", "_"+varIdx)».add («resultVarName»_Case_«it.counter1»); |
| «ENDFOREACH-» |
| «EXPAND initVar (resultType, declareResultVar) FOR resultVarName» |
| for (Pair<Function, Function> curCase : «getVarName(resultVarName + "Cases", "cases", "_"+varIdx)») { |
| final Object curVal = curCase.getFirst().invoke(_ctx, new Object[0]); |
| |
| if (Helpers.nullSafeEquals (_ctx, «getVarName (switchExpr, "switchVal", "_" +varIdx)», curVal)) { |
| «resultVarName» = «resultType.getResultType().cast()»curCase.getSecond().invoke(_ctx, new Object[0]); |
| break; |
| } |
| } |
| «ENDLET» |
| «ENDDEFINE» |
| |
| |
| «DEFINE compileAdvice(String resultVarName, ParsedResource resource) FOR AroundAdvice» |
| «LET getNextVarIdx() AS varIdx» |
| AroundAdvice «resultVarName» = new AroundAdvice (bodyVarName_«varIdx», pointcutVarName_«varIdx», «cacheable»); |
| @M2tAroundAdvice (pointcut=«EXPAND compilePointcut (resource) FOR pointcut») |
| «ENDLET» |
| «ENDDEFINE» |
| |
| «DEFINE compilePointcut (ParsedResource resource) FOR Pointcut» |
| «ENDDEFINE» |
| |
| «DEFINE compilePointcut (ParsedResource resource) FOR ExecutionPointcut» |
| «LET getNextVarIdx() AS varIdx» |
| @M2tPointcut (namePattern = "«functionNamePattern»" , «EXPAND compileAdviceParamTypes (resource) FOR paramTypes», hasVarArgs = «hasVarArgs» |
| «ENDLET» |
| «ENDDEFINE» |
| |
| «DEFINE compileAdviceParamTypes (ParsedResource resource) FOR List[Pair]» |
| «LET getNextVarIdx() AS varIdx» |
| paramTypeNames={"«FOREACH this AS e SEPARATOR ", "»"«((AdviceParamType)e.secondAsObject).type.name»"«ENDFOREACH»} |
| «ENDLET» |
| «ENDDEFINE» |
| |
| «DEFINE initVar (String typeName, boolean declareVar) FOR String-» |
| «IF declareVar»«typeName.getResultType()» «ENDIF»«this» = «typeName.getResultType().initializer()»; |
| «ENDDEFINE» |
| «DEFINE initVar (Void typeName) FOR String-» |
| «ENDDEFINE» |
| |
| |