@@ -8,6 +8,8 @@ import 'package:analyzer/dart/constant/value.dart';
88import  'package:analyzer/dart/element/element.dart' ;
99import  'package:analyzer/dart/element/type.dart' ;
1010
11+ import  'utils.dart' ;
12+ 
1113/// An abstraction around doing static type checking at compile/build time. 
1214abstract  class  TypeChecker  {
1315  const  TypeChecker ._();
@@ -118,51 +120,6 @@ Iterable<InterfaceType> _getAllSupertypes(Element element) sync* {
118120  }
119121}
120122
121- Uri  _normalizeUrl (Uri  url) {
122-   switch  (url.scheme) {
123-     case  'dart' : 
124-       return  _normalizeDartUrl (url);
125-     case  'package' : 
126-       return  _packageToAssetUrl (url);
127-     default : 
128-       return  url;
129-   }
130- }
131- 
132- /// Make `dart:` -type URLs look like a user-knowable path. 
133- /// 
134- /// Some internal dart: URLs are something like `dart:core/map.dart` . 
135- /// 
136- /// This isn't a user-knowable path, so we strip out extra path segments 
137- /// and only expose `dart:core` . 
138- Uri  _normalizeDartUrl (Uri  url) =>  url.pathSegments.isNotEmpty
139-     ?  url.replace (pathSegments:  url.pathSegments.take (1 ))
140-     :  url;
141- 
142- /// Returns a `package:`  URL into a `asset:`  URL. 
143- /// 
144- /// This makes internal comparison logic much easier, but still allows users 
145- /// to define assets in terms of `package:` , which is something that makes more 
146- /// sense to most. 
147- /// 
148- /// For example this transforms `package:source_gen/source_gen.dart`  into: 
149- /// `asset:source_gen/lib/source_gen.dart` . 
150- Uri  _packageToAssetUrl (Uri  url) =>  url.scheme ==  'package' 
151-     ?  url.replace (
152-         scheme:  'asset' ,
153-         pathSegments:  < String > []
154-           ..add (url.pathSegments.first)
155-           ..add ('lib' )
156-           ..addAll (url.pathSegments.skip (1 )))
157-     :  url;
158- 
159- /// Returns 
160- String  _urlOfElement (Element  element) =>  element.kind ==  ElementKind .DYNAMIC 
161-     ?  'dart:core#dynmaic' 
162-     :  _normalizeUrl (element.source.uri)
163-         .replace (fragment:  element.name)
164-         .toString ();
165- 
166123// Checks a static type against another static type; 
167124class  _LibraryTypeChecker  extends  TypeChecker  {
168125  final  DartType  _type;
@@ -174,13 +131,13 @@ class _LibraryTypeChecker extends TypeChecker {
174131      element is  ClassElement  &&  element ==  _type.element;
175132
176133  @override 
177-   String  toString () =>  '${_urlOfElement (_type .element )}' ;
134+   String  toString () =>  '${urlOfElement (_type .element )}' ;
178135}
179136
180137// Checks a runtime type against a static type. 
181138class  _MirrorTypeChecker  extends  TypeChecker  {
182139  static  Uri  _uriOf (ClassMirror  mirror) => 
183-       _normalizeUrl ((mirror.owner as  LibraryMirror ).uri)
140+       normalizeUrl ((mirror.owner as  LibraryMirror ).uri)
184141          .replace (fragment:  MirrorSystem .getName (mirror.simpleName));
185142
186143  // Precomputed type checker for types that already have been used. 
@@ -218,14 +175,14 @@ class _UriTypeChecker extends TypeChecker {
218175  int  get  hashCode =>  _url.hashCode;
219176
220177  /// Url as a [Uri]  object, lazily constructed. 
221-    Uri  get  uri =>  _cache[this ] ?? =  _normalizeUrl (Uri .parse (_url));
178+    Uri  get  uri =>  _cache[this ] ?? =  normalizeUrl (Uri .parse (_url));
222179
223180  /// Returns whether this type represents the same as [url] . 
224181   bool  hasSameUrl (dynamic  url) => 
225-       uri.toString () ==  (url is  String  ?  url :  _normalizeUrl (url).toString ());
182+       uri.toString () ==  (url is  String  ?  url :  normalizeUrl (url).toString ());
226183
227184  @override 
228-   bool  isExactly (Element  element) =>  hasSameUrl (_urlOfElement (element));
185+   bool  isExactly (Element  element) =>  hasSameUrl (urlOfElement (element));
229186
230187  @override 
231188  String  toString () =>  '${uri }' ;
0 commit comments