org_aspectj_systemtest_incremental_tools_OutputLocationManagerTests_java
org.aspectj.org.eclipse.jdt.internal.compiler.ast.MemberValuePair
public void resolveTypeExpecting(final BlockScope scope, final TypeBinding requiredType) {
        boolean[] shouldExit;
        TypeBinding valueType;
        if (this.compilerElementPair != null) {
            return;
        }
        if (this.value == null) {
            this.compilerElementPair = new ElementValuePair(this.name, this.value, this.binding);
            return;
        }
        if (requiredType == null) {
            if (this.value instanceof ArrayInitializer) {
                this.value.resolveTypeExpecting(scope, null);
            } else {
                this.value.resolveType(scope);
            }
            this.compilerElementPair = new ElementValuePair(this.name, this.value, this.binding);
            return;
        }
        this.value.setExpectedType(requiredType);
        if (this.value instanceof ArrayInitializer) {
            ArrayInitializer initializer = (ArrayInitializer)this.value;
            valueType = initializer.resolveTypeExpecting(scope, this.binding.returnType);
        } else if (this.value instanceof ArrayAllocationExpression) {
            MethodBinding methodBinding = this.binding;
            scope.problemReporter().annotationValueMustBeArrayInitializer((ReferenceBinding)MemberValuePair.declaringClass_aroundBody1$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value);
            this.value.resolveType(scope);
            valueType = null;
        } else {
            valueType = this.value.resolveType(scope);
            ASTVisitor visitor = new ASTVisitor(){

                @Override
                public boolean visit(SingleNameReference reference, BlockScope scop) {
                    if (reference.binding instanceof LocalVariableBinding) {
                        ((LocalVariableBinding)reference.binding).useFlag = 1;
                    }
                    return true;
                }
            };
            this.value.traverse(visitor, scope);
        }
        this.compilerElementPair = new ElementValuePair(this.name, this.value, this.binding);
        if (valueType == null) {
            return;
        }
        final TypeBinding leafType = requiredType.leafComponentType();
        Runnable check = new Runnable(shouldExit = new boolean[1]){
            private final /* synthetic */ boolean[] val$shouldExit;
            {
                this.val$shouldExit = blArray;
            }

            @Override
            public void run() {
                if (!MemberValuePair.this.value.isConstantValueOfTypeAssignableToType(valueType, requiredType) && !valueType.isCompatibleWith(requiredType)) {
                    if (!requiredType.isArrayType() || requiredType.dimensions() != 1 || !MemberValuePair.this.value.isConstantValueOfTypeAssignableToType(valueType, leafType) && !valueType.isCompatibleWith(leafType)) {
                        if (leafType.isAnnotationType() && !valueType.isAnnotationType()) {
                            MethodBinding methodBinding = MemberValuePair.this.binding;
                            scope.problemReporter().annotationValueMustBeAnnotation((ReferenceBinding)2.declaringClass_aroundBody1$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), MemberValuePair.this.name, MemberValuePair.this.value, leafType);
                        } else {
                            scope.problemReporter().typeMismatchError(valueType, requiredType, MemberValuePair.this.value, null);
                        }
                        this.val$shouldExit[0] = true;
                    }
                } else {
                    scope.compilationUnitScope().recordTypeConversion(requiredType.leafComponentType(), valueType.leafComponentType());
                    MemberValuePair.this.value.computeConversion(scope, requiredType, valueType);
                }
            }

            private static final /* synthetic */ ReferenceBinding declaringClass_aroundBody0(2 var0, MethodBinding methodBinding) {
                return methodBinding.declaringClass;
            }

            private static final /* synthetic */ Object declaringClass_aroundBody1$advice(2 ajc$this, MethodBinding target, OwningClassSupportForMethodBindings ajc$aspectInstance, MethodBinding aBinding, AroundClosure ajc$aroundClosure) {
                return OwningClassSupportForMethodBindings.ajc$interMethodDispatch1$org_aspectj_ajdt_internal_compiler_lookup_OwningClassSupportForMethodBindings$org_eclipse_jdt_internal_compiler_lookup_MethodBinding$getOwningClass(aBinding);
            }
        };
        if (!scope.deferCheck(check)) {
            check.run();
            if (shouldExit[0]) {
                return;
            }
        }
        switch (leafType.erasure().id) {
            case 2: 
            case 3: 
            case 4: 
            case 5: 
            case 7: 
            case 8: 
            case 9: 
            case 10: 
            case 11: {
                if (this.value instanceof ArrayInitializer) {
                    ArrayInitializer initializer = (ArrayInitializer)this.value;
                    Expression[] expressions = initializer.expressions;
                    if (expressions == null) break;
                    int i = 0;
                    int max = expressions.length;
                    while (i < max) {
                        Expression expression = expressions[i];
                        if (expression.resolvedType != null && expression.constant == Constant.NotAConstant) {
                            MethodBinding methodBinding = this.binding;
                            scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody3$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, expressions[i], false);
                        }
                        ++i;
                    }
                    break;
                }
                if (this.value.constant != Constant.NotAConstant) break;
                if (valueType.isArrayType()) {
                    MethodBinding methodBinding = this.binding;
                    scope.problemReporter().annotationValueMustBeArrayInitializer((ReferenceBinding)MemberValuePair.declaringClass_aroundBody5$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value);
                    break;
                }
                MethodBinding methodBinding = this.binding;
                scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody7$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, false);
                break;
            }
            case 16: {
                if (this.value instanceof ArrayInitializer) {
                    ArrayInitializer initializer = (ArrayInitializer)this.value;
                    Expression[] expressions = initializer.expressions;
                    if (expressions == null) break;
                    int i = 0;
                    int max = expressions.length;
                    while (i < max) {
                        Expression currentExpression = expressions[i];
                        if (!(currentExpression instanceof ClassLiteralAccess)) {
                            MethodBinding methodBinding = this.binding;
                            scope.problemReporter().annotationValueMustBeClassLiteral((ReferenceBinding)MemberValuePair.declaringClass_aroundBody9$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, currentExpression);
                        }
                        ++i;
                    }
                    break;
                }
                if (this.value instanceof ClassLiteralAccess) break;
                MethodBinding methodBinding = this.binding;
                scope.problemReporter().annotationValueMustBeClassLiteral((ReferenceBinding)MemberValuePair.declaringClass_aroundBody11$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value);
                break;
            }
            default: {
                if (leafType.isEnum()) {
                    if (this.value instanceof NullLiteral) {
                        MethodBinding methodBinding = this.binding;
                        scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody13$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, true);
                        break;
                    }
                    if (this.value instanceof ArrayInitializer) {
                        ArrayInitializer initializer = (ArrayInitializer)this.value;
                        Expression[] expressions = initializer.expressions;
                        if (expressions == null) break;
                        int i = 0;
                        int max = expressions.length;
                        while (i < max) {
                            Expression currentExpression = expressions[i];
                            if (currentExpression instanceof NullLiteral) {
                                MethodBinding methodBinding = this.binding;
                                scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody15$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, currentExpression, true);
                            } else if (currentExpression instanceof NameReference) {
                                FieldBinding fieldBinding;
                                FieldBinding fieldBinding2;
                                NameReference nameReference = (NameReference)currentExpression;
                                Binding nameReferenceBinding = nameReference.binding;
                                if (nameReferenceBinding.kind() == 1 && !((ReferenceBinding)MemberValuePair.declaringClass_aroundBody17$advice(this, fieldBinding2 = (fieldBinding = (FieldBinding)nameReferenceBinding), OwningClassSupportForFieldBindings.aspectOf(), fieldBinding2, null)).isEnum()) {
                                    MethodBinding methodBinding = this.binding;
                                    scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody19$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, currentExpression, true);
                                }
                            }
                            ++i;
                        }
                        break;
                    }
                    if (this.value instanceof NameReference) {
                        FieldBinding fieldBinding;
                        FieldBinding fieldBinding3;
                        NameReference nameReference = (NameReference)this.value;
                        Binding nameReferenceBinding = nameReference.binding;
                        if (nameReferenceBinding.kind() != 1 || ((ReferenceBinding)MemberValuePair.declaringClass_aroundBody21$advice(this, fieldBinding3 = (fieldBinding = (FieldBinding)nameReferenceBinding), OwningClassSupportForFieldBindings.aspectOf(), fieldBinding3, null)).isEnum()) break;
                        if (!fieldBinding.type.isArrayType()) {
                            MethodBinding methodBinding = this.binding;
                            scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody23$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, true);
                            break;
                        }
                        MethodBinding methodBinding = this.binding;
                        scope.problemReporter().annotationValueMustBeArrayInitializer((ReferenceBinding)MemberValuePair.declaringClass_aroundBody25$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value);
                        break;
                    }
                    MethodBinding methodBinding = this.binding;
                    scope.problemReporter().annotationValueMustBeConstant((ReferenceBinding)MemberValuePair.declaringClass_aroundBody27$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, true);
                    break;
                }
                if (!leafType.isAnnotationType()) break;
                if (!valueType.leafComponentType().isAnnotationType()) {
                    MethodBinding methodBinding = this.binding;
                    scope.problemReporter().annotationValueMustBeAnnotation((ReferenceBinding)MemberValuePair.declaringClass_aroundBody29$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, leafType);
                    break;
                }
                if (this.value instanceof ArrayInitializer) {
                    ArrayInitializer initializer = (ArrayInitializer)this.value;
                    Expression[] expressions = initializer.expressions;
                    if (expressions == null) break;
                    int i = 0;
                    int max = expressions.length;
                    while (i < max) {
                        Expression currentExpression = expressions[i];
                        if (currentExpression instanceof NullLiteral || !(currentExpression instanceof Annotation)) {
                            MethodBinding methodBinding = this.binding;
                            scope.problemReporter().annotationValueMustBeAnnotation((ReferenceBinding)MemberValuePair.declaringClass_aroundBody31$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, currentExpression, leafType);
                        }
                        ++i;
                    }
                    break;
                }
                if (this.value instanceof Annotation) break;
                MethodBinding methodBinding = this.binding;
                scope.problemReporter().annotationValueMustBeAnnotation((ReferenceBinding)MemberValuePair.declaringClass_aroundBody33$advice(this, methodBinding, OwningClassSupportForMethodBindings.aspectOf(), methodBinding, null), this.name, this.value, leafType);
            }
        }
    }
 -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.hashCode(char[]): int -> java.util.Arrays.equals(char[],char[]): boolean -> java.lang.String.valueOf(char[]): java.lang.String -> java.lang.Runnable.run(): void -> java.lang.Object.hashCode(): int -> java.util.Set.add(java.lang.Object): boolean
 [CALL] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [EXIT] [EXIT] [CALL] [CALL] -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] -> java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int): void [CALL] -> java.util.Arrays.binarySearch(java.lang.Object[],int,int,java.lang.Object,java.util.Comparator): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] -> java.util.Arrays.hashCode(char[]): int [EXIT] [CALL] -> java.util.Arrays.equals(char[],char[]): boolean [EXIT] [EXIT] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] -> java.lang.String.valueOf(char[]): java.lang.String [CALL] [CALL] [EXIT] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.lang.Runnable.run(): void [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [CALL] -> java.lang.Object.hashCode(): int [EXIT] [EXIT] -> java.util.Set.add(java.lang.Object): boolean [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [EXIT] [CALL] [EXIT] [EXIT]