Skip to content

Commit

Permalink
Don't override fields defined with Java
Browse files Browse the repository at this point in the history
Fields defined with Java can't be overridden on the Scala side, therefore
it shouldn't be done automatically.

Fixes #1002240
  • Loading branch information
kiritsuku committed Sep 9, 2014
1 parent ce78d64 commit 73c44d1
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
Expand Up @@ -245,4 +245,82 @@ class AddMissingOverrideTest {
override var f = 0
}
""" after SaveEvent

@Test
def add_override_to_def_that_overrides_java_method() = {
val jPkg = uniquePkgName()
val sPkg = uniquePkgName()
mkJavaCompilationUnit(s"""
package $jPkg;
public class T {
public String f() { return ""; }
}
""")

s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
def f = ""
}
""" becomes s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
override def f = ""
}
""" after SaveEvent
}

@Test
def add_no_override_to_val_that_overrides_java_field() = {
val jPkg = uniquePkgName()
val sPkg = uniquePkgName()
mkJavaCompilationUnit(s"""
package $jPkg;
public class T {
public String f = "";
}
""")

s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
val f = ""
}
""" becomes s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
val f = ""
}
""" after SaveEvent
}

@Test
def add_no_override_to_def_that_overrides_java_field() = {
val jPkg = uniquePkgName()
val sPkg = uniquePkgName()
mkJavaCompilationUnit(s"""
package $jPkg;
public class T {
public String f = "";
}
""")

s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
def f = ""
}
""" becomes s"""^
package $sPkg
import $jPkg.T
trait TT extends T {
def f = ""
}
""" after SaveEvent
}
}
Expand Up @@ -29,6 +29,12 @@ trait AddMissingOverride extends SaveAction with CompilerSupport {
def canOverride(sym: Symbol) = sym.isOverridingSymbol && !sym.isOverride && !sym.isAbstractOverride

val symbolWithoutOverride = filter {
case d: ValDef if isJavaField(getterOf(d.symbol))
false

case d: DefDef if isJavaField(d.symbol)
false

case d: ValDef if d.mods.positions.contains(Tokens.VAR) && !overridesVar(getterOf(d.symbol))
false

Expand Down Expand Up @@ -90,4 +96,15 @@ trait AddMissingOverride extends SaveAction with CompilerSupport {
symbol.matchingSymbol(sym, baseType).setterIn(sym) != NoSymbol
}
}

private def isJavaField(symbol: Symbol): Boolean = {
val base = symbol.owner
val baseType = base.toType
val bcs = base.info.baseClasses dropWhile (symbol.owner != _) drop 1

bcs exists { sym
val s = symbol.matchingSymbol(sym, baseType)
s.isJava && !s.isMethod
}
}
}

0 comments on commit 73c44d1

Please sign in to comment.