1616from typing import Dict , Iterable , List , Optional , Set , Tuple
1717
1818
19+ def log (message : str ) -> None :
20+ """Emit a progress message immediately."""
21+
22+ print (message , flush = True )
23+
24+
1925Member = Tuple [str , str , bool , str ]
2026"""
2127A member descriptor in the form `(name, descriptor, is_static, kind)`.
@@ -145,14 +151,17 @@ def ensure_subset(
145151 ok = True
146152 messages : List [str ] = []
147153
148- for class_name in sorted (source_classes ):
154+ for index , class_name in enumerate ( sorted (source_classes ), start = 1 ):
149155 try :
150156 source_api = collect_class_api_from_file (class_name , source_root , javap_cmd )
151157 except JavapError as exc :
152158 ok = False
153159 messages .append (f"Failed to read { class_name } from { source_root } : { exc } " )
154160 continue
155161
162+ if index % 25 == 0 :
163+ log (f" Processed { index } /{ len (source_classes )} classes for { target_label } subset check..." )
164+
156165 target_api = target_lookup (class_name )
157166 if target_api is None :
158167 ok = False
@@ -172,8 +181,10 @@ def ensure_subset(
172181def collect_javaapi_map (javaapi_root : str , javap_cmd : str ) -> Dict [str , ApiSurface ]:
173182 classes = discover_classes (javaapi_root )
174183 api_map : Dict [str , ApiSurface ] = {}
175- for class_name in classes :
184+ for index , class_name in enumerate ( classes , start = 1 ) :
176185 api_map [class_name ] = collect_class_api_from_file (class_name , javaapi_root , javap_cmd )
186+ if index % 25 == 0 :
187+ log (f" Indexed { index } /{ len (classes )} vm/JavaAPI classes..." )
177188 return api_map
178189
179190
@@ -227,7 +238,11 @@ def main(argv: Optional[Iterable[str]] = None) -> int:
227238 parser .add_argument ("--extra-report" , required = True , help = "File path to write the extra API report" )
228239 parser .add_argument (
229240 "--javap" ,
230- default = os .path .join (os .environ .get ("JAVA_HOME" , "" ), "bin" , "javap" ),
241+ default = (
242+ os .path .join (os .environ .get ("JAVA_HOME" , "" ), "bin" , "javap" )
243+ if os .environ .get ("JAVA_HOME" )
244+ else "javap"
245+ ),
231246 help = "Path to the javap executable from Java SE 11" ,
232247 )
233248 args = parser .parse_args (argv )
@@ -239,7 +254,10 @@ def main(argv: Optional[Iterable[str]] = None) -> int:
239254 print (f"No class files found under { args .cldc_classes } " , file = sys .stderr )
240255 return 1
241256
257+ log (f"Discovered { len (cldc_classes )} CLDC11 classes; building API maps..." )
258+
242259 javaapi_map = collect_javaapi_map (args .javaapi_classes , javap_cmd )
260+ log (f"Collected API surface for { len (javaapi_map )} vm/JavaAPI classes" )
243261
244262 def jdk_lookup (name : str ) -> Optional [ApiSurface ]:
245263 try :
@@ -250,6 +268,7 @@ def jdk_lookup(name: str) -> Optional[ApiSurface]:
250268 def javaapi_lookup (name : str ) -> Optional [ApiSurface ]:
251269 return javaapi_map .get (name )
252270
271+ log ("Validating CLDC11 API against Java SE 11..." )
253272 java_ok , java_messages = ensure_subset (
254273 cldc_classes ,
255274 args .cldc_classes ,
@@ -258,6 +277,7 @@ def javaapi_lookup(name: str) -> Optional[ApiSurface]:
258277 javap_cmd ,
259278 )
260279
280+ log ("Validating CLDC11 API against vm/JavaAPI..." )
261281 api_ok , api_messages = ensure_subset (
262282 cldc_classes ,
263283 args .cldc_classes ,
@@ -268,6 +288,7 @@ def javaapi_lookup(name: str) -> Optional[ApiSurface]:
268288
269289 cldc_map = {name : collect_class_api_from_file (name , args .cldc_classes , javap_cmd ) for name in cldc_classes }
270290 write_extra_report (cldc_map , javaapi_map , args .extra_report )
291+ log (f"Wrote extra API report to { args .extra_report } " )
271292
272293 messages = java_messages + api_messages
273294 if messages :
0 commit comments