Skip to content

Commit 7196755

Browse files
committed
Add custom destructor name.
1 parent d87ce22 commit 7196755

File tree

21 files changed

+150
-74
lines changed

21 files changed

+150
-74
lines changed

ci-script/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "ci-script"
33
version = "0.1.0"
4-
authors = ["Émile Grégoire <emile@automatak.com>"]
4+
authors = ["Émile Grégoire <emile@stepfunc.io>"]
55
edition = "2018"
66

77
[dependencies]

generators/c-oo-bindgen/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "c-oo-bindgen"
33
version = "0.1.0"
4-
authors = ["Émile Grégoire <emile@automatak.com>"]
4+
authors = ["Émile Grégoire <emile@stepfunc.io>"]
55
edition = "2018"
66

77
[dependencies]

generators/c-oo-bindgen/src/lib.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,15 @@ pub fn generate_doxygen(lib: &Library, config: &CBindgenConfig) -> FormattingRes
239239
stdin.write_all(b"HTML_OUTPUT = doc\n").unwrap();
240240
stdin.write_all(b"GENERATE_LATEX = NO\n").unwrap();
241241
stdin.write_all(b"EXTRACT_STATIC = YES\n").unwrap();
242-
stdin.write_all(b"INPUT = include\n").unwrap();
242+
stdin
243+
.write_all(
244+
&format!(
245+
"INPUT = {}/include\n",
246+
config.platforms.iter().next().unwrap().platform.to_string()
247+
)
248+
.into_bytes(),
249+
)
250+
.unwrap();
243251
}
244252

245253
command.wait()?;

generators/dotnet-oo-bindgen/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "dotnet-oo-bindgen"
33
version = "0.1.0"
4-
authors = ["Émile Grégoire <emile@automatak.com>"]
4+
authors = ["Émile Grégoire <emile@stepfunc.io>"]
55
edition = "2018"
66

77
[dependencies]

generators/dotnet-oo-bindgen/src/class.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) fn generate(
2020
})?;
2121

