Skip to content

Commit 4f1cd43

Browse files
committed
Merge pull request #107 from cunei/fix-back-forw
Fix for AbstractMethodProblem and MissingMethodProblem matching
2 parents 027979e + e0730e6 commit 4f1cd43

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)