blob: 3f806f6454042cc062ba8ea557d2db3e355f5c15 [file]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:io';
import 'package:jnigen/jnigen.dart';
import 'package:jnigen/src/logging/logging.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart';
const testName = 'simple_package_test';
final testRoot = join('test', testName);
final javaPath = join(testRoot, 'java');
const preamble = '''
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
''';
final javaPrefix = join('com', 'github', 'dart_lang', 'jnigen');
final javaFiles = [
join(javaPrefix, 'annotations', 'Annotated.java'),
join(javaPrefix, 'annotations', 'JsonSerializable.java'),
join(javaPrefix, 'annotations', 'MyDataClass.java'),
join(javaPrefix, 'annotations', 'NotNull.java'),
join(javaPrefix, 'annotations', 'Nullable.java'),
join(javaPrefix, 'enums', 'Colors.java'),
join(javaPrefix, 'generics', 'MyStack.java'),
join(javaPrefix, 'generics', 'MyMap.java'),
join(javaPrefix, 'generics', 'GenericTypeParams.java'),
join(javaPrefix, 'generics', 'GrandParent.java'),
join(javaPrefix, 'generics', 'StringStack.java'),
join(javaPrefix, 'generics', 'StringKeyedMap.java'),
join(javaPrefix, 'generics', 'StringMap.java'),
join(javaPrefix, 'generics', 'StringValuedMap.java'),
join(javaPrefix, 'generics', 'GenericConstructor.java'),
join(javaPrefix, 'inheritance', 'BaseClass.java'),
join(javaPrefix, 'inheritance', 'BaseInterface.java'),
join(javaPrefix, 'inheritance', 'BaseGenericInterface.java'),
join(javaPrefix, 'inheritance', 'Child.java'),
join(javaPrefix, 'inheritance', 'DerivedInterface.java'),
join(javaPrefix, 'inheritance', 'GenericDerivedClass.java'),
join(javaPrefix, 'inheritance', 'Animal.java'),
join(javaPrefix, 'inheritance', 'Mammal.java'),
join(javaPrefix, 'inheritance', 'FourLegged.java'),
join(javaPrefix, 'inheritance', 'Dog.java'),
join(javaPrefix, 'inheritance', 'Furry.java'),
join(javaPrefix, 'inheritance', 'ShibaInu.java'),
join(javaPrefix, 'inheritance', 'SpecificDerivedClass.java'),
join(javaPrefix, 'interfaces', 'GenericInterface.java'),
join(javaPrefix, 'interfaces', 'InheritedFromMyInterface.java'),
join(javaPrefix, 'interfaces', 'InheritedFromMyRunnable.java'),
join(javaPrefix, 'interfaces', 'MyInterface.java'),
join(javaPrefix, 'interfaces', 'MyInterfaceConsumer.java'),
join(javaPrefix, 'interfaces', 'MyRunnable.java'),
join(javaPrefix, 'interfaces', 'MyRunnableRunner.java'),
join(javaPrefix, 'interfaces', 'StringConversionException.java'),
join(javaPrefix, 'interfaces', 'StringConverter.java'),
join(javaPrefix, 'interfaces', 'StringConverterConsumer.java'),
join(javaPrefix, 'pkg2', 'C2.java'),
join(javaPrefix, 'pkg2', 'Example.java'),
join(javaPrefix, 'regressions', 'R693.java'),
join(javaPrefix, 'regressions', 'R2250.java'),
join(javaPrefix, 'simple_package', 'Example.java'),
join(javaPrefix, 'simple_package', 'Exceptions.java'),
join(javaPrefix, 'simple_package', 'Fields.java'),
];
void compileJavaSources(String workingDir, List<String> files) async {
final procRes = Process.runSync('javac', files, workingDirectory: workingDir);
if (procRes.exitCode != 0) {
log.fatal('javac exited with ${procRes.exitCode}\n'
'${procRes.stderr}');
}
}
Config getConfig({SummarizerBackend backend = SummarizerBackend.asm}) {
compileJavaSources(javaPath, javaFiles);
final dartWrappersRoot = Uri.directory(
join(testRoot, 'bindings'),
);
final config = Config(
sourcePath: [Uri.directory(javaPath)],
classPath: [Uri.directory(javaPath)],
summarizerOptions: SummarizerOptions(backend: backend),
classes: [
'com.github.dart_lang.jnigen.simple_package',
'com.github.dart_lang.jnigen.pkg2',
'com.github.dart_lang.jnigen.enums',
'com.github.dart_lang.jnigen.generics',
'com.github.dart_lang.jnigen.interfaces',
'com.github.dart_lang.jnigen.inheritance',
'com.github.dart_lang.jnigen.annotations',
'com.github.dart_lang.jnigen.regressions',
],
logLevel: Level.INFO,
nonNullAnnotations: ['com.github.dart_lang.jnigen.annotations.NotNull'],
nullableAnnotations: ['com.github.dart_lang.jnigen.annotations.Nullable'],
customClassBody: {
'com.github.dart_lang.jnigen.interfaces.MyInterface': r'''
static core$_.Map<core$_.int, $MyInterface> get $impls => _$impls;
''',
'com.github.dart_lang.jnigen.interfaces.MyRunnable': r'''
static core$_.Map<core$_.int, $MyRunnable> get $impls => _$impls;
'''
},
outputConfig: OutputConfig(
dartConfig: DartCodeOutputConfig(
path: dartWrappersRoot.resolve('simple_package.dart'),
structure: OutputStructure.singleFile,
),
),
preamble: preamble,
);
return config;
}
void main() async {
await generateJniBindings(getConfig());
}