scalingua icon indicating copy to clipboard operation
scalingua copied to clipboard

Failure parsing .po files in SBT

Open gawashburn opened this issue 4 years ago • 5 comments

[error] Caused by: java.lang.NoSuchMethodError: java_cup.runtime.SymbolFactory.newSymbol(Ljava/lang/String;ILjava_cup/runtime/Symbol;Ljava/lang/Object;)Ljava_cup/runtime/Symbol;
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoParser$CUP$PoParser$actions.CUP$PoParser$do_action_part00000000(PoParser.java:427)
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoParser$CUP$PoParser$actions.CUP$PoParser$do_action(PoParser.java:479)
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoParser.do_action(PoParser.java:125)
[error] 	at java_cup.runtime.lr_parser.parse(lr_parser.java:699)
[error] 	at ru.makkarpov.scalingua.pofile.PoFile$.apply(PoFile.scala:52)
[error] 	at ru.makkarpov.scalingua.pofile.PoFile$.apply(PoFile.scala:48)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.$anonfun$doCompiling$1(PoCompiler.scala:145)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.catchErrors(PoCompiler.scala:69)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.doCompiling(PoCompiler.scala:144)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$compileLocalesTask$1(Scalingua.scala:188)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$compileLocalesTask$1$adapted(Scalingua.scala:188)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$withGenContext$3(Scalingua.scala:157)
[error] 	at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59)
[error] 	at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:52)
[error] 	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$withGenContext$1(Scalingua.scala:151)
...

I'm using sbt version 1.1.4 with

addSbtPlugin("ru.makkarpov" % "scalingua-sbt" % "0.8.1")

in my plugins.sbt. And

.enablePlugins(Scalingua)
.settings(
...
  libraryDependencies += "ru.makkarpov" %% "scalingua" % "0.8.1",
...
)

in my build.sbt

gawashburn avatar Jan 06 '20 20:01 gawashburn

Hi!

Maybe other version of CUP is loaded at the runtime. What SBT version do you use and are there any other plugins loaded?

makkarpov avatar Jan 06 '20 20:01 makkarpov

I'm using sbt 1.1.4

My other plugins are:

// Better Maven/Ivy dependency resolution
addSbtPlugin("io.get-coursier" % "sbt-coursier" % "1.0.3")

// Allow combining multiple jars
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.9")

// Protobuf generation support
addSbtPlugin("com.thesamet" % "sbt-protoc" % "0.99.15")
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % "0.7.0"

// JFlex
libraryDependencies += "de.jflex" % "jflex" % "1.7.0" % "compile"

Only possible conflict here I can see might be JFlex?

gawashburn avatar Jan 06 '20 20:01 gawashburn

Yes, that can be a possible source of conflict.

The correct solution for this is to shade CUP dependency, as it is done in 'scalingua-shaded' artifact that was added after similar runtime conflicts in compiled code. No such conflicts have been occurred so far in SBT itself.

Technically it should be possible to apply similar technique to SBT artifact. I will look into it few days later.

makkarpov avatar Jan 06 '20 20:01 makkarpov

If I change my version of JFlex to 1.6.1 it still fails, but with a different exception:

[error] Caused by: java.lang.NoSuchMethodError: java_cup.runtime.ComplexSymbolFactory$Location.<init>(Ljava/lang/String;III)V
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoLexer.loc(PoLexer.java:274)
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoLexer.storeLoc(PoLexer.java:278)
[error] 	at ru.makkarpov.scalingua.pofile.parse.PoLexer.next_token(PoLexer.java:754)
[error] 	at java_cup.runtime.lr_parser.scan(lr_parser.java:349)
[error] 	at java_cup.runtime.lr_parser.parse(lr_parser.java:549)
[error] 	at ru.makkarpov.scalingua.pofile.PoFile$.apply(PoFile.scala:52)
[error] 	at ru.makkarpov.scalingua.pofile.PoFile$.apply(PoFile.scala:48)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.$anonfun$doCompiling$1(PoCompiler.scala:145)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.catchErrors(PoCompiler.scala:69)
[error] 	at ru.makkarpov.scalingua.plugin.PoCompiler$.doCompiling(PoCompiler.scala:144)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$compileLocalesTask$1(Scalingua.scala:188)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$compileLocalesTask$1$adapted(Scalingua.scala:188)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$withGenContext$3(Scalingua.scala:157)
[error] 	at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:59)
[error] 	at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:52)
[error] 	at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
[error] 	at ru.makkarpov.scalingua.plugin.Scalingua$.$anonfun$withGenContext$1(Scalingua.scala:151)

gawashburn avatar Jan 06 '20 20:01 gawashburn

Completely commenting out my own use of JFlex rather than just changing the version seems to resolve the issue, so that definitely seems to be it. However, I cannot build other portions of my project without it.

Thanks for the quick response on this!

gawashburn avatar Jan 06 '20 20:01 gawashburn