abstract class FooBase { } // Existence of this line causes the exception abstract class Foo > extends FooBase
{ } interface DataInterface { public CC getContent(); // ERR } interface Marker extends DataInterface { } interface Resource { } aspect DataAspect { // Intertype declaration onto Marker that shares the variable public C Marker.getContent() { // ERR return null; } } /* X.java:7 [error] can't override CC DataInterface.getContent() with CC Marker.getContent() return types don't match public CC getContent(); ^^^^^^^^^ X.java:16 [error] can't override CC DataInterface.getContent() with CC Marker.getContent() return types don't match public C Marker.getContent() { ^^^^^^^^^ 1. Two errors because both source locations reported (stupid code) when failing: parent: CC DataInterface.getContent() child : CC Marker.getContent() Both return types are type variable reference types (different ones though) parent: TypeVar CC extends Resource child : CC So parent discovered the wrong type variable (the wrong CC). parent is a ResolvedMemberImpl it is considered an 'existingmember' of the type DataInterface */