Files
CraftTweaker/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java
T

81 lines
2.4 KiB
Java
Raw Normal View History

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package stanhebben.zenscript.expression.partial;
import java.util.Arrays;
import stanhebben.zenscript.compiler.IEnvironmentGlobal;
import stanhebben.zenscript.compiler.IEnvironmentMethod;
import stanhebben.zenscript.expression.Expression;
import stanhebben.zenscript.expression.ExpressionCallStatic;
import stanhebben.zenscript.expression.ExpressionInvalid;
import stanhebben.zenscript.symbols.IZenSymbol;
import stanhebben.zenscript.symbols.SymbolJavaStaticMethod;
import stanhebben.zenscript.type.ZenType;
import stanhebben.zenscript.type.natives.IJavaMethod;
import stanhebben.zenscript.util.ZenPosition;
/**
*
* @author Stanneke
*/
public class PartialStaticMethod implements IPartialExpression {
private final ZenPosition position;
private final IJavaMethod method;
public PartialStaticMethod(ZenPosition position, IJavaMethod method) {
this.position = position;
this.method = method;
}
@Override
public Expression eval(IEnvironmentGlobal environment) {
environment.error(position, "not a valid expression");
return new ExpressionInvalid(position);
}
@Override
public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) {
environment.error(position, "cannot alter this final");
return new ExpressionInvalid(position);
}
@Override
public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) {
environment.error(position, "methods have no members");
return new ExpressionInvalid(position);
}
@Override
public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) {
if (method.accepts(environment, values)) {
return new ExpressionCallStatic(position, environment, method, values);
} else {
environment.error(position, "parameter count mismatch");
return new ExpressionInvalid(position, method.getReturnType());
}
}
@Override
public ZenType[] predictCallTypes(int numArguments) {
return Arrays.copyOf(method.getParameterTypes(), numArguments);
}
@Override
public IZenSymbol toSymbol() {
return new SymbolJavaStaticMethod(method);
}
@Override
public ZenType getType() {
return method.getReturnType();
}
@Override
public ZenType toType(IEnvironmentGlobal environment) {
return ZenType.ANY;
}
}