Skip to content

Commit e0730e6

Browse files
author
Antonio Cunei
committed
Fix for AbstractMethodProblem and MissingMethodProblem matching
By using abstract classes, it is possible to preserve the functionality of existing problem filters from previous versions.
1 parent 027979e commit e0730e6

File tree

3 files changed

+11
-7
lines changed

3 files changed

+11
-7
lines changed

core/src/main/scala/com/typesafe/tools/mima/core/Problems.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,13 @@ case class MissingFieldProblem(oldfld: MemberInfo) extends MemberProblem(oldfld)
4848
def description = affectedVersion => oldfld.fieldString + " does not have a correspondent in " + affectedVersion + " version"
4949
}
5050

51-
case class MissingMethodProblem(meth: MemberInfo) extends MemberProblem(meth) {
51+
abstract class MissingMethodProblem(meth: MemberInfo) extends MemberProblem(meth)
52+
53+
case class DirectMissingMethodProblem(meth: MemberInfo) extends MissingMethodProblem(meth) {
5254
def description = affectedVersion => (if (meth.isDeferred && !meth.owner.isTrait) "abstract " else "") + meth.methodString + " does not have a correspondent in " + affectedVersion + " version"
5355
}
5456

55-
case class ReversedMissingMethodProblem(meth: MemberInfo) extends MemberProblem(meth) {
57+
case class ReversedMissingMethodProblem(meth: MemberInfo) extends MissingMethodProblem(meth) {
5658
def description = affectedVersion => (if (meth.isDeferred && !meth.owner.isTrait) "abstract " else "") + meth.methodString + " is present only in " + affectedVersion + " version"
5759
}
5860

@@ -102,7 +104,9 @@ case class IncompatibleResultTypeProblem(oldmeth: MemberInfo, newmeth: MemberInf
102104

103105
// In some older code within Mima, the affectedVersion could be reversed. We split AbstractMethodProblem and MissingMethodProblem
104106
// into two, in case the affected version is the other one, rather than the current one. (reversed if forward check).
105-
case class AbstractMethodProblem(newmeth: MemberInfo) extends MemberProblem(newmeth) {
107+
abstract class AbstractMethodProblem(newmeth: MemberInfo) extends MemberProblem(newmeth)
108+
109+
case class DirectAbstractMethodProblem(newmeth: MemberInfo) extends AbstractMethodProblem(newmeth) {
106110
def description = affectedVersion => "abstract " + newmeth.methodString + " does not have a correspondent in " + affectedVersion + " version"
107111
}
108112

reporter/src/main/scala/com/typesafe/tools/mima/lib/analyze/method/MethodChecker.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ private[analyze] abstract class BaseMethodChecker extends Checker[MemberInfo, Cl
1212
protected def check(method: MemberInfo, in: TraversableOnce[MemberInfo]): Option[Problem] = {
1313
val meths = (in filter (method.params.size == _.params.size)).toList
1414
if (meths.isEmpty)
15-
Some(MissingMethodProblem(method))
15+
Some(DirectMissingMethodProblem(method))
1616
else {
1717
meths find (_.sig == method.sig) match {
1818
case None =>
@@ -77,4 +77,4 @@ private[analyze] class TraitMethodChecker extends BaseMethodChecker {
7777
}
7878
}
7979
}
80-
}
80+
}

reporter/src/main/scala/com/typesafe/tools/mima/lib/analyze/method/MethodRules.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ private[method] object MethodRules {
2929
def apply(thisMember: MemberInfo, thatMember: MemberInfo): Option[Problem] = {
3030
// A concrete member that is made abstract entail a binary incompatibilities because client
3131
// code may be calling it when no concrete implementation exists
32-
if (thisMember.isConcrete && thatMember.isDeferred) Some(AbstractMethodProblem(thatMember))
32+
if (thisMember.isConcrete && thatMember.isDeferred) Some(DirectAbstractMethodProblem(thatMember))
3333
// note: Conversely, an abstract member that is made concrete does not entail incompatibilities
3434
// because no client code relied on it.
3535
else None
3636
}
3737
}
3838

39-
}
39+
}

0 commit comments

Comments
 (0)