 -      int lastDot = lValueName.lastIndexOf('.');
 -      if (lastDot == -1) {
 -        return null;
--      }
--
--      String firstPart = lValueName.substring(0, lastDot);
--      if (!firstPart.endsWith(".prototype")) {
--        return null;
 +          if (child.isString() &&
 +              child.getString().equals("prototype")) {
 +            return true;

 
     /**
      * Returns the name of a prototype property being assigned to this r-value.
@@ -387,32 +360,17 @@ 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).
      */

       }
       return true;
     }
@@ -251,35 +239,23 @@ class AnalyzePrototypeProperties implements CompilerPass {
       if (n.isGetProp()) {
         String propName = n.getFirstChild().getNext().getString();
 
-        if (n.isQualifiedName()) {
           if (propName.equals("prototype")) {
-            if (processPrototypeRef(t, n)) {
-              return;
-            }
+          processPrototypeParent(t, parent);
           } else if (compiler.getCodingConvention().isExported(propName)) {
             addGlobalUseOfSymbol(propName, t.getModule(), PROPERTY);
-            return;
           } else {
             // Do not mark prototype prop assigns as a 'use' in the global scope.
-            if (n.getParent().isAssign() && n.getNext() != null) {
-              String rValueName = getPrototypePropertyNameFromRValue(n);
