diff --git a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
index d1f4ee9..d914254 100644
--- a/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart/SDKArtifactSizes.dart
@@ -35,7 +35,7 @@
 
 Future<void> reportArtifactSize(String path, String name) async {
   final size = await File(path).length();
-  print('SDKArtifactSize_$name(CodeSize): $size');
+  print('SDKArtifactSize.$name(CodeSize): $size');
 }
 
 Future<void> main() async {
diff --git a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
index d1f4ee9..d914254 100644
--- a/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
+++ b/benchmarks/SDKArtifactSizes/dart2/SDKArtifactSizes.dart
@@ -35,7 +35,7 @@
 
 Future<void> reportArtifactSize(String path, String name) async {
   final size = await File(path).length();
-  print('SDKArtifactSize_$name(CodeSize): $size');
+  print('SDKArtifactSize.$name(CodeSize): $size');
 }
 
 Future<void> main() async {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart b/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
index 5724484..498197c 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/documentation_cache.dart
@@ -29,9 +29,10 @@
 
   /// Fill the cache with data from the [result].
   void cacheFromResult(ResolvedUnitResult result) {
-    var element = result.unit?.declaredElement;
-    if (element != null) {
-      _cacheFromElement(element);
+    var compilationUnit = result.unit?.declaredElement;
+    if (compilationUnit != null) {
+      documentationCache.remove(_keyForUnit(compilationUnit));
+      _cacheFromElement(compilationUnit);
       for (var library in result.libraryElement.importedLibraries) {
         _cacheLibrary(library);
       }
@@ -87,12 +88,12 @@
           elementMap.cacheTopLevelElement(dartdocDirectiveInfo, element);
       if (parentKey != null) {
         for (var member in element.accessors) {
-          if (!element.isSynthetic) {
+          if (!member.isSynthetic) {
             elementMap.cacheMember(dartdocDirectiveInfo, parentKey, member);
           }
         }
         for (var member in element.fields) {
-          if (!element.isSynthetic) {
+          if (!member.isSynthetic) {
             elementMap.cacheMember(dartdocDirectiveInfo, parentKey, member);
           }
         }
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 2f994bb..8503a49 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -246,21 +246,15 @@
     "eval", "arguments"
   ];
 
-  // Symbols that we might be using in our JS snippets.
-  static const List<String> reservedGlobalSymbols = const <String>[
+  /// A set of all capitalized global symbols.
+  /// This set is so [DeferredHolderFinalizer] can use names like:
+  /// [A-Z][_0-9a-zA-Z]* without collisions
+  static const Set<String> reservedCapitalizedGlobalSymbols = const {
     // Section references are from Ecma-262
     // (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)
 
     // 15.1.1 Value Properties of the Global Object
-    "NaN", "Infinity", "undefined",
-
-    // 15.1.2 Function Properties of the Global Object
-    "eval", "parseInt", "parseFloat", "isNaN", "isFinite",
-
-    // 15.1.3 URI Handling Function Properties
-    "decodeURI", "decodeURIComponent",
-    "encodeURI",
-    "encodeURIComponent",
+    "NaN", "Infinity",
 
     // 15.1.4 Constructor Properties of the Global Object
     "Object", "Function", "Array", "String", "Boolean", "Number", "Date",
@@ -270,6 +264,61 @@
     // 15.1.5 Other Properties of the Global Object
     "Math",
 
+    // Window props (https://developer.mozilla.org/en/DOM/window)
+    "Components",
+
+    // Window methods (https://developer.mozilla.org/en/DOM/window)
+    "GeckoActiveXObject", "QueryInterface", "XPCNativeWrapper",
+    "XPCSafeJSOjbectWrapper",
+
+    // Common browser-defined identifiers not defined in ECMAScript
+    "Debug", "Enumerator", "Global", "Image",
+    "ActiveXObject", "VBArray",
+
+    // Client-side JavaScript identifiers
+    "Anchor", "Applet", "Attr", "Canvas", "CanvasGradient",
+    "CanvasPattern", "CanvasRenderingContext2D", "CDATASection",
+    "CharacterData", "Comment", "CSS2Properties", "CSSRule",
+    "CSSStyleSheet", "Document", "DocumentFragment", "DocumentType",
+    "DOMException", "DOMImplementation", "DOMParser", "Element", "Event",
+    "ExternalInterface", "FlashPlayer", "Form", "Frame", "History",
+    "HTMLCollection", "HTMLDocument", "HTMLElement", "IFrame",
+    "Input", "JSObject", "KeyEvent", "Link", "Location", "MimeType",
+    "MouseEvent", "Navigator", "Node", "NodeList", "Option", "Plugin",
+    "ProcessingInstruction", "Range", "RangeException", "Screen", "Select",
+    "Table", "TableCell", "TableRow", "TableSelection", "Text", "TextArea",
+    "UIEvent", "Window", "XMLHttpRequest", "XMLSerializer",
+    "XPathException", "XPathResult", "XSLTProcessor",
+
+    // These keywords trigger the loading of the java-plugin. For the
+    // next-generation plugin, this results in starting a new Java process.
+    "Packages", "JavaObject", "JavaClass",
+    "JavaArray", "JavaMember",
+
+    // ES6 collections.
+    "Map", "Set",
+
+    // Some additional names
+    "Isolate",
+  };
+
+  /// Symbols that we might be using in our JS snippets. Some of the symbols in
+  /// these sections are in [reservedGlobalUpperCaseSymbols] above.
+  static const List<String> reservedGlobalSymbols = const <String>[
+    // Section references are from Ecma-262
+    // (http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf)
+
+    // 15.1.1 Value Properties of the Global Object
+    "undefined",
+
+    // 15.1.2 Function Properties of the Global Object
+    "eval", "parseInt", "parseFloat", "isNaN", "isFinite",
+
+    // 15.1.3 URI Handling Function Properties
+    "decodeURI", "decodeURIComponent",
+    "encodeURI",
+    "encodeURIComponent",
+
     // 10.1.6 Activation Object
     "arguments",
 
@@ -277,7 +326,7 @@
     "escape", "unescape",
 
     // Window props (https://developer.mozilla.org/en/DOM/window)
-    "applicationCache", "closed", "Components", "content", "controllers",
+    "applicationCache", "closed", "content", "controllers",
     "crypto", "defaultStatus", "dialogArguments", "directories",
     "document", "frameElement", "frames", "fullScreen", "globalStorage",
     "history", "innerHeight", "innerWidth", "length",
@@ -294,15 +343,14 @@
     "captureEvents", "clearInterval", "clearTimeout", "close", "confirm",
     "disableExternalCapture", "dispatchEvent", "dump",
     "enableExternalCapture", "escape", "find", "focus", "forward",
-    "GeckoActiveXObject", "getAttention", "getAttentionWithCycleCount",
+    "getAttention", "getAttentionWithCycleCount",
     "getComputedStyle", "getSelection", "home", "maximize", "minimize",
     "moveBy", "moveTo", "open", "openDialog", "postMessage", "print",
-    "prompt", "QueryInterface", "releaseEvents", "removeEventListener",
+    "prompt", "releaseEvents", "removeEventListener",
     "resizeBy", "resizeTo", "restore", "routeEvent", "scroll", "scrollBy",
     "scrollByLines", "scrollByPages", "scrollTo", "setInterval",
     "setResizeable", "setTimeout", "showModalDialog", "sizeToContent",
-    "stop", "uuescape", "updateCommands", "XPCNativeWrapper",
-    "XPCSafeJSOjbectWrapper",
+    "stop", "uuescape", "updateCommands",
 
     // Mozilla Window event handlers, same cite
     "onabort", "onbeforeunload", "onchange", "onclick", "onclose",
@@ -334,34 +382,14 @@
     "oncontrolselect", "ondeactivate", "onhelp", "onresizeend",
 
     // Common browser-defined identifiers not defined in ECMAScript
-    "event", "external", "Debug", "Enumerator", "Global", "Image",
-    "ActiveXObject", "VBArray", "Components",
+    "event", "external",
 
     // Functions commonly defined on Object
     "toString", "getClass", "constructor", "prototype", "valueOf",
 
-    // Client-side JavaScript identifiers
-    "Anchor", "Applet", "Attr", "Canvas", "CanvasGradient",
-    "CanvasPattern", "CanvasRenderingContext2D", "CDATASection",
-    "CharacterData", "Comment", "CSS2Properties", "CSSRule",
-    "CSSStyleSheet", "Document", "DocumentFragment", "DocumentType",
-    "DOMException", "DOMImplementation", "DOMParser", "Element", "Event",
-    "ExternalInterface", "FlashPlayer", "Form", "Frame", "History",
-    "HTMLCollection", "HTMLDocument", "HTMLElement", "IFrame", "Image",
-    "Input", "JSObject", "KeyEvent", "Link", "Location", "MimeType",
-    "MouseEvent", "Navigator", "Node", "NodeList", "Option", "Plugin",
-    "ProcessingInstruction", "Range", "RangeException", "Screen", "Select",
-    "Table", "TableCell", "TableRow", "TableSelection", "Text", "TextArea",
-    "UIEvent", "Window", "XMLHttpRequest", "XMLSerializer",
-    "XPathException", "XPathResult", "XSLTProcessor",
-
     // These keywords trigger the loading of the java-plugin. For the
     // next-generation plugin, this results in starting a new Java process.
-    "java", "Packages", "netscape", "sun", "JavaObject", "JavaClass",
-    "JavaArray", "JavaMember",
-
-    // ES6 collections.
-    "Map", "Set",
+    "java", "netscape", "sun",
   ];
 
   // TODO(joshualitt): Stop reserving these names after local naming is updated
@@ -397,7 +425,6 @@
 
   static const List<String> reservedGlobalHelperFunctions = const <String>[
     "init",
-    "Isolate",
   ];
 
   static final List<String> userGlobalObjects =
@@ -413,12 +440,7 @@
   /// Names that cannot be used by members, top level and static
   /// methods.
   Set<String> get jsReserved {
-    if (_jsReserved == null) {
-      _jsReserved = new Set<String>();
-      _jsReserved.addAll(javaScriptKeywords);
-      _jsReserved.addAll(reservedPropertySymbols);
-    }
-    return _jsReserved;
+    return _jsReserved ??= {...javaScriptKeywords, ...reservedPropertySymbols};
   }
 
   final String stubNameField = r'$stubName';
@@ -2232,17 +2254,37 @@
 
   Set<String> _jsVariableReservedCache = null;
 
+  /// Returns true if all reserved names with 2 or more characters long where
+  /// the first character is upper case are in
+  /// [Namer.reservedGlobalUpperCaseSymbols] and all names in that said have
+  /// already been added to [_jsVariableReservedCache].
+  bool _sanityCheckUpperCaseNames(Set<String> reserved) {
+    for (var name in reserved) {
+      var firstChar = name.codeUnitAt(0);
+      if (name.length > 1 &&
+          firstChar >= $A &&
+          firstChar <= $Z &&
+          !Namer.reservedCapitalizedGlobalSymbols.contains(name)) {
+        return false;
+      }
+    }
+    return true;
+  }
+
   /// Names that cannot be used by local variables and parameters.
   Set<String> get _jsVariableReserved {
     if (_jsVariableReservedCache == null) {
-      _jsVariableReservedCache = new Set<String>();
-      _jsVariableReservedCache.addAll(Namer.javaScriptKeywords);
-      _jsVariableReservedCache.addAll(Namer.reservedPropertySymbols);
-      _jsVariableReservedCache.addAll(Namer.reservedGlobalSymbols);
-      _jsVariableReservedCache.addAll(Namer.reservedGlobalObjectNames);
+      _jsVariableReservedCache = {
+        ...Namer.javaScriptKeywords,
+        ...Namer.reservedPropertySymbols,
+        ...Namer.reservedGlobalSymbols,
+        ...Namer.reservedGlobalObjectNames,
+        ...Namer.reservedCapitalizedGlobalSymbols,
+        ...Namer.reservedGlobalHelperFunctions
+      };
       // 26 letters in the alphabet, 25 not counting I.
       assert(Namer.reservedGlobalObjectNames.length == 25);
-      _jsVariableReservedCache.addAll(Namer.reservedGlobalHelperFunctions);
+      assert(_sanityCheckUpperCaseNames(_jsVariableReservedCache));
     }
     return _jsVariableReservedCache;
   }
diff --git a/pkg/meta/lib/meta.dart b/pkg/meta/lib/meta.dart
index 6bebee4..54768af 100644
--- a/pkg/meta/lib/meta.dart
+++ b/pkg/meta/lib/meta.dart
@@ -207,24 +207,41 @@
 /// warnings that would otherwise require type arguments on `C` to be provided.
 const _OptionalTypeArgs optionalTypeArgs = _OptionalTypeArgs();
 
-/// Used to annotate an instance member (method, getter, setter, operator, or
-/// field) `m` in a class `C`. If the annotation is on a field it applies to the
-/// getter, and setter if appropriate, that are induced by the field. Indicates
-/// that `m` should only be invoked from instance methods of `C` or classes that
-/// extend, implement or mix in `C`, either directly or indirectly or from within
-/// the same library that `m` is declared in. Additionally indicates that `m`
-/// should only be invoked on `this` (when outside of the library that it is
-/// declared in), whether explicitly or implicitly.
+/// Used to annotate an instance member in a class or mixin which is meant to
+/// be visible only within the declaring library, and to other instance members
+/// of the class or mixin, and their subtypes.
+///
+/// If the annotation is on a field it applies to the getter, and setter if
+/// appropriate, that are induced by the field.
+///
+/// Indicates that the annotated instance member (method, getter, setter,
+/// operator, or field) `m` in a class or mixin `C` should only be referenced
+/// in specific locations. A reference from within the library in which `C` is
+/// declared is valid. Additionally, a reference from within an instance member
+/// in `C`, or a class that extends, implements, or mixes in `C` (either
+/// directly or indirectly) or a mixin that uses `C` as a superclass constraint
+/// is valid. Additionally a reference from within an instance member in an
+/// extension that applies to `C` is valid.
+///
+/// Additionally restricts the instance of `C` on which `m` is referenced: a
+/// reference to `m` should either be in the same library in which `C` is
+/// declared, or should refer to `this.m` (explicitly or implicitly), and not
+/// `m` on any other instance of `C`.
 ///
 /// Tools, such as the analyzer, can provide feedback if
 ///
 /// * the annotation is associated with anything other than an instance member,
 ///   or
-/// * an invocation of a member that has this annotation is used outside of an
-///   instance member defined on a class that extends or mixes in (or a mixin
-///   constrained to) the class in which the protected member is defined.
-/// * an invocation of a member that has this annotation is used within an
-///   instance method, but the receiver is something other than `this`.
+/// * a reference to a member `m` which has this annotation, declared in a
+///   class or mixin `C`, is found outside of the declaring library and outside
+///   of an instance member in any class that extends, implements, or mixes in
+///   `C` or any mixin that uses `C` as a superclass constraint, or
+/// * a reference to a member `m` which has this annotation, declared in a
+///   class or mixin `C`, is found outside of the declaring library and the
+///   receiver is something other than `this`.
+// TODO(srawlins): Add a sentence which defines "referencing" and explicitly
+// mentions tearing off, here and on the other annotations which use the word
+// "referenced."
 const _Protected protected = _Protected();
 
 /// Used to annotate a named parameter `p` in a method or function `f`.
diff --git a/tools/VERSION b/tools/VERSION
index bc0a457..868836c 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 161
+PRERELEASE 162
 PRERELEASE_PATCH 0
\ No newline at end of file
