@@ -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