Skip to content
This repository has been archived by the owner on Sep 3, 2020. It is now read-only.

Commit

Permalink
Merge pull request #79 from mlangc/organize-imports-and-lazy-vals-100…
Browse files Browse the repository at this point in the history
…2402

Properly handle type annotations on lazy vals when organizing imports
  • Loading branch information
misto committed Mar 16, 2015
2 parents 459e99d + 2b54378 commit ca3ce9f
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 4 deletions.
Expand Up @@ -272,6 +272,15 @@ trait CompilationUnitDependencies extends CompilerApiExtensions with ScalaVersio

super.traverse(t)

// workaround for Assembla ticket #1002402
case t @ ValDef(modifiers, _, tpe: TypeTree, rhs) if modifiers.isLazy =>
tpe.original match {
case s @ Select(qualifier, _) =>
addToResult(s)
super.traverse(rhs)
case _ => super.traverse(t)
}

/*
* classOf[some.Type] is represented by a Literal
* */
Expand Down
Expand Up @@ -16,19 +16,20 @@ class CompilationUnitDependenciesTest extends TestHelper with CompilationUnitDep

import global._

private def assertTrees(expected: String, src: String, javaSrc: String, f: Tree => Seq[Tree]) {
private def assertTrees(expected: String, src: String, javaSrc: String, addScalaSrc: String, f: Tree => Seq[Tree]) {
if (!javaSrc.isEmpty) parseJava(javaSrc)
if (!addScalaSrc.isEmpty) treeFrom(addScalaSrc)
val tree = treeFrom(src)
assertFalse(tree.isErroneous)
val imports = global.ask(() => f(tree).sortBy(_.toString).map(asString))
assertEquals(expected.split("\n").map(_.trim).mkString("\n"), imports.mkString("\n"))
}

def assertNeededImports(expected: String, src: String, javaSrc: String = ""): Unit =
assertTrees(expected, src, javaSrc, neededImports)
def assertNeededImports(expected: String, src: String, javaSrc: String = "", addScalaSrc: String = ""): Unit =
assertTrees(expected, src, javaSrc, addScalaSrc, neededImports)

def assertDependencies(expected: String, src: String): Unit =
assertTrees(expected, src, "", dependencies)
assertTrees(expected, src, "", "", dependencies)

@Test
def evidenceNoImport() = assertNeededImports(
Expand Down Expand Up @@ -1093,4 +1094,65 @@ class CompilationUnitDependenciesTest extends TestHelper with CompilationUnitDep
case _ => false
}
}""")


/*
* See Assembla ticket #1002402
*/
@Test
def testWithTypeOnLazyVal = assertNeededImports(
"java.util.UUID",
"""import java.util.UUID
class ImportsRemovedFromLazyVals2 {
lazy val test: UUID = ImportsFromLazyValsRemoved1.getUuid()
}""",
"",
"""import java.util.UUID
object ImportsFromLazyValsRemoved1 {
def getUuid() = UUID.randomUUID()
}""")

@Test
def testWithLocalTypeThatNeedsNoImportOnLazyVal = assertNeededImports(
"",
"""package test {
class LazyType
object LazyIdiot extends LazyType
object LazyObject {
lazy val l: LazyType = LazyIdiot
}
}""")

@Test
def testWithLocalTypeOnLazyVal = assertNeededImports(
"""test.DarkMagic
test.Magic""",
"""import test._
package test {
class Magic
object DarkMagic extends Magic
}
class AlwaysLazy {
lazy val test: Magic = DarkMagic
}""",
"")

@Test
def testWithoutTypeOnLazyVal = assertNeededImports(
"",
"""import java.util.UUID
class ImportsRemovedFromLazyVals2 {
lazy val test = ImportsFromLazyValsRemoved1.getUuid()
}""",
"",
"""import java.util.UUID
object ImportsFromLazyValsRemoved1 {
def getUuid() = UUID.randomUUID()
}""")
}

0 comments on commit ca3ce9f

Please sign in to comment.