diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 09:07:39 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-04-09 13:20:45 -0700 |
commit | 9295d5240a417cd09c33317ab2d2a99a36e50485 (patch) | |
tree | 1fb5b3f2a818517840c42ecd1c0697f091443912 /scalalib | |
parent | 11122c48452d40eb32086fa247ce06d5d6f1a789 (diff) | |
download | mill-9295d5240a417cd09c33317ab2d2a99a36e50485.tar.gz mill-9295d5240a417cd09c33317ab2d2a99a36e50485.tar.bz2 mill-9295d5240a417cd09c33317ab2d2a99a36e50485.zip |
caffeine core and guava tests seem to pass
Diffstat (limited to 'scalalib')
-rw-r--r-- | scalalib/src/mill/scalalib/Lib.scala | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/scalalib/src/mill/scalalib/Lib.scala b/scalalib/src/mill/scalalib/Lib.scala index 46164e4b..bda8e8f8 100644 --- a/scalalib/src/mill/scalalib/Lib.scala +++ b/scalalib/src/mill/scalalib/Lib.scala @@ -289,27 +289,38 @@ object Lib{ if (!exists(base)) Nil else listClassFiles(base).flatMap { path => val cls = cl.loadClass(path.stripSuffix(".class").replace('/', '.')) - fingerprints.find { - case f: SubclassFingerprint => - !cls.isInterface && - (f.isModule == cls.getName.endsWith("$")) && - cl.loadClass(f.superclassName()).isAssignableFrom(cls) && - (f.isModule || cls.getConstructors.count(c => c.getParameterCount == 0 && Modifier.isPublic(c.getModifiers)) == 1) - - case f: AnnotatedFingerprint => - val annotationCls = cl.loadClass(f.annotationName()).asInstanceOf[Class[Annotation]] - (f.isModule == cls.getName.endsWith("$")) && - (f.isModule || cls.getConstructors.count(c => c.getParameterCount == 0 && Modifier.isPublic(c.getModifiers)) == 1) - ( - cls.isAnnotationPresent(annotationCls) || - cls.getDeclaredMethods.exists(_.isAnnotationPresent(annotationCls)) - ) - - }.map { f => (cls, f) } + val publicConstructorCount = + cls.getConstructors.count(c => c.getParameterCount == 0 && Modifier.isPublic(c.getModifiers)) + + if (Modifier.isAbstract(cls.getModifiers) || cls.isInterface || publicConstructorCount > 1) { + None + } else { + (cls.getName.endsWith("$"), publicConstructorCount == 0) match{ + case (true, true) => matchFingerprints(cl, cls, fingerprints, isModule = true) + case (false, false) => matchFingerprints(cl, cls, fingerprints, isModule = false) + case _ => None + } + } } } testClasses } + def matchFingerprints(cl: ClassLoader, cls: Class[_], fingerprints: Array[Fingerprint], isModule: Boolean) = { + fingerprints.find { + case f: SubclassFingerprint => + f.isModule == isModule && + cl.loadClass(f.superclassName()).isAssignableFrom(cls) + + case f: AnnotatedFingerprint => + val annotationCls = cl.loadClass(f.annotationName()).asInstanceOf[Class[Annotation]] + f.isModule == isModule && + ( + cls.isAnnotationPresent(annotationCls) || + cls.getDeclaredMethods.exists(_.isAnnotationPresent(annotationCls)) + ) + + }.map { f => (cls, f) } + } } |