blob: e0989921e5c1a16469153944e2ff38b245873c4b [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/**
* The enumeration `UriKind` defines the different kinds of URI's that are
* known to the analysis engine. These are used to keep track of the kind of
* URI associated with a given source.
*/
class UriKind implements Comparable<UriKind> {
/**
* A 'dart:' URI.
*/
static const UriKind DART_URI = const UriKind('DART_URI', 0, 0x64);
/**
* A 'file:' URI.
*/
static const UriKind FILE_URI = const UriKind('FILE_URI', 1, 0x66);
/**
* A 'package:' URI.
*/
static const UriKind PACKAGE_URI = const UriKind('PACKAGE_URI', 2, 0x70);
static const List<UriKind> values = const [DART_URI, FILE_URI, PACKAGE_URI];
/**
* The name of this URI kind.
*/
final String name;
/**
* The ordinal value of the URI kind.
*/
final int ordinal;
/**
* The single character encoding used to identify this kind of URI.
*/
final int encoding;
/**
* Initialize a newly created URI kind to have the given encoding.
*/
const UriKind(this.name, this.ordinal, this.encoding);
@override
int get hashCode => ordinal;
@override
int compareTo(UriKind other) => ordinal - other.ordinal;
@override
String toString() => name;
/**
* Return the URI kind represented by the given [encoding], or `null` if there
* is no kind with the given encoding.
*/
static UriKind fromEncoding(int encoding) {
while (true) {
if (encoding == 0x64) {
return DART_URI;
} else if (encoding == 0x66) {
return FILE_URI;
} else if (encoding == 0x70) {
return PACKAGE_URI;
}
break;
}
return null;
}
/**
* Return the URI kind corresponding to the given scheme string.
*/
static UriKind fromScheme(String scheme) {
if (scheme == 'package') {
return UriKind.PACKAGE_URI;
} else if (scheme == 'dart') {
return UriKind.DART_URI;
} else if (scheme == 'file') {
return UriKind.FILE_URI;
}
return UriKind.FILE_URI;
}
}