Link Search Menu Expand Document

Base Plugin


Relocate Maven Co-ordinates

This release moves the plugin to com.arcmutate:base. Previous releases were published as com.groupcdg.arcmutate:base.


Bug Fix: NumberFormatException on Kotlin Method Reference

In some situations the code to improve the descriptions of mutations to Java lambdas threw an error when presented with proxy code generated by the Kotlin compiler for method references.


Enhancement: Faster Incremental Analysis

When running incremental analysis in the default mode (i.e. with run_test implicitly set to true) only new and modified tests will now be used to challenge previously surviving mutants.

Previously, the analyser under performed the built in pitest analyser in some circumstances when running in default mode. It will now always provide equal or better performance.


Enhancement: Improved Incremental Analysis

Activating the +arcmutate_history feature will cause pitest to use an improved incremental analyser when working with history files.

This release requires pitest 1.15.0 or above.

Note that history files produced with pitest’s built in incremental analyser are not compatible with arcmutate analyser.


Enhancement: Improved Support For RXJava 3


  • io.reactivex.rxjava3.core.Maybe
  • io.reactivex.rxjava3.core.Observable
  • io.reactivex.rxjava3.core.Flowable

Previously code using common subtypes such as Subject was not mutated.

Enhancement: Support For RXJava 2

REMOVE_DISTINCT, REMOVE_FILTER, REMOVE_SKIP and REMOVE_SORTED updated to support the following types from RXJava 2.

  • io.reactivex.Maybe
  • io.reactivex.Observable
  • io.reactivex.Flowable

Supported calls on subtypes of these classes will also be mutated.

Bug Fix: Filter Junk One Less Param Mutations

The ONE_LESS_PARAM mutator created zero argument calls for some methods where a zero parameter overload did not exist. These mutations would always be killed due to a runtime error.

These mutants are now correctly identified and filtered.


Bug Fix: Licence Not Resolved

Licence file not correctly resolved for some gradle builds.



Enhancement: Extreme Mutation Operators


Bug Fix: Swap Mutator Not Properly Isolated

In some circumstances the SWAP_PARAMS mutator interfered with the analysis of other mutants, resulting in false positives (mutation incorrectly killed).


Enhancement: Filter Uncovered Mutants

Mutants without coverage can now be excluded from the report by activating the feature +nouncovered.

As uncovered mutants have a very low processing cost, filtering them does not greatly reduce analysis times. It may be desirable to exclude them when using git integration in mixed or test only mode.


If the plugin is not supplied with the project base dir and dynamic licensing is not being used, it must search backwards for a licence file. This release expands the scope of that search.


Bug Fix: IndexOutOfBoundsException When Using Parameter Swap Mutator

Some users observed IndexOutOfBoundsExceptions when using the SWAP_PARAMS mutator on Kotlin codebases.

This was traced to an issue in how type signatures were parsed when filtering out junk instances of this mutation.


New Feature: Improved Descriptions Lambda Mutations

The base plugin now updates the descriptions of mutants within lambdas and other compiler constructs to be more human readable.

For example for

  boolean foo(List<String> list) {
      .filter(s -> s.startsWith("dog"))

Pitest will produce a mutant with a description like

replaced boolean return with true for com/example/SomeClass::lambda$foo$1

This will be converted to

replaced boolean return with true for 1st lambda in foo

Note, this feature was previously available only for Arcmutate Pro subscribers, but has now been included in the base plugin.


Enhancement: Improved Filtering of Equivalent Reactive Returns Mutants

Improvements to filtering of equivalent mutants in methods with reactive return types such as reactor.core.publisher.Flux and io.reactivex.rxjava3.core.Maybe.

New Feature: Exclusions