diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
index d132238..4b14a5b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_local.dart
@@ -120,7 +120,7 @@
     var state = _initialState!;
     // remove declaration
     {
-      var range = utils.getLinesRangeStatements([(state.declarationStatement)]);
+      var range = utils.getLinesRangeStatements([state.declarationStatement]);
       doSourceChange_addElementEdit(
           change, unitElement, newSourceEdit_range(range, ''));
     }
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 3b054e9..9d1eb2d 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -148,7 +148,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isTrue);
@@ -157,7 +157,7 @@
   void test_isExtendableIn_base_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
@@ -165,7 +165,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement2("C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isTrue);
@@ -175,7 +175,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isFalse);
@@ -184,7 +184,7 @@
   void test_isExtendableIn_final_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
@@ -192,7 +192,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isFalse);
@@ -201,7 +201,7 @@
   void test_isExtendableIn_interface_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
@@ -209,7 +209,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isTrue);
@@ -218,14 +218,14 @@
   void test_isExtendableIn_mixinClass_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
   void test_isExtendableIn_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement2("C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
@@ -233,7 +233,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isExtendableIn(library2), isFalse);
@@ -242,7 +242,7 @@
   void test_isExtendableIn_sealed_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isExtendableIn(library), isTrue);
   }
 
@@ -250,7 +250,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isFalse);
@@ -259,7 +259,7 @@
   void test_isImplementableIn_base_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
@@ -267,7 +267,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement2("C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isTrue);
@@ -277,7 +277,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isFalse);
@@ -286,7 +286,7 @@
   void test_isImplementableIn_final_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
@@ -294,7 +294,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isTrue);
@@ -303,7 +303,7 @@
   void test_isImplementableIn_interface_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
@@ -311,7 +311,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isTrue);
@@ -320,14 +320,14 @@
   void test_isImplementableIn_mixinClass_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
   void test_isImplementableIn_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement2("C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
@@ -335,7 +335,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isImplementableIn(library2), isFalse);
@@ -344,7 +344,7 @@
   void test_isImplementableIn_sealed_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isImplementableIn(library), isTrue);
   }
 
@@ -353,7 +353,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isFalse);
@@ -363,7 +363,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isBase: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -372,7 +372,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement2("C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isFalse);
@@ -383,7 +383,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.language_2_19);
     var classElement = ElementFactory.classElement2("C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isTrue);
@@ -394,7 +394,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isFalse);
@@ -404,7 +404,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isFinal: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -413,7 +413,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isFalse);
@@ -423,7 +423,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isInterface: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -432,7 +432,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isTrue);
@@ -442,7 +442,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isMixinClass: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -450,7 +450,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement2("C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -459,7 +459,7 @@
         analysisContext, "lib1",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isMixableIn(library2), isFalse);
@@ -469,7 +469,7 @@
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib",
         featureSet: FeatureSets.latestWithExperiments);
     var classElement = ElementFactory.classElement4("C", isSealed: true);
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isMixableIn(library), isTrue);
   }
 
@@ -482,7 +482,7 @@
     String methodName = "m";
     var method = ElementFactory.methodElement(methodName, intNone);
     classA.methods = [method];
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpConcreteMethod(methodName, library), same(method));
   }
 
@@ -497,7 +497,7 @@
         ElementFactory.methodElement(methodName, intNone);
     method.isAbstract = true;
     classA.methods = [method];
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpConcreteMethod(methodName, library), isNull);
   }
 
@@ -519,7 +519,7 @@
         ElementFactory.methodElement(methodName, intNone);
     method.isAbstract = true;
     classB.methods = [method];
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpConcreteMethod(methodName, library),
         same(inheritedMethod));
   }
@@ -540,7 +540,7 @@
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     var method = ElementFactory.methodElement(methodName, intNone);
     classB.methods = [method];
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpConcreteMethod(methodName, library), same(method));
   }
 
@@ -563,7 +563,7 @@
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     var method = ElementFactory.methodElement(methodName, intNone);
     classB.methods = [method];
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpConcreteMethod(methodName, library), same(method));
   }
 
@@ -580,7 +580,7 @@
     classA.methods = [inheritedMethod];
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpConcreteMethod(methodName, library),
         same(inheritedMethod));
   }
@@ -590,7 +590,7 @@
     // }
     LibraryElementImpl library = _newLibrary();
     var classA = class_(name: 'A');
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpConcreteMethod("m", library), isNull);
   }
 
@@ -603,7 +603,7 @@
     String getterName = "g";
     var getter = ElementFactory.getterElement(getterName, false, intNone);
     classA.accessors = [getter];
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpGetter(getterName, library), same(getter));
   }
 
@@ -620,7 +620,7 @@
     classA.accessors = [getter];
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpGetter(getterName, library), same(getter));
   }
 
@@ -629,7 +629,7 @@
     // }
     LibraryElementImpl library = _newLibrary();
     var classA = class_(name: 'A');
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpGetter("g", library), isNull);
   }
 
@@ -643,7 +643,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     classA.supertype = interfaceTypeStar(classB);
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classA.lookUpGetter("g", library), isNull);
   }
 
@@ -653,7 +653,7 @@
     String methodName = "m";
     var method = ElementFactory.methodElement(methodName, intNone);
     classA.methods = [method];
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpMethod(methodName, library), same(method));
   }
 
