Skip to content

Existence of mains in a class with a parameterful constructor leads to cbt fail #585

@buzden

Description

@buzden

Consider I have (accidentially or not) some class X which has def main(args: Array[String]): Unit. CBT considers this as one of the variants of possible entry points during cbt run unless the class is abstract.

This behaviour is not fatal but a little bit annoying when you accidentially have written class instead of object and everything works fine with cbt but does not work with other tools (e.g. running with pure scala runner). In the code it's written that it's done because of dottydoc.

The really strange behaviour of cbt is when you have a really strange class having both constructor parameters and def main, something like this:

class X(whatever: Int) {
  def main(args: Array[String]): Unit = ???
}

Having this leads to (guess what):

Exception in thread "main" java.lang.InstantiationException: X
        at java.lang.Class.newInstance(Class.java:427)
        at cbt.reflect.Module$class.typeStaticMethod(reflect.scala:168)
        ...
Caused by: java.lang.NoSuchMethodException: X.<init>()
        ...

So, generally, cbt's reflection sublibrary assumes that it works with classes having a constructor with empty parameters list when talking about static methods (typeStaticMethod(Method) function).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions