/// <summary> /// Gets all methods from superclasses/interfaces this method overrides. /// </summary> public IEnumerable <MethodDefinition> Overrides() { if (overrides == null) { var paramsDescriptor = Descriptors.StripMethodReturnType(descriptor); ClassFile baseClass; var tmpOverrides = new List <MethodDefinition>(); if (DeclaringClass.TryGetSuperClass(out baseClass)) { while (baseClass != null) { if (baseClass.IsPublic) { tmpOverrides.AddRange(baseClass.Methods.Where(x => (x.Name == Name) && (Descriptors.StripMethodReturnType(x.descriptor) == paramsDescriptor))); } if (baseClass.ClassName == "java/lang/Object") { break; } if (!baseClass.TryGetSuperClass(out baseClass)) { break; } } } overrides = tmpOverrides; } return(overrides); }
public FieldDefinition(ClassFile cf, FieldAccessFlags accessFlags, string name, string descriptor, string signature) : base(cf, name) { this.accessFlags = accessFlags; this.descriptor = descriptor; fieldType = Descriptors.ParseFieldType(descriptor); Signature = (signature != null) ? Signatures.ParseFieldTypeSignature(signature) : fieldType; }
public MethodDefinition(ClassFile cf, MethodAccessFlags accessFlags, string name, string descriptor, string signature) : base(cf, name) { this.accessFlags = accessFlags; this.descriptor = descriptor; methodDescriptor = Descriptors.ParseMethodDescriptor(descriptor); this.signature = (signature != null) ? Signatures.ParseMethodSignature(signature) : null; }
/// <summary> /// Read a LocalVariableTable attribute /// </summary> private LocalVariableTableAttribute ReadLocalVariableTableAttribute(ConstantPool cp) { var result = new LocalVariableTableAttribute(); var count = stream.ReadU2(); for (var i = 0; i < count; i++) { var startPC = stream.ReadU2(); var length = stream.ReadU2(); var nameIndex = stream.ReadU2(); var name = cp.GetEntry <ConstantPoolUtf8>(nameIndex).Value; var descriptorIndex = stream.ReadU2(); var descriptor = cp.GetEntry <ConstantPoolUtf8>(descriptorIndex).Value; var variableType = Descriptors.ParseFieldType(descriptor); var index = stream.ReadU2(); result.Variables.Add(new LocalVariable(startPC, length, name, variableType, index)); } return(result); }