diff --git a/compile/interface/src/main/scala/xsbt/Analyzer.scala b/compile/interface/src/main/scala/xsbt/Analyzer.scala index 43fa8da6c..70661e103 100644 --- a/compile/interface/src/main/scala/xsbt/Analyzer.scala +++ b/compile/interface/src/main/scala/xsbt/Analyzer.scala @@ -81,6 +81,9 @@ final class Analyzer(val global: CallbackGlobal) extends Compat private[this] final val classSeparator = '.' private[this] def classFile(sym: Symbol): Option[(AbstractFile, String, Boolean)] = + // package can never have a corresponding class file; this test does not + // catch package objects (that do not have this flag set) + if (sym hasFlag scala.tools.nsc.symtab.Flags.PACKAGE) None else { import scala.tools.nsc.symtab.Flags val name = flatname(sym, classSeparator) + moduleSuffix(sym) diff --git a/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/build.sbt b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/build.sbt new file mode 100644 index 000000000..116ee73b0 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/build.sbt @@ -0,0 +1,6 @@ +TaskKey[Unit]("verify-binary-deps") <<= (compile in Compile, classDirectory in Compile, baseDirectory) map { + (a: sbt.inc.Analysis, classDir: java.io.File, base: java.io.File) => + val nestedPkgClass = classDir / "test/nested.class" + val fooSrc = base / "src/main/scala/test/nested/Foo.scala" + assert(!a.relations.binaryDeps(fooSrc).contains(nestedPkgClass), a.relations.toString) +} diff --git a/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/Nested.scala b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/Nested.scala new file mode 100644 index 000000000..a3e7f8852 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/Nested.scala @@ -0,0 +1,3 @@ +package test + +trait Nested diff --git a/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/nested/Foo.scala b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/nested/Foo.scala new file mode 100644 index 000000000..185597caf --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/src/main/scala/test/nested/Foo.scala @@ -0,0 +1,5 @@ +package test.nested + +trait Foo { + def xyz(x: test.Nested) +} diff --git a/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/test b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/test new file mode 100644 index 000000000..d68315137 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-package-class-dependency/test @@ -0,0 +1,7 @@ +# Tests for bug when sbt would introduce dependency on non-existing +# class files corresponding to packages + +> compile +# verifies that there's no dependency on a class file corresponding +# to a package +> verify-binary-deps