Skip to main content

Crate zerodds_idl_java

Crate zerodds_idl_java 

Source
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 Flag und EnumSet<Flag> bits (Spec idl4-java-1.0 §6.3).
  • Bitset (≤ 64 Bit kumulativ) → Wrapper-Class mit long bits und Mask/Shift-Accessors pro Bitfield. > 64 Bit → harter Fehler error::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 verwenden extends DirectBase implements GrandparentInterface, ....
  • @value(N) auf Enum-Members → expliziter int-Konstruktor-Wert statt Auto-Ordinal.
  • Annotation-Bridge: @key, @id(N), @optional, @must_understand, @external, @nested, @extensibility(...) → Java-Annotations unter org.zerodds.types.* (siehe runtime/).
  • DDS-Java-PSM-Stub: jeder Top-Level-struct ohne @nested implementiert org.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 mit zerodds-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§

JavaGenOptions
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.