Ceylon版本1.2格式命令

时间:2015-10-29 18:06:07

标签: ceylon

我该如何解决这个问题:

命令:

$ ceylon format source/com/example/helloworld/*

例外:

Exception in thread "main" java.lang.NoSuchMethodError: ceylon.language.runtime_.getMaxArraySize()Lceylon/language/Integer;
        at ceylon.collection.Hashtable.<init>(Hashtable.ceylon:35)
        at ceylon.collection.Hashtable.<init>(Hashtable.ceylon)
        at ceylon.collection.HashMap.$default$hashtable(HashMap.ceylon:31)
        at ceylon.formatter.options.Spaces$cache_.<init>(IndentMode.ceylon:62)
        at ceylon.formatter.options.Spaces$cache_.<init>(IndentMode.ceylon)
        at ceylon.formatter.options.Spaces.<init>(IndentMode.ceylon:59)
        at ceylon.formatter.options.FormattingOptions.$default$indentMode(FormattingOptions_generated.ceylon:355)
        at ceylon.formatter.options.FormattingOptions.<init>(FormattingOptions_generated.ceylon)
        at ceylon.formatter.options.loadProfile_.loadProfile(profiles.ceylon:79)
        at ceylon.formatter.options.loadProfile_.loadProfile(profiles.ceylon)
        at ceylon.formatter.options.commandLineOptions_.commandLineOptions(formattingOptions.ceylon:125)
        at ceylon.formatter.options.commandLineOptions_.commandLineOptions(formattingOptions.ceylon)
            at ceylon.formatter.run_.run(run.ceylon:285)
   ...

我想我必须重新安装格式化程序。但是哪个版本?

无缘无故以下命令有效:

ceylon run ceylon.formatter source/com/example/helloworld/*.ceylon

区别在哪里,我该如何解决。

2 个答案:

答案 0 :(得分:4)

ceylon.language.runtime曾经是implemented in hand-written Java code。在此代码中,getMaxArraySize()意外returned ceylon.language.Integer应该返回long。这有效,但不太正确。

然后,在Ceylon 1.2中的原生支持下,runtime(以及其他一些对象)被rewritten作为本机Ceylon代码。由于Ceylon编译器将其转换为Java,因此该方法现在可以获得正确的返回类型long。新编译的模块现在将调用此方法,但针对旧ceylon.language编译的代码仍将尝试调用返回ceylon.language.Integer的方法,该方法将导致您的NoSuchMethodError

这里发生的事情似乎是ceylon format运行ceylon.formatter/1.1.0,它是针对ceylon.language/1.1.0编译的,现在无法与ceylon.language/1.2.0一起运行。 ceylon run ceylon.formatter可能由于某种原因而运行ceylon.formatter/1.2.0,这有效。

我不确定你需要做些什么来解决这个问题。我更改了ceylon format插件的工作方式recently,因此您可能需要删除ceylon format脚本(ceylon-formatceylon-format.bat文件中的某个.ceylon/binon.('ready', ...)文件1}},我相信)。希望新的已经存在,准备接管。

答案 1 :(得分:4)

尝试ceylon plugin uninstall format并查看是否可以解决问题。

第二种选择是说ceylon plugin install ceylon.formatter/1.2.0

ceylon format无效但ceylon run之所以有效,是因为您安装的ceylon format会查找硬编码版本1.1,而不是{39} ; t兼容,而ceylon run将查找与您正在使用的当前Ceylon版本兼容的任何版本。 (所以它会找到1.1.0和1.2.0,但它会丢弃1.1.0,因为它不兼容,因此自动选择1.2.0)