package php.runtime.memory.support.operation;
import php.runtime.Memory;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.memory.StringMemory;
import php.runtime.memory.support.MemoryOperation;
import php.runtime.reflection.ParameterEntity;
public class ClassMemoryOperation extends MemoryOperation<Class> {
@Override
public Class<?>[] getOperationClasses() {
return new Class<?>[] { Class.class };
}
@Override
public Class convert(Environment env, TraceInfo trace, Memory arg) throws Throwable {
if (arg.isNull()) {
return null;
}
try {
return Class.forName(arg.toString());
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(e);
}
}
@Override
public Memory unconvert(Environment env, TraceInfo trace, Class arg) throws Throwable {
if (arg == null) {
return Memory.NULL;
}
return StringMemory.valueOf(arg.toString());
}
@Override
public void applyTypeHinting(ParameterEntity parameter) {
parameter.setTypeHintingChecker(new ParameterEntity.TypeHintingChecker() {
@Override
public boolean call(Environment env, Memory value) {
try {
Class.forName(value.toString());
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
@Override
public String getNeeded(Environment env, Memory value) {
return "a string contains the name of a Java Class, but '" + value + "' is not a java class";
}
});
}
}