private void writeClass(OutputStream stream, ClassHolder cls) throws IOException { DataOutput output = new DataOutputStream(stream); output.writeByte(cls.getLevel().ordinal()); output.writeInt(packModifiers(cls.getModifiers())); output.writeInt(cls.getParent() != null ? symbolTable.lookup(cls.getParent()) : -1); output.writeInt(cls.getOwnerName() != null ? symbolTable.lookup(cls.getOwnerName()) : -1); output.writeByte(cls.getInterfaces().size()); for (String iface : cls.getInterfaces()) { output.writeInt(symbolTable.lookup(iface)); } writeAnnotations(output, cls.getAnnotations()); output.writeShort(cls.getFields().size()); for (FieldHolder field : cls.getFields()) { writeField(output, field); } output.writeShort(cls.getMethods().size()); for (MethodHolder method : cls.getMethods()) { writeMethod(stream, method); } }
private void substitute(ClassHolder cls, ClassHierarchy hierarchy) { ClassReader subst = hierarchy.getClassSource().get(TeaVMLoggerFactorySubstitution.class.getName()); for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { cls.removeField(field); } for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { cls.removeMethod(method); } for (FieldReader field : subst.getFields()) { cls.addField(ModelUtils.copyField(field)); } for (MethodReader method : subst.getMethods()) { cls.addMethod(ModelUtils.copyMethod(method)); } } }
private void transformProperties(ClassHolder cls) { for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { if (field.getName().equals("ScalaCompilerVersion")) { cls.removeField(field);
public ClassNode decompile(ClassHolder cls) { ClassNode clsNode = new ClassNode(cls.getName(), cls.getParent()); for (FieldHolder field : cls.getFields()) { FieldNode fieldNode = new FieldNode(field.getReference(), field.getType()); fieldNode.getModifiers().addAll(field.getModifiers()); fieldNode.setInitialValue(field.getInitialValue()); clsNode.getFields().add(fieldNode); } for (MethodHolder method : cls.getMethods()) { if (method.getModifiers().contains(ElementModifier.ABSTRACT)) { continue; } if ((!isBootstrap() && method.getAnnotations().get(InjectedBy.class.getName()) != null) || methodsToSkip.contains(method.getReference())) { continue; } MethodNode methodNode = decompile(method); clsNode.getMethods().add(methodNode); } clsNode.getInterfaces().addAll(cls.getInterfaces()); clsNode.getModifiers().addAll(cls.getModifiers()); clsNode.setAccessLevel(cls.getLevel()); return clsNode; }
public void link(ClassHolder cls) { for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { MethodReference methodRef = method.getReference(); MethodDependencyInfo methodDep = dependency.getMethod(methodRef); if (methodDep == null) { cls.removeMethod(method); } else if (!methodDep.isUsed()) { method.getModifiers().add(ElementModifier.ABSTRACT); method.setProgram(null); } else if (method.getProgram() != null) { link(method.getReference(), method.getProgram()); } } for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependency.getField(fieldRef) == null) { cls.removeField(field); } } }
for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { renamedCls.addField(rename(field));
FieldReference[] staticFields = new FieldReference[cls.getFields().size()]; int staticIndex = 0; FieldReference[] instanceFields = new FieldReference[cls.getFields().size()]; int instanceIndex = 0; for (FieldHolder field : cls.getFields()) { if (field.hasModifier(ElementModifier.STATIC)) { String fieldName = context.getNames().forStaticField(field.getReference());
for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependencyAnalyzer.getField(fieldRef) == null) {
private void writeClass(OutputStream stream, ClassHolder cls) throws IOException { DataOutput output = new DataOutputStream(stream); output.writeByte(cls.getLevel().ordinal()); output.writeInt(packModifiers(cls.getModifiers())); output.writeInt(cls.getParent() != null ? symbolTable.lookup(cls.getParent()) : -1); output.writeInt(cls.getOwnerName() != null ? symbolTable.lookup(cls.getOwnerName()) : -1); output.writeByte(cls.getInterfaces().size()); for (String iface : cls.getInterfaces()) { output.writeInt(symbolTable.lookup(iface)); } writeAnnotations(output, cls.getAnnotations()); output.writeShort(cls.getFields().size()); for (FieldHolder field : cls.getFields()) { writeField(output, field); } output.writeShort(cls.getMethods().size()); for (MethodHolder method : cls.getMethods()) { writeMethod(stream, method); } }
for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { cls.removeField(field);
private void replaceClass(final ClassHolder cls, final ClassReader emuCls) { ClassRefsRenamer renamer = new ClassRefsRenamer(preimage -> preimage.equals(emuCls.getName()) ? cls.getName() : preimage); for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { cls.removeField(field); } for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { cls.removeMethod(method); } for (FieldReader field : emuCls.getFields()) { cls.addField(ModelUtils.copyField(field)); } for (MethodReader method : emuCls.getMethods()) { cls.addMethod(renamer.rename(ModelUtils.copyMethod(method))); } } }
public ClassNode decompile(ClassHolder cls) { ClassNode clsNode = new ClassNode(cls.getName(), cls.getParent()); for (FieldHolder field : cls.getFields()) { FieldNode fieldNode = new FieldNode(field.getName(), field.getType()); fieldNode.getModifiers().addAll(field.getModifiers()); fieldNode.setInitialValue(field.getInitialValue()); clsNode.getFields().add(fieldNode); } for (MethodHolder method : cls.getMethods()) { if (method.getModifiers().contains(ElementModifier.ABSTRACT)) { continue; } if (method.getAnnotations().get(InjectedBy.class.getName()) != null || methodsToSkip.contains(method.getReference())) { continue; } MethodNode methodNode = decompile(method); clsNode.getMethods().add(methodNode); } clsNode.getInterfaces().addAll(cls.getInterfaces()); clsNode.getModifiers().addAll(cls.getModifiers()); return clsNode; }
public void link(DependencyInfo dependency, ClassHolder cls) { for (MethodHolder method : cls.getMethods().toArray(new MethodHolder[0])) { MethodReference methodRef = new MethodReference(cls.getName(), method.getDescriptor()); MethodDependencyInfo methodDep = dependency.getMethod(methodRef); if (methodDep == null) { cls.removeMethod(method); } else if (!methodDep.isUsed()) { method.getModifiers().add(ElementModifier.ABSTRACT); method.setProgram(null); } else if (method.getProgram() != null) { link(dependency, method); } } for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependency.getField(fieldRef) == null) { cls.removeField(field); } } }
for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { renamedCls.addField(ModelUtils.copyField(field));