From 3a3688f64af0755cef5a772d322ac80e08498e54 Mon Sep 17 00:00:00 2001 From: Lukas Rytz Date: Fri, 15 Jul 2016 11:32:38 +0200 Subject: SD-128 fix override checks for default methods The check for inheriting two conflicting members was wrong for default methods, leading to a missing error message. We were also not issuing "needs `override' modifier" when overriding a default method. Removes two methods: - `isDeferredOrJavaDefault` had a single use that is removed in this commit. - `isDeferredNotJavaDefault` is redundant with `isDeferred`, because no default method has the `DEFERRED` flag: - For symbols originating in the classfile parser this was the case from day one: default methods don't receive the `DEFERRED` flag. Only abstract interface methods do, as they have the `JAVA_ACC_ABSTRACT` flag in bytecode, which the classfile parser translates to `DEFERRED`. - For symbols created by the Java source parser, we don't add the `DEFERRED` to default methods anymore since 373db1e. Fixes scala/scala-dev#128 --- src/reflect/scala/reflect/internal/Definitions.scala | 2 +- src/reflect/scala/reflect/internal/HasFlags.scala | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'src/reflect') diff --git a/src/reflect/scala/reflect/internal/Definitions.scala b/src/reflect/scala/reflect/internal/Definitions.scala index eca1bbea5a..5025c1fa6d 100644 --- a/src/reflect/scala/reflect/internal/Definitions.scala +++ b/src/reflect/scala/reflect/internal/Definitions.scala @@ -855,7 +855,7 @@ trait Definitions extends api.StandardDefinitions { // must filter out "universal" members (getClass is deferred for some reason) val deferredMembers = ( tp.membersBasedOnFlags(excludedFlags = BridgeAndPrivateFlags, requiredFlags = METHOD).toList.filter( - mem => mem.isDeferredNotJavaDefault && !isUniversalMember(mem) + mem => mem.isDeferred && !isUniversalMember(mem) ) // TODO: test ) diff --git a/src/reflect/scala/reflect/internal/HasFlags.scala b/src/reflect/scala/reflect/internal/HasFlags.scala index e793586e18..dfada48c5e 100644 --- a/src/reflect/scala/reflect/internal/HasFlags.scala +++ b/src/reflect/scala/reflect/internal/HasFlags.scala @@ -122,9 +122,6 @@ trait HasFlags { def isTrait = hasFlag(TRAIT) && !hasFlag(PARAM) def isTraitOrInterface = isTrait || isInterface - def isDeferredOrJavaDefault = hasFlag(DEFERRED | JAVA_DEFAULTMETHOD) - def isDeferredNotJavaDefault = isDeferred && !hasFlag(JAVA_DEFAULTMETHOD) - def flagBitsToString(bits: Long): String = { // Fast path for common case if (bits == 0L) "" else { -- cgit v1.2.3