359 case 0: |
359 case 0: |
360 PackageSymbol thisPackage = this.packge(); |
360 PackageSymbol thisPackage = this.packge(); |
361 for (Symbol sup = clazz; |
361 for (Symbol sup = clazz; |
362 sup != null && sup != this.owner; |
362 sup != null && sup != this.owner; |
363 sup = types.supertype(sup.type).tsym) { |
363 sup = types.supertype(sup.type).tsym) { |
|
364 while (sup.type.tag == TYPEVAR) |
|
365 sup = sup.type.getUpperBound().tsym; |
364 if (sup.type.isErroneous()) |
366 if (sup.type.isErroneous()) |
365 return true; // error recovery |
367 return true; // error recovery |
366 if ((sup.flags() & COMPOUND) != 0) |
368 if ((sup.flags() & COMPOUND) != 0) |
367 continue; |
369 continue; |
368 if (sup.packge() != thisPackage) |
370 if (sup.packge() != thisPackage) |
1181 /** The implementation of this (abstract) symbol in class origin; |
1183 /** The implementation of this (abstract) symbol in class origin; |
1182 * null if none exists. Synthetic methods are not considered |
1184 * null if none exists. Synthetic methods are not considered |
1183 * as possible implementations. |
1185 * as possible implementations. |
1184 */ |
1186 */ |
1185 public MethodSymbol implementation(TypeSymbol origin, Types types, boolean checkResult) { |
1187 public MethodSymbol implementation(TypeSymbol origin, Types types, boolean checkResult) { |
1186 for (Type t = origin.type; t.tag == CLASS; t = types.supertype(t)) { |
1188 for (Type t = origin.type; t.tag == CLASS || t.tag == TYPEVAR; t = types.supertype(t)) { |
|
1189 while (t.tag == TYPEVAR) |
|
1190 t = t.getUpperBound(); |
1187 TypeSymbol c = t.tsym; |
1191 TypeSymbol c = t.tsym; |
1188 for (Scope.Entry e = c.members().lookup(name); |
1192 for (Scope.Entry e = c.members().lookup(name); |
1189 e.scope != null; |
1193 e.scope != null; |
1190 e = e.next()) { |
1194 e = e.next()) { |
1191 if (e.sym.kind == MTH) { |
1195 if (e.sym.kind == MTH) { |