mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-10-20 15:26:51 +00:00
Dicing things up a little
- Trying to slim this beauty down to a size 6. - Shes a size 7.1
This commit is contained in:
1 parent
d10d70a894
commit
f2887632fe
50 files changed
+668
-491
No files matched your search
@@ -0,0 +1,55 @@
|
||||
import org.junit.Test;
|
||||
import org.objectweb.asm.ClassWriter;
|
||||
import org.objectweb.asm.Opcodes;
|
||||
import org.objectweb.asm.Type;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class ClassReferencesTest {
|
||||
@Test
|
||||
public void includesDeclarationOnlyFieldAndMethodTypes() {
|
||||
ClassWriter writer = createClass();
|
||||
writer.visitField(Opcodes.ACC_PUBLIC, "field", "[[Lexample/FieldType;", null, null).visitEnd();
|
||||
writer.visitMethod(Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT, "method",
|
||||
"(Lexample/Argument;[I)[Lexample/Result;", null, null).visitEnd();
|
||||
writer.visitEnd();
|
||||
|
||||
Set<String> references = ClassReferences.read(writer.toByteArray());
|
||||
assertTrue(references.containsAll(Set.of("example/FieldType", "example/Argument", "example/Result")));
|
||||
assertFalse(references.contains("I"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void includesMemberReferenceAndMethodTypeDescriptors() {
|
||||
ClassWriter writer = createClass();
|
||||
writer.newMethod("example/Owner", "method", "(Lexample/Argument;)Lexample/Result;", false);
|
||||
writer.newConst(Type.getMethodType("(Lexample/HandleArgument;)Lexample/HandleResult;"));
|
||||
writer.visitEnd();
|
||||
|
||||
Set<String> references = ClassReferences.read(writer.toByteArray());
|
||||
assertTrue(references.containsAll(Set.of("example/Owner", "example/Argument", "example/Result",
|
||||
"example/HandleArgument", "example/HandleResult")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void doesNotTreatStringsOrAnnotationOnlyTypesAsLinkage() {
|
||||
ClassWriter writer = createClass();
|
||||
writer.newConst("Lexample/StringValue;");
|
||||
writer.visitAnnotation("Lexample/Annotation;", true).visitEnd();
|
||||
writer.visitEnd();
|
||||
|
||||
Set<String> references = ClassReferences.read(writer.toByteArray());
|
||||
assertFalse(references.contains("example/StringValue"));
|
||||
assertFalse(references.contains("example/Annotation"));
|
||||
}
|
||||
|
||||
private static ClassWriter createClass() {
|
||||
ClassWriter writer = new ClassWriter(0);
|
||||
writer.visit(Opcodes.V25, Opcodes.ACC_PUBLIC | Opcodes.ACC_ABSTRACT,
|
||||
"example/Consumer", null, "java/lang/Object", null);
|
||||
return writer;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user