Expand description
IDL4 → Java-17-Source-Codegen (OMG IDL4-Java-Mapping v1.0).
Crate zerodds-idl-java — Java-Sprach-Bindings, Cluster C5.4-a (Foundation)
plus C5.4-b (Bitset/Bitmask, Multi-Inheritance, Annotation-Bridge,
TopicType-Marker).
Safety classification: SAFE (std-only). Reines Build-Zeit-Tool —
forbid(unsafe_code), kein no_std-Use-Case.
§Scope (C5.4-a)
- Block A: Header-Layout (
package, Class-Modifiers, FQN-Imports). - Block B: Primitive-Mapping (boolean → boolean, octet → byte, …, inkl. unsigned-Workaround per Spec §6).
- Block C: struct → public class (Bean-Pattern), enum, union →
sealed interface + case-records, typedef → Wrapper-Class,
sequence →
java.util.List<T>, array → Java-Array, single inheritance →extends. - Block D: Exception →
class X extends RuntimeException.
§Scope (C5.4-b — Cluster E)
- Bitmask → Wrapper-Class mit Inner-Enum
FlagundEnumSet<Flag> bits(Spec idl4-java-1.0 §6.3). - Bitset (≤ 64 Bit kumulativ) → Wrapper-Class mit
long bitsund Mask/Shift-Accessors pro Bitfield. > 64 Bit → harter Fehlererror::JavaGenError::UnsupportedConstruct. - Multi-Inheritance via Interface-Pattern: jeder Struct, der selbst
Basis eines anderen Structs ist, bekommt ein
<Name>Interface.java-Companion. Sub-Sub-Klassen verwendenextends DirectBase implements GrandparentInterface, .... @value(N)auf Enum-Members → expliziterint-Konstruktor-Wert statt Auto-Ordinal.- Annotation-Bridge:
@key,@id(N),@optional,@must_understand,@external,@nested,@extensibility(...)→ Java-Annotations unterorg.zerodds.types.*(sieheruntime/). - DDS-Java-PSM-Stub: jeder Top-Level-
structohne@nestedimplementiertorg.omg.dds.topic.TopicType<SelfType>.
§Bewusst nicht im Crate
- Cluster F-H: ServiceEnvironment-SPI, Time/Duration/Status/QoS/ Listener-Codegen (C5.5).
- Reflection-basierte TypeRep (java-psm §8) — Stretch-Goal.
- JNI-Bridge zu Rust-Core (C5.5).
interface,valuetype,fixed,any,map<K,V>→ kommen mitzerodds-rpc-java.
§Multi-File-Output
Java erfordert eine .java-Datei pro top-level public class.
Daher gibt generate_java_files eine Vec<JavaFile> zurueck;
jede JavaFile hat package-path + class-name + source.
§Beispiel
use zerodds_idl::config::ParserConfig;
use zerodds_idl_java::{generate_java_files, JavaGenOptions};
let ast = zerodds_idl::parse(
"module M { struct S { long x; }; };",
&ParserConfig::default(),
)
.expect("parse");
let files = generate_java_files(&ast, &JavaGenOptions::default()).expect("gen");
// POJO + TypeSupport (zerodds-xcdr2-java-1.0 §4).
assert_eq!(files.len(), 2);
let pojo = files.iter().find(|f| f.class_name == "S").expect("POJO");
assert!(pojo.source.contains("package m;"));
assert!(pojo.source.contains("public class S"));
assert!(files.iter().any(|f| f.class_name == "STypeSupport"));Re-exports§
pub use emitter::JavaFile;pub use error::JavaGenError;
Modules§
- emitter
- AST-Walker, der Java-17-Source-Files emittiert.
- error
- Fehler-Typen fuer den IDL→Java-Codegen.
- keywords
- Java-17-Keywords (inkl. Restricted Identifiers wie
record,sealed,var,yield). - rpc
- IDL-Service → Java-RPC-Codegen (DDS-RPC 1.0 §7.11.2 — Java-PSM).
- type_
map - Mapping IDL-Primitive → Java-Type-Strings.
Structs§
- Java
GenOptions - Konfiguration des Java-Code-Generators.
Functions§
- generate_
java_ files - Erzeugt eine Liste von Java-Source-Files aus einer IDL-Specification.
- generate_
java_ files_ with_ amqp - Convenience-Variante mit aktiviertem
emit_amqp_helpers-Flag. - generate_
java_ files_ with_ corba_ traits - Convenience-Variante mit aktiviertem
emit_corba_traits-Flag.