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).
Consider I have (accidentially or not) some
class Xwhich hasdef main(args: Array[String]): Unit. CBT considers this as one of the variants of possible entry points duringcbt rununless theclassisabstract.This behaviour is not fatal but a little bit annoying when you accidentially have written
classinstead ofobjectand everything works fine withcbtbut does not work with other tools (e.g. running with purescalarunner). In the code it's written that it's done because of dottydoc.The really strange behaviour of
cbtis when you have a really strange class having both constructor parameters anddef main, something like this:Having this leads to (guess what):
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).