[GRADLE-3262] Gradle 2.3: Antlr fails with ANTLR Panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt' Created: 12/Mar/15  Updated: 16/Mar/15  Resolved: 16/Mar/15

Status: Resolved
Project: Gradle
Affects Version/s: 2.3
Fix Version/s: 2.4-rc-1

Type: Bug
Reporter: Gradle Forums Assignee: René Gröschke (Inactive)
Resolution: Fixed Votes: 0


 Description   

One of our projects' build is failing with Gradle-2.3. It looks like the antlr plugin doesn't behave as before. I read about the incremental antlr task feature in Gradle-2.3, but we never call the `execute` method directly. So my guess is that something's wrong with Gradle.

Unfortunately, I'm not familiar with antlr, so my investigation abilities are limited

Here are the antlr-related parts of our build.gradle - nothing fancy:

apply plugin: 'antlr'

ext.antlrVersion = '2.7.7'

dependencies {
antlr (group: 'antlr', name: 'antlr', version: antlrVersion)
runtime (group: 'antlr', name: 'antlr', version: antlrVersion)
}

The grammar files are at src/main/antlr.

And here's the build output with stacktrace enabled:

d:\my-project>gradle assemble --stacktrace
:my-project:generateGrammarSource
warning: grammar file must be last; ignoring other arguments...
panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
:my-project:generateGrammarSource FAILED

FAILURE: Build failed with an exception.

  • What went wrong:
    Execution failed for task ':my-project:generateGrammarSource'.
    > There was 1 error during grammar generation
    > ANTLR Panic: panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
  • Try:
    Run with --info or --debug option to get more log output.
  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':my-project:generateGrammarSource'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:306)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    Caused by: org.gradle.api.plugins.antlr.internal.AntlrSourceGenerationException: There was 1 error during grammar generation
    at org.gradle.api.plugins.antlr.AntlrTask.evaluateAntlrResult(AntlrTask.java:205)
    at org.gradle.api.plugins.antlr.AntlrTask.execute(AntlrTask.java:199)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:235)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:222)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 44 more
    Caused by: java.lang.RuntimeException: ANTLR Panic: panic: Cannot find importVocab file 'ConfigurationTokenTypes.txt'
    at antlr.Utils.error(Utils.java:34)
    at antlr.Tool.fatalError(Tool.java:445)
    at antlr.Tool.panic(Tool.java:466)
    at antlr.ImportVocabTokenManager.<init>(ImportVocabTokenManager.java:39)
    at antlr.DefineGrammarSymbols.endOptions(DefineGrammarSymbols.java:318)
    at antlr.ANTLRParser.treeParserSpec(ANTLRParser.java:618)
    at antlr.ANTLRParser.classDef(ANTLRParser.java:332)
    at antlr.ANTLRParser.grammar(ANTLRParser.java:173)
    at antlr.Tool.doEverything(Tool.java:244)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.plugins.antlr.internal.AntlrExecuter.processV2(AntlrExecuter.java:94)
    at org.gradle.api.plugins.antlr.internal.AntlrExecuter.runAntlr(AntlrExecuter.java:61)
    at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:48)
    at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:38)
    at org.gradle.api.plugins.antlr.internal.AntlrWorkerServer.execute(AntlrWorkerServer.java:27)
    at org.gradle.process.internal.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:78)
    at org.gradle.process.internal.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:35)
    at org.gradle.process.internal.child.ImplementationClassLoaderWorker.execute(ImplementationClassLoaderWorker.java:85)
    at org.gradle.process.internal.child.ImplementationClassLoaderWorker.execute(ImplementationClassLoaderWorker.java:41)
    at org.gradle.process.internal.child.IsolatedApplicationClassLoaderWorker.call(IsolatedApplicationClassLoaderWorker.java:48)
    at org.gradle.process.internal.child.IsolatedApplicationClassLoaderWorker.call(IsolatedApplicationClassLoaderWorker.java:30)
    at org.gradle.process.internal.launcher.GradleWorkerMain.run(GradleWorkerMain.java:32)
    at org.gradle.process.internal.launcher.GradleWorkerMain.main(GradleWorkerMain.java:37)

