@@ -71,55 +71,69 @@ public class DumpApi {
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__.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" );
74+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Appose" , "appose/ __init__.api" );
75+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Environment" , "appose/ environment.api" );
76+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service" , "appose/ service.api" );
77+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.Task" , "appose/ service.api" );
78+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.TaskStatus" , "appose/ service.api" );
79+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.RequestType" , "appose/ service.api" );
80+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Service.ResponseType" , "appose/ service.api" );
81+ PACKAGE_TO_MODULE .put ("org.apposed.appose.TaskEvent" , "appose/ service.api" );
82+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray" , "appose/ shm.api" );
83+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.DType" , "appose/ shm.api" );
84+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Shape" , "appose/ shm.api" );
85+ PACKAGE_TO_MODULE .put ("org.apposed.appose.NDArray.Order" , "appose/ shm.api" );
86+ PACKAGE_TO_MODULE .put ("org.apposed.appose.SharedMemory" , "appose/ shm.api" );
8787
8888 // Subsystem packages - all classes in package go to same file.
89- PACKAGE_TO_MODULE .put ("org.apposed.appose.scheme" , "scheme.api" );
90- PACKAGE_TO_MODULE .put ("org.apposed.appose.syntax" , "syntax.api" );
89+ PACKAGE_TO_MODULE .put ("org.apposed.appose.scheme" , "appose/ scheme.api" );
90+ PACKAGE_TO_MODULE .put ("org.apposed.appose.syntax" , "appose/ syntax.api" );
9191
9292 // 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" );
93+ PACKAGE_TO_MODULE .put ("org.apposed.appose.Builder" , "appose/ builder/__init__.api" );
94+ PACKAGE_TO_MODULE .put ("org.apposed.appose.BuilderFactory" , "appose/ builder/__init__.api" );
95+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.Builders" , "appose/ builder/__init__.api" );
96+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.BaseBuilder" , "appose/ builder/__init__.api" );
97+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.DynamicBuilder" , "appose/ builder/__init__.api" );
98+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.SimpleBuilder" , "appose/ builder/__init__.api" );
99+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.MambaBuilder" , "appose/ builder/mamba.api" );
100+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.MambaBuilderFactory" , "appose/ builder/mamba.api" );
101+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.PixiBuilder" , "appose/ builder/pixi.api" );
102+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.PixiBuilderFactory" , "appose/ builder/pixi.api" );
103+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.UvBuilder" , "appose/ builder/uv.api" );
104+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.UvBuilderFactory" , "appose/ builder/uv.api" );
105105
106106 // Tool subsystem - core in tool/__init__.api, implementations in separate files.
107- PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Tool" , "tool/__init__.api" );
108- PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Pixi" , "tool/pixi.api" );
109- PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Mamba" , "tool/mamba.api" );
110- PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Uv" , "tool/uv.api" );
107+ PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Tool" , "appose/ tool/__init__.api" );
108+ PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Pixi" , "appose/ tool/pixi.api" );
109+ PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Mamba" , "appose/ tool/mamba.api" );
110+ PACKAGE_TO_MODULE .put ("org.apposed.appose.tool.Uv" , "appose/ tool/uv.api" );
111111
112112 // Utility packages - singular naming.
113- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Downloads" , "util/download.api" );
114- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Environments" , "util/environment.api" );
115- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.FilePaths" , "util/filepath.api" );
116- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Platforms" , "util/platform.api" );
117- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Processes" , "util/process.api" );
118- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Proxies" , "util/proxy.api" );
119- PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Types" , "util/types.api" );
113+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Downloads" , "appose/ util/download.api" );
114+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Environments" , "appose/ util/environment.api" );
115+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.FilePaths" , "appose/ util/filepath.api" );
116+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Platforms" , "appose/ util/platform.api" );
117+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Processes" , "appose/ util/process.api" );
118+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Proxies" , "appose/ util/proxy.api" );
119+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.Types" , "appose/ util/types.api" );
120120
121121 // Workers.
122- PACKAGE_TO_MODULE .put ("org.apposed.appose.GroovyWorker" , "groovy_worker.api" );
122+ PACKAGE_TO_MODULE .put ("org.apposed.appose.GroovyWorker" , "appose/groovy_worker.api" );
123+
124+ // Test classes - map to tests/*.api files (aligned with Python structure).
125+ PACKAGE_TO_MODULE .put ("org.apposed.appose.ServiceTest" , "tests/test_service.api" );
126+ PACKAGE_TO_MODULE .put ("org.apposed.appose.SharedMemoryTest" , "tests/test_shm.api" );
127+ PACKAGE_TO_MODULE .put ("org.apposed.appose.SyntaxTest" , "tests/test_syntax.api" );
128+ PACKAGE_TO_MODULE .put ("org.apposed.appose.TaskExceptionTest" , "tests/test_task_exception.api" );
129+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.MambaBuilderTest" , "tests/builder/test_mamba.api" );
130+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.PixiBuilderTest" , "tests/builder/test_pixi.api" );
131+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.SimpleBuilderTest" , "tests/builder/test_simple.api" );
132+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.UvBuilderTest" , "tests/builder/test_uv.api" );
133+ PACKAGE_TO_MODULE .put ("org.apposed.appose.builder.WrapTest" , "tests/builder/test_wrap.api" );
134+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.FilePathsTest" , "tests/util/test_filepath.api" );
135+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.TypesTest" , "tests/util/test_types.api" );
136+ PACKAGE_TO_MODULE .put ("org.apposed.appose.util.VersionsTest" , "tests/util/test_versions.api" );
123137 }
124138
125139 // Static utility classes to dump as module-level functions (not as classes).
@@ -132,7 +146,20 @@ public class DumpApi {
132146 "org.apposed.appose.util.Platforms" ,
133147 "org.apposed.appose.util.Processes" ,
134148 "org.apposed.appose.util.Proxies" ,
135- "org.apposed.appose.util.Types"
149+ "org.apposed.appose.util.Types" ,
150+ // Test classes - dump as module-level test functions.
151+ "org.apposed.appose.ServiceTest" ,
152+ "org.apposed.appose.SharedMemoryTest" ,
153+ "org.apposed.appose.SyntaxTest" ,
154+ "org.apposed.appose.TaskExceptionTest" ,
155+ "org.apposed.appose.builder.MambaBuilderTest" ,
156+ "org.apposed.appose.builder.PixiBuilderTest" ,
157+ "org.apposed.appose.builder.SimpleBuilderTest" ,
158+ "org.apposed.appose.builder.UvBuilderTest" ,
159+ "org.apposed.appose.builder.WrapTest" ,
160+ "org.apposed.appose.util.FilePathsTest" ,
161+ "org.apposed.appose.util.TypesTest" ,
162+ "org.apposed.appose.util.VersionsTest"
136163 ));
137164
138165 // Classes to exclude from API dump (internal implementation details).
@@ -159,12 +186,12 @@ public static void main(String[] args) throws Exception {
159186 System .err .println ("Usage: java DumpApi <output-dir> <source-dir> [source-dir2 ...]" );
160187 System .err .println ();
161188 System .err .println ("Dumps Java API in Python stub format for comparison with appose-python." );
162- System .err .println ("Output will be written to <output-dir>/appose/ *.api files." );
189+ System .err .println ("Output will be written to <output-dir>/*.api files." );
163190 System .exit (1 );
164191 }
165192
166193 String outputDirArg = args [0 ];
167- Path outputDir = Paths .get (outputDirArg , "appose" );
194+ Path outputDir = Paths .get (outputDirArg );
168195
169196 // Create output directory if needed.
170197 Files .createDirectories (outputDir );
@@ -333,11 +360,17 @@ static void dumpStaticUtilityAsModuleFunctions(TypeDeclaration<?> type) {
333360 }
334361 }
335362
336- // Output static fields as module-level constants (public and private if INCLUDE_PRIVATE).
363+ // Check if this is a test class (affects how we handle fields and methods).
364+ // Test classes have instance fields/methods that should be dumped as module-level constants/functions.
365+ boolean isTestClass = isTestClass (type );
366+
367+ // Output fields as module-level constants (static fields for utilities, instance fields for test classes).
337368 for (BodyDeclaration <?> member : type .getMembers ()) {
338369 if (member instanceof FieldDeclaration ) {
339370 FieldDeclaration field = (FieldDeclaration ) member ;
340- if (field .isStatic () && (field .isPublic () || INCLUDE_PRIVATE )) {
371+ // Include static fields for utilities, or instance/static fields for test classes.
372+ boolean includeField = (field .isStatic () || isTestClass ) && (field .isPublic () || INCLUDE_PRIVATE );
373+ if (includeField ) {
341374 for (VariableDeclarator var : field .getVariables ()) {
342375 String fieldName = nonClassName (field , var ).toUpperCase ();
343376 String fieldType = pythonType (var .getType ());
@@ -347,12 +380,14 @@ static void dumpStaticUtilityAsModuleFunctions(TypeDeclaration<?> type) {
347380 }
348381 }
349382
350- // Collect all static methods (public and private if INCLUDE_PRIVATE ).
383+ // Collect methods ( static methods for utilities, instance methods for test classes ).
351384 Map <String , List <MethodDeclaration >> methodsByName = new LinkedHashMap <>();
352385 for (BodyDeclaration <?> member : type .getMembers ()) {
353386 if (member instanceof MethodDeclaration ) {
354387 MethodDeclaration method = (MethodDeclaration ) member ;
355- if (method .isStatic () && (method .isPublic () || INCLUDE_PRIVATE )) {
388+ // Include static methods for utilities, or instance methods for test classes.
389+ boolean includeMethod = (method .isStatic () || isTestClass ) && (method .isPublic () || INCLUDE_PRIVATE );
390+ if (includeMethod ) {
356391 String methodName = nonClassName (method );
357392 methodsByName .computeIfAbsent (methodName , k -> new ArrayList <>()).add (method );
358393 }
0 commit comments