66import java .nio .charset .StandardCharsets ;
77import java .nio .file .Path ;
88import java .util .Arrays ;
9+ import java .util .List ;
910import java .util .Map ;
1011import java .util .Objects ;
1112import java .util .regex .Pattern ;
@@ -25,8 +26,6 @@ public abstract class GrammarFilesTask extends DefaultTask {
2526
2627 private String grammarName ;
2728
28- private File [] grammarFiles ;
29-
3029 private String interopName ;
3130
3231 private String libraryName ;
@@ -63,18 +62,6 @@ public final void setGrammarName(String grammarName) {
6362 this .grammarName = grammarName ;
6463 }
6564
66- /** Get the source files of the grammar. */
67- @ InputFiles
68- @ PathSensitive (PathSensitivity .RELATIVE )
69- public final File [] getGrammarFiles () {
70- return grammarFiles ;
71- }
72-
73- /** Set the source files of the grammar. */
74- public final void setGrammarFiles (File [] grammarFiles ) {
75- this .grammarFiles = grammarFiles ;
76- }
77-
7865 /** Get the name of the C interop def file. */
7966 @ Input
8067 public final String getInteropName () {
@@ -281,9 +268,8 @@ jniPrefix, jniTransform(name), name
281268
282269 private void generateCmakeLists (Path srcDir ) throws GradleException {
283270 var jniBinding = srcDir .resolve ("jni" ).resolve ("binding.c" );
284- var files = Arrays .stream (grammarFiles ).map (file -> relative (file .toPath ()).toString ());
285271 var includeDir = relative (grammarDir .toPath ().resolve ("bindings/c" ));
286- var sources = relative ( jniBinding ) + " " + String .join ( " " , files . toList ());
272+ var sources = String .format ( "%s %s " , relative ( jniBinding ), srcFiles ());
287273 var template = readResource ("CMakeLists.txt.in" )
288274 .replace ("@LIBRARY@" , libraryName )
289275 .replace ("@INCLUDE@" , includeDir .toString ())
@@ -305,6 +291,15 @@ private Path relative(Path file) {
305291 return getGeneratedSrc ().get ().getAsFile ().toPath ().getParent ().relativize (file );
306292 }
307293
294+ private String srcFiles () {
295+ var grammarSrcDir = grammarDir .toPath ().resolve ("src" );
296+ var scannerFile = grammarSrcDir .resolve ("scanner.c" );
297+ if (!scannerFile .toFile ().exists ()) {
298+ return grammarSrcDir .resolve ("parser.c" ).toString ();
299+ }
300+ return String .format ("%s %s" , grammarSrcDir .resolve ("parser.c" ), scannerFile );
301+ }
302+
308303 private String readResource (String file ) throws GradleException {
309304 try (var stream = getClass ().getResourceAsStream ("/" + file )) {
310305 var bytes = Objects .requireNonNull (stream ).readAllBytes ();
0 commit comments