diff --git a/analysis_options.yaml b/analysis_options.yaml
index 246b080..124a642 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -14,15 +14,17 @@
     - avoid_function_literals_in_foreach_calls
     - avoid_init_to_null
     - avoid_null_checks_in_equality_operators
+    - avoid_relative_lib_imports
     - avoid_renaming_method_parameters
     - avoid_return_types_on_setters
     - avoid_returning_null
+    - avoid_returning_null_for_future
+    - avoid_shadowing_type_parameters
     - avoid_types_as_parameter_names
     - avoid_unused_constructor_parameters
     - await_only_futures
     - camel_case_types
     - cancel_subscriptions
-    #- cascade_invocations
     - comment_references
     - constant_identifier_names
     - control_flow_in_finally
@@ -41,10 +43,11 @@
     - no_adjacent_strings_in_list
     - no_duplicate_case_values
     - non_constant_identifier_names
+    - null_closures
     - omit_local_variable_types
     - only_throw_errors
     - overridden_fields
-    #- package_api_docs
+    - package_api_docs
     - package_names
     - package_prefixed_library_names
     - prefer_adjacent_string_concatenation
@@ -67,10 +70,14 @@
     - throw_in_finally
     - type_init_formals
     - unawaited_futures
+    - unnecessary_await_in_return
     - unnecessary_brace_in_string_interps
+    - unnecessary_const
     - unnecessary_getters_setters
     - unnecessary_lambdas
+    - unnecessary_new
     - unnecessary_null_aware_assignments
+    - unnecessary_parenthesis
     - unnecessary_statements
     - unnecessary_this
     - unrelated_type_equality_checks
diff --git a/lib/mirror_matchers.dart b/lib/mirror_matchers.dart
index eb2225a..24a2201 100644
--- a/lib/mirror_matchers.dart
+++ b/lib/mirror_matchers.dart
@@ -12,7 +12,7 @@
 /// with name [name], and optionally, if that property in turn satisfies
 /// a [matcher].
 Matcher hasProperty(String name, [matcher]) =>
