public void addField(FieldHolder field) { if (field.getOwner() != null) { throw new IllegalArgumentException("Field " + field.getName() + " is already " + "in another class (" + field.getOwner().getName() + ")"); } field.setOwner(this); FieldHolder oldField = fields.put(field.getName(), field); if (oldField != null) { oldField.setOwner(null); } }
@Override public FieldReference getReference() { if (reference == null && owner != null) { reference = new FieldReference(getOwnerName(), getName()); } return reference; }
private void writeField(DataOutput output, FieldHolder field) throws IOException { output.writeInt(symbolTable.lookup(field.getName())); output.writeInt(symbolTable.lookup(field.getType().toString())); output.writeByte(field.getLevel().ordinal()); output.writeInt(packModifiers(field.getModifiers())); writeFieldValue(output, field.getInitialValue()); writeAnnotations(output, field.getAnnotations()); }
private void transformProperties(ClassHolder cls) { for (FieldHolder field : cls.getFields().toArray(new FieldHolder[0])) { if (field.getName().equals("ScalaCompilerVersion")) { cls.removeField(field);
public FieldHolder rename(FieldHolder field) { FieldHolder renamedField = new FieldHolder(field.getName()); renamedField.getModifiers().addAll(field.getModifiers()); renamedField.setLevel(field.getLevel()); renamedField.setType(rename(field.getType())); renamedField.setInitialValue(field.getInitialValue()); rename(field.getAnnotations(), renamedField.getAnnotations()); return renamedField; }
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); } } }
private MethodHolder createConstructor(ClassHierarchy hierarchy, ClassHolder implementor, ValueType[] types, TextLocation location) { ValueType[] signature = Arrays.copyOf(types, types.length + 1); signature[types.length] = ValueType.VOID; MethodHolder ctor = new MethodHolder("<init>", signature); ctor.setLevel(AccessLevel.PUBLIC); ProgramEmitter pe = ProgramEmitter.create(ctor, hierarchy); pe.setCurrentLocation(location); ValueEmitter thisVar = pe.var(0, implementor); thisVar.invokeSpecial(implementor.getParent(), "<init>"); for (int i = 0; i < types.length; ++i) { FieldHolder field = new FieldHolder("_" + i); field.setLevel(AccessLevel.PRIVATE); field.setType(types[i]); implementor.addField(field); thisVar.setField(field.getName(), pe.var(i + 1, types[i])); } pe.exit(); implementor.addMethod(ctor); return ctor; }
FieldReference fieldRef = new FieldReference(cls.getName(), field.getName()); if (dependencyAnalyzer.getField(fieldRef) == null) { cls.removeField(field);
ProgramEmitter pe = ProgramEmitter.create(accessor, hierarchy); ValueEmitter thisVal = pe.var(0, implementor); ValueEmitter result = thisVal.getField(field.getName(), field.getType()); if (field.getType() instanceof ValueType.Array) { result = result.cloneArray();
public void addField(FieldHolder field) { if (field.getOwner() != null) { throw new IllegalArgumentException("Field " + field.getName() + " is already " + "in another class (" + field.getOwner().getName() + ")"); } field.setOwner(this); FieldHolder oldField = fields.put(field.getName(), field); if (oldField != null) { oldField.setOwner(null); } }
@Override public FieldReference getReference() { return new FieldReference(getOwnerName(), getName()); } }
private void writeField(DataOutput output, FieldHolder field) throws IOException { output.writeInt(symbolTable.lookup(field.getName())); output.writeInt(symbolTable.lookup(field.getType().toString())); output.writeByte(field.getLevel().ordinal()); output.writeInt(packModifiers(field.getModifiers())); writeFieldValue(output, field.getInitialValue()); writeAnnotations(output, field.getAnnotations()); }
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); } } }