mirror of
https://github.com/EsotericSoftware/reflectasm.git
synced 2025-01-15 06:10:24 +08:00
Docs can now be generated without warnings/errors using Java 8
This commit is contained in:
parent
b0b20221cf
commit
8863d43810
@ -33,14 +33,23 @@ public abstract class ConstructorAccess<T> {
|
|||||||
* <p>
|
* <p>
|
||||||
* If the underlying class is a inner (non-static nested) class, a new instance will be created using <code>null</code> as the
|
* If the underlying class is a inner (non-static nested) class, a new instance will be created using <code>null</code> as the
|
||||||
* this$0 synthetic reference. The instantiated object will work as long as it actually don't use any member variable or method
|
* this$0 synthetic reference. The instantiated object will work as long as it actually don't use any member variable or method
|
||||||
* fron the enclosing instance. */
|
* from the enclosing instance.
|
||||||
|
* @return a new Instance. */
|
||||||
abstract public T newInstance ();
|
abstract public T newInstance ();
|
||||||
|
|
||||||
/** Constructor for inner classes (non-static nested classes).
|
/** Constructor for inner classes (non-static nested classes).
|
||||||
* @param enclosingInstance The instance of the enclosing type to which this inner instance is related to (assigned to its
|
* @param enclosingInstance The instance of the enclosing type to which this inner instance is related to (assigned to its
|
||||||
* synthetic this$0 field). */
|
* synthetic this$0 field).
|
||||||
|
* @return a new Instance. */
|
||||||
abstract public T newInstance (Object enclosingInstance);
|
abstract public T newInstance (Object enclosingInstance);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a ConstructorAccess object for the supplied Class.
|
||||||
|
* @param type the Class to construct the ConstructorAccess for.
|
||||||
|
* @param <T> the generic Type.
|
||||||
|
* @return the created ConstructorAccess.
|
||||||
|
* @throws RuntimeException on problems accessing member classes or on missing/inaccessible no-argument constructor and any
|
||||||
|
* other visibility issues. */
|
||||||
static public <T> ConstructorAccess<T> get (Class<T> type) {
|
static public <T> ConstructorAccess<T> get (Class<T> type) {
|
||||||
Class enclosingType = type.getEnclosingClass();
|
Class enclosingType = type.getEnclosingClass();
|
||||||
boolean isNonStaticMemberClass = enclosingType != null && type.isMemberClass() && !Modifier.isStatic(type.getModifiers());
|
boolean isNonStaticMemberClass = enclosingType != null && type.isMemberClass() && !Modifier.isStatic(type.getModifiers());
|
||||||
|
@ -25,6 +25,9 @@ import org.objectweb.asm.Label;
|
|||||||
import org.objectweb.asm.MethodVisitor;
|
import org.objectweb.asm.MethodVisitor;
|
||||||
import org.objectweb.asm.Type;
|
import org.objectweb.asm.Type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to access a field.
|
||||||
|
*/
|
||||||
public abstract class FieldAccess {
|
public abstract class FieldAccess {
|
||||||
private String[] fieldNames;
|
private String[] fieldNames;
|
||||||
private Class[] fieldTypes;
|
private Class[] fieldTypes;
|
||||||
|
@ -27,6 +27,9 @@ import org.objectweb.asm.MethodVisitor;
|
|||||||
import org.objectweb.asm.Opcodes;
|
import org.objectweb.asm.Opcodes;
|
||||||
import org.objectweb.asm.Type;
|
import org.objectweb.asm.Type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents MethodAccess.
|
||||||
|
*/
|
||||||
public abstract class MethodAccess {
|
public abstract class MethodAccess {
|
||||||
private String[] methodNames;
|
private String[] methodNames;
|
||||||
private Class[][] parameterTypes;
|
private Class[][] parameterTypes;
|
||||||
@ -34,49 +37,79 @@ public abstract class MethodAccess {
|
|||||||
|
|
||||||
abstract public Object invoke (Object object, int methodIndex, Object... args);
|
abstract public Object invoke (Object object, int methodIndex, Object... args);
|
||||||
|
|
||||||
/** Invokes the method with the specified name and the specified param types. */
|
/** Invokes the method with the specified name and the specified param types.
|
||||||
|
* @param object the object to use in invocation.
|
||||||
|
* @param methodName the name of the method.
|
||||||
|
* @param paramTypes the parameterTypes as Class[].
|
||||||
|
* @param args any number of parameters to use.
|
||||||
|
* @return the result. */
|
||||||
public Object invoke (Object object, String methodName, Class[] paramTypes, Object... args) {
|
public Object invoke (Object object, String methodName, Class[] paramTypes, Object... args) {
|
||||||
return invoke(object, getIndex(methodName, paramTypes), args);
|
return invoke(object, getIndex(methodName, paramTypes), args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Invokes the first method with the specified name and the specified number of arguments. */
|
/** Invokes the first method with the specified name and the specified number of arguments.
|
||||||
|
* @param object the object to use in invocation.
|
||||||
|
* @param methodName the name of the method.
|
||||||
|
* @param args any number of parameters to use.
|
||||||
|
* @return the result. */
|
||||||
public Object invoke (Object object, String methodName, Object... args) {
|
public Object invoke (Object object, String methodName, Object... args) {
|
||||||
return invoke(object, getIndex(methodName, args == null ? 0 : args.length), args);
|
return invoke(object, getIndex(methodName, args == null ? 0 : args.length), args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the index of the first method with the specified name. */
|
/** Returns the index of the first method with the specified name.
|
||||||
|
* @param methodName the name of the method.
|
||||||
|
* @return the index. */
|
||||||
public int getIndex (String methodName) {
|
public int getIndex (String methodName) {
|
||||||
for (int i = 0, n = methodNames.length; i < n; i++)
|
for (int i = 0, n = methodNames.length; i < n; i++)
|
||||||
if (methodNames[i].equals(methodName)) return i;
|
if (methodNames[i].equals(methodName)) return i;
|
||||||
throw new IllegalArgumentException("Unable to find non-private method: " + methodName);
|
throw new IllegalArgumentException("Unable to find non-private method: " + methodName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the index of the first method with the specified name and param types. */
|
/** Returns the index of the first method with the specified name and param types.
|
||||||
|
* @param methodName the name of the method.
|
||||||
|
* @param paramTypes the Classes of the method signature.
|
||||||
|
* @return the index. */
|
||||||
public int getIndex (String methodName, Class... paramTypes) {
|
public int getIndex (String methodName, Class... paramTypes) {
|
||||||
for (int i = 0, n = methodNames.length; i < n; i++)
|
for (int i = 0, n = methodNames.length; i < n; i++)
|
||||||
if (methodNames[i].equals(methodName) && Arrays.equals(paramTypes, parameterTypes[i])) return i;
|
if (methodNames[i].equals(methodName) && Arrays.equals(paramTypes, parameterTypes[i])) return i;
|
||||||
throw new IllegalArgumentException("Unable to find non-private method: " + methodName + " " + Arrays.toString(paramTypes));
|
throw new IllegalArgumentException("Unable to find non-private method: " + methodName + " " + Arrays.toString(paramTypes));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the index of the first method with the specified name and the specified number of arguments. */
|
/** Returns the index of the first method with the specified name and the specified number of arguments.
|
||||||
|
* @param methodName the name of the method.
|
||||||
|
* @param paramsCount the number of parameters.
|
||||||
|
* @return the index. */
|
||||||
public int getIndex (String methodName, int paramsCount) {
|
public int getIndex (String methodName, int paramsCount) {
|
||||||
for (int i = 0, n = methodNames.length; i < n; i++)
|
for (int i = 0, n = methodNames.length; i < n; i++)
|
||||||
if (methodNames[i].equals(methodName) && parameterTypes[i].length == paramsCount) return i;
|
if (methodNames[i].equals(methodName) && parameterTypes[i].length == paramsCount) return i;
|
||||||
throw new IllegalArgumentException("Unable to find non-private method: " + methodName + " with " + paramsCount + " params.");
|
throw new IllegalArgumentException("Unable to find non-private method: " + methodName + " with " + paramsCount + " params.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All method names.
|
||||||
|
* @return the method names as String[]. */
|
||||||
public String[] getMethodNames () {
|
public String[] getMethodNames () {
|
||||||
return methodNames;
|
return methodNames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All parameter types.
|
||||||
|
* @return all parameter types as Class[][]. */
|
||||||
public Class[][] getParameterTypes () {
|
public Class[][] getParameterTypes () {
|
||||||
return parameterTypes;
|
return parameterTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All return types.
|
||||||
|
* @return the return types as Class[]. */
|
||||||
public Class[] getReturnTypes () {
|
public Class[] getReturnTypes () {
|
||||||
return returnTypes;
|
return returnTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve a MethodAccess object by Class.
|
||||||
|
* @param type the Class.
|
||||||
|
* @return the MethodAccess object. */
|
||||||
static public MethodAccess get (Class type) {
|
static public MethodAccess get (Class type) {
|
||||||
ArrayList<Method> methods = new ArrayList<Method>();
|
ArrayList<Method> methods = new ArrayList<Method>();
|
||||||
boolean isInterface = type.isInterface();
|
boolean isInterface = type.isInterface();
|
||||||
|
Loading…
Reference in New Issue
Block a user