Skip to content

Commit

Permalink
Merge pull request #1244 from dwijnand/compactify
Browse files Browse the repository at this point in the history
Get fullName post flatten, to get flatten names
  • Loading branch information
eed3si9n committed Sep 13, 2023
2 parents 2a57b50 + c7f8b32 commit 5bf1bcc
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ sealed class ZincCompiler(settings: Settings, dreporter: DelegatingReporter, out
}
()
}
loop(suffix.length(), symbol)
exitingFlatten(loop(suffix.length(), symbol))
b.append(suffix)
b.toString
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import java.io.PrintWriter
import xsbti.compile.Output
import scala.reflect.{ internal => sri }
import scala.reflect.internal.{ util => sriu }
import scala.tools.nsc.{ Global, Settings }
import scala.tools.nsc.{ Global, Phase, Settings }
import scala.tools.nsc.interactive.RangePositions
import scala.tools.nsc.symtab.Flags, Flags._

Expand Down Expand Up @@ -150,7 +150,8 @@ abstract class Compat {
}

/** Defines compatibility utils for [[ZincCompiler]]. */
trait ZincGlobalCompat {
trait ZincGlobalCompat { g: Global =>
@inline final def exitingFlatten[T](op: => T): T = atPhase(currentRun.flattenPhase.next)(op)

/** Use `dropRun` only in 2.10.x series. It was removed as of 2.11.0. */
protected def superDropRun(): Unit = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ class IncHandler(directory: Path, cacheDir: Path, scriptedLog: ManagedLogger, co
onArgs("checkProducts") {
case (p, src :: products, i) => p.checkProducts(i, dropRightColon(src), products)
},
onArgs("checkProductsExists") {
case (p, src :: Nil, i) => p.checkProductsExist(i, src)
},
onArgs("checkDependencies") {
case (p, cls :: dependencies, i) => p.checkDependencies(i, dropRightColon(cls), dependencies)
},
Expand Down Expand Up @@ -441,28 +444,32 @@ case class ProjectStructure(
()
}

def getProducts(analysis: Analysis)(srcFile: String): Set[VirtualFileRef] =
analysis.relations.products(converter.toVirtualFile(baseDirectory / srcFile))

def checkProducts(i: IncState, src: String, expected: List[String]): Future[Unit] =
compile(i).map { analysis =>
// def isWindows: Boolean = sys.props("os.name").toLowerCase.startsWith("win")
// def relativeClassDir(f: File): File = f.relativeTo(classesDir) getOrElse f
// def normalizePath(path: String): String = {
// if (isWindows) path.replace('\\', '/') else path
// }
def products(srcFile: String): Set[String] = {
val productFiles = analysis.relations.products(converter.toVirtualFile(baseDirectory / src))
productFiles.map { file: VirtualFileRef =>
// if (JarUtils.isClassInJar(file)) {
// JarUtils.ClassInJar.fromPath(output.toPath).toClassFilePath
// } else {
// normalizePath(relativeClassDir(file).getPath)
// }
file.id
}
}
def assertClasses(expected: Set[String], actual: Set[String]) =
assert(expected == actual, s"Expected $expected products, got $actual")
assert(
expected == actual,
s"""Mismatch:
|Expected:${expected.map("\n " + _).mkString}
|Obtained:${actual.map("\n " + _).mkString}""".stripMargin
)

assertClasses(expected.toSet, products(src))
assertClasses(expected.toSet, getProducts(analysis)(src).map(_.id))
()
}

def checkProductsExist(i: IncState, src: String): Future[Unit] =
compile(i).map { analysis =>
val missing =
for (p <- getProducts(analysis)(src).toList if !Files.exists(converter.toPath(p))) yield p
assert(
missing.isEmpty,
s"""Missing ${missing.size} products:${missing.map("\n " + _).mkString}
|Generated:${generatedClassFiles.get.toList.map("\n " + _).mkString}""".stripMargin
)
()
}

Expand Down
13 changes: 13 additions & 0 deletions zinc/src/sbt-test/source-dependencies/compactify-nested/main.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
class OuterLevelWithVeryVeryVeryLongClassName1 {
class OuterLevelWithVeryVeryVeryLongClassName2 {
class OuterLevelWithVeryVeryVeryLongClassName3 {
class OuterLevelWithVeryVeryVeryLongClassName4 {
class OuterLevelWithVeryVeryVeryLongClassName5 {
class OuterLevelWithVeryVeryVeryLongClassName6 {
class OuterLevelWithVeryVeryVeryLongClassName7
}
}
}
}
}
}
2 changes: 2 additions & 0 deletions zinc/src/sbt-test/source-dependencies/compactify-nested/test
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
> checkProducts main.scala: ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVeryVeryLongClassName2.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVeryVeryLongClassName2$OuterLevelWithVeryVeryVeryLongClassName3.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVeryVeryLongClassName2$OuterLevelWithVeryVeryVeryLongClassName3$OuterLevelWithVeryVeryVeryLongClassName4.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVeryVeryLongClassName2$OuterLevelWithVeryVeryVeryLongClassName3$OuterLevelWithVeryVeryVeryLongClassName4$OuterLevelWithVeryVeryVeryLongClassName5.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVeryVeryLongClassName2$OuterLevelWithVeryVeryVeryLongClassName3$OuterLevelWithVeryVeryVeryLongClassName4$OuterLevelWithVeryVeryVeryLongClassName5$OuterLevelWithVeryVeryVeryLongClassName6.class ${BASE}/target/classes/OuterLevelWithVeryVeryVeryLongClassName1$OuterLevelWithVeryVe$$$$6facba931fe42f8a8c3cee88c4087$$$$ryVeryLongClassName6$OuterLevelWithVeryVeryVeryLongClassName7.class
> checkProductsExists main.scala

0 comments on commit 5bf1bcc

Please sign in to comment.