1922 for (Type t : supertypes.values()) { |
1922 for (Type t : supertypes.values()) { |
1923 for (Scope.Entry e = t.tsym.members().lookup(s1.name); e.scope != null; e = e.next()) { |
1923 for (Scope.Entry e = t.tsym.members().lookup(s1.name); e.scope != null; e = e.next()) { |
1924 Symbol s3 = e.sym; |
1924 Symbol s3 = e.sym; |
1925 if (s3 == s1 || s3 == s2 || s3.kind != MTH || (s3.flags() & (BRIDGE|SYNTHETIC)) != 0) continue; |
1925 if (s3 == s1 || s3 == s2 || s3.kind != MTH || (s3.flags() & (BRIDGE|SYNTHETIC)) != 0) continue; |
1926 Type st3 = types.memberType(site,s3); |
1926 Type st3 = types.memberType(site,s3); |
1927 if (types.overrideEquivalent(st3, st1) && types.overrideEquivalent(st3, st2)) { |
1927 if (types.overrideEquivalent(st3, st1) && |
1928 if (s3.owner == site.tsym) { |
1928 types.overrideEquivalent(st3, st2) && |
1929 return true; |
1929 types.returnTypeSubstitutable(st3, st1) && |
1930 } |
1930 types.returnTypeSubstitutable(st3, st2)) { |
1931 List<Type> tvars1 = st1.getTypeArguments(); |
1931 return true; |
1932 List<Type> tvars2 = st2.getTypeArguments(); |
|
1933 List<Type> tvars3 = st3.getTypeArguments(); |
|
1934 Type rt1 = st1.getReturnType(); |
|
1935 Type rt2 = st2.getReturnType(); |
|
1936 Type rt13 = types.subst(st3.getReturnType(), tvars3, tvars1); |
|
1937 Type rt23 = types.subst(st3.getReturnType(), tvars3, tvars2); |
|
1938 boolean compat = |
|
1939 !rt13.isPrimitiveOrVoid() && |
|
1940 !rt23.isPrimitiveOrVoid() && |
|
1941 (types.covariantReturnType(rt13, rt1, types.noWarnings) && |
|
1942 types.covariantReturnType(rt23, rt2, types.noWarnings)); |
|
1943 if (compat) |
|
1944 return true; |
|
1945 } |
1932 } |
1946 } |
1933 } |
1947 } |
1934 } |
1948 return false; |
1935 return false; |
1949 } |
1936 } |