2222
f.writeln(&format!("public sealed class {}", classname))?;
23-
if class.is_manual_destruction() {
23+
if matches!(class.destruction_mode, DestructionMode::Dispose) {
2424
f.write(": IDisposable")?;
2525
}
2626

@@ -55,13 +55,7 @@ pub(crate) fn generate(
5555
}
5656

5757
if let Some(destructor) = &class.destructor {
58-
generate_destructor(
59-
f,
60-
&classname,
61-
destructor,
62-
class.is_manual_destruction(),
63-
lib,
64-
)?;
58+
generate_destructor(f, &classname, destructor, &class.destruction_mode, lib)?;
6559
f.newline()?;
6660
}
6761

@@ -177,14 +171,20 @@ fn generate_destructor(
177171
f: &mut dyn Printer,
178172
classname: &str,
179173
destructor: &NativeFunctionHandle,
180-
is_manual_destruction: bool,
174+
destruction_mode: &DestructionMode,
181175
lib: &Library,
182176
) -> FormattingResult<()> {
183-
if is_manual_destruction {
177+
if destruction_mode.is_manual_destruction() {
184178
// Public Dispose method
185179
documentation(f, |f| xmldoc_print(f, &destructor.doc, lib))?;
186180

187-
f.writeln("public void Dispose()")?;
181+
let method_name = if let DestructionMode::Custom(name) = destruction_mode {
182+
name.to_camel_case()
183+
} else {
184+
"Dispose".to_string()
185+
};
186+
187+
f.writeln(&format!("public void {}()", method_name))?;
188188
blocked(f, |f| {
189189
f.writeln("Dispose(true);")?;
190190
f.writeln("GC.SuppressFinalize(this);")

generators/dotnet-oo-bindgen/src/doc.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::conversion::*;
22
use heck::{CamelCase, MixedCase};
3+
use oo_bindgen::class::DestructionMode;
34
use oo_bindgen::doc::*;
45
use oo_bindgen::formatting::*;
56
use oo_bindgen::Library;
@@ -86,9 +87,18 @@ fn reference_print(
8687
))?;
8788
}
8889
DocReference::ClassDestructor(class_name) => {
90+
let class = lib.find_class(class_name).unwrap();
91+
92+
let method_name = if let DestructionMode::Custom(name) = &class.destruction_mode {
93+
name.to_camel_case()
94+
} else {
95+
"Dispose".to_string()
96+
};
97+
8998
f.write(&format!(
90-
"<see cref=\"{}.Dispose()\" />",
91-
class_name.to_camel_case()
99+
"<see cref=\"{}.{}()\" />",
100+
class_name.to_camel_case(),
101+
method_name,
92102
))?;
93103
}
94104
DocReference::Struct(struct_name) => {

generators/java-oo-bindgen/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "java-oo-bindgen"
33
version = "0.1.0"
4-
authors = ["Émile Grégoire <emile@automatak.com>"]
4+
authors = ["Émile Grégoire <emile@stepfunc.io>"]
55
edition = "2018"
66

77
[dependencies]

generators/java-oo-bindgen/src/java/class.rs

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub(crate) fn generate(
1616

1717
// Class definition
1818
f.writeln(&format!("public final class {}", classname))?;
19-
if class.is_manual_destruction() {
19+
if matches!(class.destruction_mode, DestructionMode::Dispose) {
2020
f.write(" implements AutoCloseable")?;
2121
}
2222

@@ -39,7 +39,7 @@ pub(crate) fn generate(
3939
}
4040

4141
if let Some(destructor) = &class.destructor {
42-
generate_destructor(f, destructor, class.is_manual_destruction(), lib)?;
42+
generate_destructor(f, destructor, &class.destruction_mode, lib)?;
4343
f.newline()?;
4444
}
4545

@@ -145,10 +145,10 @@ fn generate_constructor(
145145
fn generate_destructor(
146146
f: &mut dyn Printer,
147147
destructor: &NativeFunctionHandle,
148-
is_manual_destruction: bool,
148+
destruction_mode: &DestructionMode,
149149
lib: &Library,
150150
) -> FormattingResult<()> {
151-
if is_manual_destruction {
151+
if destruction_mode.is_manual_destruction() {
152152
documentation(f, |f| {
153153
// Print top-level documentation
154154
javadoc_print(f, &destructor.doc, lib)?;
@@ -164,12 +164,18 @@ fn generate_destructor(
164164
})?;
165165
}
166166

167-
if is_manual_destruction {
168-
// AutoCloseable implementation
169-
f.writeln("@Override")?;
170-
f.writeln("public void close()")?;
171-
} else {
172-
f.writeln("private void close()")?;
167+
match destruction_mode {
168+
DestructionMode::Automatic => {
169+
f.writeln("private void close()")?;
170+
}
171+
DestructionMode::Custom(name) => {
172+
f.writeln(&format!("public void {}()", name.to_mixed_case()))?;
173+
}
174+
DestructionMode::Dispose => {
175+
// AutoCloseable implementation
176+
f.writeln("@Override")?;
177+
f.writeln("public void close()")?;
178+
}
173179
}
174180

175181
blocked(f, |f| {
@@ -186,10 +192,16 @@ fn generate_destructor(
186192

187193
f.newline()?;
188194

189-
// Dispose method
195+
// Finalizer method
190196
f.writeln("@Override")?;
191197
f.writeln("public void finalize()")?;
192-
blocked(f, |f| f.writeln("this.close();"))
198+
blocked(f, |f| {
199+
if let DestructionMode::Custom(name) = destruction_mode {
200+
f.writeln(&format!("this.{}();", name.to_mixed_case()))
201+
} else {
202+
f.writeln("this.close();")
203+
}
204+
})
193205
}
194206

195207
fn generate_method(f: &mut dyn Printer, method: &Method, lib: &Library) -> FormattingResult<()> {

generators/java-oo-bindgen/src/java/doc.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use super::conversion::*;
22
use heck::{CamelCase, MixedCase, ShoutySnakeCase};
3+
use oo_bindgen::class::DestructionMode;
34
use oo_bindgen::doc::*;
45
use oo_bindgen::formatting::*;
56
use oo_bindgen::Library;
@@ -83,7 +84,19 @@ fn reference_print(
8384
))?;
8485
}
8586
DocReference::ClassDestructor(class_name) => {
86-
f.write(&format!("{{@link {}#close}}", class_name.to_camel_case()))?;
87+
let class = lib.find_class(class_name).unwrap();
88+
89+
let method_name = if let DestructionMode::Custom(name) = &class.destruction_mode {
90+
name.to_mixed_case()
91+
} else {
92+
"close".to_string()
93+
};
94+
95+
f.write(&format!(
96+
"{{@link {}#{}}}",
97+
class_name.to_camel_case(),
98+
method_name
99+
))?;
87100
}
88101
DocReference::Struct(struct_name) => {
89102
f.write(&format!("{{@link {}}}", struct_name.to_camel_case()))?;

generators/rust-oo-bindgen/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22
name = "rust-oo-bindgen"
33
version = "0.1.0"
4-
authors = ["Émile Grégoire <emile@automatak.com>"]
4+
authors = ["Émile Grégoire <emile@stepfunc.io>"]
55
edition = "2018"
66

77
[dependencies]

0 commit comments

Comments
 (0)