Skip to content

Commit c07be2a

Browse files
authored
Merge pull request #471 from dwijnand/make-signature-problems-opt-in
Make signature problems opt-in
2 parents 4943295 + 9ed6a88 commit c07be2a

File tree

6 files changed

+28
-11
lines changed

6 files changed

+28
-11
lines changed

README.md

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,18 @@ mimaBinaryIssueFilters ++= Seq(
8888

8989
Most MiMa checks (`DirectMissingMethod`, `IncompatibleResultType`,
9090
`IncompatibleMethType`, etc) are against the method `descriptor`, which
91-
includes the signature without information about generic parameters.
91+
is the "raw" type signature, without any information about generic parameters.
9292

9393
The `IncompatibleSignature` check compares the `Signature`, which includes the
9494
full signature including generic parameters. This can catch real
9595
incompatibilities, but also sometimes triggers for a change in generics that
96-
would not in fact cause problems at run time. To opt-out of this check you can
97-
filter them like this:
96+
would not in fact cause problems at run time. Opt-in to this check by setting:
97+
98+
```scala
99+
ThisBuild / mimaReportSignatureProblems := true
100+
```
101+
102+
Prior to MiMa 0.7 this check was always on, and you could opt-out like this:
98103

99104
```scala
100105
mimaBinaryIssueFilters ++= Seq(

sbtplugin/src/main/scala/com/typesafe/tools/mima/plugin/MimaKeys.scala

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@ object MimaKeys extends MimaKeys
88

99
class MimaKeys {
1010

11-
final val mimaPreviousArtifacts = settingKey[Set[ModuleID]]("Previous released artifacts used to test binary compatibility.")
12-
final val mimaReportBinaryIssues = taskKey[Unit]("Logs all binary incompatibilities to the sbt console/logs.")
13-
final val mimaBinaryIssueFilters = taskKey[Seq[ProblemFilter]]("Filters to apply to binary issues found. Applies both to backward and forward binary compatibility checking.")
14-
final val mimaFailOnProblem = settingKey[Boolean]("if true, fail the build on binary incompatibility detection.")
15-
final val mimaFailOnNoPrevious = settingKey[Boolean]("if true, fail the build if no previous artifacts are set.")
11+
final val mimaPreviousArtifacts = settingKey[Set[ModuleID]]("Previous released artifacts used to test binary compatibility.")
12+
final val mimaReportBinaryIssues = taskKey[Unit]("Logs all binary incompatibilities to the sbt console/logs.")
13+
final val mimaBinaryIssueFilters = taskKey[Seq[ProblemFilter]]("Filters to apply to binary issues found. Applies both to backward and forward binary compatibility checking.")
14+
final val mimaFailOnProblem = settingKey[Boolean]("if true, fail the build on binary incompatibility detection.")
15+
final val mimaFailOnNoPrevious = settingKey[Boolean]("if true, fail the build if no previous artifacts are set.")
16+
final val mimaReportSignatureProblems = settingKey[Boolean]("if true, report `IncompatibleSignatureProblem`s.")
1617

1718
final val mimaPreviousClassfiles = taskKey[Map[ModuleID, File]]("Directories or jars containing the previous class files used to test compatibility with a given module.")
1819
final val mimaCurrentClassfiles = taskKey[File]("Directory or jar containing the current class files used to test compatibility.")

sbtplugin/src/main/scala/com/typesafe/tools/mima/plugin/MimaPlugin.scala

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package plugin
33

44
import sbt._
55
import sbt.Keys._
6+
import com.typesafe.tools.mima.core.{ IncompatibleSignatureProblem, ProblemFilters }
67

78
/** MiMa's sbt plugin. */
89
object MimaPlugin extends AutoPlugin {
@@ -17,6 +18,7 @@ object MimaPlugin extends AutoPlugin {
1718
mimaBinaryIssueFilters := Nil,
1819
mimaFailOnProblem := true,
1920
mimaFailOnNoPrevious := true,
21+
mimaReportSignatureProblems := false,
2022
mimaCheckDirection := "backward",
2123
)
2224

@@ -29,7 +31,7 @@ object MimaPlugin extends AutoPlugin {
2931
problems._1,
3032
problems._2,
3133
mimaFailOnProblem.value,
32-
mimaBinaryIssueFilters.value,
34+
binaryIssueFilters.value,
3335
mimaBackwardIssueFilters.value,
3436
mimaForwardIssueFilters.value,
3537
log,
@@ -63,6 +65,11 @@ object MimaPlugin extends AutoPlugin {
6365
@deprecated("Switch to enablePlugins(MimaPlugin)", "0.7.0")
6466
def mimaDefaultSettings: Seq[Setting[_]] = globalSettings ++ buildSettings ++ projectSettings
6567

68+
private def binaryIssueFilters = Def.task {
69+
val noSigs = ProblemFilters.exclude[IncompatibleSignatureProblem]("*")
70+
mimaBinaryIssueFilters.value ++ (if (mimaReportSignatureProblems.value) Nil else Seq(noSigs))
71+
}
72+
6673
// Allows reuse between mimaFindBinaryIssues and mimaReportBinaryIssues
6774
// without blowing up the Akka build's heap
6875
private def binaryIssuesIterator = Def.task {

sbtplugin/src/sbt-test/sbt-mima-plugin/build-level-keys/test

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@
1515
> set ThisBuild / mimaPreviousArtifacts := Set(organization.value %% name.value % s"0.0.1-SNAPSHOT")
1616
> set ThisBuild / mimaBinaryIssueFilters := Seq(com.typesafe.tools.mima.core.ProblemFilters.exclude(s"MissingMethodProblem", s"A.bar"))
1717
> mimaReportBinaryIssues
18+
19+
# fail, because mimaReportSignatureProblems was set
20+
> set ThisBuild / mimaReportSignatureProblems := true
21+
-> mimaReportBinaryIssues
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
class A {
2-
def foo = 1
2+
def foo = Option(1)
33
def bar = foo
44
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class A {
2-
def foo = 1
2+
def foo = Option("one")
33
}

0 commit comments

Comments
 (0)