vmreflection.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 421 行 · 第 1/2 页
JAVA
421 行
/**
* $Id: VmReflection.java,v 1.7 2004/02/17 19:15:53 epr Exp $
*/
package org.jnode.vm;
import java.lang.reflect.InvocationTargetException;
import org.jnode.vm.classmgr.VmField;
import org.jnode.vm.classmgr.VmInstanceField;
import org.jnode.vm.classmgr.VmMethod;
import org.jnode.vm.classmgr.VmStaticField;
import org.jnode.vm.classmgr.VmType;
import org.jnode.vm.memmgr.*;
/**
* <description>
*
* @author epr
*/
public class VmReflection {
public static Object getObject(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return Unsafe.getObject(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getObject(o, inf.getOffset());
}
}
public static boolean getBoolean(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return (Unsafe.getInt(getStaticFieldAddress(sf)) != 0);
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getBoolean(o, inf.getOffset());
}
}
public static byte getByte(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return (byte) Unsafe.getInt(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getByte(o, inf.getOffset());
}
}
public static char getChar(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return (char) Unsafe.getInt(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getChar(o, inf.getOffset());
}
}
public static short getShort(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return (short) Unsafe.getInt(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getShort(o, inf.getOffset());
}
}
public static int getInt(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return Unsafe.getInt(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getInt(o, inf.getOffset());
}
}
public static float getFloat(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return Unsafe.getFloat(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getFloat(o, inf.getOffset());
}
}
public static long getLong(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return Unsafe.getLong(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getLong(o, inf.getOffset());
}
}
public static double getDouble(VmField field, Object o) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
return Unsafe.getDouble(getStaticFieldAddress(sf));
} else {
final VmInstanceField inf = (VmInstanceField) field;
return Unsafe.getDouble(o, inf.getOffset());
}
}
public static void setObject(VmField field, Object o, Object value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setObject(getStaticFieldAddress(sf), value);
final VmWriteBarrier wb = Vm.getVm().getHeapManager()
.getWriteBarrier();
if (wb != null) {
wb.putstaticWriteBarrier(sf.getStaticsIndex(), value);
}
} else {
final VmInstanceField inf = (VmInstanceField) field;
final int offset = inf.getOffset();
Unsafe.setObject(o, offset, value);
final VmWriteBarrier wb = Vm.getVm().getHeapManager()
.getWriteBarrier();
if (wb != null) {
wb.putfieldWriteBarrier(o, offset, value);
}
}
}
public static void setBoolean(VmField field, Object o, boolean value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setInt(getStaticFieldAddress(sf), value ? 1 : 0);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setBoolean(o, inf.getOffset(), value);
}
}
public static void setByte(VmField field, Object o, byte value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setInt(getStaticFieldAddress(sf), value);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setByte(o, inf.getOffset(), value);
}
}
public static void setChar(VmField field, Object o, char value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setInt(getStaticFieldAddress(sf), value);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setChar(o, inf.getOffset(), value);
}
}
public static void setShort(VmField field, Object o, short value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setInt(getStaticFieldAddress(sf), value);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setShort(o, inf.getOffset(), value);
}
}
public static void setInt(VmField field, Object o, int value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setInt(getStaticFieldAddress(sf), value);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setInt(o, inf.getOffset(), value);
}
}
public static void setFloat(VmField field, Object o, float value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
initialize(sf);
Unsafe.setFloat(getStaticFieldAddress(sf), value);
} else {
final VmInstanceField inf = (VmInstanceField) field;
Unsafe.setFloat(o, inf.getOffset(), value);
}
}
public static void setLong(VmField field, Object o, long value) {
if (field.isStatic()) {
final VmStaticField sf = (VmStaticField) field;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?