BUILD FAILED

I can't find the mentioned "ConfigurationTokenTypes.txt" anywhere in our project, even with fulltext search. I guess this must be some antlr internals? Again: With Gradle < 2.3, everything worked well.

Hope this helps finding the issue...



 Comments   
Comment by Gradle Forums [ 12/Mar/15 ]

I can't find any references to that file in Gradle or the Antlr sources. Are you doing any configuration at the task level on [generateGrammarSource]([1]http://gradle.org/docs/current/usergu...)? How many files are in your src/main/antlr directory?

Can you try adding this to see if it changes anything?

generateGrammarSource {
outputs.upToDateWhen

{ false }

}

----------------------------------------------------------------------------------------
[1] http://gradle.org/docs/current/userguide/antlr_plugin.html#N144E9

Comment by Gradle Forums [ 12/Mar/15 ]

Hmm, so I guess that filename is being built somewhere :/

We don't do any configuration at the task level, the task isn't even mentioned in the gradle file - only the "apply plugin" and antlr dependencies posted above.

We have about 5-6 `*.g` files in `src/main/antlr`.

I'll be back in the office next week, I'll keep you posted about the up-to-date suggestion!

Comment by Gradle Forums [ 12/Mar/15 ]

I think if you have a Configuration.g it'll create a ConfigurationTokenTypes.txt as an output, which makes your problem weirder.

Comment by Gradle Forums [ 12/Mar/15 ]

Hey @netmikey, have you been able to recreate this?

Comment by Gradle Forums [ 12/Mar/15 ]

Hi Sterling,

Sorry for the late reply.
I just added the `upToDateWhen` snippet from above, but it doesn't change anything. I looked into our *.g files to try finding where that ConfigurationTokenTypes came from: Among others, we have a `someconfig.g`, a `concreteconfig1.tree.g` and `concreteconfig2.tree.g`.

`someconfig.g` contains:

options

{ ... exportVocab = Configuration; }

while both concrete configs contain:

options

{ importVocab = Configuration; .... }

Hope this helps?

Comment by Gradle Forums [ 12/Mar/15 ]

Hey, is there any chance you can create a small reproducible build that shows the error so I can dig a bit deeper into it? You mention that this is failing with 2.3. So you're saying your antlr stuff worked with 2.2?

cheers,
René

Comment by Gradle Forums [ 12/Mar/15 ]

@rene 2.3 had big changes to the ANTLR stuff that should be backwards compatible.

Comment by Gradle Forums [ 12/Mar/15 ]

Hi Rene,

Yes, this worked with 2.2 and started failing with 2.3.

I managed to make something reproducible... I'm still novice at antlr, so don't expect this example to compile all the way through, I just took our antlr sources and stripped down everything I could while keeping it reproducible. So don't run `assemble` on it, just `gradle clean generateGrammarSource` with Gradle 2.2 vs 2.3 should show the issue.

Here's the project: [1]https://drive.google.com/open?id=0B6h...

Hope this helps...

best regards,
mike
----------------------------------------------------------------------------------------
[1] https://drive.google.com/open?id=0B6hxwnTm7cjyT3hZX19aRzByUXc&authuser=0

Comment by René Gröschke (Inactive) [ 13/Mar/15 ]

Two problems we need to solve here:
1. "antlr.Tool" cannot handle multiple grammar files, so each grammar file must be processed seperately.
2. We need to determine the right order of the processed grammar files. We did that already when using the antlr ant task. we need to bring back that functionality for antlr2

Antlr3 and Antlr4 can deal with multiple grammar files in one go.

Generated at Wed Jun 30 12:44:14 CDT 2021 using Jira 8.4.2#804003-sha1:d21414fc212e3af190e92c2d2ac41299b89402cf.