Created
December 11, 2010 19:39
-
-
Save alextkachman/737601 to your computer and use it in GitHub Desktop.
Some code on Java & Groovy++ (real piece of Groovy++ compiler)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Java version | |
Parameter param = new Parameter(ClassHelper.OBJECT_TYPE, "$it"); | |
VariableExpression ve = new VariableExpression(param); | |
ve.setSourcePosition(originalProperty); | |
PropertyExpression prop = new PropertyExpression(ve, originalProperty); | |
prop.setSourcePosition(originalProperty); | |
ReturnStatement retStat = new ReturnStatement(prop); | |
retStat.setSourcePosition(originalProperty); | |
ClosureExpression ce = new ClosureExpression(new Parameter[]{param}, retStat); | |
ce.setVariableScope(new VariableScope(compiler.compileStack.getScope())); | |
MethodCallExpression mce = new MethodCallExpression(exp.getObjectExpression(), "map", ce); | |
mce.setSourcePosition(exp); | |
return compiler.transform(mce); | |
// Groovy++ version | |
Parameter param = [ClassHelper.OBJECT_TYPE, "$it"] | |
VariableExpression ve = [param] | |
ve.sourcePosition = originalProperty | |
PropertyExpression prop = [ve, originalProperty] | |
prop.sourcePosition = originalProperty | |
def retStat = new ReturnStatement(prop) | |
retStat.sourcePosition = originalProperty | |
def ce = new ClosureExpression([param], retStat) | |
ce.variableScope = [compiler.compileStack.scope] | |
MethodCallExpression mce = [exp.objectExpression, "map", ce] | |
mce.sourcePosition = exp | |
return compiler.transform(mce) | |
// Groovy++ version commented | |
// new object creation inferred | |
Parameter param = [ClassHelper.OBJECT_TYPE, "$it"] | |
// new object creation inferred | |
VariableExpression ve = [param] | |
// property setter | |
ve.sourcePosition = originalProperty | |
// new object creation inferred | |
PropertyExpression prop = [ve, originalProperty] | |
// property setter | |
prop.sourcePosition = originalProperty | |
// variable type inferred | |
def retStat = new ReturnStatement(prop) | |
// property setter | |
retStat.sourcePosition = originalProperty | |
// variable type and 1st parameter inferred | |
def ce = new ClosureExpression([param], retStat) | |
// property setter and new object creation | |
ce.variableScope = [compiler.compileStack.scope] | |
// new object creation inferred | |
MethodCallExpression mce = [exp.objectExpression, "map", ce] | |
// property setter | |
mce.sourcePosition = exp | |
return compiler.transform(mce) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment