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

Commit ceef505

Browse files
committed
Merge pull request #63 from sschaef/t1002221-mods-without-return-type
T1002221 mods without return type
2 parents 7c7e481 + a99e88d commit ceef505

File tree

2 files changed

+68
-3
lines changed

2 files changed

+68
-3
lines changed

org.scala-refactoring.library/src/main/scala/scala/tools/refactoring/sourcegen/ReusingPrinter.scala

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,19 @@ trait ReusingPrinter extends TreePrintingTraversals with AbstractPrinter {
977977
}
978978

979979
val body = p(rhs)
980-
val resultType = p(tpt, before = Requisite.allowSurroundingWhitespace(":", ": "))
980+
981+
def existsTptInFile = tpt match {
982+
case tpt: TypeTree =>
983+
lazy val textInFile = betweenStartAndEnd(tpt).asText
984+
tpt.pos.isRange && (textInFile == tpt.toString() || textInFile == tpt.original.toString())
985+
case _ => false
986+
}
987+
988+
val resultType =
989+
if (body == EmptyFragment && !existsTptInFile)
990+
EmptyFragment
991+
else
992+
p(tpt, before = Requisite.allowSurroundingWhitespace(":", ": "))
981993

982994
def hasEqualInSource = {
983995
val originalDefDef = orig(tree)

org.scala-refactoring.library/src/test/scala/scala/tools/refactoring/tests/sourcegen/ReusingPrinterTest.scala

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ReusingPrinterTest extends TestHelper with SilentTracing {
2626
def printsTo(expectedOutput: String): Unit = {
2727
val sourceFile = new BatchSourceFile("noname", expectedOutput)
2828
val expected = stripWhitespacePreservers(expectedOutput).trim()
29-
val actual = generate(original, sourceFile = Some(sourceFile)).asText.trim()
29+
val actual = ask { () => generate(original, sourceFile = Some(sourceFile)).asText.trim() }
3030
if (actual != expected)
3131
throw new ComparisonFailure("", expected, actual)
3232
}
@@ -36,7 +36,7 @@ class ReusingPrinterTest extends TestHelper with SilentTracing {
3636
}
3737
final implicit class OrToDieAfter(input: (String, String)) {
3838
def after(trans: Transformation[Tree, Tree]): Unit = {
39-
val t = trans(treeFrom(input._1))
39+
val t = ask { () => trans(treeFrom(input._1)) }
4040
require(t.isDefined, "transformation was not successful")
4141
t foreach (_.printsTo(input._2))
4242
}
@@ -146,4 +146,57 @@ class ReusingPrinterTest extends TestHelper with SilentTracing {
146146
d.copy(mods = d.mods.withFlag(Flag.FINAL).withFlag(Flag.CASE).withFlag(Flag.PRIVATE)) replaces d
147147
}
148148
}}
149+
150+
@Test
151+
def add_modifier_to_def_without_return_type() = """
152+
trait T {
153+
def meth: Int
154+
}
155+
trait TT extends T {
156+
def meth
157+
}
158+
""" becomes """
159+
trait T {
160+
def meth: Int
161+
}
162+
trait TT extends T {
163+
override def meth
164+
}
165+
""" after topdown { matchingChildren {
166+
filter {
167+
case d: DefDef =>
168+
d.symbol.isOverridingSymbol && !d.symbol.isOverride
169+
} &>
170+
transform {
171+
case d: DefDef =>
172+
d.copy(mods = d.mods.withFlag(Flag.OVERRIDE)) replaces d
173+
}
174+
}}
175+
176+
@Test
177+
def add_modifier_to_val_without_return_type() = """
178+
trait T {
179+
def meth: Int
180+
}
181+
trait TT extends T {
182+
val meth
183+
}
184+
""" becomes """
185+
trait T {
186+
def meth: Int
187+
}
188+
trait TT extends T {
189+
override val meth
190+
}
191+
""" after topdown { matchingChildren {
192+
filter {
193+
case d: ValDef =>
194+
val getter = d.symbol.getter(d.symbol.owner)
195+
getter.isOverridingSymbol && !getter.isOverride
196+
} &>
197+
transform {
198+
case d: ValDef =>
199+
d.copy(mods = d.mods.withFlag(Flag.OVERRIDE)) replaces d
200+
}
201+
}}
149202
}

0 commit comments

Comments
 (0)