@@ -665,14 +665,14 @@
     classA.methods = [method];
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpMethod(methodName, library), same(method));
   }
 
   void test_lookUpMethod_undeclared() {
     LibraryElementImpl library = _newLibrary();
     var classA = class_(name: 'A');
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpMethod("m", library), isNull);
   }
 
@@ -682,7 +682,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     classA.supertype = interfaceTypeStar(classB);
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classA.lookUpMethod("m", library), isNull);
   }
 
@@ -695,7 +695,7 @@
     String setterName = "s";
     var setter = ElementFactory.setterElement(setterName, false, intNone);
     classA.accessors = [setter];
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpSetter(setterName, library), same(setter));
   }
 
@@ -712,7 +712,7 @@
     classA.accessors = [setter];
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classB.lookUpSetter(setterName, library), same(setter));
   }
 
@@ -721,7 +721,7 @@
     // }
     LibraryElementImpl library = _newLibrary();
     var classA = class_(name: 'A');
-    (library.definingCompilationUnit).classes = [classA];
+    library.definingCompilationUnit.classes = [classA];
     expect(classA.lookUpSetter("s", library), isNull);
   }
 
@@ -735,7 +735,7 @@
     ClassElementImpl classB =
         ElementFactory.classElement("B", interfaceTypeStar(classA));
     classA.supertype = interfaceTypeStar(classB);
-    (library.definingCompilationUnit).classes = [classA, classB];
+    library.definingCompilationUnit.classes = [classA, classB];
     expect(classA.lookUpSetter("s", library), isNull);
   }
 
@@ -774,7 +774,7 @@
   void test_equals() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     ClassElementImpl classElement = ElementFactory.classElement2("C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     var field = ElementFactory.fieldElement(
       "next",
       false,
@@ -798,7 +798,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement2("_C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isAccessibleIn(library2), isFalse);
@@ -807,7 +807,7 @@
   void test_isAccessibleIn_private_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement2("_C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isAccessibleIn(library), isTrue);
   }
 
@@ -815,7 +815,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var classElement = ElementFactory.classElement2("C");
-    (library1.definingCompilationUnit).classes = [classElement];
+    library1.definingCompilationUnit.classes = [classElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(classElement.isAccessibleIn(library2), isTrue);
@@ -824,7 +824,7 @@
   void test_isAccessibleIn_public_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var classElement = ElementFactory.classElement2("C");
-    (library.definingCompilationUnit).classes = [classElement];
+    library.definingCompilationUnit.classes = [classElement];
     expect(classElement.isAccessibleIn(library), isTrue);
   }
 
@@ -1572,7 +1572,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isBase: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isImplementableIn(library2), isFalse);
@@ -1581,7 +1581,7 @@
   void test_isImplementableIn_base_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isBase: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isImplementableIn(library), isTrue);
   }
 
@@ -1589,7 +1589,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C");
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isImplementableIn(library2), isTrue);
@@ -1599,7 +1599,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isFinal: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isImplementableIn(library2), isFalse);
@@ -1608,7 +1608,7 @@
   void test_isImplementableIn_final_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isFinal: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isImplementableIn(library), isTrue);
   }
 
@@ -1616,7 +1616,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isInterface: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isImplementableIn(library2), isTrue);
@@ -1625,14 +1625,14 @@
   void test_isImplementableIn_interface_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isInterface: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isImplementableIn(library), isTrue);
   }
 
   void test_isImplementableIn_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C");
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isImplementableIn(library), isTrue);
   }
 
@@ -1640,7 +1640,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isSealed: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isImplementableIn(library2), isFalse);
@@ -1649,7 +1649,7 @@
   void test_isImplementableIn_sealed_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isSealed: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isImplementableIn(library), isTrue);
   }
 
@@ -1657,7 +1657,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isBase: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isMixableIn(library2), isTrue);
@@ -1666,7 +1666,7 @@
   void test_isMixableIn_base_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isBase: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isMixableIn(library), isTrue);
   }
 
@@ -1674,7 +1674,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement(name: "C");
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isMixableIn(library2), isTrue);
@@ -1684,7 +1684,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isFinal: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isMixableIn(library2), isFalse);
@@ -1693,7 +1693,7 @@
   void test_isMixableIn_final_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isFinal: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isMixableIn(library), isTrue);
   }
 
@@ -1701,7 +1701,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isInterface: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isMixableIn(library2), isFalse);
@@ -1710,14 +1710,14 @@
   void test_isMixableIn_interface_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isInterface: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isMixableIn(library), isTrue);
   }
 
   void test_isMixableIn_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement(name: "C");
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isMixableIn(library), isTrue);
   }
 
@@ -1725,7 +1725,7 @@
     LibraryElementImpl library1 =
         ElementFactory.library(analysisContext, "lib1");
     var mixinElement = ElementFactory.mixinElement2("C", isSealed: true);
-    (library1.definingCompilationUnit).mixins = [mixinElement];
+    library1.definingCompilationUnit.mixins = [mixinElement];
     LibraryElementImpl library2 =
         ElementFactory.library(analysisContext, "lib2");
     expect(mixinElement.isMixableIn(library2), isFalse);
@@ -1734,7 +1734,7 @@
   void test_isMixableIn_sealed_sameLibrary() {
     LibraryElementImpl library = ElementFactory.library(analysisContext, "lib");
     var mixinElement = ElementFactory.mixinElement2("C", isSealed: true);
-    (library.definingCompilationUnit).mixins = [mixinElement];
+    library.definingCompilationUnit.mixins = [mixinElement];
     expect(mixinElement.isMixableIn(library), isTrue);
   }
 }
