Buggy code:
ParameterizedQualifiedTypeReference qRef = ( ( ParameterizedQualifiedTypeReference ) ( this . type ) ) ; for ( int i = ( qRef . typeArguments . length ) - 2 ; i >= 0 ; i -- ) { if ( ( qRef . typeArguments [ i ] ) != null ) { scope . problemReporter ( ) . illegalQualifiedParameterizedTypeAllocation ( this . type , this . resolvedType ) ; break ; } } } } } if ( ( this . typeArguments ) != null ) { int length = this . typeArguments . length ; boolean argHasError = ( scope . compilerOptions ( ) . sourceLevel ) < ( ClassFileConstants . JDK1_5 ) ; this . genericTypeArguments = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { TypeReference typeReference = this . typeArguments [ i ] ; if ( ( this . genericTypeArguments [ i ] = typeReference . resolveType ( scope , true ) ) == null ) { argHasError = true ; } if ( argHasError && ( typeReference instanceof Wildcard ) ) { scope . problemReporter ( ) . illegalUsageOfWildcard ( typeReference ) ; } } if ( argHasError ) { if ( ( this . arguments ) != null ) { for ( int i = 0 , max = this . arguments . length ; i < max ; i ++ ) { this . arguments [ i ] . resolveType ( scope ) ; } } return null ; } } boolean argsContainCast = false ; TypeBinding [ ] argumentTypes = Binding . NO_PARAMETERS ; if ( ( this . arguments ) != null ) { boolean argHasError = false ; int length = this . arguments . length ; argumentTypes = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { Expression argument = this . arguments [ i ] ; if ( argument instanceof CastExpression ) { argument . bits |= ASTNode . DisableUnnecessaryCastCheck ; argsContainCast = true ; } if ( ( argumentTypes [ i ] = argument . resolveType ( scope ) ) == null ) { argHasError = true ; } } if ( argHasError ) { if ( ( this . resolvedType ) instanceof ReferenceBinding ) { TypeBinding [ ] pseudoArgs = new TypeBinding [ length ] ; for ( int i = length ; ( -- i ) >= 0 ; ) { pseudoArgs [ i ] = ( ( argumentTypes [ i ] ) == null ) ? TypeBinding . NULL : argumentTypes [ i ] ; } this . binding = scope . findMethod ( ( ( ReferenceBinding ) ( this . resolvedType ) ) , TypeConstants . INIT , pseudoArgs , this ) ; if ( ( ( this . binding ) != null ) && ( ! ( this . binding . isValidBinding ( ) ) ) ) { MethodBinding closestMatch = ( ( ProblemMethodBinding ) ( this . binding ) ) . closestMatch ; if ( closestMatch != null ) { if ( ( closestMatch . original ( ) . typeVariables ) != ( Binding . NO_TYPE_VARIABLES ) ) { closestMatch = scope . environment ( ) . createParameterizedGenericMethod ( closestMatch . original ( ) , ( ( RawTypeBinding ) ( null ) ) ) ; } this . binding = closestMatch ; MethodBinding closestMatchOriginal = closestMatch . original ( ) ; <START_BUG> if ( ( ( closestMatchOriginal . isPrivate ( ) ) || ( closestMatchOriginal . declaringClass . isLocalType ( ) ) ) && ( ! ( scope . isDefinedInMethod ( closestMatchOriginal ) ) ) ) { <END_BUG> closestMatchOriginal . modifiers |= ExtraCompilerModifiers . AccLocallyUsed ; } } } } return this . resolvedType ; } } if ( ( ( this . resolvedType ) == null ) || ( ! ( this . resolvedType . isValidBinding ( ) ) ) ) { return null ; } if ( ( ( this . type ) != null ) && ( ! ( this . resolvedType . canBeInstantiated ( ) ) ) ) { scope . problemReporter ( ) . cannotInstantiate ( this . type , this . resolvedType ) ; return this . resolvedType ; } ReferenceBinding allocationType = ( ( ReferenceBinding ) ( this . resolvedType ) ) ; if ( ! ( ( this . binding = scope . getConstructor ( allocationType , argumentTypes , this ) ) . isValidBinding ( ) ) ) { if ( ( this . binding . declaringClass ) == null ) { this . binding . declaringClass = allocationType ; } if ( ( ( this . type ) != null ) && ( ! ( this . type . resolvedType . isValidBinding ( ) ) ) ) { return null ; } scope . problemReporter ( ) . invalidConstructor ( this , this . binding ) ; return this . resolvedType ; } if ( ( ( this . binding . tagBits ) & ( TagBits . HasMissingType ) ) != 0 ) { scope . problemReporter ( ) . missingTypeInConstructor ( this , this . binding ) ; } if ( isMethodUseDeprecated ( this . binding , scope , true ) ) scope . problemReporter ( ) . deprecatedMethod ( this . binding , this ) ; if ( ASTNode . checkInvocationArguments ( scope , null , allocationType , this . binding , this . arguments , argumentTypes , argsContainCast , this ) ) { this . bits |= ASTNode . Unchecked ; } if ( ( ( this . typeArguments ) != null ) && ( ( this . binding . original ( ) . typeVariables ) == ( Binding . NO_TYPE_VARIABLES ) ) ) { scope . problemReporter ( ) . unnecessaryTypeArgumentsForMethodInvocation ( this . binding , this . genericTypeArguments , this . typeArguments ) ;

Fix:
if ( ( closestMatchOriginal . isOrEnclosedByPrivateType ( ) ) && ( ! ( scope . isDefinedInMethod ( closestMatchOriginal ) ) ) ) {