Skip to content

Commit

Permalink
Initial framework code for the wrapper generator.
Browse files Browse the repository at this point in the history
Related to #76.
  • Loading branch information
Monnoroch committed Jul 11, 2018
1 parent de61c4e commit 159f378
Show file tree
Hide file tree
Showing 6 changed files with 138 additions and 2 deletions.
3 changes: 1 addition & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ install:
- rustup component add rustfmt-preview
script:
- ci/check-format.sh
- cargo test --verbose --features libjvm
- (cd examples/java-lib && ./test.sh)
- ci/test.sh
matrix:
allow_failures:
- rust: nightly
Expand Down
5 changes: 5 additions & 0 deletions ci/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set -e

cargo test --verbose --features libjvm
(cd examples/java-lib && ./test.sh)
(cd generator && cargo test --verbose)
33 changes: 33 additions & 0 deletions generator/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions generator/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[package]
name = "rust-jni-generator"
version = "0.1.0"
authors = ["Monnoroch <[email protected]>"]

[dependencies]
quote = "0.6.3"
proc-macro2 = "0.4.6"

[lib]
proc-macro = true
76 changes: 76 additions & 0 deletions generator/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#![feature(proc_macro)]

extern crate proc_macro;
#[macro_use]
extern crate quote;
extern crate proc_macro2;

use proc_macro2::*;

/// Generate `rust-jni` wrappers for Java classes and interfaces.
///
/// TODO(#76): examples.
#[proc_macro]
pub fn java_generate(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let input: TokenStream = input.into();
java_generate_impl(input).into()
}

fn java_generate_impl(input: TokenStream) -> TokenStream {
generate(to_generator_data(parse_java_definition(input)))
}

#[derive(Debug, PartialEq, Eq, Clone)]
struct JavaDefinitions {}

fn parse_java_definition(_input: TokenStream) -> JavaDefinitions {
JavaDefinitions {}
}

#[cfg(test)]
mod parse_tests {
use super::*;

#[test]
fn empty() {
let input = quote!{};
assert_eq!(parse_java_definition(input), JavaDefinitions {});
}
}

#[derive(Debug, PartialEq, Eq, Clone)]
struct GeneratorData {}

fn to_generator_data(_definitions: JavaDefinitions) -> GeneratorData {
GeneratorData {}
}

#[cfg(test)]
mod to_generator_data_tests {
use super::*;

#[test]
fn empty() {
assert_eq!(to_generator_data(JavaDefinitions {}), GeneratorData {});
}
}

fn generate(_data: GeneratorData) -> TokenStream {
TokenStream::new()
}

#[cfg(test)]
mod generate_tests {
use super::*;

#[test]
fn empty() {
let expected = quote!{};
assert_tokens_equals(generate(GeneratorData {}), expected);
}
}

#[cfg(test)]
fn assert_tokens_equals(left: TokenStream, right: TokenStream) {
assert_eq!(format!("{:?}", left), format!("{:?}", right),);
}
12 changes: 12 additions & 0 deletions generator/tests/test.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
extern crate rust_jni_generator;

#[cfg(test)]
mod tests {
#[allow(unused_imports)]
use rust_jni_generator::*;

java_generate!{}

#[test]
fn test() {}
}

0 comments on commit 159f378

Please sign in to comment.