@@ -269,19 +269,36 @@ def ensure_subset(
269269 target_cache : Dict [str , Optional [ApiSurface ]] = {}
270270
271271 for index , class_name in enumerate (sorted (source_classes ), start = 1 ):
272- source_api = build_full_api (class_name , source_lookup , source_cache )
273- if source_api is None :
272+ source_info = source_lookup (class_name )
273+ if source_info is None :
274274 ok = False
275275 messages .append (f"Failed to read { class_name } from source classes" )
276276 continue
277277
278+ source_api = build_full_api (class_name , source_lookup , source_cache )
279+ assert source_api is not None
280+
278281 if index % 25 == 0 :
279282 log (f" Processed { index } /{ len (source_classes )} classes for { target_label } subset check..." )
280283
284+ target_info = target_lookup (class_name )
285+ if target_info is None :
286+ ok = False
287+ messages .append (f"Missing class in { target_label } : { class_name } " )
288+ continue
289+
281290 target_api = build_full_api (class_name , target_lookup , target_cache )
282291 if target_api is None :
283292 ok = False
284- messages .append (f"Missing class in { target_label } : { class_name } " )
293+ messages .append (f"Failed to read { class_name } from { target_label } " )
294+ continue
295+
296+ extra_supers = [stype for stype in source_info .supers if stype not in target_info .supers ]
297+ if extra_supers :
298+ ok = False
299+ messages .append (f"Incompatibilities for { class_name } against { target_label } :" )
300+ for stype in extra_supers :
301+ messages .append (f" - supertype: { stype } not present in { target_label } declaration" )
285302 continue
286303
287304 missing_methods , missing_fields = source_api .missing_from (target_api )
0 commit comments