@@ -67,48 +67,62 @@ public class DumpApi {
6767 private static final boolean GROUP_BY_PACKAGE = true ; // Group by package like Python modules
6868
6969 // Mapping from Java package/class to Python module file.
70- // Based on PYTHON-STRUCTURE-PLAN .md.
70+ // Based on notes/python-package-structure .md.
7171 private static final Map <String , String > PACKAGE_TO_MODULE = new HashMap <>();
7272 static {
7373 // Core API classes.
74- PACKAGE_TO_MODULE .put ("org.apposed.appose.Appose" , "__init__.pyi" );
75- PACKAGE_TO_MODULE .put ("org.apposed.appose.Environment" , "environment.pyi" );
76- PACKAGE_TO_MODULE .put ("org.apposed.appose.Builder" , "builder.pyi" );
77- PACKAGE_TO_MODULE .put ("org.apposed.appose.BuilderFactory" , "builder.pyi" );
78- PACKAGE_TO_MODULE .put ("org.apposed.appose.Service" , "service.pyi" );
79- PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.Task" , "service.pyi" );
80- PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.TaskStatus" , "service.pyi" );
81- PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.RequestType" , "service.pyi" );
82- PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.ResponseType" , "service.pyi" );
83- PACKAGE_TO_MODULE .put ("org.apposed.appose.TaskEvent" , "service.pyi" );
84- PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray" , "types.pyi" );
85- PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.DType" , "types.pyi" );
86- PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Shape" , "types.pyi" );
87- PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Order" , "types.pyi" );
88- PACKAGE_TO_MODULE .put ("org.apposed.appose.SharedMemory" , "types.pyi" );
74+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Appose" , "__init__.api" );
75+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Environment" , "environment.api" );
76+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service" , "service.api" );
77+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.Task" , "service.api" );
78+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.TaskStatus" , "service.api" );
79+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.RequestType" , "service.api" );
80+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.ResponseType" , "service.api" );
81+ PACKAGE_TO_MODULE .put ("org.apposed.appose.TaskEvent" , "service.api" );
82+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray" , "shm.api" );
83+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.DType" , "shm.api" );
84+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Shape" , "shm.api" );
85+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Order" , "shm.api" );
86+ PACKAGE_TO_MODULE .put ("org.apposed.appose.SharedMemory" , "shm.api" );
8987
9088 // Subsystem packages - all classes in package go to same file.
91- PACKAGE_TO_MODULE .put ("org.apposed.appose.builder" , "builder.pyi" );
92- PACKAGE_TO_MODULE .put ("org.apposed.appose.scheme" , "scheme.pyi" );
93- PACKAGE_TO_MODULE .put ("org.apposed.appose.syntax" , "syntax.pyi" );
94-
95- // Utility packages.
96- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Platforms" , "platform.pyi" );
97- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Proxies" , "proxy.pyi" );
98- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.FilePaths" , "filepath.pyi" );
99- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Processes" , "process.pyi" );
89+ PACKAGE_TO_MODULE .put ("org.apposed.appose.scheme" , "scheme.api" );
90+ PACKAGE_TO_MODULE .put ("org.apposed.appose.syntax" , "syntax.api" );
91+
92+ // Builder subsystem - core in builder/__init__.api, implementations in separate files.
93+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Builder" , "builder/__init__.api" );
94+ PACKAGE_TO_MODULE .put ("org.apposed.appose.BuilderFactory" , "builder/__init__.api" );
95+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.Builders" , "builder/__init__.api" );
96+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.BaseBuilder" , "builder/__init__.api" );
97+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.DynamicBuilder" , "builder/__init__.api" );
98+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.SimpleBuilder" , "builder/__init__.api" );
99+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.MambaBuilder" , "builder/mamba.api" );
100+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.MambaBuilderFactory" , "builder/mamba.api" );
101+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.PixiBuilder" , "builder/pixi.api" );
102+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.PixiBuilderFactory" , "builder/pixi.api" );
103+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.UvBuilder" , "builder/uv.api" );
104+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.UvBuilderFactory" , "builder/uv.api" );
105+
106+ // Utility packages - singular naming.
107+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.FilePaths" , "util/filepath.api" );
108+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Platforms" , "util/platform.api" );
109+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Processes" , "util/process.api" );
110+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Proxies" , "util/proxy.api" );
111+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Types" , "util/types.api" );
100112
101113 // Workers.
102- PACKAGE_TO_MODULE .put ("org.apposed.appose.GroovyWorker" , "groovy_worker.pyi " );
114+ PACKAGE_TO_MODULE .put ("org.apposed.appose.GroovyWorker" , "groovy_worker.api " );
103115 }
104116
105117 // Static utility classes to dump as module-level functions (not as classes).
106118 private static final Set <String > STATIC_UTILITY_CLASSES = new HashSet <>(Arrays .asList (
107119 "org.apposed.appose.Appose" ,
120+ "org.apposed.appose.builder.Builders" ,
108121 "org.apposed.appose.util.FilePaths" ,
109122 "org.apposed.appose.util.Platforms" ,
110123 "org.apposed.appose.util.Processes" ,
111- "org.apposed.appose.util.Proxies"
124+ "org.apposed.appose.util.Proxies" ,
125+ "org.apposed.appose.util.Types"
112126 ));
113127
114128 // Classes to exclude from API dump (internal implementation details).
@@ -124,7 +138,6 @@ public class DumpApi {
124138 "org.apposed.appose.shm.LibC" ,
125139 // Utility classes (keeping discovery/factory classes, excluding internal helpers).
126140 "org.apposed.appose.util.Plugins" ,
127- "org.apposed.appose.util.Types" ,
128141 // Test utility classes.
129142 "org.apposed.appose.TestBase"
130143 ));
@@ -136,7 +149,7 @@ public static void main(String[] args) throws Exception {
136149 System .err .println ("Usage: java DumpApi <output-dir> <source-dir> [source-dir2 ...]" );
137150 System .err .println ();
138151 System .err .println ("Dumps Java API in Python stub format for comparison with appose-python." );
139- System .err .println ("Output will be written to <output-dir>/appose/*.pyi files." );
152+ System .err .println ("Output will be written to <output-dir>/appose/*.api files." );
140153 System .exit (1 );
141154 }
142155
@@ -207,6 +220,10 @@ public static void main(String[] args) throws Exception {
207220 List <Map .Entry <String , TypeDeclaration <?>>> types = moduleEntry .getValue ();
208221
209222 Path outputFile = outputDir .resolve (moduleName );
223+
224+ // Create parent directories if needed.
225+ Files .createDirectories (outputFile .getParent ());
226+
210227 try (PrintWriter writer = new PrintWriter (new FileWriter (outputFile .toFile ()))) {
211228 currentWriter = writer ;
212229
0 commit comments