Require analyzer 2.6.0, use NamedType.
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 50a36c3..b0d2ace 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,6 @@
 # 2.2.1-dev
+* Require `package:analyzer` version `2.6.0`.
+* Use `NamedType` instead of `TypeName`.
 
 # 2.2.0
 
diff --git a/lib/src/source_visitor.dart b/lib/src/source_visitor.dart
index dde7d42..b5a2dc5 100644
--- a/lib/src/source_visitor.dart
+++ b/lib/src/source_visitor.dart
@@ -801,7 +801,7 @@
       token(node.equals);
       space();
 
-      visit(node.superclass);
+      visit(node.superclass2);
 
       builder.startRule(CombinatorRule());
       visit(node.withClause);
@@ -1067,7 +1067,7 @@
 
   @override
   void visitConstructorName(ConstructorName node) {
-    visit(node.type);
+    visit(node.type2);
     token(node.period);
     visit(node.name);
   }
@@ -1449,7 +1449,7 @@
     soloSplit();
     token(node.extendsKeyword);
     space();
-    visit(node.superclass);
+    visit(node.superclass2);
   }
 
   @override
@@ -2075,7 +2075,7 @@
 
   @override
   void visitImplementsClause(ImplementsClause node) {
-    _visitCombinator(node.implementsKeyword, node.interfaces);
+    _visitCombinator(node.implementsKeyword, node.interfaces2);
   }
 
   @override
@@ -2340,18 +2340,18 @@
     // If there is only a single superclass constraint, format it like an
     // "extends" in a class.
     var onClause = node.onClause;
-    if (onClause != null && onClause.superclassConstraints.length == 1) {
+    if (onClause != null && onClause.superclassConstraints2.length == 1) {
       soloSplit();
       token(onClause.onKeyword);
       space();
-      visit(onClause.superclassConstraints.single);
+      visit(onClause.superclassConstraints2.single);
     }
 
     builder.startRule(CombinatorRule());
 
     // If there are multiple superclass constraints, format them like the
     // "implements" clause.
-    if (onClause != null && onClause.superclassConstraints.length > 1) {
+    if (onClause != null && onClause.superclassConstraints2.length > 1) {
       visit(onClause);
     }
 
@@ -2372,6 +2372,13 @@
   }
 
   @override
+  void visitNamedType(NamedType node) {
+    visit(node.name);
+    visit(node.typeArguments);
+    token(node.question);
+  }
+
+  @override
   void visitNativeClause(NativeClause node) {
     token(node.nativeKeyword);
     visit(node.name, before: space);
@@ -2395,7 +2402,7 @@
 
   @override
   void visitOnClause(OnClause node) {
-    _visitCombinator(node.onKeyword, node.superclassConstraints);
+    _visitCombinator(node.onKeyword, node.superclassConstraints2);
   }
 
   @override
@@ -2700,13 +2707,6 @@
   }
 
   @override
-  void visitTypeName(TypeName node) {
-    visit(node.name);
-    visit(node.typeArguments);
-    token(node.question);
-  }
-
-  @override
   void visitTypeParameter(TypeParameter node) {
     visitParameterMetadata(node.metadata, () {
       visit(node.name);
@@ -2806,7 +2806,7 @@
 
   @override
   void visitWithClause(WithClause node) {
-    _visitCombinator(node.withKeyword, node.mixinTypes);
+    _visitCombinator(node.withKeyword, node.mixinTypes2);
   }
 
   @override
diff --git a/pubspec.lock b/pubspec.lock
index f3bd718..8f829a1 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -7,14 +7,14 @@
       name: _fe_analyzer_shared
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "26.0.0"
+    version: "29.0.0"
   analyzer:
     dependency: "direct main"
     description:
       name: analyzer
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.3.0"
+    version: "2.6.0"
   args:
     dependency: "direct main"
     description:
@@ -366,4 +366,4 @@
     source: hosted
     version: "3.1.0"
 sdks:
-  dart: ">=2.12.0 <3.0.0"
+  dart: ">=2.14.0 <3.0.0"
diff --git a/pubspec.yaml b/pubspec.yaml
index 033381c..035c006 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -10,7 +10,7 @@
   sdk: '>=2.12.0-0 <3.0.0'
 
 dependencies:
-  analyzer: '>=2.0.0 <3.0.0'
+  analyzer: '>=2.6.0 <3.0.0'
   args: '>=1.0.0 <3.0.0'
   path: ^1.0.0
   pub_semver: '>=1.4.4 <3.0.0'