Search in sources :

Example 1 with AddInterfaceInstruction

use of net.runelite.runeloader.inject.AddInterfaceInstruction in project runelite by runelite.

the class MappingImporter method makeMappings.

@Test
@Ignore
public void makeMappings() throws IOException {
    InjectionModscript mod = Injection.load(MappingImporter.class.getResourceAsStream(RL_INJECTION));
    int fields = 0, classes = 0;
    for (int i = 0; i < mod.getGetterInjects().size(); ++i) {
        GetterInjectInstruction gii = (GetterInjectInstruction) mod.getGetterInjects().get(i);
        ClassFile cf = this.findClassWithObfuscatedName(gii.getGetterClassName());
        Assert.assertNotNull(cf);
        Field f = this.findFieldWithObfuscatedName(cf, gii.getGetterFieldName());
        if (f == null) {
            // so they don't all exist
            continue;
        }
        String attrName = gii.getGetterName();
        attrName = Utils.toExportedName(attrName);
        Annotations an = f.getAnnotations();
        Annotation a = an.find(EXPORT);
        if (a != null) {
            String exportedName = a.getElement().getString();
            if (!attrName.equals(exportedName)) {
                logger.info("Exported field " + f + " with mismatched name. Theirs: " + attrName + ", mine: " + exportedName);
            }
        } else {
            an.addAnnotation(EXPORT, "value", attrName);
            logger.info("Exporting field " + f + " with name " + attrName);
            ++fields;
        }
    }
    for (AddInterfaceInstruction aii : mod.getAddInterfaceInjects()) {
        ClassFile cf = this.findClassWithObfuscatedName(aii.getClientClass());
        Assert.assertNotNull(cf);
        String iface = aii.getInterfaceClass();
        iface = iface.replace("com/runeloader/api/bridge/os/accessor/", "");
        Annotations an = cf.getAnnotations();
        Annotation a = an.find(IMPLEMENTS);
        if (a != null) {
            String implementsName = a.getElement().getString();
            if (!iface.equals(implementsName)) {
                logger.info("Implements class " + cf + " with mismatched name. Theirs: " + iface + ", mine: " + implementsName);
            }
        } else {
            an.addAnnotation(IMPLEMENTS, "value", iface);
            logger.info("Exporting class " + cf.getName() + " with name " + iface);
            ++classes;
        }
    }
    logger.info("Added {} fields, {} classes", fields, classes);
}
Also used : Field(net.runelite.asm.Field) ClassFile(net.runelite.asm.ClassFile) Annotations(net.runelite.asm.attributes.Annotations) InjectionModscript(net.runelite.runeloader.inject.InjectionModscript) AddInterfaceInstruction(net.runelite.runeloader.inject.AddInterfaceInstruction) GetterInjectInstruction(net.runelite.runeloader.inject.GetterInjectInstruction) Annotation(net.runelite.asm.attributes.annotation.Annotation) Ignore(org.junit.Ignore) Test(org.junit.Test)

Aggregations

ClassFile (net.runelite.asm.ClassFile)1 Field (net.runelite.asm.Field)1 Annotations (net.runelite.asm.attributes.Annotations)1 Annotation (net.runelite.asm.attributes.annotation.Annotation)1 AddInterfaceInstruction (net.runelite.runeloader.inject.AddInterfaceInstruction)1 GetterInjectInstruction (net.runelite.runeloader.inject.GetterInjectInstruction)1 InjectionModscript (net.runelite.runeloader.inject.InjectionModscript)1 Ignore (org.junit.Ignore)1 Test (org.junit.Test)1