1.1 --- a/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Jun 06 15:32:41 2013 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/comp/Check.java Thu Jun 06 15:33:40 2013 +0100 1.3 @@ -1924,24 +1924,11 @@ 1.4 Symbol s3 = e.sym; 1.5 if (s3 == s1 || s3 == s2 || s3.kind != MTH || (s3.flags() & (BRIDGE|SYNTHETIC)) != 0) continue; 1.6 Type st3 = types.memberType(site,s3); 1.7 - if (types.overrideEquivalent(st3, st1) && types.overrideEquivalent(st3, st2)) { 1.8 - if (s3.owner == site.tsym) { 1.9 - return true; 1.10 - } 1.11 - List<Type> tvars1 = st1.getTypeArguments(); 1.12 - List<Type> tvars2 = st2.getTypeArguments(); 1.13 - List<Type> tvars3 = st3.getTypeArguments(); 1.14 - Type rt1 = st1.getReturnType(); 1.15 - Type rt2 = st2.getReturnType(); 1.16 - Type rt13 = types.subst(st3.getReturnType(), tvars3, tvars1); 1.17 - Type rt23 = types.subst(st3.getReturnType(), tvars3, tvars2); 1.18 - boolean compat = 1.19 - !rt13.isPrimitiveOrVoid() && 1.20 - !rt23.isPrimitiveOrVoid() && 1.21 - (types.covariantReturnType(rt13, rt1, types.noWarnings) && 1.22 - types.covariantReturnType(rt23, rt2, types.noWarnings)); 1.23 - if (compat) 1.24 - return true; 1.25 + if (types.overrideEquivalent(st3, st1) && 1.26 + types.overrideEquivalent(st3, st2) && 1.27 + types.returnTypeSubstitutable(st3, st1) && 1.28 + types.returnTypeSubstitutable(st3, st2)) { 1.29 + return true; 1.30 } 1.31 } 1.32 }