-    new _HasProperty(name, matcher == null ? null : wrapMatcher(matcher));
+    _HasProperty(name, matcher == null ? null : wrapMatcher(matcher));
 
 class _HasProperty extends Matcher {
   final String _name;
@@ -23,7 +23,7 @@
   bool matches(item, Map matchState) {
     var mirror = reflect(item);
     var classMirror = mirror.type;
-    var symbol = new Symbol(_name);
+    var symbol = Symbol(_name);
     var candidate = classMirror.declarations[symbol];
     if (candidate == null) {
       addStateInfo(matchState, {'reason': 'has no property named "$_name"'});
@@ -65,7 +65,7 @@
       mismatchDescription
           .add('has property "$_name" with value ')
           .addDescriptionOf(matchState['value']);
-      var innerDescription = new StringDescription();
+      var innerDescription = StringDescription();
       _matcher.describeMismatch(matchState['value'], innerDescription,
           matchState['state'] as Map, verbose);
       if (innerDescription.length > 0) {
diff --git a/lib/src/core_matchers.dart b/lib/src/core_matchers.dart
index 86bb1db..7d9da1c 100644
--- a/lib/src/core_matchers.dart
+++ b/lib/src/core_matchers.dart
@@ -8,7 +8,7 @@
 import 'util.dart';
 
 /// Returns a matcher that matches the isEmpty property.
-const Matcher isEmpty = const _Empty();
+const Matcher isEmpty = _Empty();
 
 class _Empty extends Matcher {
   const _Empty();
@@ -19,7 +19,7 @@
 }
 
 /// Returns a matcher that matches the isNotEmpty property.
-const Matcher isNotEmpty = const _NotEmpty();
+const Matcher isNotEmpty = _NotEmpty();
 
 class _NotEmpty extends Matcher {
   const _NotEmpty();
@@ -30,10 +30,10 @@
 }
 
 /// A matcher that matches any null value.
-const Matcher isNull = const _IsNull();
+const Matcher isNull = _IsNull();
 
 /// A matcher that matches any non-null value.
-const Matcher isNotNull = const _IsNotNull();
+const Matcher isNotNull = _IsNotNull();
 
 class _IsNull extends Matcher {
   const _IsNull();
@@ -48,10 +48,10 @@
 }
 
 /// A matcher that matches the Boolean value true.
-const Matcher isTrue = const _IsTrue();
+const Matcher isTrue = _IsTrue();
 
 /// A matcher that matches anything except the Boolean value true.
-const Matcher isFalse = const _IsFalse();
+const Matcher isFalse = _IsFalse();
 
 class _IsTrue extends Matcher {
   const _IsTrue();
@@ -66,10 +66,10 @@
 }
 
 /// A matcher that matches the numeric value NaN.
-const Matcher isNaN = const _IsNaN();
+const Matcher isNaN = _IsNaN();
 
 /// A matcher that matches any non-NaN value.
-const Matcher isNotNaN = const _IsNotNaN();
+const Matcher isNotNaN = _IsNotNaN();
 
 class _IsNaN extends FeatureMatcher<num> {
   const _IsNaN();
@@ -87,7 +87,7 @@
 
 /// Returns a matches that matches if the value is the same instance
 /// as [expected], using [identical].
-Matcher same(expected) => new _IsSameAs(expected);
+Matcher same(expected) => _IsSameAs(expected);
 
 class _IsSameAs extends Matcher {
   final Object _expected;
@@ -99,7 +99,7 @@
 }
 
 /// A matcher that matches any value.
-const Matcher anything = const _IsAnything();
+const Matcher anything = _IsAnything();
 
 class _IsAnything extends Matcher {
   const _IsAnything();
@@ -123,7 +123,7 @@
 /// The value passed to expect() should be a reference to the function.
 /// Note that the function cannot take arguments; to handle this
 /// a wrapper will have to be created.
-const Matcher returnsNormally = const _ReturnsNormally();
+const Matcher returnsNormally = _ReturnsNormally();
 
 class _ReturnsNormally extends FeatureMatcher<Function> {
   const _ReturnsNormally();
@@ -152,14 +152,14 @@
 }
 
 /// A matcher for [Map].
-const isMap = const TypeMatcher<Map>();
+const isMap = TypeMatcher<Map>();
 
 /// A matcher for [List].
-const isList = const TypeMatcher<List>();
+const isList = TypeMatcher<List>();
 
 /// Returns a matcher that matches if an object has a length property
 /// that matches [matcher].
-Matcher hasLength(matcher) => new _HasLength(wrapMatcher(matcher));
+Matcher hasLength(matcher) => _HasLength(wrapMatcher(matcher));
 
 class _HasLength extends Matcher {
   final Matcher _matcher;
@@ -175,7 +175,7 @@
     } catch (e) {
       return false;
     }
-    throw new UnsupportedError('Should never get here');
+    throw UnsupportedError('Should never get here');
   }
 
   Description describe(Description description) =>
@@ -194,7 +194,7 @@
     } catch (e) {
       return mismatchDescription.add('has no length property');
     }
-    throw new UnsupportedError('Should never get here');
+    throw UnsupportedError('Should never get here');
   }
 }
 
@@ -205,7 +205,7 @@
 /// for [Map]s it means the map has the key, and for [Iterable]s
 /// it means the iterable has a matching element. In the case of iterables,
 /// [expected] can itself be a matcher.
-Matcher contains(expected) => new _Contains(expected);
+Matcher contains(expected) => _Contains(expected);
 
 class _Contains extends Matcher {
   final Object _expected;
@@ -246,14 +246,14 @@
 /// the expected value. This is the converse of [contains].
 Matcher isIn(expected) {
   if (expected is Iterable) {
-    return new _In(expected, expected.contains);
+    return _In(expected, expected.contains);
   } else if (expected is String) {
-    return new _In<Pattern>(expected, expected.contains);
+    return _In<Pattern>(expected, expected.contains);
   } else if (expected is Map) {
-    return new _In(expected, expected.containsKey);
+    return _In(expected, expected.containsKey);
   }
 
-  throw new ArgumentError.value(
+  throw ArgumentError.value(
       expected, 'expected', 'Only Iterable, Map, and String are supported.');
 }
 
@@ -277,9 +277,9 @@
 ///     expect(v, predicate((x) => ((x % 2) == 0), "is even"))
 Matcher predicate<T>(bool f(T value),
         [String description = 'satisfies function']) =>
-    new _Predicate(f, description);
+    _Predicate(f, description);
 
-typedef bool _PredicateFunction<T>(T value);
+typedef _PredicateFunction<T> = bool Function(T value);
 
 class _Predicate<T> extends FeatureMatcher<T> {
   final _PredicateFunction<T> _matcher;
diff --git a/lib/src/custom_matcher.dart b/lib/src/custom_matcher.dart
index c3c7270..35c4d7e 100644
--- a/lib/src/custom_matcher.dart
+++ b/lib/src/custom_matcher.dart
@@ -49,7 +49,7 @@
     } catch (exception, stack) {
       addStateInfo(matchState, {
         'custom.exception': exception.toString(),
-        'custom.stack': new Chain.forTrace(stack)
+        'custom.stack': Chain.forTrace(stack)
             .foldFrames(
                 (frame) =>
                     frame.package == 'test' ||
@@ -81,7 +81,7 @@
         .add(_featureName)
         .add(' with value ')
         .addDescriptionOf(matchState['custom.feature']);
-    var innerDescription = new StringDescription();
+    var innerDescription = StringDescription();
 
     _matcher.describeMismatch(matchState['custom.feature'], innerDescription,
         matchState['state'] as Map, verbose);
diff --git a/lib/src/description.dart b/lib/src/description.dart
index 17c5ad4..300798b 100644
--- a/lib/src/description.dart
+++ b/lib/src/description.dart
@@ -9,7 +9,7 @@
 /// substitution, although conceivably it is a place where other languages
 /// could be supported.
 class StringDescription implements Description {
-  final StringBuffer _out = new StringBuffer();
+  final StringBuffer _out = StringBuffer();
 
   /// Initialize the description with initial contents [init].
   StringDescription([String init = '']) {
diff --git a/lib/src/equals_matcher.dart b/lib/src/equals_matcher.dart
index 52f6688..9798d96 100644
--- a/lib/src/equals_matcher.dart
+++ b/lib/src/equals_matcher.dart
@@ -17,8 +17,8 @@
 /// handle cyclic structures a recursion depth [limit] can be provided. The
 /// default limit is 100. [Set]s will be compared order-independently.
 Matcher equals(expected, [int limit = 100]) => expected is String
-    ? new _StringEqualsMatcher(expected)
-    : new _DeepMatcher(expected, limit);
+    ? _StringEqualsMatcher(expected)
+    : _DeepMatcher(expected, limit);
 
 typedef _RecursiveMatcher = List<String> Function(
     dynamic, dynamic, String, int);
@@ -36,7 +36,7 @@
 
   Description describeTypedMismatch(String item,
       Description mismatchDescription, Map matchState, bool verbose) {
-    var buff = new StringBuffer();
+    var buff = StringBuffer();
     buff.write('is different.');
     var escapedItem = escape(item);
     var escapedValue = escape(_value);
@@ -67,7 +67,7 @@
       _writeLeading(buff, escapedItem, start);
       _writeTrailing(buff, escapedItem, start);
       buff.write('\n          ');
-      for (var i = (start > 10 ? 14 : start); i > 0; i--) buff.write(' ');
+      for (var i = start > 10 ? 14 : start; i > 0; i--) buff.write(' ');
       buff.write('^\n Differ at offset $start');
     }
 
@@ -159,7 +159,7 @@
       var matchState = {};
       if (expected.matches(actual, matchState)) return null;
 
-      var description = new StringDescription();
+      var description = StringDescription();
       expected.describe(description);
       return ['does not match $description', location];
     } else {
@@ -184,7 +184,7 @@
             expected, actual, _recursiveMatch, depth + 1, location);
       } else if (expected is Map) {
         if (actual is! Map) return ['expected a map', location];
-        var map = (actual as Map);
+        var map = actual as Map;
         var err =
             (expected.length == map.length) ? '' : 'has different length and ';
         for (var key in expected.keys) {
@@ -209,7 +209,7 @@
       }
     }
 
-    var description = new StringDescription();
+    var description = StringDescription();
 
     // If we have recursed, show the expected value too; if not, expect() will
     // show it for us.
diff --git a/lib/src/error_matchers.dart b/lib/src/error_matchers.dart
index eaa8182..5116975 100644
--- a/lib/src/error_matchers.dart
+++ b/lib/src/error_matchers.dart
@@ -5,39 +5,38 @@
 import 'type_matcher.dart';
 
 /// A matcher for [ArgumentError].
-const isArgumentError = const TypeMatcher<ArgumentError>();
+const isArgumentError = TypeMatcher<ArgumentError>();
 
 /// A matcher for [CastError].
-const isCastError = const TypeMatcher<CastError>();
+const isCastError = TypeMatcher<CastError>();
 
 /// A matcher for [ConcurrentModificationError].
 const isConcurrentModificationError =
-    const TypeMatcher<ConcurrentModificationError>();
+    TypeMatcher<ConcurrentModificationError>();
 
 /// A matcher for [CyclicInitializationError].
-const isCyclicInitializationError =
-    const TypeMatcher<CyclicInitializationError>();
+const isCyclicInitializationError = TypeMatcher<CyclicInitializationError>();
 
 /// A matcher for [Exception].
-const isException = const TypeMatcher<Exception>();
+const isException = TypeMatcher<Exception>();
 
 /// A matcher for [FormatException].
-const isFormatException = const TypeMatcher<FormatException>();
+const isFormatException = TypeMatcher<FormatException>();
 
 /// A matcher for [NoSuchMethodError].
-const isNoSuchMethodError = const TypeMatcher<NoSuchMethodError>();
+const isNoSuchMethodError = TypeMatcher<NoSuchMethodError>();
 
 /// A matcher for [NullThrownError].
-const isNullThrownError = const TypeMatcher<NullThrownError>();
+const isNullThrownError = TypeMatcher<NullThrownError>();
 
 /// A matcher for [RangeError].
-const isRangeError = const TypeMatcher<RangeError>();
+const isRangeError = TypeMatcher<RangeError>();
 
 /// A matcher for [StateError].
-const isStateError = const TypeMatcher<StateError>();
+const isStateError = TypeMatcher<StateError>();
 
 /// A matcher for [UnimplementedError].
-const isUnimplementedError = const TypeMatcher<UnimplementedError>();
+const isUnimplementedError = TypeMatcher<UnimplementedError>();
 
 /// A matcher for [UnsupportedError].
-const isUnsupportedError = const TypeMatcher<UnsupportedError>();
+const isUnsupportedError = TypeMatcher<UnsupportedError>();
diff --git a/lib/src/having_matcher.dart b/lib/src/having_matcher.dart
index 8ca98c6..259ffa7 100644
--- a/lib/src/having_matcher.dart
+++ b/lib/src/having_matcher.dart
@@ -19,12 +19,11 @@
       : _parent = parent,
         _functionMatchers = <_FunctionMatcher>[]
           ..addAll(existing ?? [])
-          ..add(new _FunctionMatcher<T>(description, feature, matcher));
+          ..add(_FunctionMatcher<T>(description, feature, matcher));
 
   TypeMatcher<T> having(
           Object feature(T source), String description, Object matcher) =>
-      new HavingMatcher(
-          _parent, description, feature, matcher, _functionMatchers);
+      HavingMatcher(_parent, description, feature, matcher, _functionMatchers);
 
   bool matches(item, Map matchState) {
     for (var matcher in <Matcher>[_parent].followedBy(_functionMatchers)) {
diff --git a/lib/src/iterable_matchers.dart b/lib/src/iterable_matchers.dart
index 02c41aa..4884b4e 100644
--- a/lib/src/iterable_matchers.dart
+++ b/lib/src/iterable_matchers.dart
@@ -10,7 +10,7 @@
 
 /// Returns a matcher which matches [Iterable]s in which all elements
 /// match the given [matcher].
-Matcher everyElement(matcher) => new _EveryElement(wrapMatcher(matcher));
+Matcher everyElement(matcher) => _EveryElement(wrapMatcher(matcher));
 
 class _EveryElement extends _IterableMatcher {
   final Matcher _matcher;
@@ -41,7 +41,7 @@
           .add('has value ')
           .addDescriptionOf(element)
           .add(' which ');
-      var subDescription = new StringDescription();
+      var subDescription = StringDescription();
       _matcher.describeMismatch(
           element, subDescription, matchState['state'] as Map, verbose);
       if (subDescription.length > 0) {
@@ -60,7 +60,7 @@
 
 /// Returns a matcher which matches [Iterable]s in which at least one
 /// element matches the given [matcher].
-Matcher anyElement(matcher) => new _AnyElement(wrapMatcher(matcher));
+Matcher anyElement(matcher) => _AnyElement(wrapMatcher(matcher));
 
 class _AnyElement extends _IterableMatcher {
   final Matcher _matcher;
@@ -78,7 +78,7 @@
 /// length and the same elements as [expected], in the same order.
 ///
 /// This is equivalent to [equals] but does not recurse.
-Matcher orderedEquals(Iterable expected) => new _OrderedEquals(expected);
+Matcher orderedEquals(Iterable expected) => _OrderedEquals(expected);
 
 class _OrderedEquals extends _IterableMatcher {
   final Iterable _expected;
@@ -104,7 +104,7 @@
 ///
 /// Note that this is worst case O(n^2) runtime and memory usage so it should
 /// only be used on small iterables.
-Matcher unorderedEquals(Iterable expected) => new _UnorderedEquals(expected);
+Matcher unorderedEquals(Iterable expected) => _UnorderedEquals(expected);
 
 class _UnorderedEquals extends _UnorderedMatches {
   final List _expectedValues;
@@ -130,7 +130,7 @@
 ///
 /// Note that this is worst case O(n^2) runtime and memory usage so it should
 /// only be used on small iterables.
-Matcher unorderedMatches(Iterable expected) => new _UnorderedMatches(expected);
+Matcher unorderedMatches(Iterable expected) => _UnorderedMatches(expected);
 
 class _UnorderedMatches extends _IterableMatcher {
   final List<Matcher> _expected;
@@ -148,8 +148,7 @@
       return 'has too many elements (${values.length} > ${_expected.length})';
     }
 
-    var edges =
-        new List.generate(values.length, (_) => <int>[], growable: false);
+    var edges = List.generate(values.length, (_) => <int>[], growable: false);
     for (var v = 0; v < values.length; v++) {
       for (var m = 0; m < _expected.length; m++) {
         if (_expected[m].matches(values[v], {})) {
@@ -159,7 +158,7 @@
     }
     // The index into `values` matched with each matcher or `null` if no value
     // has been matched yet.
-    var matched = new List<int>(_expected.length);
+    var matched = List<int>(_expected.length);
     for (var valueIndex = 0; valueIndex < values.length; valueIndex++) {
       _findPairing(edges, valueIndex, matched);
     }
@@ -167,7 +166,7 @@
         matcherIndex < _expected.length;
         matcherIndex++) {
       if (matched[matcherIndex] == null) {
-        final description = new StringDescription()
+        final description = StringDescription()
             .add('has no match for ')
             .addDescriptionOf(_expected[matcherIndex])
             .add(' at index $matcherIndex');
@@ -203,7 +202,7 @@
   /// tracks the matchers that have been used _during_ this search.
   bool _findPairing(List<List<int>> edges, int valueIndex, List<int> matched,
       [Set<int> reserved]) {
-    reserved ??= new Set<int>();
+    reserved ??= Set<int>();
     final possiblePairings =
         edges[valueIndex].where((m) => !reserved.contains(m));
     for (final matcherIndex in possiblePairings) {
@@ -228,9 +227,9 @@
 /// [description] should be a meaningful name for the comparator.
 Matcher pairwiseCompare<S, T>(
         Iterable<S> expected, bool comparator(S a, T b), String description) =>
-    new _PairwiseCompare(expected, comparator, description);
+    _PairwiseCompare(expected, comparator, description);
 
-typedef bool _Comparator<S, T>(S a, T b);
+typedef _Comparator<S, T> = bool Function(S a, T b);
 
 class _PairwiseCompare<S, T> extends _IterableMatcher {
   final Iterable<S> _expected;
@@ -291,7 +290,7 @@
 ///
 /// Note that this is worst case O(n^2) runtime and memory usage so it should
 /// only be used on small iterables.
-Matcher containsAll(Iterable expected) => new _ContainsAll(expected);
+Matcher containsAll(Iterable expected) => _ContainsAll(expected);
 
 class _ContainsAll extends _UnorderedMatches {
   final Iterable _unwrappedExpected;
@@ -312,8 +311,7 @@
 /// `containsAllInOrder([2, 1])` or `containsAllInOrder([1, 2, 3])`.
 ///
 /// Will only match values which implement [Iterable].
-Matcher containsAllInOrder(Iterable expected) =>
-    new _ContainsAllInOrder(expected);
+Matcher containsAllInOrder(Iterable expected) => _ContainsAllInOrder(expected);
 
 class _ContainsAllInOrder extends _IterableMatcher {
   final Iterable _expected;
@@ -327,7 +325,7 @@
       if (matchers[matcherIndex].matches(value, matchState)) matcherIndex++;
       if (matcherIndex == matchers.length) return null;
     }
-    return new StringDescription()
+    return StringDescription()
         .add('did not find a value matching ')
         .addDescriptionOf(matchers[matcherIndex])
         .add(' following expected prior values')
diff --git a/lib/src/map_matchers.dart b/lib/src/map_matchers.dart
index 9825c9b..8671323 100644
--- a/lib/src/map_matchers.dart
+++ b/lib/src/map_matchers.dart
@@ -6,7 +6,7 @@
 import 'util.dart';
 
 /// Returns a matcher which matches maps containing the given [value].
-Matcher containsValue(value) => new _ContainsValue(value);
+Matcher containsValue(value) => _ContainsValue(value);
 
 class _ContainsValue extends Matcher {
   final Object _value;
@@ -20,8 +20,7 @@
 
 /// Returns a matcher which matches maps containing the key-value pair
 /// with [key] => [value].
-Matcher containsPair(key, value) =>
-    new _ContainsMapping(key, wrapMatcher(value));
+Matcher containsPair(key, value) => _ContainsMapping(key, wrapMatcher(value));
 
 class _ContainsMapping extends Matcher {
   final Object _key;
diff --git a/lib/src/numeric_matchers.dart b/lib/src/numeric_matchers.dart
index 4187078..0497849 100644
--- a/lib/src/numeric_matchers.dart
+++ b/lib/src/numeric_matchers.dart
@@ -10,7 +10,7 @@
 ///
 /// In other words, this matches if the match argument is greater than
 /// than or equal [value]-[delta] and less than or equal to [value]+[delta].
-Matcher closeTo(num value, num delta) => new _IsCloseTo(value, delta);
+Matcher closeTo(num value, num delta) => _IsCloseTo(value, delta);
 
 class _IsCloseTo extends FeatureMatcher<num> {
   final num _value, _delta;
@@ -20,7 +20,7 @@
   bool typedMatches(item, Map matchState) {
     var diff = item - _value;
     if (diff < 0) diff = -diff;
-    return (diff <= _delta);
+    return diff <= _delta;
   }
 
   Description describe(Description description) => description
@@ -39,23 +39,22 @@
 
 /// Returns a matcher which matches if the match argument is greater
 /// than or equal to [low] and less than or equal to [high].
-Matcher inInclusiveRange(num low, num high) =>
-    new _InRange(low, high, true, true);
+Matcher inInclusiveRange(num low, num high) => _InRange(low, high, true, true);
 
 /// Returns a matcher which matches if the match argument is greater
 /// than [low] and less than [high].
 Matcher inExclusiveRange(num low, num high) =>
-    new _InRange(low, high, false, false);
+    _InRange(low, high, false, false);
 
 /// Returns a matcher which matches if the match argument is greater
 /// than [low] and less than or equal to [high].
 Matcher inOpenClosedRange(num low, num high) =>
-    new _InRange(low, high, false, true);
+    _InRange(low, high, false, true);
 
 /// Returns a matcher which matches if the match argument is greater
 /// than or equal to a [low] and less than [high].
 Matcher inClosedOpenRange(num low, num high) =>
-    new _InRange(low, high, true, false);
+    _InRange(low, high, true, false);
 
 class _InRange extends FeatureMatcher<num> {
   final num _low, _high;
diff --git a/lib/src/operator_matchers.dart b/lib/src/operator_matchers.dart
index 827fbf1..77ed0c6 100644
--- a/lib/src/operator_matchers.dart
+++ b/lib/src/operator_matchers.dart
@@ -6,7 +6,7 @@
 import 'util.dart';
 
 /// This returns a matcher that inverts [matcher] to its logical negation.
-Matcher isNot(matcher) => new _IsNot(wrapMatcher(matcher));
+Matcher isNot(matcher) => _IsNot(wrapMatcher(matcher));
 
 class _IsNot extends Matcher {
   final Matcher _matcher;
@@ -26,7 +26,7 @@
 /// List argument. Any argument that is not a matcher is implicitly wrapped in a
 /// Matcher to check for equality.
 Matcher allOf(arg0, [arg1, arg2, arg3, arg4, arg5, arg6]) {
-  return new _AllOf(_wrapArgs(arg0, arg1, arg2, arg3, arg4, arg5, arg6));
+  return _AllOf(_wrapArgs(arg0, arg1, arg2, arg3, arg4, arg5, arg6));
 }
 
 class _AllOf extends Matcher {
@@ -67,7 +67,7 @@
 /// Any argument that is not a matcher is implicitly wrapped in a
 /// Matcher to check for equality.
 Matcher anyOf(arg0, [arg1, arg2, arg3, arg4, arg5, arg6]) {
-  return new _AnyOf(_wrapArgs(arg0, arg1, arg2, arg3, arg4, arg5, arg6));
+  return _AnyOf(_wrapArgs(arg0, arg1, arg2, arg3, arg4, arg5, arg6));
 }
 
 class _AnyOf extends Matcher {
@@ -97,7 +97,7 @@
         arg4 != null ||
         arg5 != null ||
         arg6 != null) {
-      throw new ArgumentError('If arg0 is a List, all other arguments must be'
+      throw ArgumentError('If arg0 is a List, all other arguments must be'
           ' null.');
     }
 
diff --git a/lib/src/order_matchers.dart b/lib/src/order_matchers.dart
index a62ffb9..80bc2d5 100644
--- a/lib/src/order_matchers.dart
+++ b/lib/src/order_matchers.dart
@@ -7,46 +7,46 @@
 /// Returns a matcher which matches if the match argument is greater
 /// than the given [value].
 Matcher greaterThan(value) =>
-    new _OrderingMatcher(value, false, false, true, 'a value greater than');
+    _OrderingMatcher(value, false, false, true, 'a value greater than');
 
 /// Returns a matcher which matches if the match argument is greater
 /// than or equal to the given [value].
-Matcher greaterThanOrEqualTo(value) => new _OrderingMatcher(
+Matcher greaterThanOrEqualTo(value) => _OrderingMatcher(
     value, true, false, true, 'a value greater than or equal to');
 
 /// Returns a matcher which matches if the match argument is less
 /// than the given [value].
 Matcher lessThan(value) =>
-    new _OrderingMatcher(value, false, true, false, 'a value less than');
+    _OrderingMatcher(value, false, true, false, 'a value less than');
 
 /// Returns a matcher which matches if the match argument is less
 /// than or equal to the given [value].
-Matcher lessThanOrEqualTo(value) => new _OrderingMatcher(
-    value, true, true, false, 'a value less than or equal to');
+Matcher lessThanOrEqualTo(value) =>
+    _OrderingMatcher(value, true, true, false, 'a value less than or equal to');
 
 /// A matcher which matches if the match argument is zero.
 const Matcher isZero =
-    const _OrderingMatcher(0, true, false, false, 'a value equal to');
+    _OrderingMatcher(0, true, false, false, 'a value equal to');
 
 /// A matcher which matches if the match argument is non-zero.
 const Matcher isNonZero =
-    const _OrderingMatcher(0, false, true, true, 'a value not equal to');
+    _OrderingMatcher(0, false, true, true, 'a value not equal to');
 
 /// A matcher which matches if the match argument is positive.
 const Matcher isPositive =
-    const _OrderingMatcher(0, false, false, true, 'a positive value', false);
+    _OrderingMatcher(0, false, false, true, 'a positive value', false);
 
 /// A matcher which matches if the match argument is zero or negative.
 const Matcher isNonPositive =
-    const _OrderingMatcher(0, true, true, false, 'a non-positive value', false);
+    _OrderingMatcher(0, true, true, false, 'a non-positive value', false);
 
 /// A matcher which matches if the match argument is negative.
 const Matcher isNegative =
-    const _OrderingMatcher(0, false, true, false, 'a negative value', false);
+    _OrderingMatcher(0, false, true, false, 'a negative value', false);
 
 /// A matcher which matches if the match argument is zero or positive.
 const Matcher isNonNegative =
-    const _OrderingMatcher(0, true, false, true, 'a non-negative value', false);
+    _OrderingMatcher(0, true, false, true, 'a non-negative value', false);
 
 // TODO(kevmoo) Note that matchers that use _OrderingComparison only use
 // `==` and `<` operators to evaluate the match. Or change the matcher.
diff --git a/lib/src/pretty_print.dart b/lib/src/pretty_print.dart
index 1cbe139..71941b8 100644
--- a/lib/src/pretty_print.dart
+++ b/lib/src/pretty_print.dart
@@ -19,14 +19,14 @@
   String _prettyPrint(object, int indent, Set seen, bool top) {
     // If the object is a matcher, use its description.
     if (object is Matcher) {
-      var description = new StringDescription();
+      var description = StringDescription();
       object.describe(description);
       return "<$description>";
     }
 
     // Avoid looping infinitely on recursively-nested data structures.
     if (seen.contains(object)) return "(recursive)";
-    seen = seen.union(new Set.from([object]));
+    seen = seen.union(Set.from([object]));
     String pp(child) => _prettyPrint(child, indent + 2, seen, false);
 
     if (object is Iterable) {
@@ -113,10 +113,10 @@
     }
   }
 
-  return _prettyPrint(object, 0, new Set(), true);
+  return _prettyPrint(object, 0, Set(), true);
 }
 
-String _indent(int length) => new List.filled(length, ' ').join('');
+String _indent(int length) => List.filled(length, ' ').join('');
 
 /// Returns the name of the type of [x], or "Unknown" if the type name can't be
 /// determined.
diff --git a/lib/src/string_matchers.dart b/lib/src/string_matchers.dart
index 47703c3..1d9f1f8 100644
--- a/lib/src/string_matchers.dart
+++ b/lib/src/string_matchers.dart
@@ -7,7 +7,7 @@
 
 /// Returns a matcher which matches if the match argument is a string and
 /// is equal to [value] when compared case-insensitively.
-Matcher equalsIgnoringCase(String value) => new _IsEqualIgnoringCase(value);
+Matcher equalsIgnoringCase(String value) => _IsEqualIgnoringCase(value);
 
 class _IsEqualIgnoringCase extends FeatureMatcher<String> {
   final String _value;
@@ -42,7 +42,7 @@
 ///     expect("helloworld", equalsIgnoringWhitespace("hello world"));
 ///     expect("he llo world", equalsIgnoringWhitespace("hello world"));
 Matcher equalsIgnoringWhitespace(String value) =>
-    new _IsEqualIgnoringWhitespace(value);
+    _IsEqualIgnoringWhitespace(value);
 
 class _IsEqualIgnoringWhitespace extends FeatureMatcher<String> {
   final String _value;
@@ -69,7 +69,7 @@
 
 /// Returns a matcher that matches if the match argument is a string and
 /// starts with [prefixString].
-Matcher startsWith(String prefixString) => new _StringStartsWith(prefixString);
+Matcher startsWith(String prefixString) => _StringStartsWith(prefixString);
 
 class _StringStartsWith extends FeatureMatcher<String> {
   final String _prefix;
@@ -84,7 +84,7 @@
 
 /// Returns a matcher that matches if the match argument is a string and
 /// ends with [suffixString].
-Matcher endsWith(String suffixString) => new _StringEndsWith(suffixString);
+Matcher endsWith(String suffixString) => _StringEndsWith(suffixString);
 
 class _StringEndsWith extends FeatureMatcher<String> {
   final String _suffix;
@@ -104,7 +104,7 @@
 /// "abcdefghijklmnopqrstuvwxyz".
 
 Matcher stringContainsInOrder(List<String> substrings) =>
-    new _StringContainsInOrder(substrings);
+    _StringContainsInOrder(substrings);
 
 class _StringContainsInOrder extends FeatureMatcher<String> {
   final List<String> _substrings;
@@ -129,18 +129,18 @@
 ///
 /// [re] can be a [RegExp] instance or a [String]; in the latter case it will be
 /// used to create a RegExp instance.
-Matcher matches(re) => new _MatchesRegExp(re);
+Matcher matches(re) => _MatchesRegExp(re);
 
 class _MatchesRegExp extends FeatureMatcher<String> {
   RegExp _regexp;
 
   _MatchesRegExp(re) {
     if (re is String) {
-      _regexp = new RegExp(re);
+      _regexp = RegExp(re);
     } else if (re is RegExp) {
       _regexp = re;
     } else {
-      throw new ArgumentError('matches requires a regexp or string');
+      throw ArgumentError('matches requires a regexp or string');
     }
   }
 
@@ -153,7 +153,7 @@
 /// Utility function to collapse whitespace runs to single spaces
 /// and strip leading/trailing whitespace.
 String collapseWhitespace(String string) {
-  var result = new StringBuffer();
+  var result = StringBuffer();
   var skipSpace = true;
   for (var i = 0; i < string.length; i++) {
     var character = string[i];
diff --git a/lib/src/type_matcher.dart b/lib/src/type_matcher.dart
index 1f2db26..885b3ae 100644
--- a/lib/src/type_matcher.dart
+++ b/lib/src/type_matcher.dart
@@ -67,7 +67,7 @@
   /// ```
   TypeMatcher<T> having(
           Object feature(T source), String description, Object matcher) =>
-      new HavingMatcher(this, description, feature, matcher);
+      HavingMatcher(this, description, feature, matcher);
 
   Description describe(Description description) {
     var name = _name ?? _stripDynamic(T);
@@ -77,7 +77,7 @@
   bool matches(Object item, Map matchState) => item is T;
 }
 
-final _dart2DynamicArgs = new RegExp('<dynamic(, dynamic)*>');
+final _dart2DynamicArgs = RegExp('<dynamic(, dynamic)*>');
 
 /// With this expression `{}.runtimeType.toString`,
 /// Dart 1: "<Instance of Map>
diff --git a/lib/src/util.dart b/lib/src/util.dart
index 1df39ef..6c52b42 100644
--- a/lib/src/util.dart
+++ b/lib/src/util.dart
@@ -6,10 +6,10 @@
 import 'equals_matcher.dart';
 import 'interfaces.dart';
 
-typedef bool _Predicate<T>(T value);
+typedef _Predicate<T> = bool Function(T value);
 
 /// A [Map] between whitespace characters and their escape sequences.
-const _escapeMap = const {
+const _escapeMap = {
   '\n': r'\n',
   '\r': r'\r',
   '\f': r'\f',
@@ -20,12 +20,12 @@
 };
 
 /// A [RegExp] that matches whitespace characters that should be escaped.
-final _escapeRegExp = new RegExp(
+final _escapeRegExp = RegExp(
     "[\\x00-\\x07\\x0E-\\x1F${_escapeMap.keys.map(_getHexLiteral).join()}]");
 
 /// Useful utility for nesting match states.
 void addStateInfo(Map matchState, Map values) {
-  var innerState = new Map.from(matchState);
+  var innerState = Map.from(matchState);
   matchState.clear();
   matchState['state'] = innerState;
   matchState.addAll(values);
diff --git a/pubspec.yaml b/pubspec.yaml
index 7c598b9..227d852 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,12 +1,12 @@
 name: matcher
-version: 0.12.4
+version: 0.12.5-dev
 
 description: Support for specifying test expectations
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/matcher
 
 environment:
-  sdk: '>=2.0.0-dev.17.0 <3.0.0'
+  sdk: '>=2.0.0 <3.0.0'
 
 dependencies:
   stack_trace: ^1.2.0
diff --git a/test/custom_matcher_test.dart b/test/custom_matcher_test.dart
index 537679c..e8cd22c 100644
--- a/test/custom_matcher_test.dart
+++ b/test/custom_matcher_test.dart
@@ -9,7 +9,7 @@
 
 class _BadCustomMatcher extends CustomMatcher {
   _BadCustomMatcher() : super("feature", "description", {1: "a"});
-  Object featureValueOf(actual) => throw new Exception("bang");
+  Object featureValueOf(actual) => throw Exception("bang");
 }
 
 class _HasPrice extends CustomMatcher {
@@ -19,13 +19,13 @@
 
 void main() {
   test("Feature Matcher", () {
-    var w = new Widget();
+    var w = Widget();
     w.price = 10;
-    shouldPass(w, new _HasPrice(10));
-    shouldPass(w, new _HasPrice(greaterThan(0)));
+    shouldPass(w, _HasPrice(10));
+    shouldPass(w, _HasPrice(greaterThan(0)));
     shouldFail(
         w,
-        new _HasPrice(greaterThan(10)),
+        _HasPrice(greaterThan(10)),
         "Expected: Widget with a price that is a value greater than <10> "
         "Actual: <Instance of 'Widget'> "
         "Which: has price with value <10> which is not "
@@ -35,7 +35,7 @@
   test("Custom Matcher Exception", () {
     shouldFail(
         "a",
-        new _BadCustomMatcher(),
+        _BadCustomMatcher(),
         allOf([
           contains("Expected: feature {1: 'a'} "),
           contains("Actual: 'a' "),
diff --git a/test/having_test.dart b/test/having_test.dart
index 31cf7ac..cc0f20a 100644
--- a/test/having_test.dart
+++ b/test/having_test.dart
@@ -9,12 +9,12 @@
 
 void main() {
   test('success', () {
-    shouldPass(new RangeError('details'), _rangeMatcher);
+    shouldPass(RangeError('details'), _rangeMatcher);
   });
 
   test('failure', () {
     shouldFail(
-        new RangeError.range(-1, 1, 10),
+        RangeError.range(-1, 1, 10),
         _rangeMatcher,
         "Expected: <Instance of 'RangeError'> with "
         "`message`: contains 'details' and `start`: null and `end`: null "
@@ -26,7 +26,7 @@
   // This code is used in the [TypeMatcher] doc comments.
   test('integaration and example', () {
     void shouldThrowRangeError(int value) {
-      throw new RangeError.range(value, 10, 20);
+      throw RangeError.range(value, 10, 20);
     }
 
     expect(
@@ -44,7 +44,7 @@
 
   group('CustomMater copy', () {
     test("Feature Matcher", () {
-      var w = new Widget();
+      var w = Widget();
       w.price = 10;
       shouldPass(w, _hasPrice(10));
       shouldPass(w, _hasPrice(greaterThan(0)));
@@ -67,7 +67,7 @@
             contains("Actual: 'a'"),
           ]));
       shouldFail(
-          new Widget(),
+          Widget(),
           _badCustomMatcher(),
           allOf([
             contains(
@@ -88,4 +88,4 @@
     const TypeMatcher<Widget>().having((e) => e.price, 'price', matcher);
 
 Matcher _badCustomMatcher() => const TypeMatcher<Widget>()
-    .having((e) => throw new Exception("bang"), 'feature', {1: "a"});
+    .having((e) => throw Exception("bang"), 'feature', {1: "a"});
diff --git a/test/iterable_matchers_test.dart b/test/iterable_matchers_test.dart
index 7c28338..583e17d 100644
--- a/test/iterable_matchers_test.dart
+++ b/test/iterable_matchers_test.dart
@@ -326,8 +326,8 @@
   });
 
   test('isEmpty', () {
-    var d = new SimpleIterable(0);
-    var e = new SimpleIterable(1);
+    var d = SimpleIterable(0);
+    var e = SimpleIterable(1);
     shouldPass(d, isEmpty);
     shouldFail(
         e,
@@ -337,8 +337,8 @@
   });
 
   test('isNotEmpty', () {
-    var d = new SimpleIterable(0);
-    var e = new SimpleIterable(1);
+    var d = SimpleIterable(0);
+    var e = SimpleIterable(1);
     shouldPass(e, isNotEmpty);
     shouldFail(
         d,
@@ -348,7 +348,7 @@
   });
 
   test('contains', () {
-    var d = new SimpleIterable(3);
+    var d = SimpleIterable(3);
     shouldPass(d, contains(2));
     shouldFail(
         d,
diff --git a/test/mirror_matchers_test.dart b/test/mirror_matchers_test.dart
index e9f88b4..c88e168 100644
--- a/test/mirror_matchers_test.dart
+++ b/test/mirror_matchers_test.dart
@@ -32,7 +32,7 @@
         'Expected: has property "length" which matches <2> '
         'Actual: [3] '
         'Which: has property "length" with value <1>');
-    var c = new C();
+    var c = C();
     shouldPass(c, hasProperty('instanceField', 1));
     shouldPass(c, hasProperty('instanceGetter', 2));
     shouldFail(
diff --git a/test/pretty_print_test.dart b/test/pretty_print_test.dart
index 59a5950..106deae 100644
--- a/test/pretty_print_test.dart
+++ b/test/pretty_print_test.dart
@@ -229,18 +229,17 @@
   });
   group('with an object', () {
     test('with a default [toString]', () {
-      expect(prettyPrint(new DefaultToString()),
+      expect(prettyPrint(DefaultToString()),
           equals("<Instance of 'DefaultToString'>"));
     });
 
     test('with a custom [toString]', () {
-      expect(prettyPrint(new CustomToString()),
+      expect(prettyPrint(CustomToString()),
           equals('CustomToString:<string representation>'));
     });
 
     test('with a custom [toString] and a private name', () {
-      expect(
-          prettyPrint(new _PrivateName()), equals('?:<string representation>'));
+      expect(prettyPrint(_PrivateName()), equals('?:<string representation>'));
     });
   });
 
@@ -254,7 +253,7 @@
     });
 
     test("that's not a list and has a private name", () {
-      expect(prettyPrint(new _PrivateNameIterable()), equals("?:[1, 2, 3]"));
+      expect(prettyPrint(_PrivateNameIterable()), equals("?:[1, 2, 3]"));
     });
   });
 
diff --git a/test/string_matchers_test.dart b/test/string_matchers_test.dart
index 834df8c..d08d6c3 100644
--- a/test/string_matchers_test.dart
+++ b/test/string_matchers_test.dart
@@ -129,7 +129,7 @@
 
   test('matches', () {
     shouldPass('c0d', matches('[a-z][0-9][a-z]'));
-    shouldPass('c0d', matches(new RegExp('[a-z][0-9][a-z]')));
+    shouldPass('c0d', matches(RegExp('[a-z][0-9][a-z]')));
     shouldFail('cOd', matches('[a-z][0-9][a-z]'),
         "Expected: match '[a-z][0-9][a-z]' Actual: 'cOd'");
     shouldFail(42, matches('[a-z][0-9][a-z]'),
diff --git a/test/test_utils.dart b/test/test_utils.dart
index 22ad681..c0dfcff 100644
--- a/test/test_utils.dart
+++ b/test/test_utils.dart
@@ -34,7 +34,7 @@
 
 void doesNotThrow() {}
 void doesThrow() {
-  throw new StateError('X');
+  throw StateError('X');
 }
 
 class Widget {
@@ -46,7 +46,7 @@
 
   SimpleIterable(this.count);
 
-  Iterator<int> get iterator => new _SimpleIterator(count);
+  Iterator<int> get iterator => _SimpleIterator(count);
 }
 
 class _SimpleIterator implements Iterator<int> {
diff --git a/test/type_matcher_test.dart b/test/type_matcher_test.dart
index 94cbd17..d6f3474 100644
--- a/test/type_matcher_test.dart
+++ b/test/type_matcher_test.dart
@@ -10,21 +10,20 @@
 void main() {
   _test('Map', isMap, {});
   _test('List', isList, []);
-  _test('ArgumentError', isArgumentError, new ArgumentError());
-  _test('CastError', isCastError, new CastError());
+  _test('ArgumentError', isArgumentError, ArgumentError());
+  _test('CastError', isCastError, CastError());
   _test('Exception', isException, const FormatException());
   _test('FormatException', isFormatException, const FormatException());
-  _test('StateError', isStateError, new StateError('oops'));
-  _test('RangeError', isRangeError, new RangeError('oops'));
-  _test('UnimplementedError', isUnimplementedError,
-      new UnimplementedError('oops'));
-  _test('UnsupportedError', isUnsupportedError, new UnsupportedError('oops'));
+  _test('StateError', isStateError, StateError('oops'));
+  _test('RangeError', isRangeError, RangeError('oops'));
+  _test('UnimplementedError', isUnimplementedError, UnimplementedError('oops'));
+  _test('UnsupportedError', isUnsupportedError, UnsupportedError('oops'));
   _test('ConcurrentModificationError', isConcurrentModificationError,
-      new ConcurrentModificationError());
+      ConcurrentModificationError());
   _test('CyclicInitializationError', isCyclicInitializationError,
-      new CyclicInitializationError());
+      CyclicInitializationError());
   _test('NoSuchMethodError', isNoSuchMethodError, null);
-  _test('NullThrownError', isNullThrownError, new NullThrownError());
+  _test('NullThrownError', isNullThrownError, NullThrownError());
 
   group('custom `TypeMatcher`', () {
     // ignore: deprecated_member_use
