From 408d11557d95c3dba8de546f91a6797be9a2bf4b Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 28 Apr 2012 18:58:38 -0400 Subject: [PATCH] handle Java sources not compiled in Mixed configuration --- compile/interface/Analyzer.scala | 9 ++++----- compile/interface/CompilerInterface.scala | 6 +++--- .../source-dependencies/resident-java/build.sbt | 1 + .../source-dependencies/resident-java/changes/A1.java | 5 +++++ .../source-dependencies/resident-java/changes/A2.java | 5 +++++ .../resident-java/changes/B0.scala | 1 + .../resident-java/changes/B1.scala | 3 +++ .../resident-java/changes/B2.scala | 3 +++ .../sbt-test/source-dependencies/resident-java/test | 10 ++++++++++ .../resident-package-object/changes/A.scala | 5 +++++ .../resident-package-object/changes/package.scala | 3 +++ .../resident-package-object/changes/package2.scala | 3 +++ .../source-dependencies/resident-package-object/test | 11 +++++++++++ 13 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/build.sbt create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/changes/A1.java create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/changes/A2.java create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/changes/B0.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/changes/B1.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/changes/B2.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-java/test create mode 100644 sbt/src/sbt-test/source-dependencies/resident-package-object/changes/A.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package2.scala create mode 100644 sbt/src/sbt-test/source-dependencies/resident-package-object/test diff --git a/compile/interface/Analyzer.scala b/compile/interface/Analyzer.scala index f582aef75..719a5a5a1 100644 --- a/compile/interface/Analyzer.scala +++ b/compile/interface/Analyzer.scala @@ -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 diff --git a/compile/interface/CompilerInterface.scala b/compile/interface/CompilerInterface.scala index 4d7cc5e97..c36e6a905 100644 --- a/compile/interface/CompilerInterface.scala +++ b/compile/interface/CompilerInterface.scala @@ -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] = { diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/build.sbt b/sbt/src/sbt-test/source-dependencies/resident-java/build.sbt new file mode 100644 index 000000000..619622832 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/build.sbt @@ -0,0 +1 @@ +compileOrder := CompileOrder.JavaThenScala diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/changes/A1.java b/sbt/src/sbt-test/source-dependencies/resident-java/changes/A1.java new file mode 100644 index 000000000..bdf223afb --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/changes/A1.java @@ -0,0 +1,5 @@ +package example; + +public class A { + public final int x = 3; +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/changes/A2.java b/sbt/src/sbt-test/source-dependencies/resident-java/changes/A2.java new file mode 100644 index 000000000..3b67c58d2 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/changes/A2.java @@ -0,0 +1,5 @@ +package example; + +public class A { + public final String x = "a"; +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/changes/B0.scala b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B0.scala new file mode 100644 index 000000000..251ef7397 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B0.scala @@ -0,0 +1 @@ +object B diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/changes/B1.scala b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B1.scala new file mode 100644 index 000000000..9d9a60c87 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B1.scala @@ -0,0 +1,3 @@ +object B { + val x: Int = (new example.A).x +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/changes/B2.scala b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B2.scala new file mode 100644 index 000000000..ec5fd2cf3 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/changes/B2.scala @@ -0,0 +1,3 @@ +object B { + val x: String = (new example.A).x +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-java/test b/sbt/src/sbt-test/source-dependencies/resident-java/test new file mode 100644 index 000000000..6987c7df0 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-java/test @@ -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 diff --git a/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/A.scala b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/A.scala new file mode 100644 index 000000000..da058d2d9 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/A.scala @@ -0,0 +1,5 @@ +package example + +object A { + val x: Int = green +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package.scala b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package.scala new file mode 100644 index 000000000..9fd811040 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package.scala @@ -0,0 +1,3 @@ +package object example { + val green = 3 +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package2.scala b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package2.scala new file mode 100644 index 000000000..22c1afd15 --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-package-object/changes/package2.scala @@ -0,0 +1,3 @@ +package object example { + val green = "asdf" +} diff --git a/sbt/src/sbt-test/source-dependencies/resident-package-object/test b/sbt/src/sbt-test/source-dependencies/resident-package-object/test new file mode 100644 index 000000000..e83d2578d --- /dev/null +++ b/sbt/src/sbt-test/source-dependencies/resident-package-object/test @@ -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