org_aspectj_systemtest_incremental_tools_OutputLocationManagerTests_java
org.aspectj.org.eclipse.jdt.internal.compiler.lookup.MethodVerifier15
@Override
    void checkMethods() {
        boolean mustImplementAbstractMethods = this.mustImplementAbstractMethods();
        boolean skipInheritedMethods = mustImplementAbstractMethods && this.canSkipInheritedMethods();
        boolean isOrEnclosedByPrivateType = this.type.isOrEnclosedByPrivateType();
        char[][] methodSelectors = this.inheritedMethods.keyTable;
        int s = methodSelectors.length;
        while (--s >= 0) {
            MethodBinding inheritedMethod;
            int i;
            int i2;
            int length;
            if (methodSelectors[s] == null) continue;
            MethodBinding[] current = (MethodBinding[])this.currentMethods.get(methodSelectors[s]);
            MethodBinding[] inherited = (MethodBinding[])this.inheritedMethods.valueTable[s];
            inherited = Sorting.concreteFirst(inherited, inherited.length);
            if (current == null && !isOrEnclosedByPrivateType) {
                length = inherited.length;
                i2 = 0;
                while (i2 < length) {
                    inherited[i2].original().modifiers |= 0x8000000;
                    ++i2;
                }
            }
            if (current == null && this.type.isPublic()) {
                length = inherited.length;
                i2 = 0;
                while (i2 < length) {
                    MethodBinding methodBinding;
                    MethodBinding methodBinding2;
                    MethodBinding inheritedMethod2 = inherited[i2];
                    if (inheritedMethod2.isPublic() && !((ReferenceBinding)MethodVerifier15.declaringClass_aroundBody41$advice(this, methodBinding2 = inheritedMethod2, OwningClassSupportForMethodBindings.aspectOf(), methodBinding2, null)).isInterface() && !((ReferenceBinding)MethodVerifier15.declaringClass_aroundBody43$advice(this, methodBinding = inheritedMethod2, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null)).isPublic()) {
                        this.type.addSyntheticBridgeMethod(inheritedMethod2.original());
                    }
                    ++i2;
                }
            }
            if (current == null && skipInheritedMethods) continue;
            if (inherited.length == 1 && current == null) {
                if (!mustImplementAbstractMethods || !inherited[0].isAbstract()) continue;
                this.checkAbstractMethod(inherited[0]);
                continue;
            }
            int index = -1;
            int inheritedLength = inherited.length;
            MethodBinding[] matchingInherited = new MethodBinding[inheritedLength];
            MethodBinding[] foundMatch = new MethodBinding[inheritedLength];
            boolean[] skip = new boolean[inheritedLength];
            boolean[] isOverridden = new boolean[inheritedLength];
            boolean[] isInherited = new boolean[inheritedLength];
            Arrays.fill(isInherited, true);
            if (current != null) {
                i = 0;
                int length1 = current.length;
                while (i < length1) {
                    MethodBinding currentMethod = current[i];
                    MethodBinding[] nonMatchingInherited = null;
                    int j = 0;
                    while (j < inheritedLength) {
                        MethodBinding inheritedMethod3 = this.computeSubstituteMethod(inherited[j], currentMethod);
                        if (inheritedMethod3 != null) {
                            if (this.isSubstituteParameterSubsignature(currentMethod, inheritedMethod3)) {
                                isOverridden[j] = skip[j] = MethodVerifier15.couldMethodOverride(currentMethod, inheritedMethod3);
                                matchingInherited[++index] = inheritedMethod3;
                                foundMatch[j] = currentMethod;
                            } else {
                                this.checkForNameClash(currentMethod, inheritedMethod3);
                                if (inheritedLength > 1) {
                                    if (nonMatchingInherited == null) {
                                        nonMatchingInherited = new MethodBinding[inheritedLength];
                                    }
                                    nonMatchingInherited[j] = inheritedMethod3;
                                }
                            }
                        }
                        ++j;
                    }
                    if (index >= 0) {
                        this.checkAgainstInheritedMethods(currentMethod, matchingInherited, index + 1, nonMatchingInherited);
                        while (index >= 0) {
                            matchingInherited[index--] = null;
                        }
                    }
                    ++i;
                }
            }
            i = 0;
            while (i < inheritedLength) {
                MethodBinding methodBinding;
                MethodBinding methodBinding3;
                MethodBinding matchMethod = foundMatch[i];
                if (matchMethod == null && current != null && this.type.isPublic() && (inheritedMethod = inherited[i]).isPublic() && !((ReferenceBinding)MethodVerifier15.declaringClass_aroundBody45$advice(this, methodBinding3 = inheritedMethod, OwningClassSupportForMethodBindings.aspectOf(), methodBinding3, null)).isInterface() && !((ReferenceBinding)MethodVerifier15.declaringClass_aroundBody47$advice(this, methodBinding = inheritedMethod, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null)).isPublic()) {
                    this.type.addSyntheticBridgeMethod(inheritedMethod.original());
                }
                if (!isOrEnclosedByPrivateType && matchMethod == null && current != null) {
                    inherited[i].original().modifiers |= 0x8000000;
                }
                inheritedMethod = inherited[i];
                int j = i + 1;
                while (j < inheritedLength) {
                    MethodBinding otherInheritedMethod = inherited[j];
                    if (!(matchMethod == foundMatch[j] && matchMethod != null || this.canSkipInheritedMethods(inheritedMethod, otherInheritedMethod))) {
                        MethodBinding methodBinding4 = inheritedMethod;
                        MethodBinding methodBinding5 = otherInheritedMethod;
                        if (!TypeBinding.notEquals((ReferenceBinding)MethodVerifier15.declaringClass_aroundBody49$advice(this, methodBinding4, OwningClassSupportForMethodBindings.aspectOf(), methodBinding4, null), (ReferenceBinding)MethodVerifier15.declaringClass_aroundBody51$advice(this, methodBinding5, OwningClassSupportForMethodBindings.aspectOf(), methodBinding5, null)) || this.isSkippableOrOverridden(inheritedMethod, otherInheritedMethod, skip, isOverridden, isInherited, j) || this.isSkippableOrOverridden(otherInheritedMethod, inheritedMethod, skip, isOverridden, isInherited, i)) {
                            // empty if block
                        }
                    }
                    ++j;
                }
                ++i;
            }
            i = 0;
            while (i < inheritedLength) {
                MethodBinding matchMethod = foundMatch[i];
                if (!skip[i]) {
                    inheritedMethod = inherited[i];
                    if (matchMethod == null) {
                        matchingInherited[++index] = inheritedMethod;
                    }
                    int j = i + 1;
                    while (j < inheritedLength) {
                        if (foundMatch[j] == null) {
                            MethodBinding otherInheritedMethod = inherited[j];
                            if (!(matchMethod == foundMatch[j] && matchMethod != null || this.canSkipInheritedMethods(inheritedMethod, otherInheritedMethod))) {
                                MethodBinding replaceMatch = this.findReplacedMethod(inheritedMethod, otherInheritedMethod);
                                if (replaceMatch != null) {
                                    matchingInherited[++index] = replaceMatch;
                                    skip[j] = true;
                                } else {
                                    replaceMatch = this.findReplacedMethod(otherInheritedMethod, inheritedMethod);
                                    if (replaceMatch != null) {
                                        matchingInherited[++index] = replaceMatch;
                                        skip[j] = true;
                                    } else if (matchMethod == null) {
                                        this.checkInheritedMethods(inheritedMethod, otherInheritedMethod);
                                    }
                                }
                            }
                        }
                        ++j;
                    }
                    if (index != -1) {
                        if (index > 0) {
                            boolean[] matchingIsInherited;
                            boolean[] matchingIsOverridden;
                            int length2 = index + 1;
                            if (length2 != inheritedLength) {
                                matchingIsOverridden = new boolean[length2];
                                matchingIsInherited = new boolean[length2];
                                int j2 = 0;
                                while (j2 < length2) {
                                    int k = 0;
                                    while (k < inheritedLength) {
                                        if (matchingInherited[j2] == inherited[k]) {
                                            matchingIsOverridden[j2] = isOverridden[k];
                                            matchingIsInherited[j2] = isInherited[k];
                                            break;
                                        }
                                        ++k;
                                    }
                                    ++j2;
                                }
                            } else {
                                matchingIsOverridden = isOverridden;
                                matchingIsInherited = isInherited;
                            }
                            this.checkInheritedMethods(matchingInherited, length2, matchingIsOverridden, matchingIsInherited);
                        } else if (mustImplementAbstractMethods && matchingInherited[0].isAbstract() && matchMethod == null) {
                            this.checkAbstractMethod(matchingInherited[0]);
                        }
                        while (index >= 0) {
                            matchingInherited[index--] = null;
                        }
                    }
                }
                ++i;
            }
        }
    }
 -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.hashCode(char[]): int
 [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [EXIT]