// Copyright (c) 2013, 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/source/source.dart'; import 'package:analyzer/src/generated/engine.dart' show TimestampedData; import 'package:path/path.dart' as pkg_path; /// An implementation of [Source] that's based on an in-memory Dart string. class StringSource extends Source { /// The content of the source. final String _contents; @override final String fullName; @override final Uri uri; StringSource(this._contents, String? fullName, {Uri? uri}) : fullName = fullName ?? '/test.dart', uri = _computeUri(uri, fullName); @override TimestampedData get contents => TimestampedData(0, _contents); @override int get hashCode => _contents.hashCode ^ fullName.hashCode; @override String get shortName => fullName; /// Return `true` if the given [object] is a string source that is equal to /// this source. @override bool operator ==(Object object) { return object is StringSource && object._contents == _contents && object.fullName == fullName; } @override bool exists() => true; @override String toString() => 'StringSource ($fullName)'; static Uri _computeUri(Uri? uri, String? fullName) { if (uri != null) { return uri; } var isWindows = pkg_path.Style.platform == pkg_path.Style.windows; if (isWindows) { return pkg_path.toUri(r'C:\test.dart'); } else { return pkg_path.toUri(r'/test.dart'); } } }