diff --git a/pkg/analyzer/example/analyze.dart b/pkg/analyzer/example/analyze.dart
new file mode 100644
index 0000000..d9d5cb3
--- /dev/null
+++ b/pkg/analyzer/example/analyze.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2020, 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 'dart:io';
+
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+
+/// A simple example of using the AnalysisContextCollection API.
+void main(List<String> args) async {
+  var entity = Directory.current;
+  if (args.isNotEmpty) {
+    String arg = args.first;
+    entity = FileSystemEntity.isDirectorySync(arg) ? Directory(arg) : File(arg);
+  }
+
+  var issueCount = 0;
+  final collection = AnalysisContextCollection(
+      includedPaths: [entity.absolute.path],
+      resourceProvider: PhysicalResourceProvider.INSTANCE);
+
+  // Often one context is returned, but depending on the project structure we
+  // can see multiple contexts.
+  for (final context in collection.contexts) {
+    print('Analyzing ${context.contextRoot.root.path} ...');
+
+    for (final filePath in context.contextRoot.analyzedFiles()) {
+      if (!filePath.endsWith('.dart')) {
+        continue;
+      }
+
+      final errorsResult = await context.currentSession.getErrors(filePath);
+      for (final error in errorsResult.errors) {
+        if (error.errorCode.type != ErrorType.TODO) {
+          print(
+              '  \u001b[1m${error.source.shortName}\u001b[0m ${error.message}');
+          issueCount++;
+        }
+      }
+    }
+  }
+
+  print('$issueCount issues found.');
+}
diff --git a/tools/VERSION b/tools/VERSION
index 6245043..3710e8c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 188
+PRERELEASE 189
 PRERELEASE_PATCH 0
\ No newline at end of file
