11package com .cleanroommc .groovyscript .sandbox .transformer ;
22
3- import com .cleanroommc .groovyscript .api .GroovyLog ;
43import com .cleanroommc .groovyscript .gameobjects .GameObjectHandlerManager ;
4+ import com .cleanroommc .groovyscript .helper .Wrapper ;
55import org .codehaus .groovy .ast .ClassCodeExpressionTransformer ;
66import org .codehaus .groovy .ast .ClassHelper ;
77import org .codehaus .groovy .ast .ClassNode ;
1616public class GroovyScriptTransformer extends ClassCodeExpressionTransformer {
1717
1818 private static final ClassNode bracketHandlerClass = ClassHelper .makeCached (GameObjectHandlerManager .class );
19+ private static final ClassNode wrapper = ClassHelper .makeCached (Wrapper .class );
1920 private final SourceUnit source ;
2021 private final ClassNode classNode ;
2122
@@ -29,10 +30,25 @@ protected SourceUnit getSourceUnit() {
2930 return source ;
3031 }
3132
32- private static Expression makeCheckedCall (ClassNode classNode , String name , Expression ... arguments ) {
33+ private static Expression makeCheckedCall (ClassNode classNode , String name , List < Expression > arguments ) {
3334 return new StaticMethodCallExpression (classNode , name , new ArgumentListExpression (arguments ));
3435 }
3536
37+ private static Expression makeCheckedCall (ClassNode classNode , String name , Expression arguments ) {
38+ return makeCheckedCall (classNode , name , getArguments (arguments ));
39+ }
40+
41+ private static List <Expression > getArguments (Expression expr ) {
42+ List <Expression > args ;
43+ if (expr instanceof TupleExpression te ) {
44+ args = new ArrayList <>(te .getExpressions ());
45+ } else {
46+ args = new ArrayList <>();
47+ args .add (expr );
48+ }
49+ return args ;
50+ }
51+
3652 @ Override
3753 public Expression transform (Expression expr ) {
3854 if (expr == null ) return null ;
@@ -52,7 +68,7 @@ private Expression transformInternal(Expression expr) {
5268 return checkValid ((MethodCallExpression ) expr );
5369 }
5470 if (expr instanceof ConstructorCallExpression cce && cce .getType ().getName ().equals (File .class .getName ())) {
55- GroovyLog . get (). warn ( "Detected `new File(...)` usage. Use `file(...)` instead!" );
71+ return makeCheckedCall ( wrapper , "wrappedFileCtor" , cce . getArguments () );
5672 }
5773 return expr ;
5874 }
@@ -81,14 +97,9 @@ private Expression checkValid(MethodCallExpression expression) {
8197 if (expression .isImplicitThis () && argCount > 0 ) {
8298 String name = expression .getMethodAsString ();
8399 if (GameObjectHandlerManager .hasGameObjectHandler (name )) {
84- List <Expression > args ;
85- if (expression .getArguments () instanceof TupleExpression ) {
86- args = ((TupleExpression ) expression .getArguments ()).getExpressions ();
87- } else {
88- args = new ArrayList <>();
89- }
100+ List <Expression > args = getArguments (expression .getArguments ());
90101 args .add (0 , new ConstantExpression (name ));
91- return makeCheckedCall (bracketHandlerClass , "getGameObject" , args . toArray ( new Expression [ 0 ]) );
102+ return makeCheckedCall (bracketHandlerClass , "getGameObject" , args );
92103 }
93104 }
94105 return expression ;
0 commit comments