mirror of https://github.com/sbt/sbt.git
handle Java sources not compiled in Mixed configuration
This commit is contained in:
parent
6769c94208
commit
408d11557d
|
|
@ -35,17 +35,16 @@ final class Analyzer(val global: CallbackGlobal) extends Compat
|
|||
// build dependencies structure
|
||||
val sourceFile = unit.source.file.file
|
||||
callback.beginSource(sourceFile)
|
||||
println("Dependencies of " + sourceFile)
|
||||
for(on <- unit.depends)
|
||||
{
|
||||
def binaryDependency(file: File, className: String) = callback.binaryDependency(file, className, sourceFile)
|
||||
val onSource = on.sourceFile
|
||||
println("\t" + on + ", src: " + onSource + ", class: " + classFile(on))
|
||||
if(onSource == null)
|
||||
{
|
||||
classFile(on) match
|
||||
{
|
||||
case Some((f,className)) =>
|
||||
case Some((f,className,inOutDir)) =>
|
||||
if(inOutDir && on.isJavaDefined) registerTopLevelSym(on)
|
||||
f match
|
||||
{
|
||||
case ze: ZipArchive#Entry => for(zip <- ze.underlyingSource; zipFile <- Option(zip.file) ) binaryDependency(zipFile, className)
|
||||
|
|
@ -84,11 +83,11 @@ final class Analyzer(val global: CallbackGlobal) extends Compat
|
|||
}
|
||||
|
||||
private[this] final val classSeparator = '.'
|
||||
private[this] def classFile(sym: Symbol): Option[(AbstractFile, String)] =
|
||||
private[this] def classFile(sym: Symbol): Option[(AbstractFile, String, Boolean)] =
|
||||
{
|
||||
import scala.tools.nsc.symtab.Flags
|
||||
val name = flatname(sym, classSeparator) + moduleSuffix(sym)
|
||||
findClass(name).map(file => (file, name)) orElse {
|
||||
findClass(name).map { case (file,inOut) => (file, name,inOut) } orElse {
|
||||
if(isTopLevelModule(sym))
|
||||
{
|
||||
val linked = sym.companionClass
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ final class CompilerInterface
|
|||
}
|
||||
sealed abstract class CallbackGlobal(settings: Settings, reporter: reporters.Reporter) extends Global(settings, reporter) {
|
||||
def callback: AnalysisCallback
|
||||
def findClass(name: String): Option[AbstractFile]
|
||||
def findClass(name: String): Option[(AbstractFile,Boolean)]
|
||||
}
|
||||
class InterfaceCompileFailed(val arguments: Array[String], val problems: Array[Problem], override val toString: String) extends xsbti.CompileFailed
|
||||
|
||||
|
|
@ -173,8 +173,8 @@ private final class CachedCompiler0(args: Array[String], initialLog: WeakLog) ex
|
|||
|
||||
override def registerTopLevelSym(sym: Symbol) = toForget += sym
|
||||
|
||||
def findClass(name: String): Option[AbstractFile] =
|
||||
getOutputClass(name) orElse findOnClassPath(name)
|
||||
def findClass(name: String): Option[(AbstractFile, Boolean)] =
|
||||
getOutputClass(name).map(f => (f,true)) orElse findOnClassPath(name).map(f =>(f, false))
|
||||
|
||||
def getOutputClass(name: String): Option[AbstractFile] =
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
compileOrder := CompileOrder.JavaThenScala
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package example;
|
||||
|
||||
public class A {
|
||||
public final int x = 3;
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package example;
|
||||
|
||||
public class A {
|
||||
public final String x = "a";
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
object B
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
object B {
|
||||
val x: Int = (new example.A).x
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
object B {
|
||||
val x: String = (new example.A).x
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
$ copy-file changes/B0.scala B.scala
|
||||
> compile
|
||||
|
||||
$ copy-file changes/A1.java src/main/java/example/A.java
|
||||
$ copy-file changes/B1.scala B.scala
|
||||
> compile
|
||||
|
||||
$ copy-file changes/A2.java src/main/java/example/A.java
|
||||
$ copy-file changes/B2.scala B.scala
|
||||
> compile
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package example
|
||||
|
||||
object A {
|
||||
val x: Int = green
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package object example {
|
||||
val green = 3
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package object example {
|
||||
val green = "asdf"
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
$ copy-file changes/package.scala src/main/scala/example/package.scala
|
||||
> compile
|
||||
|
||||
$ copy-file changes/A.scala src/main/scala/example/A.scala
|
||||
> compile
|
||||
|
||||
$ copy-file changes/package2.scala src/main/scala/example/package.scala
|
||||
-> compile
|
||||
|
||||
$ copy-file changes/package.scala src/main/scala/example/package.scala
|
||||
> compile
|
||||
Loading…
Reference in New Issue