Skip to content

Commit aeda050

Browse files
committed
Fix AddMissingOverride for constructor parameter
Fixes #1002225
1 parent c5b22d0 commit aeda050

File tree

2 files changed

+59
-4
lines changed

2 files changed

+59
-4
lines changed

org.scala-ide.sdt.core.tests/src/org/scalaide/extensions/saveactions/AddMissingOverrideTest.scala

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,51 @@ class AddMissingOverrideTest {
126126
abstract override def f = super.f+0
127127
}
128128
""" after SaveEvent
129+
130+
@Test
131+
def add_override_modifier_to_constructor_param() = """^
132+
trait T {
133+
def meth: Int
134+
}
135+
case class C(val meth: Int) extends T
136+
class D(val meth: Int) extends T
137+
""" becomes """^
138+
trait T {
139+
def meth: Int
140+
}
141+
case class C(override val meth: Int) extends T
142+
class D(override val meth: Int) extends T
143+
""" after SaveEvent
144+
145+
@Test
146+
def add_val_keyword_when_override_modifier_is_added_to_constructor_param() = """^
147+
trait T {
148+
def meth: Int
149+
}
150+
case class C(meth: Int) extends T
151+
class D(meth: Int) extends T
152+
""" becomes """^
153+
trait T {
154+
def meth: Int
155+
}
156+
case class C(override val meth: Int) extends T
157+
class D(override val meth: Int) extends T
158+
""" after SaveEvent
159+
160+
@Test
161+
def no_change_to_constructor_param_when_nothing_is_overriden() = """^
162+
trait T {
163+
def meth: Int
164+
}
165+
case class B(meth: Int)
166+
class C(meth: Int)
167+
class D(meth: Int, func: Int) extends T
168+
""" becomes """^
169+
trait T {
170+
def meth: Int
171+
}
172+
case class B(meth: Int)
173+
class C(meth: Int)
174+
class D(override val meth: Int, func: Int) extends T
175+
""" after SaveEvent
129176
}

org.scala-ide.sdt.core/src/org/scalaide/extensions/saveactions/AddMissingOverride.scala

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package org.scalaide.extensions
22
package saveactions
33

4+
import scala.tools.nsc.ast.parser.Tokens
5+
46
object AddMissingOverrideSetting extends SaveActionSetting(
57
id = ExtensionSetting.fullyQualifiedName[AddMissingOverride],
68
name = "Add missing override keyword",
@@ -29,7 +31,7 @@ trait AddMissingOverride extends SaveAction with CompilerSupport {
2931
val symbolWithoutOverride = filter {
3032
case d: ValDef =>
3133
val getter = d.symbol.getterIn(d.symbol.owner)
32-
canOverride(getter)
34+
canOverride(if (getter != NoSymbol) getter else d.symbol)
3335

3436
case d @ (_: DefDef | _: TypeDef) =>
3537
canOverride(d.symbol)
@@ -39,9 +41,15 @@ trait AddMissingOverride extends SaveAction with CompilerSupport {
3941
case d: MemberDef =>
4042
val mods = d.mods.withFlag(Flag.OVERRIDE)
4143
d match {
42-
case d: DefDef => d.copy(mods = mods) replaces d
43-
case d: ValDef => d.copy(mods = mods) replaces d
44-
case d: TypeDef => d.copy(mods = mods) replaces d
44+
case d: DefDef =>
45+
d.copy(mods = mods) replaces d
46+
47+
case d: ValDef =>
48+
val valMods = if (mods.positions.contains(Tokens.VAL)) mods else mods.withFlag(Tokens.VAL)
49+
d.copy(mods = valMods) replaces d
50+
51+
case d: TypeDef =>
52+
d.copy(mods = mods) replaces d
4553
}
4654
}
4755

0 commit comments

Comments
 (0)