package org.openrs2.deob.ast.transform

import com.github.javaparser.ast.CompilationUnit
import com.github.javaparser.ast.expr.MethodCallExpr
import org.openrs2.deob.ast.Library
import org.openrs2.deob.ast.LibraryGroup
import org.openrs2.deob.ast.util.isClass
import org.openrs2.deob.ast.util.walk
import javax.inject.Singleton

@Singleton
public class NewInstanceTransformer : Transformer() {
    override fun transformUnit(group: LibraryGroup, library: Library, unit: CompilationUnit) {
        unit.walk { expr: MethodCallExpr ->
            if (expr.nameAsString != "newInstance") {
                return@walk
            }

            expr.scope.ifPresent { scope ->
                if (scope.calculateResolvedType().isClass()) {
                    expr.setScope(MethodCallExpr(scope.clone(), "getDeclaredConstructor"))
                }
            }
        }
    }
}
