org_aspectj_ajde_internal_AspectJBuildManagerTest_java
org.aspectj.org.eclipse.jdt.internal.compiler.ClassFile
public int generateMethodInfoAttributes(MethodBinding methodBinding, List extraAttributes) {
        char[] genericSignature;
        this.contentsOffset += 2;
        if (this.contentsOffset + 2 >= this.contents.length) {
            this.resizeContents(2);
        }
        int attributesNumber = 0;
        ReferenceBinding[] thrownsExceptions = methodBinding.thrownExceptions;
        if (methodBinding.thrownExceptions != Binding.NO_EXCEPTIONS) {
            attributesNumber += this.generateExceptionsAttribute(thrownsExceptions);
        }
        if (methodBinding.isDeprecated()) {
            attributesNumber += this.generateDeprecatedAttribute();
        }
        if (this.targetJDK < 0x310000L) {
            if (methodBinding.isSynthetic()) {
                attributesNumber += this.generateSyntheticAttribute();
            }
            if (methodBinding.isVarargs()) {
                attributesNumber += this.generateVarargsAttribute();
            }
        }
        if ((genericSignature = methodBinding.genericSignature()) != null) {
            attributesNumber += this.generateSignatureAttribute(genericSignature);
        }
        if (this.targetJDK >= 0x300000L) {
            AbstractMethodDeclaration methodDeclaration = methodBinding.sourceMethod();
            if (methodBinding instanceof SyntheticMethodBinding) {
                SyntheticMethodBinding syntheticMethod = (SyntheticMethodBinding)methodBinding;
                if (syntheticMethod.purpose == 7 && CharOperation.equals(syntheticMethod.selector, syntheticMethod.targetMethod.selector)) {
                    methodDeclaration = ((SyntheticMethodBinding)methodBinding).targetMethod.sourceMethod();
                }
                if (syntheticMethod.recordComponentBinding != null) {
                    assert (methodDeclaration == null);
                    long rcMask = 0x20004000000000L;
                    MethodBinding methodBinding2 = methodBinding;
                    ReferenceBinding declaringClass = (ReferenceBinding)ClassFile.declaringClass_aroundBody47$advice(this, methodBinding2, OwningClassSupportForMethodBindings.aspectOf(), methodBinding2, null);
                    RecordComponent comp = this.getRecordComponent(declaringClass, methodBinding.selector);
                    if (comp != null) {
                        Annotation[] annotations = ASTNode.getRelevantAnnotations(comp.annotations, rcMask, null);
                        if (annotations != null) {
                            assert (!methodBinding.isConstructor());
                            attributesNumber += this.generateRuntimeAnnotations(annotations, 0x4000000000L);
                        }
                        if ((this.produceAttributes & 0x20) != 0) {
                            TypeReference compType;
                            ArrayList<AnnotationContext> allTypeAnnotationContexts = new ArrayList<AnnotationContext>();
                            if (annotations != null && (comp.bits & 0x100000) != 0) {
                                comp.getAllAnnotationContexts(20, allTypeAnnotationContexts);
                            }
                            if ((compType = comp.type) != null && (compType.bits & 0x100000) != 0) {
                                compType.getAllAnnotationContexts(20, allTypeAnnotationContexts);
                            }
                            int size = allTypeAnnotationContexts.size();
                            attributesNumber = this.completeRuntimeTypeAnnotations(attributesNumber, null, node -> size > 0, () -> allTypeAnnotationContexts);
                        }
                    }
                }
            }
            if (methodDeclaration != null) {
                Argument[] arguments;
                Annotation[] annotations = methodDeclaration.annotations;
                if (annotations != null) {
                    attributesNumber += this.generateRuntimeAnnotations(annotations, methodBinding.isConstructor() ? 0x10000000000L : 0x4000000000L);
                }
                if ((methodBinding.tagBits & 0x400L) != 0L && (arguments = methodDeclaration.arguments) != null) {
                    this.propagateRecordComponentArguments(methodDeclaration);
                    attributesNumber += this.generateRuntimeAnnotationsForParameters(arguments);
                }
            } else {
                Argument[] arguments;
                LambdaExpression lambda = methodBinding.sourceLambda();
                if (lambda != null && (methodBinding.tagBits & 0x400L) != 0L && (arguments = lambda.arguments()) != null) {
                    int parameterCount = methodBinding.parameters.length;
                    int argumentCount = arguments.length;
                    if (parameterCount > argumentCount) {
                        int redShift = parameterCount - argumentCount;
                        Argument[] argumentArray = arguments;
                        arguments = new Argument[parameterCount];
                        System.arraycopy(argumentArray, 0, arguments, redShift, argumentCount);
                        int i = 0;
                        while (i < redShift) {
                            arguments[i] = new Argument(CharOperation.NO_CHAR, 0L, null, 0);
                            ++i;
                        }
                    }
                    attributesNumber += this.generateRuntimeAnnotationsForParameters(arguments);
                }
            }
        }
        if ((methodBinding.tagBits & 0x80L) != 0L) {
            this.missingTypes = methodBinding.collectMissingTypes(this.missingTypes);
        }
        if (extraAttributes != null) {
            int i = 0;
            int len = extraAttributes.size();
            while (i < len) {
                IAttribute attribute = (IAttribute)extraAttributes.get(i);
                short nameIndex = (short)this.constantPool.literalIndex(attribute.getNameChars());
                this.writeToContents(attribute.getAllBytes(nameIndex, this.constantPool));
                ++attributesNumber;
                ++i;
            }
        }
        return attributesNumber;
    }
 -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object -> java.lang.String.toCharArray(): char[] -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.io.ByteArrayOutputStream.toByteArray(): byte[] -> java.io.DataOutputStream.writeShort(int): void -> java.io.DataOutputStream.writeInt(int): void -> java.io.DataOutputStream.write(byte[]): void -> java.io.DataOutputStream.close(): void -> java.io.ByteArrayOutputStream.toByteArray(): byte[] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void
 [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.util.List.size(): int -> java.util.List.get(int): java.lang.Object [CALL] [CALL] [CALL] [EXIT] -> java.lang.String.toCharArray(): char[] [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] -> java.io.ByteArrayOutputStream.toByteArray(): byte[] [EXIT] -> java.io.DataOutputStream.writeShort(int): void -> java.io.DataOutputStream.writeInt(int): void -> java.io.DataOutputStream.write(byte[]): void -> java.io.DataOutputStream.close(): void -> java.io.ByteArrayOutputStream.toByteArray(): byte[] [EXIT] [EXIT] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [EXIT]