Java Code Examples for org.codehaus.groovy.ast.expr.MethodCallExpression#putNodeMetaData()
The following examples show how to use
org.codehaus.groovy.ast.expr.MethodCallExpression#putNodeMetaData() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: StaticTypesBinaryExpressionMultiTypeDispatcher.java From groovy with Apache License 2.0 | 5 votes |
private boolean makeSetPrivateFieldWithBridgeMethod(final Expression receiver, final ClassNode receiverType, final String fieldName, final Expression arguments, final boolean safe, final boolean spreadSafe, final boolean implicitThis) { FieldNode field = receiverType.getField(fieldName); ClassNode outerClass = receiverType.getOuterClass(); if (field == null && implicitThis && outerClass != null && !receiverType.isStaticClass()) { Expression pexp; if (controller.isInGeneratedFunction()) { MethodCallExpression mce = callThisX("getThisObject"); mce.setImplicitThis(true); mce.setMethodTarget(CLOSURE_GETTHISOBJECT_METHOD); mce.putNodeMetaData(INFERRED_TYPE, controller.getOutermostClass()); pexp = castX(controller.getOutermostClass(), mce); } else { pexp = propX(classX(outerClass), "this"); ((PropertyExpression) pexp).setImplicitThis(true); } pexp.putNodeMetaData(INFERRED_TYPE, outerClass); pexp.setSourcePosition(receiver); return makeSetPrivateFieldWithBridgeMethod(pexp, outerClass, fieldName, arguments, safe, spreadSafe, true); } ClassNode classNode = controller.getClassNode(); if (field != null && field.isPrivate() && !receiverType.equals(classNode) && (StaticInvocationWriter.isPrivateBridgeMethodsCallAllowed(receiverType, classNode) || StaticInvocationWriter.isPrivateBridgeMethodsCallAllowed(classNode,receiverType))) { Map<String, MethodNode> mutators = receiverType.redirect().getNodeMetaData(StaticCompilationMetadataKeys.PRIVATE_FIELDS_MUTATORS); if (mutators != null) { MethodNode methodNode = mutators.get(fieldName); if (methodNode != null) { MethodCallExpression call = callX(receiver, methodNode.getName(), args(field.isStatic() ? nullX() : receiver, arguments)); call.setImplicitThis(implicitThis); call.setMethodTarget(methodNode); call.setSafe(safe); call.setSpreadSafe(spreadSafe); call.visit(controller.getAcg()); return true; } } } return false; }
Example 2
Source File: MarkupBuilderCodeTransformer.java From groovy with Apache License 2.0 | 4 votes |
@Override public Expression transform(final Expression exp) { if (exp instanceof BinaryExpression) { return transformBinaryExpression((BinaryExpression) exp); } if (exp instanceof MethodCallExpression) { return transformMethodCall((MethodCallExpression) exp); } if (exp instanceof ClosureExpression) { ClosureExpression cl = (ClosureExpression) exp; cl.getCode().visit(this); return cl; } if (exp instanceof VariableExpression) { VariableExpression var = (VariableExpression) exp; if (var.getAccessedVariable() instanceof DynamicVariable) { MethodCallExpression callGetModel = new MethodCallExpression( new VariableExpression("this"), "getModel", ArgumentListExpression.EMPTY_ARGUMENTS ); callGetModel.setImplicitThis(true); callGetModel.setSourcePosition(exp); String varName = var.getName(); if ("model".equals(varName) || "unescaped".equals(varName)) { return callGetModel; } MethodCallExpression mce = new MethodCallExpression( callGetModel, "get", new ArgumentListExpression(new ConstantExpression(varName)) ); mce.setSourcePosition(exp); mce.setImplicitThis(false); MethodCallExpression yield = new MethodCallExpression( new VariableExpression("this"), "tryEscape", new ArgumentListExpression(mce) ); yield.setImplicitThis(true); yield.setSourcePosition(exp); yield.putNodeMetaData(TARGET_VARIABLE, varName); return autoEscape?yield:mce; } } return super.transform(exp); }
Example 3
Source File: TraitReceiverTransformer.java From groovy with Apache License 2.0 | 4 votes |
private static void markDynamicCall(final MethodCallExpression mce, final FieldNode fn, final boolean isStatic) { if (isStatic) { mce.putNodeMetaData(TraitASTTransformation.DO_DYNAMIC, fn.getOriginType()); } }