 +      if (n != null && NodeUtil.isVarOrSimpleAssignLhs(n, assign)
 +          && n.isGetProp()
 +          && assign.getParent().isExprResult()) {
-+        // We want to exclude the assignment itself from the usage list
 +        boolean isChainedProperty =
 +            n.getFirstChild().isGetProp();
  
      /**
       * Returns the name of a prototype property being assigned to this r-value.
-@@ -387,32 +362,18 @@ class AnalyzePrototypeProperties implements CompilerPass {
+@@ -387,32 +360,18 @@ class AnalyzePrototypeProperties implements CompilerPass {
       * the R-value is used in multiple expressions (i.e., if there's
       * a prototype property assignment in a more complex expression).
       */

 
         // If the function name is exported, we should create an edge here
         // so that it's never removed.
@@ -451,10 +411,8 @@ class AnalyzePrototypeProperties implements CompilerPass {
      * under an assignment (in the case of Foo.prototype = ...).
      * @return True if a declaration was added.
      */

     public void remove() {
       map.removeChild(key);
     }
@@ -731,11 +659,10 @@ class AnalyzePrototypeProperties implements CompilerPass {
 
     // If this is a function context, then scope will be the scope of the
     // corresponding function. Otherwise, it will be null.
