forked from openrs2/openrs2
parent
3ee6d57ba9
commit
862d4a3504
@ -1,73 +0,0 @@ |
|||||||
package dev.openrs2.asm.classpath; |
|
||||||
|
|
||||||
import java.lang.reflect.Modifier; |
|
||||||
import java.util.Arrays; |
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList; |
|
||||||
import dev.openrs2.asm.MemberDesc; |
|
||||||
import org.objectweb.asm.Type; |
|
||||||
|
|
||||||
public final class ReflectionClassMetadata extends ClassMetadata { |
|
||||||
private final ClassPath classPath; |
|
||||||
private final Class<?> clazz; |
|
||||||
|
|
||||||
public ReflectionClassMetadata(ClassPath classPath, Class<?> clazz) { |
|
||||||
this.classPath = classPath; |
|
||||||
this.clazz = clazz; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public String getName() { |
|
||||||
return clazz.getName().replace('.', '/'); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean getDependency() { |
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean getInterface() { |
|
||||||
return clazz.isInterface(); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ClassMetadata getSuperClass() { |
|
||||||
var superClass = clazz.getSuperclass(); |
|
||||||
if (superClass != null) { |
|
||||||
return classPath.get(superClass.getName().replace('.', '/')); |
|
||||||
} |
|
||||||
return null; |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ImmutableList<ClassMetadata> getSuperInterfaces() { |
|
||||||
return Arrays.stream(clazz.getInterfaces()) |
|
||||||
.map(i -> classPath.get(i.getName().replace('.', '/'))) |
|
||||||
.collect(ImmutableList.toImmutableList()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ImmutableList<MemberDesc> getFields() { |
|
||||||
return Arrays.stream(clazz.getDeclaredFields()) |
|
||||||
.map(f -> new MemberDesc(f.getName(), Type.getDescriptor(f.getType()))) |
|
||||||
.collect(ImmutableList.toImmutableList()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public ImmutableList<MemberDesc> getMethods() { |
|
||||||
return Arrays.stream(clazz.getDeclaredMethods()) |
|
||||||
.map(m -> new MemberDesc(m.getName(), Type.getMethodDescriptor(m))) |
|
||||||
.collect(ImmutableList.toImmutableList()); |
|
||||||
} |
|
||||||
|
|
||||||
@Override |
|
||||||
public boolean isNative(MemberDesc method) { |
|
||||||
for (var m : clazz.getDeclaredMethods()) { |
|
||||||
if (m.getName().equals(method.getName()) && Type.getMethodDescriptor(m).equals(method.getDesc())) { |
|
||||||
return Modifier.isNative(m.getModifiers()); |
|
||||||
} |
|
||||||
} |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,37 @@ |
|||||||
|
package dev.openrs2.asm.classpath |
||||||
|
|
||||||
|
import dev.openrs2.asm.MemberDesc |
||||||
|
import org.objectweb.asm.Type |
||||||
|
import java.lang.reflect.Modifier |
||||||
|
|
||||||
|
private val Class<*>.asmName: String |
||||||
|
get() = name.replace('.', '/') |
||||||
|
|
||||||
|
class ReflectionClassMetadata(private val classPath: ClassPath, private val clazz: Class<*>) : ClassMetadata() { |
||||||
|
override val name: String |
||||||
|
get() = clazz.asmName |
||||||
|
|
||||||
|
override val dependency: Boolean |
||||||
|
get() = true |
||||||
|
|
||||||
|
override val `interface`: Boolean |
||||||
|
get() = clazz.isInterface |
||||||
|
|
||||||
|
override val superClass: ClassMetadata? |
||||||
|
get() = if (clazz.superclass != null) classPath[clazz.superclass.asmName] else null |
||||||
|
|
||||||
|
override val superInterfaces |
||||||
|
get() = clazz.interfaces.map { classPath[it.asmName] }.toList() |
||||||
|
|
||||||
|
override val fields |
||||||
|
get() = clazz.declaredFields.map { MemberDesc(it.name, Type.getDescriptor(it.type)) }.toList() |
||||||
|
|
||||||
|
override val methods |
||||||
|
get() = clazz.declaredMethods.map { MemberDesc(it.name, Type.getMethodDescriptor(it)) }.toList() |
||||||
|
|
||||||
|
override fun isNative(method: MemberDesc): Boolean { |
||||||
|
val m = clazz.declaredMethods.find { it.name == method.name && Type.getMethodDescriptor(it) == method.desc } |
||||||
|
?: return false |
||||||
|
return Modifier.isNative(m.modifiers) |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue