diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab43b18..382b769 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,939 +1,941 @@
+- fixed a bug where `avoid_dynamic_calls` produced false-positives for `.call()`
+
 # 0.1.128
 
-* new lint: `avoid_dynamic_calls`
-* (internal): updated `avoid_type_to_string` to use `addArgumentList` registry API 
-* documentation improvements
+- new lint: `avoid_dynamic_calls`
+- (internal): updated `avoid_type_to_string` to use `addArgumentList` registry API
+- documentation improvements
 
 # 0.1.127
 
-* fixed crash in `prefer_collection_literals` when there is no static parameter
+- fixed crash in `prefer_collection_literals` when there is no static parameter
   element
 
 # 0.1.126
 
-* fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
+- fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
   LinkedHashMap instantiation is passed as the argument to a function in any
   position other than the first
-* fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
+- fixed false negatives for `prefer_collection_literals` when a LinkedHashSet or
   LinkedHashMap instantiation is used in a place with a static type other than
   Set or Map
 
 # 0.1.125
 
-* (internal): update to new `PhysicalResourceProvider` API
+- (internal): update to new `PhysicalResourceProvider` API
 
 # 0.1.124
 
-* fixed false positives in `prefer_constructors_over_static_methods`
-* updated `package_names` to allow leading underscores
+- fixed false positives in `prefer_constructors_over_static_methods`
+- updated `package_names` to allow leading underscores
 
 # 0.1.123
 
-* fixed NPEs in `unnecessary_null_checks`
+- fixed NPEs in `unnecessary_null_checks`
 
 # 0.1.122
 
-* fixed NPE in `unnecessary_null_checks`
-* fixed NPE in `missing_whitespace_between_adjacent_strings`
-* updated `void_checks` for NNBD
-* fixed range error in `unnecessary_string_escapes`
-* fixed false positives in `unnecessary_null_types`
-* fixed `prefer_constructors_over_static_methods` to respect type parameters
-* updated `always_require_non_null_named_parameters` to be NNBD-aware
-* updated `unnecessary_nullable_for_final_variable_declarations` to allow dynamic
-* update `overridden_fields` to not report on abstract parent fields
-* fixes to `unrelated_type_equality_checks` for NNBD
-* improvement to `type_init_formals`to allow types not equal to the field type
+- fixed NPE in `unnecessary_null_checks`
+- fixed NPE in `missing_whitespace_between_adjacent_strings`
+- updated `void_checks` for NNBD
+- fixed range error in `unnecessary_string_escapes`
+- fixed false positives in `unnecessary_null_types`
+- fixed `prefer_constructors_over_static_methods` to respect type parameters
+- updated `always_require_non_null_named_parameters` to be NNBD-aware
+- updated `unnecessary_nullable_for_final_variable_declarations` to allow dynamic
+- update `overridden_fields` to not report on abstract parent fields
+- fixes to `unrelated_type_equality_checks` for NNBD
+- improvement to `type_init_formals`to allow types not equal to the field type
 
 # 0.1.121
 
-* performance improvements to `always_use_package_imports`, `avoid_renaming_method_parameters`, `prefer_relative_imports` and `public_member_api_docs`
-* (internal): update to analyzer `0.40.4` APIs
+- performance improvements to `always_use_package_imports`, `avoid_renaming_method_parameters`, `prefer_relative_imports` and `public_member_api_docs`
+- (internal): update to analyzer `0.40.4` APIs
 
 # 0.1.120
 
-* new lint: `cast_nullable_to_non_nullable`
-* new lint: `null_check_on_nullable_type_parameter`
-* new lint: `tighten_type_of_initializing_formals`
-* update `public_member_apis` to check generic type aliases
-* (internal): update to new analyzer APIs
+- new lint: `cast_nullable_to_non_nullable`
+- new lint: `null_check_on_nullable_type_parameter`
+- new lint: `tighten_type_of_initializing_formals`
+- update `public_member_apis` to check generic type aliases
+- (internal): update to new analyzer APIs
 
 # 0.1.119
 
-* fix `close_sinks` to handle `this`-prefixed property accesses
-* new lint: `unnecessary_null_checks`
-* fix `unawaited_futures` to handle `Future` subtypes
-* new lint: `avoid_type_to_string`
+- fix `close_sinks` to handle `this`-prefixed property accesses
+- new lint: `unnecessary_null_checks`
+- fix `unawaited_futures` to handle `Future` subtypes
+- new lint: `avoid_type_to_string`
 
 # 0.1.118
 
-* new lint: `unnecessary_nullable_for_final_variable_declarations`
-* fixed NPE in `prefer_asserts_in_initializer_lists`
-* fixed range error in `unnecessary_string_escapes`
-* `unsafe_html` updated to support unique error codes
-* updates to `diagnostic_describe_all_properties` to check for `Diagnosticable`s (not `DiagnosticableMixin`s)
-* new lint: `use_late`
-* fixed `unnecessary_lambdas` to respect deferred imports
-* updated `public_member_api_docs` to check mixins
-* updated `unnecessary_statements` to skip `as` expressions
-* fixed `prefer_relative_imports` to work with path dependencies
+- new lint: `unnecessary_nullable_for_final_variable_declarations`
+- fixed NPE in `prefer_asserts_in_initializer_lists`
+- fixed range error in `unnecessary_string_escapes`
+- `unsafe_html` updated to support unique error codes
+- updates to `diagnostic_describe_all_properties` to check for `Diagnosticable`s (not `DiagnosticableMixin`s)
+- new lint: `use_late`
+- fixed `unnecessary_lambdas` to respect deferred imports
+- updated `public_member_api_docs` to check mixins
+- updated `unnecessary_statements` to skip `as` expressions
+- fixed `prefer_relative_imports` to work with path dependencies
 
 # 0.1.117
 
-* fixed `directives_ordering` to remove third party package special-casing
-* fixed `unnecessary_lambdas` to check for tearoff assignability
-* fixed `exhaustive_cases` to not flag missing cases that are defaulted 
-* fixed `prefer_is_empty` to special-case assert initializers and const contexts 
-* test utilities moved to:  `lib/src/test_utilities`
-* new lint: `do_not_use_environment`
+- fixed `directives_ordering` to remove third party package special-casing
+- fixed `unnecessary_lambdas` to check for tearoff assignability
+- fixed `exhaustive_cases` to not flag missing cases that are defaulted
+- fixed `prefer_is_empty` to special-case assert initializers and const contexts
+- test utilities moved to: `lib/src/test_utilities`
+- new lint: `do_not_use_environment`
 
 # 0.1.116
 
-* new lint: `no_default_cases` (experimental)
-* new lint: `exhaustive_cases`
-* updated `type_annotate_public_apis` to allow inferred types in final field assignments
-* updated `prefer_mixin` to allow "legacy" SDK abstract class mixins
-* new lint: `use_is_even_rather_than_modulo`
-* update `unsafe_html` to use a `SecurityLintCode` (making it un-ignorable)
-* improved `sized_box_for_whitespace` to address false-positives
+- new lint: `no_default_cases` (experimental)
+- new lint: `exhaustive_cases`
+- updated `type_annotate_public_apis` to allow inferred types in final field assignments
+- updated `prefer_mixin` to allow "legacy" SDK abstract class mixins
+- new lint: `use_is_even_rather_than_modulo`
+- update `unsafe_html` to use a `SecurityLintCode` (making it un-ignorable)
+- improved `sized_box_for_whitespace` to address false-positives
 
 # 0.1.115
 
-* updated `avoid_types_as_parameter_names` to check catch-clauses
-* fixed `unsafe_html` to check attributes and methods on extensions
-* extended `unsafe_html` to include `Window.open`, `Element.html` and `DocumentFragment.html` in unsafe API checks
-* improved docs for `sort_child_properties_last`
-* (internal) `package:analyzer` API updates
-* new lint: `sized_box_for_whitespace`
+- updated `avoid_types_as_parameter_names` to check catch-clauses
+- fixed `unsafe_html` to check attributes and methods on extensions
+- extended `unsafe_html` to include `Window.open`, `Element.html` and `DocumentFragment.html` in unsafe API checks
+- improved docs for `sort_child_properties_last`
+- (internal) `package:analyzer` API updates
+- new lint: `sized_box_for_whitespace`
 
 # 0.1.114
 
-* fixed `avoid_shadowing_type_parameters` to support extensions and mixins
-* updated `non_constant_identifier_names` to allow named constructors made up of only underscores (`_`)
-* updated `avoid_unused_constructor_parameters` to ignore unused params named in all underscores (`_`)
+- fixed `avoid_shadowing_type_parameters` to support extensions and mixins
+- updated `non_constant_identifier_names` to allow named constructors made up of only underscores (`_`)
+- updated `avoid_unused_constructor_parameters` to ignore unused params named in all underscores (`_`)
 
 # 0.1.113
 
-* updated documentation links
-* `one_member_abstracts` updated to not lint classes with mixins or implementing interfaces
-* `unnecessary_getters_setters` fixed to ignore cases where a getter/setter is deprecated
-* new lint: `leading_newlines_in_multiline_strings`
-* improved highlight ranges for `avoid_private_typedef_functions` and `avoid_returning_null_for_future`
+- updated documentation links
+- `one_member_abstracts` updated to not lint classes with mixins or implementing interfaces
+- `unnecessary_getters_setters` fixed to ignore cases where a getter/setter is deprecated
+- new lint: `leading_newlines_in_multiline_strings`
+- improved highlight ranges for `avoid_private_typedef_functions` and `avoid_returning_null_for_future`
 
 # 0.1.112
 
-* marked `prefer_typing_uninitialized_variables` and `omit_local_variable_types` as compatible
+- marked `prefer_typing_uninitialized_variables` and `omit_local_variable_types` as compatible
 
 # 0.1.111+1
 
-* new lint: `use_raw_strings`
-* new lint: `unnecessary_raw_strings`
-* new lint: `avoid_escaping_inner_quotes`
-* new lint: `unnecessary_string_escapes`
-* incompatible rule documentation improvements
+- new lint: `use_raw_strings`
+- new lint: `unnecessary_raw_strings`
+- new lint: `avoid_escaping_inner_quotes`
+- new lint: `unnecessary_string_escapes`
+- incompatible rule documentation improvements
 
 # 0.1.110
 
-* fixed flutter web plugin detection in `avoid_web_libraries_in_flutter`
-* new lint: `unnecessary_string_interpolations`
-* new lint: `missing_whitespace_between_adjacent_strings`
-* `avoid_unused_constructor_parameters` updated to ignore deprecated parameters
-* new lint: `no_runtimeType_toString`
-* miscellaneous doc fixes
+- fixed flutter web plugin detection in `avoid_web_libraries_in_flutter`
+- new lint: `unnecessary_string_interpolations`
+- new lint: `missing_whitespace_between_adjacent_strings`
+- `avoid_unused_constructor_parameters` updated to ignore deprecated parameters
+- new lint: `no_runtimeType_toString`
+- miscellaneous doc fixes
 
 # 0.1.109
 
-* improved`prefer_single_quotes` lint message
-* `unnecessary_finals` fixed to not flag fields
-* `unnecessary_lambdas` fixed to work with type arguments
-* (internal) migrated to use analyzer `LinterContext.resolveNameInScope()` API
+- improved`prefer_single_quotes` lint message
+- `unnecessary_finals` fixed to not flag fields
+- `unnecessary_lambdas` fixed to work with type arguments
+- (internal) migrated to use analyzer `LinterContext.resolveNameInScope()` API
 
 # 0.1.108
 
-* fixes to `avoid_redundant_argument_values`
-* new lint: `use_key_in_widget_constructors`
-* `always_put_required_parameters` updated for NNBD
-* updated to `package:analyzer` 0.39.3 APIs
+- fixes to `avoid_redundant_argument_values`
+- new lint: `use_key_in_widget_constructors`
+- `always_put_required_parameters` updated for NNBD
+- updated to `package:analyzer` 0.39.3 APIs
 
 # 0.1.107
 
-* miscellaneous doc cleanup (typos, etc)
-* new lint: `avoid_redundant_argument_values`
-* updated `slash_for_doc_comments` to check mixin declarations
-* (internal) updates to use new `LinterContext.evaluateConstant` API
-* improved docs for `always_require_non_null_named_parameters`
+- miscellaneous doc cleanup (typos, etc)
+- new lint: `avoid_redundant_argument_values`
+- updated `slash_for_doc_comments` to check mixin declarations
+- (internal) updates to use new `LinterContext.evaluateConstant` API
+- improved docs for `always_require_non_null_named_parameters`
 
 # 0.1.106
 
-* improved docs for `comment_references`
-* fixed `null_closures` to properly handle `Iterable.singleWhere`
-* (internal) migrated to latest analyzer APIs
-* new lint: `no_logic_in_create_state`
+- improved docs for `comment_references`
+- fixed `null_closures` to properly handle `Iterable.singleWhere`
+- (internal) migrated to latest analyzer APIs
+- new lint: `no_logic_in_create_state`
 
 # 0.1.105+1
 
-* fixed regressions in `always_require_non_null_named_parameters`
-* (internal) pedantic lint clean-up
+- fixed regressions in `always_require_non_null_named_parameters`
+- (internal) pedantic lint clean-up
 
 # 0.1.105
 
-* hardened check for lib dir location (fixing crashes in `avoid_renaming_method_parameters`,
+- hardened check for lib dir location (fixing crashes in `avoid_renaming_method_parameters`,
   `prefer_relative_imports` and `public_member_api_docs`)
-* improved performance for `always_require_non_null_named_parameters`
+- improved performance for `always_require_non_null_named_parameters`
 
 # 0.1.104
 
-* updated `unnecessary_overrides` to allow overrides when annotations (besides `@override` are specified)
-* updated `file_names` to allow names w/ leading `_`'s (and improved performance)
-* new lint: `unnecessary_final`
+- updated `unnecessary_overrides` to allow overrides when annotations (besides `@override` are specified)
+- updated `file_names` to allow names w/ leading `_`'s (and improved performance)
+- new lint: `unnecessary_final`
 
 # 0.1.103
 
-* updated `prefer_relative_imports` to use a faster and more robust way to check for self-package references
-* updated our approach to checking for `lib` dir contents (speeding up `avoid_renaming_method_parameters` and 
+- updated `prefer_relative_imports` to use a faster and more robust way to check for self-package references
+- updated our approach to checking for `lib` dir contents (speeding up `avoid_renaming_method_parameters` and
   making `prefer_relative_imports` and `public_member_api_docs` amenable to internal package formats -- w/o pubspecs)
 
 # 0.1.102
 
-* `avoid_web_libraries_in_flutter` updated to disallow access from all but Flutter web plugin packages
-* updated `avoid_returning_null_for_void` to check only `null` literals (and not expressions having `Null` types)
-* fixed `prefer_final_fields` to respect non-mutating prefix operators
-* new lint: `prefer_is_not_operator`
-* new lint: `avoid_unnecessary_containers`
-* added basic nnbd-awareness to `avoid_init_to_null`
+- `avoid_web_libraries_in_flutter` updated to disallow access from all but Flutter web plugin packages
+- updated `avoid_returning_null_for_void` to check only `null` literals (and not expressions having `Null` types)
+- fixed `prefer_final_fields` to respect non-mutating prefix operators
+- new lint: `prefer_is_not_operator`
+- new lint: `avoid_unnecessary_containers`
+- added basic nnbd-awareness to `avoid_init_to_null`
 
 # 0.1.101
 
-* fixed `diagnostic_describe_all_properties` to flag properties in `Diagnosticable`s with no debug methods defined
-* fixed `noSuchMethod` exception in `camel_case_extensions` when analyzing unnamed extensions
-* fixed `avoid_print` to catch tear-off usage
-* new lint: `avoid_web_libraries_in_flutter` (experimental)
-* (internal) prepare `unnecessary_lambdas` for coming `MethodInvocation` vs. `FunctionExpressionInvocation` changes
+- fixed `diagnostic_describe_all_properties` to flag properties in `Diagnosticable`s with no debug methods defined
+- fixed `noSuchMethod` exception in `camel_case_extensions` when analyzing unnamed extensions
+- fixed `avoid_print` to catch tear-off usage
+- new lint: `avoid_web_libraries_in_flutter` (experimental)
+- (internal) prepare `unnecessary_lambdas` for coming `MethodInvocation` vs. `FunctionExpressionInvocation` changes
 
 # 0.1.100
 
-* (internal) stop accessing `staticType` in favor of getting type of `FormalParameter`s from the declared element
-* (internal) remove stale analyzer work-around for collecting `TypeParameterElement`s in `prefer_const_constructors`
+- (internal) stop accessing `staticType` in favor of getting type of `FormalParameter`s from the declared element
+- (internal) remove stale analyzer work-around for collecting `TypeParameterElement`s in `prefer_const_constructors`
 
 # 0.1.99
 
-* fixed unsafe cast in `overridden_fields`
-* (internal) migrated to the mock SDK in `package:analyzer` for testing
-* fixed empty argument list access in `use_full_hex_values_for_flutter_color_fix`
-* new lint: `prefer_relative_imports`
-* improved messages for `await_only_futures`
+- fixed unsafe cast in `overridden_fields`
+- (internal) migrated to the mock SDK in `package:analyzer` for testing
+- fixed empty argument list access in `use_full_hex_values_for_flutter_color_fix`
+- new lint: `prefer_relative_imports`
+- improved messages for `await_only_futures`
 
 # 0.1.98
 
-* fixed null raw expression accesses in `use_to_and_as_if_applicable`
-* (internal) migrated to using analyzer `InheritanceManager3`
+- fixed null raw expression accesses in `use_to_and_as_if_applicable`
+- (internal) migrated to using analyzer `InheritanceManager3`
 
 # 0.1.97+1
 
-* enabled `camel_case_extensions` experimental lint
+- enabled `camel_case_extensions` experimental lint
 
 # 0.1.97
 
-* internal: migrated away from using analyzer `resolutionMap`
-* various fixes and improvements to anticipate support for extension-methods
-* new lint: `camel_case_extensions`
-* rule template generation improvements
-* new lint: `avoid_equals_and_hash_code_on_mutable_classes`
-* extended `avoid_slow_async_io` to flag async `Directory` methods
+- internal: migrated away from using analyzer `resolutionMap`
+- various fixes and improvements to anticipate support for extension-methods
+- new lint: `camel_case_extensions`
+- rule template generation improvements
+- new lint: `avoid_equals_and_hash_code_on_mutable_classes`
+- extended `avoid_slow_async_io` to flag async `Directory` methods
 
 # 0.1.96
 
-* fixed false positives in `unnecessary_parens`
-* various changes to migrate to preferred analyzer APIs
-* rule test fixes
+- fixed false positives in `unnecessary_parens`
+- various changes to migrate to preferred analyzer APIs
+- rule test fixes
 
 # 0.1.95
 
-* improvements to `unsafe_html` error reporting
-* fixed false positive in `prefer_asserts_in_initializer_lists`
-* fixed `prefer_const_constructors` to not flag `@literal` annotated constructors
+- improvements to `unsafe_html` error reporting
+- fixed false positive in `prefer_asserts_in_initializer_lists`
+- fixed `prefer_const_constructors` to not flag `@literal` annotated constructors
 
 # 0.1.94
 
-* (internal): analyzer API call updates
-* (internal): implicit cast cleanup
+- (internal): analyzer API call updates
+- (internal): implicit cast cleanup
 
 # 0.1.93
 
-* new lint: `avoid_print`
+- new lint: `avoid_print`
 
 # 0.1.92
 
-* improved `prefer_collection_literals` to better handle `LinkedHashSet`s and `LinkedHashMap`s
-* updates to the Effective Dart rule set
-* updated `prefer_final_fields` to be more inclusive
-* miscellaneous documentation fixes
+- improved `prefer_collection_literals` to better handle `LinkedHashSet`s and `LinkedHashMap`s
+- updates to the Effective Dart rule set
+- updated `prefer_final_fields` to be more inclusive
+- miscellaneous documentation fixes
 
 # 0.1.91
 
-* fixed missed cases in `prefer_const_constructors`
-* fixed `prefer_initializing_formals` to no longer suggest API breaking changes
-* updated `omit_local_variable_types` to allow explicit `dynamic`s
-* (internal) migration from deprecated analyzer APIs
+- fixed missed cases in `prefer_const_constructors`
+- fixed `prefer_initializing_formals` to no longer suggest API breaking changes
+- updated `omit_local_variable_types` to allow explicit `dynamic`s
+- (internal) migration from deprecated analyzer APIs
 
 # 0.1.90
 
-* fixed null-reference in `unrelated_type_equality_checks`
-* new lint: `unsafe_html`
+- fixed null-reference in `unrelated_type_equality_checks`
+- new lint: `unsafe_html`
 
 # 0.1.89
 
-* broadened `prefer_null_aware_operators` to work beyond local variables
-* new lint: `prefer_if_null_operators`
-* fixed `prefer_contains` false positives
-* fixed `unnecessary_parenthesis` false positives
+- broadened `prefer_null_aware_operators` to work beyond local variables
+- new lint: `prefer_if_null_operators`
+- fixed `prefer_contains` false positives
+- fixed `unnecessary_parenthesis` false positives
 
 # 0.1.88
 
-* fixed `prefer_asserts_in_initializer_lists` false positives
-* fixed `curly_braces_in_flow_control_structures` to handle more cases
-* new lint: `prefer_double_quotes`
-* new lint: `sort_child_properties_last`
-* fixed `type_annotate_public_apis` false positive for `static const` initializers
+- fixed `prefer_asserts_in_initializer_lists` false positives
+- fixed `curly_braces_in_flow_control_structures` to handle more cases
+- new lint: `prefer_double_quotes`
+- new lint: `sort_child_properties_last`
+- fixed `type_annotate_public_apis` false positive for `static const` initializers
 
 # 0.1.87
 
-* change: `prefer_const_constructors_in_immutables` is currently overly permissive, pending analyzer changes (#1537)
-* fixed `unnecessary_await_in_return` false positive
-* fixed `unrelated_type_equality_checks` false negative with functions
-* fixed `prefer_spread_collections` to not lint in const contexts
-* fixed false positive in `prefer_iterable_whereType` for `is!`
-* fixed false positive in `prefer_collection_literals` for constructors with params
+- change: `prefer_const_constructors_in_immutables` is currently overly permissive, pending analyzer changes (#1537)
+- fixed `unnecessary_await_in_return` false positive
+- fixed `unrelated_type_equality_checks` false negative with functions
+- fixed `prefer_spread_collections` to not lint in const contexts
+- fixed false positive in `prefer_iterable_whereType` for `is!`
+- fixed false positive in `prefer_collection_literals` for constructors with params
 
 # 0.1.86
 
-* updated `prefer_spread_collections` to ignore calls to `addAll` that could be inlined
-* new lint: `prefer_inlined_adds`
+- updated `prefer_spread_collections` to ignore calls to `addAll` that could be inlined
+- new lint: `prefer_inlined_adds`
 
 # 0.1.85
 
-* (**BREAKING**) renamed `spread_collections` to `prefer_spread_collections`
-* new lint: `prefer_for_elements_to_map_fromIterable`
-* new lint: `prefer_if_elements_to_conditional_expressions`
-* new lint: `diagnostic_describe_all_properties`
+- (**BREAKING**) renamed `spread_collections` to `prefer_spread_collections`
+- new lint: `prefer_for_elements_to_map_fromIterable`
+- new lint: `prefer_if_elements_to_conditional_expressions`
+- new lint: `diagnostic_describe_all_properties`
 
 # 0.1.84
 
-* new lint: `spread_collections`
-* (internal) update to analyzer 0.36.0 APIs
-* new lint: `prefer_asserts_with_message`
+- new lint: `spread_collections`
+- (internal) update to analyzer 0.36.0 APIs
+- new lint: `prefer_asserts_with_message`
 
 # 0.1.83
 
-* updated `file_names` to skip prefixed-extension Dart files (e.g., `.css.dart`, `.g.dart`)
-* updated SDK constraint to `2.2.0`
-* miscellaneous rule documentation fixes
-* (internal) updated sources to use Set literals
-* fixed NPE in `avoid_shadowing_type_parameters`
-* added linter version numbering for use in analyzer summaries
-* fixed type utilities to handle inheritance cycles
-* (internal) changes to adopt new `package:analyzer` APIs
-* fixed `unnecessary_parenthesis` false positives
+- updated `file_names` to skip prefixed-extension Dart files (e.g., `.css.dart`, `.g.dart`)
+- updated SDK constraint to `2.2.0`
+- miscellaneous rule documentation fixes
+- (internal) updated sources to use Set literals
+- fixed NPE in `avoid_shadowing_type_parameters`
+- added linter version numbering for use in analyzer summaries
+- fixed type utilities to handle inheritance cycles
+- (internal) changes to adopt new `package:analyzer` APIs
+- fixed `unnecessary_parenthesis` false positives
 
 # 0.1.82
 
-* fixed `prefer_collection_literals` Set literal false positives
-* fixed `prefer_const_declarations` Set literal false positives
-* new lint: `provide_deprecation_message`
+- fixed `prefer_collection_literals` Set literal false positives
+- fixed `prefer_const_declarations` Set literal false positives
+- new lint: `provide_deprecation_message`
 
 # 0.1.81
 
-* updated `prefer_collection_literals` to support Set literals
+- updated `prefer_collection_literals` to support Set literals
 
 # 0.1.80
 
-* deprecated `super_goes_last`
-* (internal) migrations to analyzer's preferred `InheritanceManager2` API
+- deprecated `super_goes_last`
+- (internal) migrations to analyzer's preferred `InheritanceManager2` API
 
 # 0.1.79
 
-* `unnecessary_parenthesis` updated to play nicer with cascades
-* new lint: `use_full_hex_values_for_flutter_colors`
-* new lint: `prefer_null_aware_operators`
-* miscellaneous documentation fixes
-* removed deprecated lints from the "all options" sample
-* stopped registering "default lints"
-* `hash_and_equals` fixed to respect `hashCode` fields
+- `unnecessary_parenthesis` updated to play nicer with cascades
+- new lint: `use_full_hex_values_for_flutter_colors`
+- new lint: `prefer_null_aware_operators`
+- miscellaneous documentation fixes
+- removed deprecated lints from the "all options" sample
+- stopped registering "default lints"
+- `hash_and_equals` fixed to respect `hashCode` fields
 
 # 0.1.78
 
-* restored `prefer_final_locals` to ignore loop variables, and
-* introduced a new `prefer_final_in_for_each` lint to handle the `for each` case
+- restored `prefer_final_locals` to ignore loop variables, and
+- introduced a new `prefer_final_in_for_each` lint to handle the `for each` case
 
 # 0.1.77
 
-* updated `prefer_final_locals` to check to for loop variables
-* fixed `type_annotate_public_apis` false positives on local functions
-* fixed `avoid_shadowing_type_parameters` to report shadowed type parameters in generic typedefs
-* fixed `use_setters_to_change_properties` to not wrongly lint overriding methods
-* fixed `cascade_invocations` to not lint awaited targets
-* fixed `prefer_conditional_assignment` false positives
-* fixed `join_return_with_assignment` false positives
-* fixed `cascade_invocations` false positives
-* miscellaneous documentation improvements
-* updated `invariant_booleans` status to experimental
+- updated `prefer_final_locals` to check to for loop variables
+- fixed `type_annotate_public_apis` false positives on local functions
+- fixed `avoid_shadowing_type_parameters` to report shadowed type parameters in generic typedefs
+- fixed `use_setters_to_change_properties` to not wrongly lint overriding methods
+- fixed `cascade_invocations` to not lint awaited targets
+- fixed `prefer_conditional_assignment` false positives
+- fixed `join_return_with_assignment` false positives
+- fixed `cascade_invocations` false positives
+- miscellaneous documentation improvements
+- updated `invariant_booleans` status to experimental
 
 # 0.1.76
 
-* `unnecessary_parenthesis` updated to allow wrapping a `!` argument
-* miscellaneous documentation grammar and spelling fixes
-* improved error messages for `always_declare_return_types`
-* fix `prefer_final_fields ` to work with classes that have generic type arguments
-* (internal): deprecated code cleanup
-* fixed false positives in `unrelated_type_equality_checks`
+- `unnecessary_parenthesis` updated to allow wrapping a `!` argument
+- miscellaneous documentation grammar and spelling fixes
+- improved error messages for `always_declare_return_types`
+- fix `prefer_final_fields ` to work with classes that have generic type arguments
+- (internal): deprecated code cleanup
+- fixed false positives in `unrelated_type_equality_checks`
 
 # 0.1.75
 
-* analyzer package dependency bumped to `^0.34.0` 
+- analyzer package dependency bumped to `^0.34.0`
 
 # 0.1.74
 
-* experimental lints `avoid_positional_boolean_parameters`, `literal_only_boolean_expressions`, `prefer_foreach`, `prefer_void_to_null` promoted to stable
-* `unnecessary_parenthesis` improved to handle function expressions
+- experimental lints `avoid_positional_boolean_parameters`, `literal_only_boolean_expressions`, `prefer_foreach`, `prefer_void_to_null` promoted to stable
+- `unnecessary_parenthesis` improved to handle function expressions
 
 # 0.1.73
 
-* deprecated `prefer_bool_in_asserts` (redundant w/ Dart 2 checks)
-* improved doc generation to highlight deprecated and experimental lints
-* bumped analyzer lower-bound to `0.33.4`
-* bumped SDK lower-bound to `2.1.0`
-* new lint: `unnecessary_await_in_return`
+- deprecated `prefer_bool_in_asserts` (redundant w/ Dart 2 checks)
+- improved doc generation to highlight deprecated and experimental lints
+- bumped analyzer lower-bound to `0.33.4`
+- bumped SDK lower-bound to `2.1.0`
+- new lint: `unnecessary_await_in_return`
 
 # 0.1.72
 
-* new lint: `use_function_type_syntax_for_parameters`
-* internal changes to migrate towards analyzer's new `LinterContext` API
-* fix false positive in `use_setters_to_change_properties`
-* implementation improvements (and speed-ups) to `prefer_foreach` and `public_member_api_docs`
-* new lint: `avoid_returning_null_for_future`
-* new lint: `avoid_shadowing_type_parameters`
+- new lint: `use_function_type_syntax_for_parameters`
+- internal changes to migrate towards analyzer's new `LinterContext` API
+- fix false positive in `use_setters_to_change_properties`
+- implementation improvements (and speed-ups) to `prefer_foreach` and `public_member_api_docs`
+- new lint: `avoid_returning_null_for_future`
+- new lint: `avoid_shadowing_type_parameters`
 
 # 0.1.71
 
-* new lint: `prefer_int_literals`
-* update `await_only_futures` to allow awaiting on `null`
-* update `use_setters_to_change_properties` to work with `=>` short-hand
+- new lint: `prefer_int_literals`
+- update `await_only_futures` to allow awaiting on `null`
+- update `use_setters_to_change_properties` to work with `=>` short-hand
 
 # 0.1.70
 
-* fix NPE in `prefer_iterable_whereType`
+- fix NPE in `prefer_iterable_whereType`
 
 # 0.1.69
 
-* improved message display for `await_only_futures`
-* performance improvements for `null_closures`
-* new lint: `avoid_returning_null_for_void`
+- improved message display for `await_only_futures`
+- performance improvements for `null_closures`
+- new lint: `avoid_returning_null_for_void`
 
 # 0.1.68
 
-* updated analyzer compatibility to `^0.33.0`
+- updated analyzer compatibility to `^0.33.0`
 
 # 0.1.67
 
-* miscellaneous mixin support fixes
-* update to `sort_constructors_first` to apply to all members
-* update `unnecessary_this` to work on field initializers
+- miscellaneous mixin support fixes
+- update to `sort_constructors_first` to apply to all members
+- update `unnecessary_this` to work on field initializers
 
 # 0.1.66
 
-* broadened SDK version constraint
+- broadened SDK version constraint
 
 # 0.1.65
 
-* fix cast exceptions related to mixin support
+- fix cast exceptions related to mixin support
 
 # 0.1.64
 
-* fixes to better support mixins
+- fixes to better support mixins
 
 # 0.1.63
 
-* updated `unawaited_futures` to ignore assignments within cascades
-* new lint: `sort_pub_dependencies`
+- updated `unawaited_futures` to ignore assignments within cascades
+- new lint: `sort_pub_dependencies`
 
 # 0.1.62
 
-* new lint: `prefer_mixin`
-* new lint: `avoid_implementing_value_types`
+- new lint: `prefer_mixin`
+- new lint: `avoid_implementing_value_types`
 
 # 0.1.61
 
-* new lint: `flutter_style_todos`
-* improved handling of constant expressions with generic type params
-* NPE fix for `invariant_booleans`
-* Google lints example moved to `package:pedantic`
-* improved docs for `unawaited_futures`
+- new lint: `flutter_style_todos`
+- improved handling of constant expressions with generic type params
+- NPE fix for `invariant_booleans`
+- Google lints example moved to `package:pedantic`
+- improved docs for `unawaited_futures`
 
 # 0.1.60
 
-* new lint: `avoid_void_async`
-* `unawaited_futures` updated to check cascades
+- new lint: `avoid_void_async`
+- `unawaited_futures` updated to check cascades
 
 # 0.1.59
 
-* relaxed `void_checks` (allowing `T Function()` to be assigned to `void Function()`)
-* test and build improvements
-* introduced Effective Dart rule set
-* Google ruleset updates
-* (internal cleanup): move cli main into `lib/`
-* fixed false positives in `lines_longer_than_80_chars`
-* new lint: `prefer_void_to_null`
+- relaxed `void_checks` (allowing `T Function()` to be assigned to `void Function()`)
+- test and build improvements
+- introduced Effective Dart rule set
+- Google ruleset updates
+- (internal cleanup): move cli main into `lib/`
+- fixed false positives in `lines_longer_than_80_chars`
+- new lint: `prefer_void_to_null`
 
 # 0.1.58
 
-* roll-back to explicit uses of `new` and `const` to be compatible w/ VMs running `--no-preview-dart-2`
+- roll-back to explicit uses of `new` and `const` to be compatible w/ VMs running `--no-preview-dart-2`
 
 # 0.1.57
 
-* fix to `lines_longer_than_80_chars` to handle CRLF endings
-* doc improvements
-* set max SDK version to <3.0.0
-* fix to `non_constant_identifier_names` to better handle invalid code
-* new lint: `curly_braces_in_flow_control_structures`
+- fix to `lines_longer_than_80_chars` to handle CRLF endings
+- doc improvements
+- set max SDK version to <3.0.0
+- fix to `non_constant_identifier_names` to better handle invalid code
+- new lint: `curly_braces_in_flow_control_structures`
 
 # 0.1.56
 
-* fix to `avoid_positional_boolean_parameters` to ignore overridden methods
-* fix to `prefer_is_empty` to not evaluate constants beyond int literals
-* new lint: `null_closures`
-* new lint: `lines_longer_than_80_chars`
+- fix to `avoid_positional_boolean_parameters` to ignore overridden methods
+- fix to `prefer_is_empty` to not evaluate constants beyond int literals
+- new lint: `null_closures`
+- new lint: `lines_longer_than_80_chars`
 
 # 0.1.55
 
-* fixed an issue in `const` error handling
-* updated `linter` binary to use `previewDart2`
+- fixed an issue in `const` error handling
+- updated `linter` binary to use `previewDart2`
 
 # 0.1.54
 
-* new `unnecessary_const` lint
-* new `unnecessary_new` lint
-* fixed errors in `use_to_and_as_if_applicable`
-* new `file_names` lint
+- new `unnecessary_const` lint
+- new `unnecessary_new` lint
+- fixed errors in `use_to_and_as_if_applicable`
+- new `file_names` lint
 
 # 0.1.53
 
-* updated `unnecessary_statements` to ignore getters (as they may be side-effecting).
+- updated `unnecessary_statements` to ignore getters (as they may be side-effecting).
 
 # 0.1.52
 
-* fixed `void_checks` to handle arguments not resolved to a parameter
-* fixed exceptions produced by `prefer_const_literals_to_create_immutables`
+- fixed `void_checks` to handle arguments not resolved to a parameter
+- fixed exceptions produced by `prefer_const_literals_to_create_immutables`
 
 # 0.1.51
 
-* `unrelated_type_equality_checks` now allows comparison between `Int64` or `Int32` and `int`
-* `unnecessary_parenthesis` improved to handle cascades _in_ cascades
+- `unrelated_type_equality_checks` now allows comparison between `Int64` or `Int32` and `int`
+- `unnecessary_parenthesis` improved to handle cascades _in_ cascades
 
 # 0.1.50
 
-* migration of rules to use analyzer package `NodeLintRule` and `UnitLintRule` yielding significant performance gains all around
-* specific performance improvements for `prefer_final_fields` (~6x)
-* addressed no such method calls in `void_checks`
-* improved lint reporting for various lints
+- migration of rules to use analyzer package `NodeLintRule` and `UnitLintRule` yielding significant performance gains all around
+- specific performance improvements for `prefer_final_fields` (~6x)
+- addressed no such method calls in `void_checks`
+- improved lint reporting for various lints
 
 # 0.1.49
 
-* new `void_checks` lint
+- new `void_checks` lint
 
 # 0.1.48
 
-* new `avoid_field_initializers_in_const_classes` lint
-* miscellaneous documentation fixes
-* improved handling of cascades in `unnecessary_statements`
-* new `avoid_js_rounded_ints` lint
+- new `avoid_field_initializers_in_const_classes` lint
+- miscellaneous documentation fixes
+- improved handling of cascades in `unnecessary_statements`
+- new `avoid_js_rounded_ints` lint
 
 # 0.1.47
 
-* new `avoid_double_and_int_checks` lint
-* fix to handle uninitialized vars in `prefer_const_declarations`
-* fix for generic function type handling in `avoid_types_as_parameter_names`
-* new `prefer_iterable_whereType` lint
-* new `prefer_generic_function_type_aliases` lint
-* Dart 2 compatibility fixes
+- new `avoid_double_and_int_checks` lint
+- fix to handle uninitialized vars in `prefer_const_declarations`
+- fix for generic function type handling in `avoid_types_as_parameter_names`
+- new `prefer_iterable_whereType` lint
+- new `prefer_generic_function_type_aliases` lint
+- Dart 2 compatibility fixes
 
 # 0.1.46
 
-* performance fixes for library prefix testing (`library_prefixes`)
-* new `avoid_bool_literals_in_conditional_expressions` lint
-* new `prefer_equal_for_default_values` lint
-* new `avoid_private_typedef_functions` lint
-* new `avoid_single_cascade_in_expression_statements` lint
+- performance fixes for library prefix testing (`library_prefixes`)
+- new `avoid_bool_literals_in_conditional_expressions` lint
+- new `prefer_equal_for_default_values` lint
+- new `avoid_private_typedef_functions` lint
+- new `avoid_single_cascade_in_expression_statements` lint
 
 # 0.1.45
 
-* fix for `invariant_booleans` when analyzing for loops with no condition
-* new `avoid_types_as_parameter_names` lint
-* new `avoid_renaming_method_parameters` lint
+- fix for `invariant_booleans` when analyzing for loops with no condition
+- new `avoid_types_as_parameter_names` lint
+- new `avoid_renaming_method_parameters` lint
 
 # 0.1.44
 
-* new `avoid_relative_lib_imports` lint
-* new `unnecessary_parenthesis` lint
-* fix to `prefer_const_literals_to_create_immutables` to handle undefined classes gracefully
-* updates to `prefer_const_declarations` to support optional `new` and `const`
-* `prefer_const_declarations` updated to check locals
-* fixes to `invariant_booleans`
-* bumped SDK lower bound to `2.0.0-dev`
-* build and workflow improvements: rule template fixes; formatting and header validation
-* miscellaneous documentation fixes
+- new `avoid_relative_lib_imports` lint
+- new `unnecessary_parenthesis` lint
+- fix to `prefer_const_literals_to_create_immutables` to handle undefined classes gracefully
+- updates to `prefer_const_declarations` to support optional `new` and `const`
+- `prefer_const_declarations` updated to check locals
+- fixes to `invariant_booleans`
+- bumped SDK lower bound to `2.0.0-dev`
+- build and workflow improvements: rule template fixes; formatting and header validation
+- miscellaneous documentation fixes
 
 # 0.1.43
 
-* new `prefer_const_declarations.dart` lint
-* new `prefer_const_literals_to_create_immutables` lint
-* miscellaneous documentation improvements
+- new `prefer_const_declarations.dart` lint
+- new `prefer_const_literals_to_create_immutables` lint
+- miscellaneous documentation improvements
 
 # 0.1.42
 
-* added support for external constructors in `avoid_unused_constructor_parameters`
-* added code reference resolution docs for `comment_references`
+- added support for external constructors in `avoid_unused_constructor_parameters`
+- added code reference resolution docs for `comment_references`
 
 # 0.1.41
 
-* broadened `args` package dependency to support versions `1.*`
+- broadened `args` package dependency to support versions `1.*`
 
 # 0.1.40
 
-* `avoid_unused_constructor_parameters` updated to better handle redirecting factory constructors
-* `avoid_returning_this` improvements
-* `prefer_bool_in_asserts` improvements
-* miscellaneous documentation fixes
+- `avoid_unused_constructor_parameters` updated to better handle redirecting factory constructors
+- `avoid_returning_this` improvements
+- `prefer_bool_in_asserts` improvements
+- miscellaneous documentation fixes
 
 # 0.1.39
 
-* `prefer_interpolation_to_compose_strings` updated to allow concatenation of two non-literal strings
-* `prefer_interpolation_to_compose_strings` updated to allow `+=`
-* lots of rule documentation fixes and enhancements
-* fix for `prefer_const_constructors_in_immutables` false positive with redirecting factory constructors
+- `prefer_interpolation_to_compose_strings` updated to allow concatenation of two non-literal strings
+- `prefer_interpolation_to_compose_strings` updated to allow `+=`
+- lots of rule documentation fixes and enhancements
+- fix for `prefer_const_constructors_in_immutables` false positive with redirecting factory constructors
 
 # 0.1.38
 
-* `public_member_api_docs` fix for package URIs
+- `public_member_api_docs` fix for package URIs
 
 # 0.1.37
 
-* `avoid_positional_boolean_parameters` updated to allow booleans in operator declarations
-* `comment_references` fixed to handle incomplete references
-* `non_constant_identifier_names` updated to allow underscores around numbers
+- `avoid_positional_boolean_parameters` updated to allow booleans in operator declarations
+- `comment_references` fixed to handle incomplete references
+- `non_constant_identifier_names` updated to allow underscores around numbers
 
 # 0.1.36
 
-* new `avoid_unused_constructor_parameters` lint
-* new `prefer_bool_in_asserts` lint
-* new `prefer_typing_uninitialized_variables` lint
-* new `unnecessary_statements` lint
-* `public_member_api_docs` updated to only lint source in `lib/`
-* 'avoid_empty_else' fixed to ignore synthetic `EmptyStatement`s
-* updated library prefix checking to allow leading `$`s
-* miscellaneous documentation fixes
-* Dart SDK constraints restored (removed unneeded `2.0.0-dev.infinity` constraint)
+- new `avoid_unused_constructor_parameters` lint
+- new `prefer_bool_in_asserts` lint
+- new `prefer_typing_uninitialized_variables` lint
+- new `unnecessary_statements` lint
+- `public_member_api_docs` updated to only lint source in `lib/`
+- 'avoid_empty_else' fixed to ignore synthetic `EmptyStatement`s
+- updated library prefix checking to allow leading `$`s
+- miscellaneous documentation fixes
+- Dart SDK constraints restored (removed unneeded `2.0.0-dev.infinity` constraint)
 
 # 0.1.35
 
-* linter engine updated to use new analysis driver
+- linter engine updated to use new analysis driver
 
 # 0.1.34
 
 ## Features
 
-* `non_constant_identifier_names` extended to include named constructors
-* SDK constraint broadened to `2.0.0-dev.infinity`
-* improved `prefer_final_fields` performance
+- `non_constant_identifier_names` extended to include named constructors
+- SDK constraint broadened to `2.0.0-dev.infinity`
+- improved `prefer_final_fields` performance
 
 ## Fixes
 
-* fixes to `unnecessary_overrides` (`noSuchMethod` handling, return type narrowing, special casing of documented `super` calls)
-* fix to `non_constant_identifier_names` to handle identifiers with no name
-* fixes to `prefer_const_constructors` to support list literals
-* fixes to `recursive_getters`
-* fixes to `cascade_invocations`
+- fixes to `unnecessary_overrides` (`noSuchMethod` handling, return type narrowing, special casing of documented `super` calls)
+- fix to `non_constant_identifier_names` to handle identifiers with no name
+- fixes to `prefer_const_constructors` to support list literals
+- fixes to `recursive_getters`
+- fixes to `cascade_invocations`
 
 # 0.1.33
 
 ## Features
 
-* new `prefer_const_constructors_in_immutables` lint
-* new `always_put_required_named_parameters_first` lint
-* new `prefer_asserts_in_initializer_lists` lint
-* support for running in `--benchmark` mode
-* new `prefer_single_quote_strings` lint
+- new `prefer_const_constructors_in_immutables` lint
+- new `always_put_required_named_parameters_first` lint
+- new `prefer_asserts_in_initializer_lists` lint
+- support for running in `--benchmark` mode
+- new `prefer_single_quote_strings` lint
 
 ## Fixes
 
-* docs for `avoid_setters_without_getters`
-* fix to `directives_ordering` to work with part directives located after exports
-* fixes to `cascade_invocations` false positives
-* fixes to `literal_only_boolean_expressions` false positives
-* fix to ensure `cascade_invocations` only lints method invocations if target is a simple identifier 
-* fixes to `use_string_buffers` false positives
-* fixes to `prefer_const_constructors`
+- docs for `avoid_setters_without_getters`
+- fix to `directives_ordering` to work with part directives located after exports
+- fixes to `cascade_invocations` false positives
+- fixes to `literal_only_boolean_expressions` false positives
+- fix to ensure `cascade_invocations` only lints method invocations if target is a simple identifier
+- fixes to `use_string_buffers` false positives
+- fixes to `prefer_const_constructors`
 
 # 0.1.32
 
-* Lint stats (`-s`) output now sorted.
+- Lint stats (`-s`) output now sorted.
 
 # 0.1.31
 
-* New `prefer_foreach` lint.
-* New `use_string_buffers` rule.
-* New `unnecessary_overrides` rule.
-* New `join_return_with_assignment_when_possible` rule.
-* New `use_to_and_as_if_applicable` rule.
-* New `avoid_setters_without_getters` rule.
-* New `always_put_control_body_on_new_line` rule.
-* New `avoid_positional_boolean_parameters` rule.
-* New `always_require_non_null_named_parameters` rule.
-* New `prefer_conditional_assignment` rule.
-* New `avoid_types_on_closure_parameters` rule.
-* New `always_put_control_body_on_new_line` rule.
-* New `use_setters_to_change_properties` rule.
-* New `avoid_returning_this` rule.
-* New `avoid_annotating_with_dynamic_when_not_required` rule.
-* New `prefer_constructors_over_static_methods` rule.
-* New `avoid_returning_null` rule.
-* New `avoid_classes_with_only_static_members` rule.
-* New `avoid_null_checks_in_equality_operators` rule.
-* New `avoid_catches_without_on_clauses` rule.
-* New `avoid_catching_errors` rule.
-* New `use_rethrow_when_possible` rule.
-* Many lint fixes (notably `prefer_final_fields`, `unnecessary_lambdas`, `await_only_futures`, `cascade_invocations`, `avoid_types_on_closure_parameters`, and `overridden_fields`).
-* Significant performance improvements for `prefer_interpolation_to_compose_strings`.
-* New `unnecessary_this` rule.
-* New `prefer_initializing_formals` rule.
+- New `prefer_foreach` lint.
+- New `use_string_buffers` rule.
+- New `unnecessary_overrides` rule.
+- New `join_return_with_assignment_when_possible` rule.
+- New `use_to_and_as_if_applicable` rule.
+- New `avoid_setters_without_getters` rule.
+- New `always_put_control_body_on_new_line` rule.
+- New `avoid_positional_boolean_parameters` rule.
+- New `always_require_non_null_named_parameters` rule.
+- New `prefer_conditional_assignment` rule.
+- New `avoid_types_on_closure_parameters` rule.
+- New `always_put_control_body_on_new_line` rule.
+- New `use_setters_to_change_properties` rule.
+- New `avoid_returning_this` rule.
+- New `avoid_annotating_with_dynamic_when_not_required` rule.
+- New `prefer_constructors_over_static_methods` rule.
+- New `avoid_returning_null` rule.
+- New `avoid_classes_with_only_static_members` rule.
+- New `avoid_null_checks_in_equality_operators` rule.
+- New `avoid_catches_without_on_clauses` rule.
+- New `avoid_catching_errors` rule.
+- New `use_rethrow_when_possible` rule.
+- Many lint fixes (notably `prefer_final_fields`, `unnecessary_lambdas`, `await_only_futures`, `cascade_invocations`, `avoid_types_on_closure_parameters`, and `overridden_fields`).
+- Significant performance improvements for `prefer_interpolation_to_compose_strings`.
+- New `unnecessary_this` rule.
+- New `prefer_initializing_formals` rule.
 
 # 0.1.30
 
-* New `avoid_function_literals_in_foreach_calls` lint.
-* New `avoid_slow_async_io` lint.
-* New `cascade_invocations` lint.
-* New `directives_ordering` lint.
-* New `no_adjacent_strings_in_list` lint.
-* New `no_duplicate_case_values` lint.
-* New `omit_local_variable_types` lint.
-* New `prefer_adjacent_string_concatenation` lint.
-* New `prefer_collection_literals` lint.
-* New `prefer_const_constructors` lint.
-* New `prefer_contains` lint.
-* New `prefer_expression_function_bodies` lint.
-* New `prefer_function_declarations_over_variables` lint.
-* New `prefer_initializing_formals` lint.
-* New `prefer_interpolation_to_compose_strings` lint.
-* New `prefer_is_empty` lint.
-* New `recursive_getters` lint.
-* New `unnecessary_brace_in_string_interps` lint.
-* New `unnecessary_lambdas` lint.
-* New `unnecessary_null_aware_assignments` lint.
-* New `unnecessary_null_in_if_null_operators` lint.
-* Miscellaneous bug fixes and codegen improvements.
+- New `avoid_function_literals_in_foreach_calls` lint.
+- New `avoid_slow_async_io` lint.
+- New `cascade_invocations` lint.
+- New `directives_ordering` lint.
+- New `no_adjacent_strings_in_list` lint.
+- New `no_duplicate_case_values` lint.
+- New `omit_local_variable_types` lint.
+- New `prefer_adjacent_string_concatenation` lint.
+- New `prefer_collection_literals` lint.
+- New `prefer_const_constructors` lint.
+- New `prefer_contains` lint.
+- New `prefer_expression_function_bodies` lint.
+- New `prefer_function_declarations_over_variables` lint.
+- New `prefer_initializing_formals` lint.
+- New `prefer_interpolation_to_compose_strings` lint.
+- New `prefer_is_empty` lint.
+- New `recursive_getters` lint.
+- New `unnecessary_brace_in_string_interps` lint.
+- New `unnecessary_lambdas` lint.
+- New `unnecessary_null_aware_assignments` lint.
+- New `unnecessary_null_in_if_null_operators` lint.
+- Miscellaneous bug fixes and codegen improvements.
 
 # 0.1.29
 
-* New `cascade_invocations` lint.
-* Expand `await_only_futures` to accept classes that extend or implement `Future`.
-* Improve camel case regular expression tests to accept `$`s.
-* Fixes to `parameter_assignments` (improved getter handling and an NPE).
+- New `cascade_invocations` lint.
+- Expand `await_only_futures` to accept classes that extend or implement `Future`.
+- Improve camel case regular expression tests to accept `$`s.
+- Fixes to `parameter_assignments` (improved getter handling and an NPE).
 
 # 0.1.27
 
-* Fixed cast exception in `dart_type_utilities` (dart-lang/sdk#27405).
-* New `parameter_assignments` lint.
-* New `prefer_final_fields` lint.
-* New `prefer_final_locals` lint.
-* Markdown link fixes in docs (#306).
-* Miscellaneous solo test running fixes and introduction of `solo_debug` (#304).
+- Fixed cast exception in `dart_type_utilities` (dart-lang/sdk#27405).
+- New `parameter_assignments` lint.
+- New `prefer_final_fields` lint.
+- New `prefer_final_locals` lint.
+- Markdown link fixes in docs (#306).
+- Miscellaneous solo test running fixes and introduction of `solo_debug` (#304).
 
 # 0.1.26
 
-* Updated tests to use package `test` (#302).
+- Updated tests to use package `test` (#302).
 
 # 0.1.25
 
-* Fixed false positive on `[]=` in `always_declare_return_types` (#300).
-* New `invariant_booleans` lint.
-* New `literal_only_boolean_expressions` lint.
-* Fixed `camel_case_types` to allow `$` in identifiers (#290).
+- Fixed false positive on `[]=` in `always_declare_return_types` (#300).
+- New `invariant_booleans` lint.
+- New `literal_only_boolean_expressions` lint.
+- Fixed `camel_case_types` to allow `$` in identifiers (#290).
 
 # 0.1.24
 
-* Internal updates to keep up with changes in the analyzer package.
-* Updated `close_sinks` to respect calls to `destroy` (#282).
-* Fixed `only_throw_errors` to report on the expression not node.
+- Internal updates to keep up with changes in the analyzer package.
+- Updated `close_sinks` to respect calls to `destroy` (#282).
+- Fixed `only_throw_errors` to report on the expression not node.
 
 # 0.1.23
 
-* Removed `whitespace_around_ops` pending re-name and re-design (#249).
+- Removed `whitespace_around_ops` pending re-name and re-design (#249).
 
 # 0.1.22
 
-* Grinder support (`rule:rule_name` and `docs:location`) for rule stub and doc generation (respectively).
-* Fix to allow leading underscores in `non_constant_identifier_names`.
-* New `valid_regexps` lint (#277).
-* New `whitespace_around_ops` lint (#249).
-* Fix to `overridden_fields` to flag overridden static fields (#274).
-* New `list_remove_unrelated_type` to detect passing a non-`T` value to `List.remove()`` (#271).
-* New `empty_catches` lint to catch empty catch blocks (#43).
-* Fixed `close_sinks` false positive (#268).
-* `linter` support for `--strong` to allow for running linter in strong mode.
+- Grinder support (`rule:rule_name` and `docs:location`) for rule stub and doc generation (respectively).
+- Fix to allow leading underscores in `non_constant_identifier_names`.
+- New `valid_regexps` lint (#277).
+- New `whitespace_around_ops` lint (#249).
+- Fix to `overridden_fields` to flag overridden static fields (#274).
+- New `list_remove_unrelated_type` to detect passing a non-`T` value to `List.remove()`` (#271).
+- New `empty_catches` lint to catch empty catch blocks (#43).
+- Fixed `close_sinks` false positive (#268).
+- `linter` support for `--strong` to allow for running linter in strong mode.
 
 # 0.1.21
 
-* New `only_throw_errors` lint.
-* New lint to check for `empty_statements` (#259).
-* Fixed NSME when file contents cannot be read (#260).
-* Fixed unsafe cast in `iterable_contains_unrelated_type` (#267).
+- New `only_throw_errors` lint.
+- New lint to check for `empty_statements` (#259).
+- Fixed NSME when file contents cannot be read (#260).
+- Fixed unsafe cast in `iterable_contains_unrelated_type` (#267).
 
 # 0.1.20
 
-* New `cancel_subscriptions` lint.
+- New `cancel_subscriptions` lint.
 
 # 0.1.19
 
-* New `close_sinks` lint.
-* Fixes to `iterable_contains_unrelated_type `.
+- New `close_sinks` lint.
+- Fixes to `iterable_contains_unrelated_type `.
 
 # 0.1.18
 
-* Fix NSME in `iterable_contains_unrelated_type` (#245).
-* Fixed typo in `comment_references` error description.
-* Fix `overriden_field` false positive (#246).
-* Rename linter binary `lints` option to `rules` (#248).
-* Help doc tweaks.
+- Fix NSME in `iterable_contains_unrelated_type` (#245).
+- Fixed typo in `comment_references` error description.
+- Fix `overriden_field` false positive (#246).
+- Rename linter binary `lints` option to `rules` (#248).
+- Help doc tweaks.
 
 # 0.1.17
 
-* Fix to `public_member_api_docs` to check for documented getters when checking setters (#237).
-* New `iterable_contains_unrelated_type` lint to detect when `Iterable.contains` is invoked with an object of an unrelated type.
-* New `comment_references` lint to ensure identifiers referenced in docs are in scope (#240).
+- Fix to `public_member_api_docs` to check for documented getters when checking setters (#237).
+- New `iterable_contains_unrelated_type` lint to detect when `Iterable.contains` is invoked with an object of an unrelated type.
+- New `comment_references` lint to ensure identifiers referenced in docs are in scope (#240).
 
 # 0.1.16
 
-* Fix for false positive in `overriden_field`s.
-* New `unrelated_type_equality_checks` lint.
-* Fix to accept `$` identifiers in string interpolation lint (#214).
-* Update to new `plugin` API (`0.2.0`).
-* Strong mode cleanup.
+- Fix for false positive in `overriden_field`s.
+- New `unrelated_type_equality_checks` lint.
+- Fix to accept `$` identifiers in string interpolation lint (#214).
+- Update to new `plugin` API (`0.2.0`).
+- Strong mode cleanup.
 
 # 0.1.15
 
-* Fix to allow simple getter/setters when a decl is ``@protected` (#215).
-* Fix to not require type params in `is` checks (#227).
-* Fix to not flag field formal identifiers in parameters (#224).
-* Fix to respect filters when calculating error codes (#198).
-* Fix to allow `const` and `final` vars to be initialized to null (#210).
-* Fix to respect commented blocks in `empty_constructor_bodies` (#209).
-* Fix to check types on list/map literals (#199).
-* Fix to skip `main` when checking for API docs (#207).
-* Fix to allow leading `$` in type names (#220).
-* Fix to ignore private typedefs when checking for types (#216).
-* New `test_types_in_equals` lint.
-* New `await_only_futures` lint.
-* New `throw_in_finally` lint.
-* New `control_flow_in_finally` lint.
+- Fix to allow simple getter/setters when a decl is ``@protected` (#215).
+- Fix to not require type params in `is` checks (#227).
+- Fix to not flag field formal identifiers in parameters (#224).
+- Fix to respect filters when calculating error codes (#198).
+- Fix to allow `const` and `final` vars to be initialized to null (#210).
+- Fix to respect commented blocks in `empty_constructor_bodies` (#209).
+- Fix to check types on list/map literals (#199).
+- Fix to skip `main` when checking for API docs (#207).
+- Fix to allow leading `$` in type names (#220).
+- Fix to ignore private typedefs when checking for types (#216).
+- New `test_types_in_equals` lint.
+- New `await_only_futures` lint.
+- New `throw_in_finally` lint.
+- New `control_flow_in_finally` lint.
 
 # 0.1.14
 
-* Fix to respect `@optionalTypeArgs` (#196).
-* Lint to warn if a field overrides or hides other field.
-* Fix to allow single char UPPER_CASE non-constants (#201).
-* Fix to accept casts to dynamic (#195).
+- Fix to respect `@optionalTypeArgs` (#196).
+- Lint to warn if a field overrides or hides other field.
+- Fix to allow single char UPPER_CASE non-constants (#201).
+- Fix to accept casts to dynamic (#195).
 
 # 0.1.13
 
-* Fix to skip overriding members in API doc checks (`public_member_api_docs`).
-* Fix to suppress lints on synthetic nodes/tokens (#193).
-* Message fixes (`annotate_overrides`, `public_member_api_docs`).
-* Fix to exclude setters from return type checks (#192).
+- Fix to skip overriding members in API doc checks (`public_member_api_docs`).
+- Fix to suppress lints on synthetic nodes/tokens (#193).
+- Message fixes (`annotate_overrides`, `public_member_api_docs`).
+- Fix to exclude setters from return type checks (#192).
 
 # 0.1.12
 
-* Fix to address `LibraryNames` regexp that in pathological cases went exponential.
+- Fix to address `LibraryNames` regexp that in pathological cases went exponential.
 
 # 0.1.11
 
-* Doc generation improvements (now with options samples).
-* Lint to sort unnamed constructors first (#187).
-* Lint to ensure public members have API docs (#188).
-* Lint to ensure constructors are sorted first (#186).
-* Lint for `hashCode` and `==` (#168).
-* Lint to detect un-annotated overrides (#167).
-* Fix to ignore underscores in public APIs (#153).
-* Lint to check for return types on setters (#122).
-* Lint to flag missing type params (#156).
-* Lint to avoid inits to `null` (#160).
+- Doc generation improvements (now with options samples).
+- Lint to sort unnamed constructors first (#187).
+- Lint to ensure public members have API docs (#188).
+- Lint to ensure constructors are sorted first (#186).
+- Lint for `hashCode` and `==` (#168).
+- Lint to detect un-annotated overrides (#167).
+- Fix to ignore underscores in public APIs (#153).
+- Lint to check for return types on setters (#122).
+- Lint to flag missing type params (#156).
+- Lint to avoid inits to `null` (#160).
 
 # 0.1.10
 
-* Updated to use `analyzer` `0.27.0`.
-* Updated options processing to handle untyped maps (dart-lang/sdk#25126).
+- Updated to use `analyzer` `0.27.0`.
+- Updated options processing to handle untyped maps (dart-lang/sdk#25126).
 
 # 0.1.9
 
-* Fix `type_annotate_public_apis` to properly handle getters/setters (#151; dart-lang/sdk#25092).
+- Fix `type_annotate_public_apis` to properly handle getters/setters (#151; dart-lang/sdk#25092).
 
 # 0.1.8
 
-* Fix to protect against errors in linting invalid source (dart-lang/sdk#24910).
-* Added `avoid_empty_else` lint rule (dart-lang/sdk#224936).
+- Fix to protect against errors in linting invalid source (dart-lang/sdk#24910).
+- Added `avoid_empty_else` lint rule (dart-lang/sdk#224936).
 
 # 0.1.7
 
-* Fix to `package_api_docs` (dart-lang/sdk#24947; #154).
+- Fix to `package_api_docs` (dart-lang/sdk#24947; #154).
 
 # 0.1.6
 
-* Fix to `package_prefixed_library_names` (dart-lang/sdk#24947; #154).
+- Fix to `package_prefixed_library_names` (dart-lang/sdk#24947; #154).
 
 # 0.1.5
 
-* Added `prefer_is_not_empty` lint rule (#143).
-* Added `type_annotate_public_apis` lint rule (#24).
-* Added `avoid_as` lint rule (#145).
-* Fixed `non_constant_identifier_names` rule to special case underscore identifiers in callbacks.
-* Fix to escape `_`s in callback type validation (addresses false positives in `always_specify_types`) (#147).
+- Added `prefer_is_not_empty` lint rule (#143).
+- Added `type_annotate_public_apis` lint rule (#24).
+- Added `avoid_as` lint rule (#145).
+- Fixed `non_constant_identifier_names` rule to special case underscore identifiers in callbacks.
+- Fix to escape `_`s in callback type validation (addresses false positives in `always_specify_types`) (#147).
 
 # 0.1.4
 
-* Added `always_declare_return_types` lint rule (#146).
-* Improved `always_specify_types` to detect missing types in declared identifiers and narrowed source range to the token.
-* Added `implementation_imports` lint rule (#33).
-* Test performance improvements.
+- Added `always_declare_return_types` lint rule (#146).
+- Improved `always_specify_types` to detect missing types in declared identifiers and narrowed source range to the token.
+- Added `implementation_imports` lint rule (#33).
+- Test performance improvements.
 
 # 0.1.3+5
 
-* Added `always_specify_types` lint rule (#144).
+- Added `always_specify_types` lint rule (#144).
 
 # 0.1.3+4
 
-* Fixed linter registry memory leaks.
+- Fixed linter registry memory leaks.
 
 # 0.1.3
 
-* Fixed various options file parsing issues.
+- Fixed various options file parsing issues.
 
 # 0.1.2
 
-* Fixed false positives in `unnecessary_brace_in_string_interp` lint. Fix #112.
+- Fixed false positives in `unnecessary_brace_in_string_interp` lint. Fix #112.
 
 # 0.1.1
 
-* Internal code and dependency constraint cleanup.
+- Internal code and dependency constraint cleanup.
 
 # 0.1.0
 
-* Initial stable release.
+- Initial stable release.
 
 # 0.0.2+1
 
-* Added machine output option. Fix #69.
-* Fixed resolution of files in `lib/` to use a `package:` URI. Fix #49.
-* Tightened up `analyzer` package constraints.
-* Fixed false positives in `one_member_abstracts` lint. Fix #64.
+- Added machine output option. Fix #69.
+- Fixed resolution of files in `lib/` to use a `package:` URI. Fix #49.
+- Tightened up `analyzer` package constraints.
+- Fixed false positives in `one_member_abstracts` lint. Fix #64.
 
 # 0.0.2
 
-* Initial push to pub.
+- Initial push to pub.
diff --git a/lib/src/rules/avoid_dynamic_calls.dart b/lib/src/rules/avoid_dynamic_calls.dart
index 8678f34..3bc0cce 100644
--- a/lib/src/rules/avoid_dynamic_calls.dart
+++ b/lib/src/rules/avoid_dynamic_calls.dart
@@ -5,6 +5,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/type.dart';
 import '../analyzer.dart';
 
 const _desc = r'Avoid method calls or property accesses on a "dynamic" target.';
@@ -132,8 +133,8 @@
     }
   }
 
-  void _lintIfDynamicOrFunction(Expression node) {
-    final staticType = node?.staticType;
+  void _lintIfDynamicOrFunction(Expression node, {DartType staticType}) {
+    staticType ??= node?.staticType;
     if (staticType == null) {
       return;
     }
@@ -210,7 +211,16 @@
     }
     final receiverWasDynamic = _lintIfDynamic(node.realTarget);
     if (!receiverWasDynamic) {
-      _lintIfDynamicOrFunction(node.function);
+      // The ".call" method is special, where "a.call()" is treated ~as "a()".
+      //
+      // If the method is "call", and the receiver is a function, we assume then
+      // we are really checking the static type of the receiver, not the static
+      // type of the "call" method itself.
+      DartType staticType;
+      if (methodName == 'call' && node.target?.staticType is FunctionType) {
+        staticType = node.target.staticType;
+      }
+      _lintIfDynamicOrFunction(node.function, staticType: staticType);
     }
   }
 
diff --git a/test/rules/experiments/nnbd/rules/avoid_dynamic_calls.dart b/test/rules/experiments/nnbd/rules/avoid_dynamic_calls.dart
index ef671f1..94b624c 100644
--- a/test/rules/experiments/nnbd/rules/avoid_dynamic_calls.dart
+++ b/test/rules/experiments/nnbd/rules/avoid_dynamic_calls.dart
@@ -75,11 +75,15 @@
   alsoIdentical(true, false); // OK
 }
 
+typedef F = void Function();
+
 void functionExpressionInvocations(
   dynamic a(),
   Function b(),
   void Function() c,
   d(),
+  F f,
+  F? fn,
 ) {
   a(); // OK
   a()(); // LINT
@@ -87,12 +91,18 @@
   b()(); // LINT
   c(); // OK
   d(); // OK
+  f.call; // OK
+  f.call(); // OK
+  fn?.call; // OK
+  fn?.call(); // OK
 }
 
 void typedFunctionButBasicallyDynamic(Function a, Wrapper<Function> b) {
   a(); // LINT
   b.field(); // LINT
   (b.field)(); // LINT
+  a.call; // OK
+  a.call(); // LINT
 }
 
 void binaryExpressions(dynamic a, int b, bool c) {
