Java Code Examples for org.codehaus.groovy.ast.expr.Expression#setSourcePosition()
The following examples show how to use
org.codehaus.groovy.ast.expr.Expression#setSourcePosition() .
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: BinaryExpressionTransformer.java From groovy with Apache License 2.0 | 6 votes |
private static BinaryExpression tryOptimizeCharComparison(final Expression left, final Expression right, final BinaryExpression bin) { int op = bin.getOperation().getType(); if (StaticTypeCheckingSupport.isCompareToBoolean(op) || op == Types.COMPARE_EQUAL || op == Types.COMPARE_NOT_EQUAL) { Character cLeft = tryCharConstant(left); Character cRight = tryCharConstant(right); if (cLeft != null || cRight != null) { Expression oLeft = (cLeft == null ? left : constX(cLeft, true)); oLeft.setSourcePosition(left); Expression oRight = (cRight == null ? right : constX(cRight, true)); oRight.setSourcePosition(right); bin.setLeftExpression(oLeft); bin.setRightExpression(oRight); return bin; } } return null; }
Example 2
Source File: BinaryExpressionTransformer.java From groovy with Apache License 2.0 | 6 votes |
private static Expression transformDeclarationExpression(final BinaryExpression bin) { Expression leftExpression = bin.getLeftExpression(); if (leftExpression instanceof VariableExpression) { if (ClassHelper.char_TYPE.equals(((VariableExpression) leftExpression).getOriginType())) { Expression rightExpression = bin.getRightExpression(); Character c = tryCharConstant(rightExpression); if (c != null) { Expression ce = constX(c, true); ce.setSourcePosition(rightExpression); bin.setRightExpression(ce); return bin; } } } return null; }
Example 3
Source File: StaticImportVisitor.java From groovy with Apache License 2.0 | 5 votes |
protected Expression transformPropertyExpression(PropertyExpression pe) { if (currentMethod!=null && currentMethod.isStatic() && pe.getObjectExpression() instanceof VariableExpression && ((VariableExpression) pe.getObjectExpression()).isSuperExpression()) { PropertyExpression pexp = new PropertyExpression( new ClassExpression(currentClass.getSuperClass()), transform(pe.getProperty()) ); pexp.setSourcePosition(pe); return pexp; } boolean oldInPropertyExpression = inPropertyExpression; Expression oldFoundArgs = foundArgs; Expression oldFoundConstant = foundConstant; inPropertyExpression = true; foundArgs = null; foundConstant = null; Expression objectExpression = transform(pe.getObjectExpression()); boolean candidate = false; if (objectExpression instanceof MethodCallExpression) { candidate = ((MethodCallExpression)objectExpression).isImplicitThis(); } if (foundArgs != null && foundConstant != null && candidate) { Expression result = findStaticMethodImportFromModule(foundConstant, foundArgs); if (result != null) { objectExpression = result; objectExpression.setSourcePosition(pe); } } inPropertyExpression = oldInPropertyExpression; foundArgs = oldFoundArgs; foundConstant = oldFoundConstant; pe.setObjectExpression(objectExpression); return pe; }
Example 4
Source File: ResolveVisitor.java From groovy with Apache License 2.0 | 5 votes |
@Override public Expression transform(final Expression exp) { if (exp == null) return null; Expression ret; if (exp instanceof VariableExpression) { ret = transformVariableExpression((VariableExpression) exp); } else if (exp.getClass() == PropertyExpression.class) { ret = transformPropertyExpression((PropertyExpression) exp); } else if (exp instanceof DeclarationExpression) { ret = transformDeclarationExpression((DeclarationExpression) exp); } else if (exp instanceof BinaryExpression) { ret = transformBinaryExpression((BinaryExpression) exp); } else if (exp instanceof MethodCallExpression) { ret = transformMethodCallExpression((MethodCallExpression) exp); } else if (exp instanceof ClosureExpression) { ret = transformClosureExpression((ClosureExpression) exp); } else if (exp instanceof ConstructorCallExpression) { ret = transformConstructorCallExpression((ConstructorCallExpression) exp); } else if (exp instanceof AnnotationConstantExpression) { ret = transformAnnotationConstantExpression((AnnotationConstantExpression) exp); } else { resolveOrFail(exp.getType(), exp); ret = exp.transformExpression(this); } if (ret != null && ret != exp) { ret.setSourcePosition(exp); } return ret; }
Example 5
Source File: BinaryExpressionTransformer.java From groovy with Apache License 2.0 | 5 votes |
private static DeclarationExpression optimizeConstantInitialization(final BinaryExpression originalDeclaration, final Token operation, final ConstantExpression constant, final Expression leftExpression, final ClassNode declarationType) { Expression cexp = constX(convertConstant((Number) constant.getValue(), ClassHelper.getWrapper(declarationType)), true); cexp.setType(declarationType); cexp.setSourcePosition(constant); DeclarationExpression result = new DeclarationExpression( leftExpression, operation, cexp ); result.setSourcePosition(originalDeclaration); result.copyNodeMetaData(originalDeclaration); return result; }
Example 6
Source File: BooleanExpressionTransformer.java From groovy with Apache License 2.0 | 5 votes |
@Override public Expression transformExpression(final ExpressionTransformer transformer) { Expression ret = new OptimizingBooleanExpression(transformer.transform(expression), type); ret.setSourcePosition(this); ret.copyNodeMetaData(this); return ret; }
Example 7
Source File: ConstructorCallTransformer.java From groovy with Apache License 2.0 | 5 votes |
@Override public Expression transformExpression(final ExpressionTransformer transformer) { Expression result = new MapStyleConstructorCall( staticCompilationTransformer, declaringClass, (MapExpression) map.transformExpression(transformer), (ConstructorCallExpression) originalCall.transformExpression(transformer) ); result.copyNodeMetaData(this); result.setSourcePosition(this); return result; }
Example 8
Source File: ClassCodeExpressionTransformer.java From groovy with Apache License 2.0 | 5 votes |
/** * Set the source position of toSet including its property expression if it has one. * * @param toSet resulting node * @param origNode original node */ protected static void setSourcePosition(Expression toSet, Expression origNode) { toSet.setSourcePosition(origNode); if (toSet instanceof PropertyExpression) { ((PropertyExpression) toSet).getProperty().setSourcePosition(origNode); } }
Example 9
Source File: AsmClassGenerator.java From groovy with Apache License 2.0 | 5 votes |
private boolean checkStaticOuterField(final PropertyExpression pexp, final String propertyName) { for (final ClassNode outer : controller.getClassNode().getOuterClasses()) { FieldNode field = outer.getDeclaredField(propertyName); if (field != null) { if (!field.isStatic()) break; Expression outerClass = classX(outer); outerClass.setNodeMetaData(PROPERTY_OWNER, outer); outerClass.setSourcePosition(pexp.getObjectExpression()); Expression outerField = attrX(outerClass, pexp.getProperty()); outerField.setSourcePosition(pexp); outerField.visit(this); return true; } else { field = outer.getField(propertyName); // checks supers if (field != null && !field.isPrivate() && (field.isPublic() || field.isProtected() || Objects.equals(field.getDeclaringClass().getPackageName(), outer.getPackageName()))) { if (!field.isStatic()) break; Expression upperClass = classX(field.getDeclaringClass()); upperClass.setNodeMetaData(PROPERTY_OWNER, field.getDeclaringClass()); upperClass.setSourcePosition(pexp.getObjectExpression()); Expression upperField = propX(upperClass, pexp.getProperty()); upperField.setSourcePosition(pexp); upperField.visit(this); return true; } } } return false; }
Example 10
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 11
Source File: AnnotationConstantsVisitor.java From groovy with Apache License 2.0 | 4 votes |
private static Expression configure(Expression orig, Expression result) { result.setSourcePosition(orig); return result; }
Example 12
Source File: AsmClassGenerator.java From groovy with Apache License 2.0 | 4 votes |
private void visitAttributeOrProperty(final PropertyExpression pexp, final MethodCallerMultiAdapter adapter) { ClassNode classNode = controller.getClassNode(); String propertyName = pexp.getPropertyAsString(); Expression objectExpression = pexp.getObjectExpression(); if (objectExpression instanceof ClassExpression && "this".equals(propertyName)) { // we have something like A.B.this, and need to make it // into this.this$0.this$0, where this.this$0 returns // A.B and this.this$0.this$0 return A. ClassNode type = objectExpression.getType(); if (controller.getCompileStack().isInSpecialConstructorCall() && type.equals(classNode.getOuterClass())) { // Outer.this in a special constructor call ConstructorNode ctor = controller.getConstructorNode(); Expression receiver = !classNode.isStaticClass() ? new VariableExpression(ctor.getParameters()[0]) : new ClassExpression(type); receiver.setSourcePosition(pexp); receiver.visit(this); return; } MethodVisitor mv = controller.getMethodVisitor(); mv.visitVarInsn(ALOAD, 0); ClassNode iterType = classNode; while (!iterType.equals(type)) { String ownerName = BytecodeHelper.getClassInternalName(iterType); if (iterType.getOuterClass() == null) break; FieldNode thisField = iterType.getField("this$0"); iterType = iterType.getOuterClass(); if (thisField == null) { // closure within inner class while (ClassHelper.isGeneratedFunction(iterType)) { // GROOVY-8881: cater for closures within closures - getThisObject is already outer class of all closures iterType = iterType.getOuterClass(); } mv.visitMethodInsn(INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(ClassHelper.CLOSURE_TYPE), "getThisObject", "()Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, BytecodeHelper.getClassInternalName(iterType)); } else { ClassNode thisFieldType = thisField.getType(); if (ClassHelper.CLOSURE_TYPE.equals(thisFieldType)) { mv.visitFieldInsn(GETFIELD, ownerName, "this$0", BytecodeHelper.getTypeDescription(ClassHelper.CLOSURE_TYPE)); mv.visitMethodInsn(INVOKEVIRTUAL, BytecodeHelper.getClassInternalName(ClassHelper.CLOSURE_TYPE), "getThisObject", "()Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, BytecodeHelper.getClassInternalName(iterType)); } else { String typeName = BytecodeHelper.getTypeDescription(iterType); mv.visitFieldInsn(GETFIELD, ownerName, "this$0", typeName); } } } controller.getOperandStack().push(type); return; } if (propertyName != null) { // TODO: spread safe should be handled inside if (adapter == getProperty && !pexp.isSpreadSafe()) { controller.getCallSiteWriter().makeGetPropertySite(objectExpression, propertyName, pexp.isSafe(), pexp.isImplicitThis()); } else if (adapter == getGroovyObjectProperty && !pexp.isSpreadSafe()) { controller.getCallSiteWriter().makeGroovyObjectGetPropertySite(objectExpression, propertyName, pexp.isSafe(), pexp.isImplicitThis()); } else { controller.getCallSiteWriter().fallbackAttributeOrPropertySite(pexp, objectExpression, propertyName, adapter); } } else { controller.getCallSiteWriter().fallbackAttributeOrPropertySite(pexp, objectExpression, null, adapter); } }