Open-source multiplayer game server compatible with the RuneScape client https://www.openrs2.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
openrs2/asm/src/main/java/dev/openrs2/asm/classpath/AsmClassMetadata.java

72 lines
1.6 KiB

package dev.openrs2.asm.classpath;
import com.google.common.collect.ImmutableList;
import dev.openrs2.asm.MemberDesc;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.tree.ClassNode;
public final class AsmClassMetadata extends ClassMetadata {
private final ClassPath classPath;
private final ClassNode clazz;
private final boolean dependency;
public AsmClassMetadata(ClassPath classPath, ClassNode clazz, boolean dependency) {
this.classPath = classPath;
this.clazz = clazz;
this.dependency = dependency;
}
@Override
public String getName() {
return clazz.name;
}
@Override
public boolean isDependency() {
return dependency;
}
@Override
public boolean isInterface() {
return (clazz.access & Opcodes.ACC_INTERFACE) != 0;
}
@Override
public ClassMetadata getSuperClass() {
if (clazz.superName != null) {
return classPath.get(clazz.superName);
}
return null;
}
@Override
public ImmutableList<ClassMetadata> getSuperInterfaces() {
return clazz.interfaces.stream()
.map(classPath::get)
.collect(ImmutableList.toImmutableList());
}
@Override
public ImmutableList<MemberDesc> getFields() {
return clazz.fields.stream()
.map(MemberDesc::new)
.collect(ImmutableList.toImmutableList());
}
@Override
public ImmutableList<MemberDesc> getMethods() {
return clazz.methods.stream()
.map(MemberDesc::new)
.collect(ImmutableList.toImmutableList());
}
@Override
public boolean isNative(MemberDesc method) {
for (var m : clazz.methods) {
if (m.name.equals(method.getName()) && m.desc.equals(method.getDesc())) {
return (m.access & Opcodes.ACC_NATIVE) != 0;
}
}
return false;
}
}