eclipse-archived / ceylon

The Ceylon compiler, language module, and command line tools
http://ceylon-lang.org
Apache License 2.0
395 stars 62 forks source link

ceylon test ParameterNameParserException with Class with multiple argument lists #7381

Open aedeph opened 6 years ago

aedeph commented 6 years ago

ceylon test and ceylon run with createTestRunner().run() produces ParameterNameParserException, when there is private method with multiple argument list.

import ceylon.test { ... }

class ClassTest() {

    Integer stub()(Integer i) => i;

    test
    shared void runTest() {}
}

shared void run() {
    ClassTest().runTest();

    print(createTestRunner([
            `ClassTest`
    ]).run());
}

$ ceylon run --compile=force repl

com.redhat.ceylon.model.loader.ParameterNameParserException: Too few parameter types

$ ceylon test repl com.redhat.ceylon.model.loader.ParameterNameParserException: Too few parameter types ...long stack trace..

However, if second argument list is empty (Integer stub()() => 1), everything is ok.

lucaswerkmeister commented 6 years ago

I can reproduce this on current master; the stack trace is:

org.eclipse.ceylon.model.loader.ParameterNameParserException: Too few parameter types
        at org.eclipse.ceylon.model.loader.ParameterNameParser.parseNameList(ParameterNameParser.java:100)
        at org.eclipse.ceylon.model.loader.ParameterNameParser.parseMpl(ParameterNameParser.java:79)                                                                                                              
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.setParameters(AbstractModelLoader.java:4733)                                                                                                       
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.addMethod(AbstractModelLoader.java:3880)                                                                                                           
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.complete(AbstractModelLoader.java:3278)                                                                                                            
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.access$1100(AbstractModelLoader.java:112)                                                                                                          
        at org.eclipse.ceylon.model.loader.AbstractModelLoader$18.run(AbstractModelLoader.java:2647)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader$2.call(AbstractModelLoader.java:439)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader$1.call(AbstractModelLoader.java:424)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.embeddingSync(AbstractModelLoader.java:415)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.synchronizedCall(AbstractModelLoader.java:420)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.synchronizedRun(AbstractModelLoader.java:436)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.complete(AbstractModelLoader.java:2643)
        at org.eclipse.ceylon.model.loader.model.LazyClass$1.run(LazyClass.java:106)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader$2.call(AbstractModelLoader.java:439)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader$1.call(AbstractModelLoader.java:424)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.embeddingSync(AbstractModelLoader.java:415)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.synchronizedCall(AbstractModelLoader.java:420)
        at org.eclipse.ceylon.model.loader.AbstractModelLoader.synchronizedRun(AbstractModelLoader.java:436)
        at org.eclipse.ceylon.model.loader.model.LazyClass.load(LazyClass.java:100)
        at org.eclipse.ceylon.model.loader.model.LazyClass.getParameterLists(LazyClass.java:185)
        at org.eclipse.ceylon.compiler.java.runtime.metamodel.Metamodel.getTypeDescriptorForArguments(Metamodel.java:1345)
        at org.eclipse.ceylon.compiler.java.runtime.metamodel.Metamodel.getAppliedMetamodel(Metamodel.java:666)
        at org.eclipse.ceylon.compiler.java.runtime.metamodel.Metamodel.getAppliedMetamodel(Metamodel.java:381)
        at ceylon.language.meta.typeLiteral_.typeLiteral(typeLiteral_.java:39)
        at tmp.run_.run(run.ceylon:15)                               
lucaswerkmeister commented 6 years ago

And here’s a simpler reproducer – ceylon.test not necessary:

class ClassTest() {
    Integer stub()(Integer i) => i;
}

shared void run() => print(`ClassTest`);