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 , receiverType ) ; break ; } } } } } } if ( ( receiverType == null ) || ( ! ( receiverType . isValidBinding ( ) ) ) ) { hasError = true ; } 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 ; } } TypeBinding [ ] argumentTypes = Binding . NO_PARAMETERS ; if ( ( this . arguments ) != null ) { 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 ) { hasError = true ; } } } if ( hasError ) { if ( receiverType instanceof ReferenceBinding ) { ReferenceBinding referenceReceiver = ( ( ReferenceBinding ) ( receiverType ) ) ; if ( receiverType . isValidBinding ( ) ) { int length = ( ( this . arguments ) == null ) ? 0 : this . arguments . length ; TypeBinding [ ] pseudoArgs = new TypeBinding [ length ] ; for ( int i = length ; ( -- i ) >= 0 ; ) { pseudoArgs [ i ] = ( ( argumentTypes [ i ] ) == null ) ? TypeBinding . NULL : argumentTypes [ i ] ; } this . binding = scope . findMethod ( referenceReceiver , 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 ; } } } } else { return null ; } if ( ( this . anonymousType ) != null ) { scope . addAnonymousType ( this . anonymousType , referenceReceiver ) ; this . anonymousType . resolve ( scope ) ; return this . resolvedType = this . anonymousType . binding ; } } return this . resolvedType = receiverType ; } if ( ( this . anonymousType ) == null ) { if ( ! ( receiverType . canBeInstantiated ( ) ) ) { scope . problemReporter ( ) . cannotInstantiate ( this . type , receiverType ) ; return this . resolvedType = receiverType ; } ReferenceBinding allocationType = ( ( ReferenceBinding ) ( receiverType ) ) ; if ( ( this . binding = scope . getConstructor ( allocationType , argumentTypes , this ) ) . isValidBinding ( ) ) { 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 ) ; } } else { if ( ( this . binding . declaringClass ) == null ) { this . binding . declaringClass = allocationType ; } if ( ( ( this . type ) != null ) && ( ! ( this . type . resolvedType . isValidBinding ( ) ) ) ) { return null ; }

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