69 lines
1.7 KiB
Dart
69 lines
1.7 KiB
Dart
// Copyright (c) 2017, 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.
|
|
|
|
import 'package:analyzer/src/generated/utilities_general.dart';
|
|
|
|
/**
|
|
* Information about the root directory associated with an analysis context.
|
|
*
|
|
* Clients may not extend, implement or mix-in this class.
|
|
*/
|
|
class ContextRoot {
|
|
/**
|
|
* The absolute path of the root directory containing the files to be
|
|
* analyzed.
|
|
*/
|
|
final String root;
|
|
|
|
/**
|
|
* A list of the absolute paths of files and directories within the root
|
|
* directory that should not be analyzed.
|
|
*/
|
|
final List<String> exclude;
|
|
|
|
/**
|
|
* Initialize a newly created context root.
|
|
*/
|
|
ContextRoot(this.root, this.exclude);
|
|
|
|
@override
|
|
int get hashCode {
|
|
int hash = 0;
|
|
hash = JenkinsSmiHash.combine(hash, root.hashCode);
|
|
hash = JenkinsSmiHash.combine(hash, exclude.hashCode);
|
|
return JenkinsSmiHash.finish(hash);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(other) {
|
|
if (other is ContextRoot) {
|
|
return root == other.root &&
|
|
_listEqual(exclude, other.exclude, (String a, String b) => a == b);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Compare the lists [listA] and [listB], using [itemEqual] to compare
|
|
* list elements.
|
|
*/
|
|
bool _listEqual(List listA, List listB, bool itemEqual(a, b)) {
|
|
if (listA == null) {
|
|
return listB == null;
|
|
}
|
|
if (listB == null) {
|
|
return false;
|
|
}
|
|
if (listA.length != listB.length) {
|
|
return false;
|
|
}
|
|
for (int i = 0; i < listA.length; i++) {
|
|
if (!itemEqual(listA[i], listB[i])) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|