Skip to content

Commit f3416a6

Browse files
committed
Refine dependency extraction: Ignore packages
We can ignore packages when collecting dependencies for incremental compilation. We make sure not to ignore dependencies on package object.
1 parent 72dfefb commit f3416a6

File tree

4 files changed

+37
-4
lines changed

4 files changed

+37
-4
lines changed

.drone.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ pipeline:
4949
commands:
5050
- cp -R . /tmp/4/ && cd /tmp/4/
5151
- ./project/scripts/sbt sbt-dotty/scripted
52-
when:
53-
# sbt scripted tests are slow and only run on nightly or deployment
54-
event: [ tag, deployment ]
52+
# when:
53+
# # sbt scripted tests are slow and only run on nightly or deployment
54+
# event: [ tag, deployment ]
5555

5656
# DOCUMENTATION:
5757
documentation:

compiler/src/dotty/tools/dotc/sbt/ExtractDependencies.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ private class ExtractDependenciesCollector extends tpd.TreeTraverser { thisTreeT
315315
!sym.exists ||
316316
sym.unforcedIsAbsent || // ignore dependencies that have a symbol but do not exist.
317317
// e.g. java.lang.Object companion object
318-
sym.is(PackageClass) ||
318+
sym.is(Package) ||
319319
sym.isEffectiveRoot ||
320320
sym.isAnonymousFunction ||
321321
sym.isAnonymousClass

sbt-bridge/test/xsbt/DependencySpecification.scala

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff 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]"

sbt-bridge/test/xsbt/ExtractUsedNamesSpecification.scala

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,20 @@ 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+
assertEquals(standardNames + "List", usedNames("Test"))
290+
}
291+
278292
/**
279293
* Standard names that appear in every compilation unit that has any class
280294
* definition.

0 commit comments

Comments
 (0)