if (DEBUG_SHOWRESULTS) { System.out.println("--- " + getName() + " ---"); }
	private void doOverrideTests(ICompilationUnit cu, int focusIndex, int overridingIndex, int overriddenIndex) throws JavaModelException {		CompilationUnit root= assertNoCompilationError(cu);				IType[] types= cu.getTypes();		ITypeBinding[] typeBindings= new ITypeBinding[types.length];				typeBindings[types.length - 1]= ((TypeDeclaration) root.types().get(types.length - 1)).resolveBinding();		for (int i= types.length - 2; i >= 0; i--) {			typeBindings[i]= typeBindings[i + 1].getSuperclass();		}				IType overridingType= types[overridingIndex];		ITypeBinding overridingTypeBinding= typeBindings[overridingIndex];		assertSameType(overridingType, overridingTypeBinding);				IType overriddenType= types[overriddenIndex]; 		ITypeBinding overriddenTypeBinding= typeBindings[overriddenIndex];		assertSameType(overriddenType, overriddenTypeBinding);						IType focusType= types[focusIndex];		ITypeHierarchy hierarchy= focusType.newTypeHierarchy(null);		MethodOverrideTester tester= new MethodOverrideTester(focusType, hierarchy);				IMethod[] overridingMethods= overridingType.getMethods();		IMethod[] overriddenMethods= overriddenType.getMethods();				IMethodBinding[] overridingBindings= overridingTypeBinding.getDeclaredMethods();		IMethodBinding[] overriddenBindings= overriddenTypeBinding.getDeclaredMethods();				for (int i= 0; i < overridingMethods.length; i++) {						IMethod overriding= overridingMethods[i];			IMethodBinding overridingBinding= overridingBindings[i];			IMethod overriddenMethod= overriddenMethods[i];			IMethodBinding overriddenBinding= overriddenBindings[i];			Boolean overrideAnnotation= isOverrideAnnotationOK(root, overridingBinding);			if (overrideAnnotation == null) {				continue; // only look at methods with the override annotation			}						boolean overrideAnnotationResult= overrideAnnotation.booleanValue();			boolean testerOverrides= tester.isSubsignature(overriddenMethod, overriding);			boolean uiBindingsIsSubsignature= Bindings.isSubsignature(overridingBinding, overriddenBinding);						if (DEBUG_SHOWRESULTS) {				boolean bindingOverrides= overridingBinding.getMethodDeclaration().overrides(overriddenBinding.getMethodDeclaration());				boolean bindingIsSubsignature= overridingBinding.isSubsignature(overriddenBinding);				if (testerOverrides != overrideAnnotationResult || testerOverrides != bindingOverrides 						|| testerOverrides != bindingIsSubsignature || testerOverrides != uiBindingsIsSubsignature) { 					System.out.println(getDebugString(overridingBinding, overriddenBinding));					System.out.println("    IMethodBinding.overrides(): " +  String.valueOf(bindingOverrides));					System.out.println("    IMethodBinding.isSubsignature(): " +  String.valueOf(bindingIsSubsignature));					System.out.println("    MethodOverrideTester.isSubsignature(): " +  String.valueOf(testerOverrides));					System.out.println("    Bindings.isSubsignature(): " +  String.valueOf(uiBindingsIsSubsignature));					System.out.println("    Override Annotation: " +  String.valueOf(overrideAnnotationResult));				} else {					System.out.println(getDebugString(overridingBinding, overriddenBinding));					System.out.println("    " +  String.valueOf(overrideAnnotationResult));				}			}			if (overrideAnnotationResult != testerOverrides) {				assertEquals(getDebugString(overridingBinding, overriddenBinding), overrideAnnotationResult, testerOverrides);			}			/*if (overrideAnnotationResult != uiBindingsIsSubsignature) {				assertEquals(getDebugString(overridingBinding, overriddenBinding), overrideAnnotationResult, uiBindingsIsSubsignature);			}*/					}	}