File tree 8 files changed +68
-2
lines changed
compiler/src/dotty/tools/dotc/sbt
sbt-dotty/sbt-test/source-dependencies/package-object-implicit
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
295
295
val fromClass = resolveDependencySource
296
296
if (fromClass.exists) { // can happen when visiting imports
297
297
assert(fromClass.isClass)
298
- _dependencies += ClassDependency (fromClass, enclOrModuleClass, DependencyByMemberRef )
298
+
299
299
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
+ }
300
304
}
301
305
}
302
306
@@ -315,7 +319,6 @@ private class ExtractDependenciesCollector extends tpd.TreeTraverser { thisTreeT
315
319
! sym.exists ||
316
320
sym.unforcedIsAbsent || // ignore dependencies that have a symbol but do not exist.
317
321
// e.g. java.lang.Object companion object
318
- sym.is(PackageClass ) ||
319
322
sym.isEffectiveRoot ||
320
323
sym.isAnonymousFunction ||
321
324
sym.isAnonymousClass
Original file line number Diff line number Diff line change @@ -145,6 +145,25 @@ class DependencySpecification {
145
145
assertEquals(Set (" abc.A" ), deps(" H" ))
146
146
}
147
147
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
+
148
167
private def extractClassDependenciesPublic : ExtractedClassDependencies = {
149
168
val srcA = " class A"
150
169
val srcB = " class B extends D[A]"
Original file line number Diff line number Diff line change @@ -275,6 +275,21 @@ class ExtractUsedNamesSpecification {
275
275
assertEquals(Set (), findPatMatUsages(notUsedInPatternMatch))
276
276
}
277
277
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
+
278
293
/**
279
294
* Standard names that appear in every compilation unit that has any class
280
295
* 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