File tree Expand file tree Collapse file tree 8 files changed +68
-2
lines changed
compiler/src/dotty/tools/dotc/sbt
sbt-dotty/sbt-test/source-dependencies/package-object-implicit Expand file tree Collapse file tree 8 files changed +68
-2
lines changed Original file line number Diff line number Diff line change @@ -295,8 +295,12 @@ private class ExtractDependenciesCollector extends tpd.TreeTraverser { thisTreeT
295295 val fromClass = resolveDependencySource
296296 if (fromClass.exists) { // can happen when visiting imports
297297 assert(fromClass.isClass)
298- _dependencies += ClassDependency (fromClass, enclOrModuleClass, DependencyByMemberRef )
298+
299299 addUsedName(fromClass, mangledName(sym), UseScope .Default )
300+ // packages have class symbol. Only record them as used names but not dependency
301+ if (! sym.is(Package )) {
302+ _dependencies += ClassDependency (fromClass, enclOrModuleClass, DependencyByMemberRef )
303+ }
300304 }
301305 }
302306
@@ -315,7 +319,6 @@ private class ExtractDependenciesCollector extends tpd.TreeTraverser { thisTreeT
315319 ! sym.exists ||
316320 sym.unforcedIsAbsent || // ignore dependencies that have a symbol but do not exist.
317321 // e.g. java.lang.Object companion object
318- sym.is(PackageClass ) ||
319322 sym.isEffectiveRoot ||
320323 sym.isAnonymousFunction ||
321324 sym.isAnonymousClass
Original file line number Diff line number Diff line change @@ -145,6 +145,25 @@ class DependencySpecification {
145145 assertEquals(Set (" abc.A" ), deps(" H" ))
146146 }
147147
148+ @ Test
149+ def extractedClassDependenciesOnPackageObject = {
150+ val srcA = " package object foo { def bar = 1 }"
151+ val srcB =
152+ """ |package foo
153+ |
154+ |class Test {
155+ | bar
156+ |}
157+ """ .stripMargin
158+
159+ val compilerForTesting = new ScalaCompilerForUnitTesting
160+ val classDependencies =
161+ compilerForTesting.extractDependenciesFromSrcs(srcA, srcB)
162+
163+ val memberRef = classDependencies.memberRef
164+ assertEquals(Set (" foo.package" ), memberRef(" foo.Test" ))
165+ }
166+
148167 private def extractClassDependenciesPublic : ExtractedClassDependencies = {
149168 val srcA = " class A"
150169 val srcB = " class B extends D[A]"
Original file line number Diff line number Diff line change @@ -275,6 +275,21 @@ class ExtractUsedNamesSpecification {
275275 assertEquals(Set (), findPatMatUsages(notUsedInPatternMatch))
276276 }
277277
278+ @ Test
279+ def extractedNamesInImport = {
280+ val src =
281+ """ |import java.util.List
282+ |
283+ |class Test
284+ """ .stripMargin
285+
286+ val compilerForTesting = new ScalaCompilerForUnitTesting
287+ val usedNames = compilerForTesting.extractUsedNamesFromSrc(src)
288+
289+ val expectedNames = standardNames ++ Set (" java" , " util" , " List" )
290+ assertEquals(expectedNames, usedNames(" Test" ))
291+ }
292+
278293 /**
279294 * Standard names that appear in every compilation unit that has any class
280295 * definition.
Original file line number Diff line number Diff line change 1+ package foo
2+
3+ object Test {
4+ def test (implicit x : Int = 1 ): String = x.toString
5+ def main (args : Array [String ]): Unit = test
6+ }
Original file line number Diff line number Diff line change 1+ package object foo {
2+ implicit val x : Int = ???
3+ }
Original file line number Diff line number Diff line change 1+ > run
2+
3+ $ copy-file changes/package.scala package.scala
4+
5+ # New implicit in scope from package object that makes run throws
6+ # clean run fails correctly
7+ -> run
Original file line number Diff line number Diff line change 1+ import sbt ._
2+ import Keys ._
3+
4+ object DottyInjectedPlugin extends AutoPlugin {
5+ override def requires = plugins.JvmPlugin
6+ override def trigger = allRequirements
7+
8+ override val projectSettings = Seq (
9+ scalaVersion := sys.props(" plugin.scalaVersion" ),
10+ scalacOptions += " -language:Scala2"
11+ )
12+ }
Original file line number Diff line number Diff line change 1+ addSbtPlugin(" ch.epfl.lamp" % " sbt-dotty" % sys.props(" plugin.version" ))
You can’t perform that action at this time.
0 commit comments