From 5787a4b4fba7a5ef3075b30d941239e17ef4fa4f Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sat, 10 Dec 2016 22:49:41 +0200 Subject: [PATCH] Make Java compilation work with inner classes. Closes #1157. --- mesonbuild/backend/ninjabackend.py | 6 ++++-- .../java/4 inner class/com/mesonbuild/Simple.java | 15 +++++++++++++++ test cases/java/4 inner class/meson.build | 5 +++++ 3 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test cases/java/4 inner class/com/mesonbuild/Simple.java create mode 100644 test cases/java/4 inner class/meson.build diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index b00265626..d8dc333ce 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -803,8 +803,10 @@ int dummy; if e != '': commands.append(main_class) commands.append(self.get_target_filename(target)) - for cls in class_list: - commands += ['-C', self.get_target_private_dir(target), cls] + # Java compilation can produce an arbitrary number of output + # class files for a single source file. Thus tell jar to just + # grab everything in the final package. + commands += ['-C', self.get_target_private_dir(target), '.'] elem = NinjaBuildElement(self.all_outputs, outname_rel, jar_rule, []) elem.add_dep(class_dep_list) elem.add_item('ARGS', commands) diff --git a/test cases/java/4 inner class/com/mesonbuild/Simple.java b/test cases/java/4 inner class/com/mesonbuild/Simple.java new file mode 100644 index 000000000..fd0e0bfaa --- /dev/null +++ b/test cases/java/4 inner class/com/mesonbuild/Simple.java @@ -0,0 +1,15 @@ +package com.mesonbuild; + +class Simple { + class Inner { + public String getString() { + return "Inner class is working.\n"; + } + } + + public static void main(String [] args) { + Simple s = new Simple(); + Simple.Inner ic = s.new Inner(); + System.out.println(ic.getString()); + } +} diff --git a/test cases/java/4 inner class/meson.build b/test cases/java/4 inner class/meson.build new file mode 100644 index 000000000..bed5c0f67 --- /dev/null +++ b/test cases/java/4 inner class/meson.build @@ -0,0 +1,5 @@ +project('simplejava', 'java') + +javaprog = jar('myprog', 'com/mesonbuild/Simple.java', + main_class : 'com.mesonbuild.Simple') +test('mytest', javaprog)