Ensure that `parents` for java classes have all the ancestors

Currently, only immediate parents classes are picked up for java classes.
This could be problematic, for example, in detecting Fingerprint for test frameworks.
So far, Scala types are not affected –– all the ancestors are available for them.
This commit is contained in:
Indrajit Raychaudhuri 2012-03-25 15:44:16 +05:30
parent 2bb2aed1f6
commit 2525eeb7e6
2 changed files with 11 additions and 2 deletions

View File

@ -76,8 +76,17 @@ object ClassToAPI
private val lzyEmptyTpeArray = lzy(emptyTypeArray)
private val lzyEmptyDefArray = lzy(new Array[xsbti.api.Definition](0))
private def allSuperclasses(t: Type): Seq[Type] =
{
def accumulate(t: Type, accum: Seq[Type] = Seq.empty): Seq[Type] = t match {
case cl: Class[_] => { val s = cl.getGenericSuperclass ; accumulate(s, accum :+ s) }
case _ => accum
}
accumulate(t)
}
def parents(c: Class[_]): Seq[api.Type] =
types(c.getGenericSuperclass +: c.getGenericInterfaces)
types(allSuperclasses(c) ++ c.getGenericInterfaces)
def types(ts: Seq[Type]): Array[api.Type] = ts filter (_ ne null) map reference toArray;
def upperBounds(ts: Array[Type]): api.Type =
new api.Structure(lzy(types(ts)), lzyEmptyDefArray, lzyEmptyDefArray)

View File

@ -1277,7 +1277,7 @@ trait BuildExtra extends BuildCommon
/** Disables post-compilation hook for determining tests for tab-completion (such as for 'test-only').
* This is useful for reducing test:compile time when not running test. */
def noTestCompletion(config: Configuration = Test): Setting[_] = inConfig(config)( Seq(definedTests <<= Defaults.detectTests) ).head
def noTestCompletion(config: Configuration = Test): Setting[_] = inConfig(config)( Seq(definedTests <<= detectTests) ).head
def filterKeys(ss: Seq[Setting[_]], transitive: Boolean = false)(f: ScopedKey[_] => Boolean): Seq[Setting[_]] =
ss filter ( s => f(s.key) && (!transitive || s.dependencies.forall(f)) )