eclipse-archived/ceylon

ceylon test ParameterNameParserException with Class with multiple argument lists

Opened this issue · 2 comments

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.

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)                               

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

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

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