Merge pull request #41 from j4qfrost/master

nullsafety
diff --git a/lib/pub_cache.dart b/lib/pub_cache.dart
index 4b8a87f..9538d36 100644
--- a/lib/pub_cache.dart
+++ b/lib/pub_cache.dart
@@ -31,12 +31,12 @@
   // The location of the pub cache.
   final Directory location;
 
-  List<Application> _applications;
-  List<PackageRef> _packageRefs;
+  late List<Application> _applications;
+  late List<PackageRef> _packageRefs;
 
   /// Create a pubcache instance. [dir] defaults to the default platform pub
   /// cache location.
-  PubCache([Directory dir])
+  PubCache([Directory? dir])
       : location = dir == null ? getSystemCacheLocation() : dir {
     _parse();
   }
@@ -69,7 +69,7 @@
   /// cache. This method will prefer to return only release verions. If
   /// [includePreRelease] is true, then the very latest verision will be
   /// returned, include pre-release versions.
-  PackageRef getLatestVersion(String packageName,
+  PackageRef? getLatestVersion(String packageName,
       {bool includePreRelease: false}) {
     List<PackageRef> refs = getAllPackageVersions(packageName);
 
@@ -102,7 +102,7 @@
       _applications = globalPackagesDir
           .listSync()
           .where((item) => item is Directory)
-          .map((dir) => new Application._(this, dir))
+          .map((dir) => new Application._(this, dir as Directory))
           .toList();
     }
 
@@ -115,7 +115,7 @@
       _packageRefs.addAll(dartlangDir
           .listSync()
           .where((dir) => dir is Directory)
-          .map((dir) => new DirectoryPackageRef('hosted', dir)));
+          .map((dir) => new DirectoryPackageRef('hosted', dir as Directory)));
     }
 
     // Scan for git packages (ignore the git/cache directory).
@@ -126,7 +126,7 @@
           .listSync()
           .where(
               (dir) => dir is Directory && path.basename(dir.path) != 'cache')
-          .map((dir) => new GitDirectoryPackageRef(dir));
+          .map((dir) => new GitDirectoryPackageRef(dir as Directory));
       _packageRefs.addAll(gitRefs);
     }
   }
@@ -147,7 +147,7 @@
   final PubCache _cache;
   final Directory _dir;
 
-  List<PackageRef> _packageRefs;
+  List<PackageRef>? _packageRefs;
 
   Application._(this._cache, this._dir);
 
@@ -156,13 +156,13 @@
 
   /// The version of the application and of the defining package.
   Version get version {
-    PackageRef ref = getDefiningPackageRef();
+    final ref = getDefiningPackageRef();
     return ref == null ? Version.none : ref.version;
   }
 
   /// Return the reference to the defining package. This is the package that
   /// defines the application.
-  PackageRef getDefiningPackageRef() {
+  PackageRef? getDefiningPackageRef() {
     for (PackageRef ref in getPackageRefs()) {
       if (ref.name == name) return ref;
     }
@@ -173,7 +173,7 @@
   /// defining package as well as the direct and transitive dependencies.
   List<PackageRef> getPackageRefs() {
     if (_packageRefs == null) _parsePubspecLock();
-    return _packageRefs;
+    return _packageRefs!;
   }
 
   String toString() => '${name} ${version}';
@@ -223,10 +223,11 @@
 
   /// Resolve the package reference into the actual package, including the
   /// location on disk.
-  Package resolve();
+  Package? resolve();
 
   bool operator ==(other) {
-    return this.sourceType == other.sourceType &&
+    return other is PackageRef &&
+        this.sourceType == other.sourceType &&
         this.name == other.name &&
         this.version == other.version;
   }
diff --git a/lib/src/impl.dart b/lib/src/impl.dart
index 2542ada..3fc6836 100644
--- a/lib/src/impl.dart
+++ b/lib/src/impl.dart
@@ -17,7 +17,7 @@
   final String name;
   final Version version;
 
-  Function _resolver;
+  Function? _resolver;
 
   PackageRefImpl(this.sourceType, this.name, String ver)
       : version = new Version.parse(ver);
@@ -35,7 +35,7 @@
     return new PathPackageRefImpl(name, ver, description);
   }
 
-  Package resolve() => _resolver == null ? null : _resolver(this);
+  Package? resolve() => _resolver == null ? null : _resolver!(this);
 }
 
 class GitPackageRefImpl extends PackageRefImpl {
@@ -67,7 +67,7 @@
 
   bool get relative => _description['relative'] == true;
 
-  Package resolve() {
+  Package? resolve() {
     Directory dir = new Directory(path);
     return dir.existsSync() ? new Package(dir, name, version) : null;
   }
@@ -81,8 +81,8 @@
   final String sourceType;
   final Directory directory;
 
-  String _name;
-  Version _version;
+  late String _name;
+  late Version _version;
 
   DirectoryPackageRef(this.sourceType, this.directory) {
     _name = path.basename(this.directory.path);
@@ -107,9 +107,9 @@
   final String sourceType;
   final Directory directory;
 
-  String _name;
-  Version _version;
-  String _resolvedRef;
+  late String _name;
+  late Version _version;
+  String? _resolvedRef;
 
   GitDirectoryPackageRef(this.directory) : sourceType = 'git' {
     _name = path.basename(this.directory.path);
@@ -135,7 +135,7 @@
   Version get version => _version;
 
   /// The git commit.
-  String get resolvedRef => _resolvedRef;
+  String? get resolvedRef => _resolvedRef;
 
   Package resolve() => new Package(directory, name, version);
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 2a5047c..c8e29df 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -5,12 +5,12 @@
 homepage: https://github.com/google/pub_cache
 
 environment:
-  sdk: '>=2.0.0 <3.0.0'
+  sdk: '>=2.12.0-0 <3.0.0'
 
 dependencies:
-  path: ^1.0.0
-  pub_semver: ^1.0.0
-  yaml: ^2.0.0
+  path: ^1.8.0
+  pub_semver: ^2.0.0
+  yaml: ^3.0.0
 
 dev_dependencies:
-  test: ^1.0.0
+  test: ^1.16.4
diff --git a/test/pub_cache_test.dart b/test/pub_cache_test.dart
index 131bd8d..4a1ddc5 100644
--- a/test/pub_cache_test.dart
+++ b/test/pub_cache_test.dart
@@ -97,7 +97,7 @@
 
   group('Application', () {
     PubCache cache;
-    Application app;
+    late Application app;
 
     setUp(() {
       cache = new PubCache();
@@ -113,7 +113,7 @@
     });
 
     test('getDefiningPackageRef', () {
-      expect(app.getDefiningPackageRef().name, app.name);
+      expect(app.getDefiningPackageRef()!.name, app.name);
     });
 
     test('getPackageRefs', () {
@@ -127,8 +127,8 @@
 
   group('PackageRef', () {
     PubCache cache;
-    Application app;
-    PackageRef ref;
+    late Application app;
+    late PackageRef ref;
 
     setUp(() {
       cache = new PubCache();
@@ -160,7 +160,7 @@
   group('Package', () {
     test('toString', () {
       PubCache cache = new PubCache();
-      Package p = cache.getPackageRefs().first.resolve();
+      Package? p = cache.getPackageRefs().first.resolve();
       expect(p, isNotNull);
       expect(p.toString(), isNotEmpty);
     });