[pkg-eucalyptus-commits] r219 - in gwt/trunk/debian: . patches

Chris Halls halls at alioth.debian.org
Wed Jul 4 12:08:23 UTC 2012


Author: halls
Date: 2012-07-04 12:08:23 +0000 (Wed, 04 Jul 2012)
New Revision: 219

Added:
   gwt/trunk/debian/README.Debian
   gwt/trunk/debian/patches/build-with-jdt35
   gwt/trunk/debian/patches/generated-protobuf-class
Modified:
   gwt/trunk/debian/ant.properties
   gwt/trunk/debian/changelog
   gwt/trunk/debian/control
   gwt/trunk/debian/orig-tar.sh
   gwt/trunk/debian/patches/build-with-jdt37
   gwt/trunk/debian/patches/series
   gwt/trunk/debian/rules
Log:
Add changes by Brian Thomason

Added: gwt/trunk/debian/README.Debian
===================================================================
--- gwt/trunk/debian/README.Debian	                        (rev 0)
+++ gwt/trunk/debian/README.Debian	2012-07-04 12:08:23 UTC (rev 219)
@@ -0,0 +1,24 @@
+In order to run the test suite, you will need to checkout GWT TOOLS somewhere on your system:
+
+svn checkout http://google-web-toolkit.googlecode.com/svn/tools
+
+You will then need to compile ant-gwt:
+
+cd build-tools/ant-gwt && ant
+
+Lastly, the samples directory was intentionally stripped from the orig.tar.gz
+as it contained binary JAR files.  However, these JARs are needed for certain
+test cases.  You may download them official GWT build from Google here:
+
+http://code.google.com/webtoolkit/download.html
+
+You are now ready to run the test suites!  For the development test suite:
+
+GWT_EXTTOOLS=/path/to/gwt/tools ant -propertyfile debian/ant.properties -DartifactVersion=2.4.0 -f dev/build.xml test
+
+For the runtime test suite (please note, it will take a while):
+
+GWT_EXTTOOLS=/path/to/gwt/tools ant -propertyfile debian/ant.properties -DartifactVersion=2.4.0 -f user/build.xml test
+
+Please note that certain date tests will fail as the format of the string
+output appears to have changed.

Modified: gwt/trunk/debian/ant.properties
===================================================================
--- gwt/trunk/debian/ant.properties	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/ant.properties	2012-07-04 12:08:23 UTC (rev 219)
@@ -13,11 +13,11 @@
 
 # Dev
 ant.jar                  = /usr/share/java/ant.jar
-ecj.jar                  = /usr/share/java/ecj.jar
+#ecj.jar                  = /usr/share/java/eclipse-ecj.jar
 # FIXME: Use wildcards here for jdt
 #jdt.jar                  = /usr/lib/eclipse/plugins/org.eclipse.jdt.core_3.5.*.jar:/usr/lib/eclipse/dropins/jdt/plugins/org.eclipse.jdt.core_3.7.*.jar
 #jdt.jar                  = /usr/lib/eclipse/plugins/org.eclipse.jdt.core_3.5.2.v_981_R35x.jar
-jdt.jar                  = /usr/lib/eclipse/dropins/jdt/plugins/org.eclipse.jdt.core_3.7.0.dist.jar
+jdt.jar                  = /usr/lib/eclipse/plugins/org.eclipse.jdt.core_3.7.1.dist.jar
 protobuf.jar             = /usr/share/java/protobuf-java.jar
 commons-logging.jar      = /usr/share/java/commons-logging.jar
 
@@ -28,7 +28,7 @@
 
 # User
 icu4j.jar                = /usr/share/java/icu4j.jar
-jsilver.jar              = /usr/share/java/jsilver.jar
+#jsilver.jar              = /usr/share/java/jsilver.jar
 flute.jar                = /usr/share/java/flute.jar
 json-simple.jar          = /usr/share/java/json_simple.jar
 geronimo-validation.jar  = /usr/share/java/geronimo-validation.jar

Modified: gwt/trunk/debian/changelog
===================================================================
--- gwt/trunk/debian/changelog	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/changelog	2012-07-04 12:08:23 UTC (rev 219)
@@ -1,5 +1,15 @@
-gwt (2.4.0-1) UNRELEASED; urgency=low
+gwt (2.4.0-0ubuntu1) precise; urgency=low
 
+  [ Brian Thomason ]
+  * Minor JDT 3.7 fix
+  * Minor packaging cleanup
+
+  [ Alexandre Rossi ]
+  * Added patch to build against JDT 3.5+
+  * Added patch to use JSON Simple
+  * Added patch to fix guava path
+
+  [ Charles Plessy ]
   * New upstream release (Closes: #624205).
   * Build-depends on libswt-gtk-3 instead of 3.5 (Closes: #629733).
   * Switched to source format 3.0 (quilt) (debian/source/format,
@@ -9,7 +19,7 @@
   * Removed XSBC-Original-Maintainer field (debian/control).
   * Conforms to Policy 3.9.2 (debian/control, no other changes needed).
 
- -- Charles Plessy <plessy at debian.org>  Wed, 24 Aug 2011 09:26:43 +0900
+ -- Brian Thomason <brian.thomason at eucalyptus.com>  Thu, 09 Feb 2012 01:26:50 +0000
 
 gwt (1.6.4-1) unstable; urgency=low
 

Modified: gwt/trunk/debian/control
===================================================================
--- gwt/trunk/debian/control	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/control	2012-07-04 12:08:23 UTC (rev 219)
@@ -1,22 +1,34 @@
 Source: gwt
 Section: java
 Priority: optional
-Maintainer: Debian Eucalyptus Maintainers <pkg-eucalyptus-maintainers at lists.alioth.debian.org>
+Maintainer: Ubuntu Developers <ubuntu-devel-discuss at lists.ubuntu.com>
+XSBC-Original-Maintainer: Debian Eucalyptus Maintainers <pkg-eucalyptus-maintainers at lists.alioth.debian.org>
 DM-Upload-Allowed: yes
-Uploaders: Chris Grzegorczyk <grze at eucalyptus.com>,
- Graziano Obertelli <graziano at eucalyptus.com>, Kyo Lee <kyo.lee at eucalyptus.com>
+Uploaders: Brian Thomason <brian.thomason at eucalyptus.com>
 Build-Depends-Indep: default-jdk,
  libcommons-collections3-java,
  libservlet2.5-java,
- libjetty-java, libjetty-extra-java,
+ libjetty-java,
+ libjetty-extra-java,
  libecj-java,
- libswt-gtk-3-java, libswt-gtk-3-java-gcj,
- junit
+ libswt-gtk-3-java,
+ libswt-gtk-3-java-gcj,
+ junit,
  eclipse-jdt,
- libguava-java, libhtmlunit-java, libhtmlunit-core-js-java,
- libjetty-java, libprotobuf-java, protobuf-compiler, libcommons-logging-java,
- libgeronimo-validation-1.0-spec-java, libicu4j-java, libjson-simple-java,
- libflute-java, libjsilver-java
+ libguava-java,
+ libhtmlunit-java,
+ libhtmlunit-core-js-java,
+ libjetty-java,
+ libprotobuf-java,
+ protobuf-compiler,
+ libcommons-logging-java,
+ libgeronimo-validation-1.0-spec-java,
+ libicu4j-java,
+ libjson-simple-java,
+ libflute-java,
+ libhibernate-validator-java,
+ libhibernate3-java,
+ libjsilver-java
 Build-Depends: ant, ant-contrib, debhelper (>= 5), cdbs (>= 0.4.5.3)
 Standards-Version: 3.9.2
 Vcs-Svn: svn://svn.debian.org/pkg-eucalyptus/gwt/trunk
@@ -25,8 +37,8 @@
 
 Package: libgwt-user-java
 Architecture: all
-Depends: default-jre-headless | java5-runtime-headless, ${misc:Depends}
-Description: Google Web Toolkit (GWT)
+Depends: ${misc:Depends}
+Description: Google Web Toolkit (GWT) runtime libs
  Google Web Toolkit (GWT) allows developers to quickly build and maintain
  complex JavaScript front-end applications in the Java programming language.
  .
@@ -34,8 +46,8 @@
 
 Package: libgwt-dev-java
 Architecture: all
-Depends: default-jre-headless | java5-runtime-headless, libgwt-user-java, ${misc:Depends}
-Description: Google Web Toolkit (GWT)
+Depends: ${misc:Depends}
+Description: Google Web Toolkit (GWT) dev libs
  Google Web Toolkit (GWT) allows developers to quickly build and maintain
  complex JavaScript front-end applications in the Java programming language.
  .

Modified: gwt/trunk/debian/orig-tar.sh
===================================================================
--- gwt/trunk/debian/orig-tar.sh	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/orig-tar.sh	2012-07-04 12:08:23 UTC (rev 219)
@@ -10,6 +10,12 @@
 svn export http://google-web-toolkit.googlecode.com/svn/tags/$2/ $TMP_DIRECTORY/$DIR
 svn export http://google-web-toolkit.googlecode.com/svn/tools/lib/apache/tapestry-util-text-4.0.2-src.zip $TMP_DIRECTORY/tapestry-src.zip
 unzip $TMP_DIRECTORY/tapestry-src.zip -d $TMP_DIRECTORY/$DIR/user/src
+#remove dirs containing compiled JARs
+cd $TMP_DIRECTORY/$DIR && rm -rf samples\
+                                 tools/api-checker/reference\
+                                 eclipse/settings/code-style/gwt-customchecks.jar\
+                                 dev/core/test/com/google/gwt/dev/resource/impl/testdata\
+                                 eclipse
 cd $TMP_DIRECTORY && tar --create --gzip --file $TAR $DIR
 
 # Move to directory 'tarballs' if available.

Added: gwt/trunk/debian/patches/build-with-jdt35
===================================================================
--- gwt/trunk/debian/patches/build-with-jdt35	                        (rev 0)
+++ gwt/trunk/debian/patches/build-with-jdt35	2012-07-04 12:08:23 UTC (rev 219)
@@ -0,0 +1,139 @@
+Index: gwt-2.4.0/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
+===================================================================
+--- gwt-2.4.0.orig/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java	2011-04-28 15:57:23.000000000 +0200
++++ gwt-2.4.0/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java	2011-08-30 12:46:52.014143804 +0200
+@@ -410,7 +410,7 @@
+     // Turn off all warnings, saves some memory / speed.
+     options.reportUnusedDeclaredThrownExceptionIncludeDocCommentReference = false;
+     options.reportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable = false;
+-    options.warningThreshold = 0;
++    options.suppressWarnings = true;
+     options.inlineJsrBytecode = true;
+     return options;
+   }
+Index: gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
+===================================================================
+--- gwt-2.4.0.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java	2010-07-29 01:37:27.000000000 +0200
++++ gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java	2011-08-30 12:46:52.014143804 +0200
+@@ -126,7 +126,7 @@
+ 			break;
+ 			
+ 		case Binding.TYPE_PARAMETER :
+-			((TypeVariableBinding) type).resolve(environment);
++			((TypeVariableBinding) type).resolve();
+ 			break;
+ 						
+ 		case Binding.GENERIC_TYPE :
+@@ -595,7 +595,7 @@
+ 						pendingVariable = false;
+ 						int colon = CharOperation.indexOf(':', typeSignature, i);
+ 						char[] variableName = CharOperation.subarray(typeSignature, i, colon);
+-						variables.add(new TypeVariableBinding(variableName, this, rank++));
++						variables.add(new TypeVariableBinding(variableName, this, rank++, this.environment));
+ 					}
+ 			}
+ 		}
+@@ -793,7 +793,7 @@
+ // NOTE: member types of binary types are resolved when needed
+ public TypeVariableBinding getTypeVariable(char[] variableName) {
+ 	TypeVariableBinding variable = super.getTypeVariable(variableName);
+-	variable.resolve(this.environment);
++	variable.resolve();
+ 	return variable;
+ }
+ private void initializeTypeVariable(TypeVariableBinding variable, TypeVariableBinding[] existingVariables, SignatureWrapper wrapper, char[][][] missingTypeNames) {
+@@ -932,7 +932,7 @@
+ 		}
+ 	}
+ 	for (int i = method.typeVariables.length; --i >= 0;) {
+-		method.typeVariables[i].resolve(this.environment);
++		method.typeVariables[i].resolve();
+ 	}
+ 	method.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
+ 	return method;
+@@ -981,7 +981,7 @@
+ 		return this.typeVariables;
+ 
+  	for (int i = this.typeVariables.length; --i >= 0;)
+-		this.typeVariables[i].resolve(this.environment);
++		this.typeVariables[i].resolve();
+ 	this.tagBits &= ~TagBits.HasUnresolvedTypeVariables;
+ 	return this.typeVariables;
+ }
+Index: gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
+===================================================================
+--- gwt-2.4.0.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java	2011-01-06 15:20:30.000000000 +0100
++++ gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java	2011-08-30 12:46:52.054141836 +0200
+@@ -736,7 +736,7 @@
+   this.declaringClass.storeAnnotations(this, annotations);
+ }
+ public void setAnnotations(AnnotationBinding[] annotations, AnnotationBinding[][] parameterAnnotations, Object defaultValue) {
+-  this.declaringClass.storeAnnotationHolder(this,  AnnotationHolder.storeAnnotations(annotations, parameterAnnotations, defaultValue));
++  this.declaringClass.storeAnnotationHolder(this,  AnnotationHolder.storeAnnotations(annotations, parameterAnnotations, defaultValue, null));
+ }
+ public void setDefaultValue(Object defaultValue) {
+   MethodBinding originalMethod = this.original();
+@@ -851,7 +851,7 @@
+  */
+ public final char[] signature(ClassFile classFile) {
+   if (signature != null) {
+-    if ((this.tagBits & TagBits.ContainsNestedTypesInSignature) != 0) {
++    if ((this.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
+       // we need to record inner classes references
+       boolean isConstructor = isConstructor();
+       TypeBinding[] targetParameters = this.parameters;
+@@ -918,7 +918,7 @@
+       for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
+         ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i];
+         if (syntheticArgumentType.isNestedType()) {
+-          this.tagBits |= TagBits.ContainsNestedTypesInSignature;
++          this.tagBits |= TagBits.ContainsNestedTypeReferences;
+           classFile.recordInnerClasses(syntheticArgumentType);
+         }
+         buffer.append(syntheticArgumentType.signature());
+@@ -935,7 +935,7 @@
+       TypeBinding targetParameter = targetParameters[i];
+       TypeBinding leafTargetParameterType = targetParameter.leafComponentType();
+       if (leafTargetParameterType.isNestedType()) {
+-        this.tagBits |= TagBits.ContainsNestedTypesInSignature;
++        this.tagBits |= TagBits.ContainsNestedTypeReferences;
+         classFile.recordInnerClasses(leafTargetParameterType);
+       }
+       buffer.append(targetParameter.signature());
+@@ -952,7 +952,7 @@
+       TypeBinding parameter = parameters[i];
+       TypeBinding leafParameterType = parameter.leafComponentType();
+       if (leafParameterType.isNestedType()) {
+-        this.tagBits |= TagBits.ContainsNestedTypesInSignature;
++        this.tagBits |= TagBits.ContainsNestedTypeReferences;
+         classFile.recordInnerClasses(leafParameterType);
+       }
+       buffer.append(parameter.signature());
+@@ -962,7 +962,7 @@
+   if (this.returnType != null) {
+     TypeBinding ret = this.returnType.leafComponentType();
+     if (ret.isNestedType()) {
+-      this.tagBits |= TagBits.ContainsNestedTypesInSignature;
++      this.tagBits |= TagBits.ContainsNestedTypeReferences;
+       classFile.recordInnerClasses(ret);
+     }
+     buffer.append(this.returnType.signature());
+Index: gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+===================================================================
+--- gwt-2.4.0.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java	2009-10-28 17:10:53.000000000 +0100
++++ gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java	2011-08-30 12:46:52.054141836 +0200
+@@ -366,12 +366,12 @@
+   SyntheticMethodBinding accessMethod = null;
+   SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(targetField);
+   if (accessors == null) {
+-    accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, this);
++    accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, false, this);
+     this.synthetics[SourceTypeBinding.METHOD_EMUL].put(targetField, accessors = new SyntheticMethodBinding[2]);
+     accessors[isReadAccess ? 0 : 1] = accessMethod;   
+   } else {
+     if ((accessMethod = accessors[isReadAccess ? 0 : 1]) == null) {
+-      accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, this);
++      accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, false, this);
+       accessors[isReadAccess ? 0 : 1] = accessMethod;
+     }
+   }

Modified: gwt/trunk/debian/patches/build-with-jdt37
===================================================================
--- gwt/trunk/debian/patches/build-with-jdt37	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/patches/build-with-jdt37	2012-07-04 12:08:23 UTC (rev 219)
@@ -1,6118 +1,40 @@
-Index: gwt-debian/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java
-===================================================================
---- gwt-debian.orig/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java	2011-12-21 11:43:29.249247218 +0100
-+++ gwt-debian/dev/core/src/com/google/gwt/dev/javac/JdtCompiler.java	2011-12-21 11:44:39.305246214 +0100
-@@ -410,7 +410,7 @@
-     // Turn off all warnings, saves some memory / speed.
-     options.reportUnusedDeclaredThrownExceptionIncludeDocCommentReference = false;
-     options.reportUnusedDeclaredThrownExceptionExemptExceptionAndThrowable = false;
--    options.warningThreshold = 0;
-+    options.suppressWarnings = true;
-     options.inlineJsrBytecode = true;
-     return options;
-   }
-@@ -440,7 +440,7 @@
- 
-     if (type != null) {
-       if (type instanceof UnresolvedReferenceBinding) {
--        type = BinaryTypeBinding.resolveType(type, lookupEnvironment, true);
-+        type = (ReferenceBinding) BinaryTypeBinding.resolveType(type, lookupEnvironment, true);
-       }
-       // found it
-       return type;
-Index: gwt-debian/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
-===================================================================
---- gwt-debian.orig/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java	2011-12-21 11:43:29.229246303 +0100
-+++ gwt-debian/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java	2011-12-21 11:44:39.325245355 +0100
-@@ -1,12 +1,12 @@
- /*
-  * Copyright 2010 Google Inc.
-- * 
-+ *
-  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
-  * use this file except in compliance with the License. You may obtain a copy of
-  * the License at
-- * 
-+ *
-  * http://www.apache.org/licenses/LICENSE-2.0
-- * 
-+ *
-  * Unless required by applicable law or agreed to in writing, software
-  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-@@ -223,7 +223,7 @@
-    * Visit the JDT AST and produce our own AST. By the end of this pass, the
-    * produced AST should contain every piece of information we'll ever need
-    * about the code. The JDT nodes should never again be referenced after this.
--   * 
-+   *
-    * NOTE ON JDT FORCED OPTIMIZATIONS - If JDT statically determines that a
-    * section of code in unreachable, it won't fully resolve that section of
-    * code. This invalid-state code causes us major problems. As a result, we
-@@ -543,7 +543,7 @@
-         SourceInfo info = makeSourceInfo(x);
-         JType type = typeMap.get(x.resolvedType);
-         JExpression expression = pop(x.expression);
--        if (x.type instanceof NameReference) {
-+        if ((Expression)x.type instanceof NameReference) {
-           pop(x.type);
-         }
-         push(new JCastOperation(info, type, expression));
-@@ -1917,7 +1917,7 @@
-      * inherits that implements an interface method but that has a different
-      * erased signature from the interface method.
-      * </p>
--     * 
-+     *
-      * <p>
-      * The need for these bridges was pointed out in issue 3064. The goal is
-      * that virtual method calls through an interface type are translated to
-@@ -1932,7 +1932,7 @@
-      * case, a bridge method should be added that overrides the interface method
-      * and then calls the implementation method.
-      * </p>
--     * 
-+     *
-      * <p>
-      * This method should only be called once all regular, non-bridge methods
-      * have been installed on the GWT types.
-@@ -2521,7 +2521,7 @@
-          * primitive with a modified prototype. This requires funky handling of
-          * constructor calls. We find a method named _String() whose signature
-          * matches the requested constructor
--         * 
-+         *
-          * TODO(scottb): consider moving this to a later pass.
-          */
-         MethodBinding staticBinding =
-@@ -2649,7 +2649,7 @@
-         /*
-          * Make an inner class to hold a lazy-init name-value map. We use a
-          * class to take advantage of its clinit.
--         * 
-+         *
-          * class Map { $MAP = Enum.createValueOfMap($VALUES); }
-          */
-         SourceInfo info = type.getSourceInfo();
-@@ -2751,7 +2751,7 @@
- 
-   /**
-    * Manually tracked version count.
--   * 
-+   *
-    * TODO(zundel): something much more awesome?
-    */
-   private static final long AST_VERSION = 1;
-Index: gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
-===================================================================
---- gwt-debian.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java	2011-12-21 11:43:29.189246230 +0100
-+++ gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java	2011-12-21 11:44:39.313245223 +0100
-@@ -1,5 +1,5 @@
- /*******************************************************************************
-- * Copyright (c) 2000, 2008 IBM Corporation and others.
-+ * Copyright (c) 2000, 2009 IBM Corporation and others.
-  * All rights reserved. This program and the accompanying materials
-  * are made available under the terms of the Eclipse Public License v1.0
-  * which accompanies this distribution, and is available at
-@@ -51,19 +51,14 @@
- 	if (binaryValue == null) return null;
- 	if (binaryValue instanceof Constant)
- 		return binaryValue;
--	if (binaryValue instanceof ClassSignature) {
--		TypeBinding typeFromSignature = env.getTypeFromSignature(((ClassSignature) binaryValue).getTypeName(), 0, -1, false, null, missingTypeNames);
--		if (typeFromSignature.isBaseType()) {
--			return typeFromSignature;
--		}
--		return resolveType((ReferenceBinding) typeFromSignature, env, false);
--	}
-+	if (binaryValue instanceof ClassSignature)
-+		return env.getTypeFromSignature(((ClassSignature) binaryValue).getTypeName(), 0, -1, false, null, missingTypeNames);
- 	if (binaryValue instanceof IBinaryAnnotation)
- 		return createAnnotation((IBinaryAnnotation) binaryValue, env, missingTypeNames);
- 	if (binaryValue instanceof EnumConstantSignature) {
- 		EnumConstantSignature ref = (EnumConstantSignature) binaryValue;
- 		ReferenceBinding enumType = (ReferenceBinding) env.getTypeFromSignature(ref.getTypeName(), 0, -1, false, null, missingTypeNames);
--		enumType = resolveType(enumType, env, false);
-+		enumType = (ReferenceBinding) resolveType(enumType, env, false /* no raw conversion */);
- 		return enumType.getField(ref.getEnumConstantName(), false);
- 	}
- 	if (binaryValue instanceof Object[]) {
-@@ -79,6 +74,7 @@
- 	// should never reach here.
- 	throw new IllegalStateException();
- }
-+
- static AnnotationBinding createAnnotation(IBinaryAnnotation annotationInfo, LookupEnvironment env, char[][][] missingTypeNames) {
- 	IBinaryElementValuePair[] binaryPairs = annotationInfo.getElementValuePairs();
- 	int length = binaryPairs == null ? 0 : binaryPairs.length;
-@@ -90,6 +86,7 @@
- 	ReferenceBinding annotationType = env.getTypeFromConstantPoolName(typeName, 1, typeName.length - 1, false, missingTypeNames);
- 	return new UnresolvedAnnotationBinding(annotationType, pairs, env);
- }
-+
- public static AnnotationBinding[] createAnnotations(IBinaryAnnotation[] annotationInfos, LookupEnvironment env, char[][][] missingTypeNames) {
- 	int length = annotationInfos == null ? 0 : annotationInfos.length;
- 	AnnotationBinding[] result = length == 0 ? Binding.NO_ANNOTATIONS : new AnnotationBinding[length];
-@@ -97,46 +94,36 @@
- 		result[i] = createAnnotation(annotationInfos[i], env, missingTypeNames);
- 	return result;
- }
--public static ReferenceBinding resolveType(ReferenceBinding type, LookupEnvironment environment, boolean convertGenericToRawType) {
--	if (type instanceof UnresolvedReferenceBinding)
--		return ((UnresolvedReferenceBinding) type).resolve(environment, convertGenericToRawType);
--	switch (type.kind()) {
--		case Binding.PARAMETERIZED_TYPE :
--			return ((ParameterizedTypeBinding) type).resolve();
--		case Binding.WILDCARD_TYPE :
--		case Binding.INTERSECTION_TYPE :
--			return ((WildcardBinding) type).resolve();
--	}
--	if (convertGenericToRawType) // raw reference to generic ?
--		return (ReferenceBinding) environment.convertUnresolvedBinaryToRawType(type);
--	return type;
--}
--public static TypeBinding resolveType(TypeBinding type, LookupEnvironment environment, ParameterizedTypeBinding parameterizedType, int rank) {
-+
-+public static TypeBinding resolveType(TypeBinding type, LookupEnvironment environment, boolean convertGenericToRawType) {
- 	switch (type.kind()) {
--		
- 		case Binding.PARAMETERIZED_TYPE :
--			return ((ParameterizedTypeBinding) type).resolve();
--			
-+			((ParameterizedTypeBinding) type).resolve();
-+			break;
-+
- 		case Binding.WILDCARD_TYPE :
- 		case Binding.INTERSECTION_TYPE :
- 			return ((WildcardBinding) type).resolve();
--			
-+
- 		case Binding.ARRAY_TYPE :
--			resolveType(((ArrayBinding) type).leafComponentType, environment, parameterizedType, rank);
-+			resolveType(((ArrayBinding) type).leafComponentType, environment, convertGenericToRawType);
- 			break;
--			
-+
- 		case Binding.TYPE_PARAMETER :
--			((TypeVariableBinding) type).resolve(environment);
-+			((TypeVariableBinding) type).resolve();
- 			break;
--						
-+
- 		case Binding.GENERIC_TYPE :
--			if (parameterizedType == null) // raw reference to generic ?
-+			if (convertGenericToRawType) // raw reference to generic ?
- 				return environment.convertUnresolvedBinaryToRawType(type);
- 			break;
--			
--		default:			
-+
-+		default:
- 			if (type instanceof UnresolvedReferenceBinding)
--				return ((UnresolvedReferenceBinding) type).resolve(environment, parameterizedType == null);
-+				return ((UnresolvedReferenceBinding) type).resolve(environment, convertGenericToRawType);
-+			if (convertGenericToRawType) // raw reference to generic ?
-+				return environment.convertUnresolvedBinaryToRawType(type);
-+			break;
- 	}
- 	return type;
- }
-@@ -173,7 +160,7 @@
- 
- 	if ((binaryType.getTagBits() & TagBits.HierarchyHasProblems) != 0)
- 		this.tagBits |= TagBits.HierarchyHasProblems;
--		
-+
- 	if (binaryType.isAnonymous()) {
- 		this.tagBits |= TagBits.AnonymousTypeMask;
- 	} else if (binaryType.isLocal()) {
-@@ -188,11 +175,11 @@
- 		this.enclosingType = environment.getTypeFromConstantPoolName(enclosingTypeName, 0, -1, true, null /* could not be missing */); // pretend parameterized to avoid raw
- 		this.tagBits |= TagBits.MemberTypeMask;   // must be a member type not a top-level or local type
- 		this.tagBits |= 	TagBits.HasUnresolvedEnclosingType;
--		if (this.enclosingType().isStrictfp())
-+		if (enclosingType().isStrictfp())
- 			this.modifiers |= ClassFileConstants.AccStrictfp;
--		if (this.enclosingType().isDeprecated())
-+		if (enclosingType().isDeprecated())
- 			this.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
--	}	
-+	}
- }
- 
- /**
-@@ -200,7 +187,7 @@
-  */
- public FieldBinding[] availableFields() {
- 	if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
--		return fields;
-+		return this.fields;
- 
- 	// lazily sort fields
- 	if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
-@@ -209,11 +196,11 @@
- 			ReferenceBinding.sortFields(this.fields, 0, length);
- 		this.tagBits |= TagBits.AreFieldsSorted;
- 	}
--	FieldBinding[] availableFields = new FieldBinding[fields.length];
-+	FieldBinding[] availableFields = new FieldBinding[this.fields.length];
- 	int count = 0;
--	for (int i = 0; i < fields.length; i++) {
-+	for (int i = 0; i < this.fields.length; i++) {
- 		try {
--			availableFields[count] = resolveTypeFor(fields[i]);
-+			availableFields[count] = resolveTypeFor(this.fields[i]);
- 			count++;
- 		} catch (AbortCompilation a){
- 			// silent abort
-@@ -229,7 +216,7 @@
-  */
- public MethodBinding[] availableMethods() {
- 	if ((this.tagBits & TagBits.AreMethodsComplete) != 0)
--		return methods;
-+		return this.methods;
- 
- 	// lazily sort methods
- 	if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-@@ -238,11 +225,11 @@
- 			ReferenceBinding.sortMethods(this.methods, 0, length);
- 		this.tagBits |= TagBits.AreMethodsSorted;
- 	}
--	MethodBinding[] availableMethods = new MethodBinding[methods.length];
-+	MethodBinding[] availableMethods = new MethodBinding[this.methods.length];
- 	int count = 0;
--	for (int i = 0; i < methods.length; i++) {
-+	for (int i = 0; i < this.methods.length; i++) {
- 		try {
--			availableMethods[count] = resolveTypesFor(methods[i]);
-+			availableMethods[count] = resolveTypesFor(this.methods[i]);
- 			count++;
- 		} catch (AbortCompilation a){
- 			// silent abort
-@@ -252,93 +239,120 @@
- 		System.arraycopy(availableMethods, 0, availableMethods = new MethodBinding[count], 0, count);
- 	return availableMethods;
- }
-+
- void cachePartsFrom(IBinaryType binaryType, boolean needFieldsAndMethods) {
--	// default initialization for super-interfaces early, in case some aborting compilation error occurs,
--	// and still want to use binaries passed that point (e.g. type hierarchy resolver, see bug 63748).
--	this.typeVariables = Binding.NO_TYPE_VARIABLES;
--	this.superInterfaces = Binding.NO_SUPERINTERFACES;
--
--	// must retrieve member types in case superclass/interfaces need them
--	this.memberTypes = Binding.NO_MEMBER_TYPES;
--	IBinaryNestedType[] memberTypeStructures = binaryType.getMemberTypes();
--	if (memberTypeStructures != null) {
--		int size = memberTypeStructures.length;
--		if (size > 0) {
--			this.memberTypes = new ReferenceBinding[size];
--			for (int i = 0; i < size; i++)
--				// attempt to find each member type if it exists in the cache (otherwise - resolve it when requested)
--				this.memberTypes[i] = environment.getTypeFromConstantPoolName(memberTypeStructures[i].getName(), 0, -1, false, null /* could not be missing */);
--			this.tagBits |= 	TagBits.HasUnresolvedMemberTypes;
-+	try {
-+		// default initialization for super-interfaces early, in case some aborting compilation error occurs,
-+		// and still want to use binaries passed that point (e.g. type hierarchy resolver, see bug 63748).
-+		this.typeVariables = Binding.NO_TYPE_VARIABLES;
-+		this.superInterfaces = Binding.NO_SUPERINTERFACES;
-+
-+		// must retrieve member types in case superclass/interfaces need them
-+		this.memberTypes = Binding.NO_MEMBER_TYPES;
-+		IBinaryNestedType[] memberTypeStructures = binaryType.getMemberTypes();
-+		if (memberTypeStructures != null) {
-+			int size = memberTypeStructures.length;
-+			if (size > 0) {
-+				this.memberTypes = new ReferenceBinding[size];
-+				for (int i = 0; i < size; i++)
-+					// attempt to find each member type if it exists in the cache (otherwise - resolve it when requested)
-+					this.memberTypes[i] = this.environment.getTypeFromConstantPoolName(memberTypeStructures[i].getName(), 0, -1, false, null /* could not be missing */);
-+				this.tagBits |= 	TagBits.HasUnresolvedMemberTypes;
-+			}
- 		}
--	}
- 
--	
--	long sourceLevel = environment.globalOptions.sourceLevel;
--	char[] typeSignature = null;
--	if (sourceLevel >= ClassFileConstants.JDK1_5) {
--		typeSignature = binaryType.getGenericSignature();
--		this.tagBits |= binaryType.getTagBits();
--	}
--	char[][][] missingTypeNames = binaryType.getMissingTypeNames();	
--	if (typeSignature == null) {
--		char[] superclassName = binaryType.getSuperclassName();
--		if (superclassName != null) {
-+		long sourceLevel = this.environment.globalOptions.sourceLevel;
-+		char[] typeSignature = null;
-+		if (sourceLevel >= ClassFileConstants.JDK1_5) {
-+			typeSignature = binaryType.getGenericSignature();
-+			this.tagBits |= binaryType.getTagBits();
-+		}
-+		char[][][] missingTypeNames = binaryType.getMissingTypeNames();
-+		if (typeSignature == null) {
-+			char[] superclassName = binaryType.getSuperclassName();
-+			if (superclassName != null) {
-+				// attempt to find the superclass if it exists in the cache (otherwise - resolve it when requested)
-+				this.superclass = this.environment.getTypeFromConstantPoolName(superclassName, 0, -1, false, missingTypeNames);
-+				this.tagBits |= TagBits.HasUnresolvedSuperclass;
-+			}
-+
-+			this.superInterfaces = Binding.NO_SUPERINTERFACES;
-+			char[][] interfaceNames = binaryType.getInterfaceNames();
-+			if (interfaceNames != null) {
-+				int size = interfaceNames.length;
-+				if (size > 0) {
-+					this.superInterfaces = new ReferenceBinding[size];
-+					for (int i = 0; i < size; i++)
-+						// attempt to find each superinterface if it exists in the cache (otherwise - resolve it when requested)
-+						this.superInterfaces[i] = this.environment.getTypeFromConstantPoolName(interfaceNames[i], 0, -1, false, missingTypeNames);
-+					this.tagBits |= TagBits.HasUnresolvedSuperinterfaces;
-+				}
-+			}
-+		} else {
-+			// ClassSignature = ParameterPart(optional) super_TypeSignature interface_signature
-+			SignatureWrapper wrapper = new SignatureWrapper(typeSignature);
-+			if (wrapper.signature[wrapper.start] == '<') {
-+				// ParameterPart = '<' ParameterSignature(s) '>'
-+				wrapper.start++; // skip '<'
-+				this.typeVariables = createTypeVariables(wrapper, true, missingTypeNames);
-+				wrapper.start++; // skip '>'
-+				this.tagBits |=  TagBits.HasUnresolvedTypeVariables;
-+				this.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
-+			}
-+			TypeVariableBinding[] typeVars = Binding.NO_TYPE_VARIABLES;
-+			char[] methodDescriptor = binaryType.getEnclosingMethod();
-+			if (methodDescriptor != null) {
-+				MethodBinding enclosingMethod = findMethod(methodDescriptor, missingTypeNames);
-+				typeVars = enclosingMethod.typeVariables;
-+			}
-+
- 			// attempt to find the superclass if it exists in the cache (otherwise - resolve it when requested)
--			this.superclass = environment.getTypeFromConstantPoolName(superclassName, 0, -1, false, missingTypeNames);
-+			this.superclass = (ReferenceBinding) this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames);
- 			this.tagBits |= TagBits.HasUnresolvedSuperclass;
--		}
- 
--		this.superInterfaces = Binding.NO_SUPERINTERFACES;
--		char[][] interfaceNames = binaryType.getInterfaceNames();
--		if (interfaceNames != null) {
--			int size = interfaceNames.length;
--			if (size > 0) {
--				this.superInterfaces = new ReferenceBinding[size];
--				for (int i = 0; i < size; i++)
--					// attempt to find each superinterface if it exists in the cache (otherwise - resolve it when requested)
--					this.superInterfaces[i] = environment.getTypeFromConstantPoolName(interfaceNames[i], 0, -1, false, missingTypeNames);
-+			this.superInterfaces = Binding.NO_SUPERINTERFACES;
-+			if (!wrapper.atEnd()) {
-+				// attempt to find each superinterface if it exists in the cache (otherwise - resolve it when requested)
-+				java.util.ArrayList types = new java.util.ArrayList(2);
-+				do {
-+					types.add(this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames));
-+				} while (!wrapper.atEnd());
-+				this.superInterfaces = new ReferenceBinding[types.size()];
-+				types.toArray(this.superInterfaces);
- 				this.tagBits |= TagBits.HasUnresolvedSuperinterfaces;
- 			}
- 		}
--	} else {
--		// ClassSignature = ParameterPart(optional) super_TypeSignature interface_signature
--		SignatureWrapper wrapper = new SignatureWrapper(typeSignature);
--		if (wrapper.signature[wrapper.start] == '<') {
--			// ParameterPart = '<' ParameterSignature(s) '>'
--			wrapper.start++; // skip '<'
--			this.typeVariables = createTypeVariables(wrapper, true, missingTypeNames);
--			wrapper.start++; // skip '>'
--			this.tagBits |=  TagBits.HasUnresolvedTypeVariables;
--			this.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
--		}
- 
--		// attempt to find the superclass if it exists in the cache (otherwise - resolve it when requested)
--		this.superclass = (ReferenceBinding) environment.getTypeFromTypeSignature(wrapper, Binding.NO_TYPE_VARIABLES, this, missingTypeNames);
--		this.tagBits |= TagBits.HasUnresolvedSuperclass;
--
--		this.superInterfaces = Binding.NO_SUPERINTERFACES;
--		if (!wrapper.atEnd()) {
--			// attempt to find each superinterface if it exists in the cache (otherwise - resolve it when requested)
--			java.util.ArrayList types = new java.util.ArrayList(2);
--			do {
--				types.add(environment.getTypeFromTypeSignature(wrapper, Binding.NO_TYPE_VARIABLES, this, missingTypeNames));
--			} while (!wrapper.atEnd());
--			this.superInterfaces = new ReferenceBinding[types.size()];
--			types.toArray(this.superInterfaces);
--			this.tagBits |= TagBits.HasUnresolvedSuperinterfaces;
-+		if (needFieldsAndMethods) {
-+			createFields(binaryType.getFields(), sourceLevel, missingTypeNames);
-+			createMethods(binaryType.getMethods(), sourceLevel, missingTypeNames);
-+			boolean isViewedAsDeprecated = isViewedAsDeprecated();
-+			if (isViewedAsDeprecated) {
-+				for (int i = 0, max = this.fields.length; i < max; i++) {
-+					FieldBinding field = this.fields[i];
-+					if (!field.isDeprecated()) {
-+						field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
-+					}
-+				}
-+				for (int i = 0, max = this.methods.length; i < max; i++) {
-+					MethodBinding method = this.methods[i];
-+					if (!method.isDeprecated()) {
-+						method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
-+					}
-+				}
-+			}
- 		}
-+		if (this.environment.globalOptions.storeAnnotations)
-+			setAnnotations(createAnnotations(binaryType.getAnnotations(), this.environment, missingTypeNames));
-+	} finally {
-+		// protect against incorrect use of the needFieldsAndMethods flag, see 48459
-+		if (this.fields == null)
-+			this.fields = Binding.NO_FIELDS;
-+		if (this.methods == null)
-+			this.methods = Binding.NO_METHODS;
- 	}
--
--	if (needFieldsAndMethods) {
--		createFields(binaryType.getFields(), sourceLevel, missingTypeNames);
--		createMethods(binaryType.getMethods(), sourceLevel, missingTypeNames);
--	} else { // protect against incorrect use of the needFieldsAndMethods flag, see 48459
--		this.fields = Binding.NO_FIELDS;
--		this.methods = Binding.NO_METHODS;
--	}
--	if (this.environment.globalOptions.storeAnnotations)
--		setAnnotations(createAnnotations(binaryType.getAnnotations(), this.environment, missingTypeNames));	
- }
-+
- private void createFields(IBinaryField[] iFields, long sourceLevel, char[][][] missingTypeNames) {
- 	this.fields = Binding.NO_FIELDS;
- 	if (iFields != null) {
-@@ -346,32 +360,29 @@
- 		if (size > 0) {
- 			this.fields = new FieldBinding[size];
- 			boolean use15specifics = sourceLevel >= ClassFileConstants.JDK1_5;
--			boolean isViewedAsDeprecated = isViewedAsDeprecated();
- 			boolean hasRestrictedAccess = hasRestrictedAccess();
- 			int firstAnnotatedFieldIndex = -1;
- 			for (int i = 0; i < size; i++) {
- 				IBinaryField binaryField = iFields[i];
- 				char[] fieldSignature = use15specifics ? binaryField.getGenericSignature() : null;
--				TypeBinding type = fieldSignature == null 
--					? environment.getTypeFromSignature(binaryField.getTypeName(), 0, -1, false, this, missingTypeNames) 
--					: environment.getTypeFromTypeSignature(new SignatureWrapper(fieldSignature), Binding.NO_TYPE_VARIABLES, this, missingTypeNames);
--				FieldBinding field = 
-+				TypeBinding type = fieldSignature == null
-+					? this.environment.getTypeFromSignature(binaryField.getTypeName(), 0, -1, false, this, missingTypeNames)
-+					: this.environment.getTypeFromTypeSignature(new SignatureWrapper(fieldSignature), Binding.NO_TYPE_VARIABLES, this, missingTypeNames);
-+				FieldBinding field =
- 					new FieldBinding(
--						binaryField.getName(), 
--						type, 
--						binaryField.getModifiers() | ExtraCompilerModifiers.AccUnresolved, 
--						this, 
-+						binaryField.getName(),
-+						type,
-+						binaryField.getModifiers() | ExtraCompilerModifiers.AccUnresolved,
-+						this,
- 						binaryField.getConstant());
- 				if (firstAnnotatedFieldIndex < 0
--						&& this.environment.globalOptions.storeAnnotations 
-+						&& this.environment.globalOptions.storeAnnotations
- 						&& binaryField.getAnnotations() != null) {
- 					firstAnnotatedFieldIndex = i;
- 				}
- 				field.id = i; // ordinal
- 				if (use15specifics)
- 					field.tagBits |= binaryField.getTagBits();
--				if (isViewedAsDeprecated && !field.isDeprecated())
--					field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
- 				if (hasRestrictedAccess)
- 					field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
- 				if (fieldSignature != null)
-@@ -388,6 +399,7 @@
- 		}
- 	}
- }
-+
- private MethodBinding createMethod(IBinaryMethod method, long sourceLevel, char[][][] missingTypeNames) {
- 	int methodModifiers = method.getModifiers() | ExtraCompilerModifiers.AccUnresolved;
- 	if (sourceLevel < ClassFileConstants.JDK1_5)
-@@ -395,7 +407,7 @@
- 	ReferenceBinding[] exceptions = Binding.NO_EXCEPTIONS;
- 	TypeBinding[] parameters = Binding.NO_PARAMETERS;
- 	TypeVariableBinding[] typeVars = Binding.NO_TYPE_VARIABLES;
--	AnnotationBinding[][] paramAnnotations = null; 
-+	AnnotationBinding[][] paramAnnotations = null;
- 	TypeBinding returnType = null;
- 
- 	final boolean use15specifics = sourceLevel >= ClassFileConstants.JDK1_5;
-@@ -404,7 +416,7 @@
- 		char[] methodDescriptor = method.getMethodDescriptor();   // of the form (I[Ljava/jang/String;)V
- 		int numOfParams = 0;
- 		char nextChar;
--		int index = 0;   // first character is always '(' so skip it
-+		int index = 0; // first character is always '(' so skip it
- 		while ((nextChar = methodDescriptor[++index]) != ')') {
- 			if (nextChar != '[') {
- 				numOfParams++;
-@@ -413,8 +425,18 @@
- 			}
- 		}
- 
--		// Ignore synthetic argument for member types.
--		int startIndex = (method.isConstructor() && isMemberType() && !isStatic()) ? 1 : 0;
-+		// Ignore synthetic argument for member types or enum types.
-+		int startIndex = 0;
-+		if (method.isConstructor()) {
-+			if (isMemberType() && !isStatic()) {
-+				// enclosing type
-+				startIndex++;
-+			}
-+			if (isEnum()) {
-+				// synthetic arguments (String, int)
-+				startIndex += 2;
-+			}
-+		}
- 		int size = numOfParams - startIndex;
- 		if (size > 0) {
- 			parameters = new TypeBinding[size];
-@@ -428,11 +450,11 @@
- 					while ((nextChar = methodDescriptor[++end]) != ';'){/*empty*/}
- 
- 				if (i >= startIndex) {   // skip the synthetic arg if necessary
--					parameters[i - startIndex] = environment.getTypeFromSignature(methodDescriptor, index, end, false, this, missingTypeNames);
-+					parameters[i - startIndex] = this.environment.getTypeFromSignature(methodDescriptor, index, end, false, this, missingTypeNames);
- 					// 'paramAnnotations' line up with 'parameters'
- 					// int parameter to method.getParameterAnnotations() include the synthetic arg
- 					if (paramAnnotations != null)
--						paramAnnotations[i - startIndex] = createAnnotations(method.getParameterAnnotations(i), this.environment, missingTypeNames);
-+						paramAnnotations[i - startIndex] = createAnnotations(method.getParameterAnnotations(i - startIndex), this.environment, missingTypeNames);
- 				}
- 				index = end + 1;
- 			}
-@@ -444,12 +466,12 @@
- 			if (size > 0) {
- 				exceptions = new ReferenceBinding[size];
- 				for (int i = 0; i < size; i++)
--					exceptions[i] = environment.getTypeFromConstantPoolName(exceptionTypes[i], 0, -1, false, missingTypeNames);
-+					exceptions[i] = this.environment.getTypeFromConstantPoolName(exceptionTypes[i], 0, -1, false, missingTypeNames);
- 			}
- 		}
- 
- 		if (!method.isConstructor())
--			returnType = environment.getTypeFromSignature(methodDescriptor, index + 1, -1, false, this, missingTypeNames);   // index is currently pointing at the ')'
-+			returnType = this.environment.getTypeFromSignature(methodDescriptor, index + 1, -1, false, this, missingTypeNames);   // index is currently pointing at the ')'
- 	} else {
- 		methodModifiers |= ExtraCompilerModifiers.AccGenericSignature;
- 		// MethodTypeSignature = ParameterPart(optional) '(' TypeSignatures ')' return_typeSignature ['^' TypeSignature (optional)]
-@@ -469,7 +491,7 @@
- 			} else {
- 				java.util.ArrayList types = new java.util.ArrayList(2);
- 				while (wrapper.signature[wrapper.start] != ')')
--					types.add(environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames));
-+					types.add(this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames));
- 				wrapper.start++; // skip ')'
- 				int numParam = types.size();
- 				parameters = new TypeBinding[numParam];
-@@ -483,14 +505,14 @@
- 		}
- 
- 		// always retrieve return type (for constructors, its V for void - will be ignored)
--		returnType = environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames);
-+		returnType = this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames);
- 
- 		if (!wrapper.atEnd() && wrapper.signature[wrapper.start] == '^') {
- 			// attempt to find each exception if it exists in the cache (otherwise - resolve it when requested)
- 			java.util.ArrayList types = new java.util.ArrayList(2);
- 			do {
- 				wrapper.start++; // skip '^'
--				types.add(environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames));
-+				types.add(this.environment.getTypeFromTypeSignature(wrapper, typeVars, this, missingTypeNames));
- 			} while (!wrapper.atEnd() && wrapper.signature[wrapper.start] == '^');
- 			exceptions = new ReferenceBinding[types.size()];
- 			types.toArray(exceptions);
-@@ -501,7 +523,7 @@
- 				if (size > 0) {
- 					exceptions = new ReferenceBinding[size];
- 					for (int i = 0; i < size; i++)
--						exceptions[i] = environment.getTypeFromConstantPoolName(exceptionTypes[i], 0, -1, false, missingTypeNames);
-+						exceptions[i] = this.environment.getTypeFromConstantPoolName(exceptionTypes[i], 0, -1, false, missingTypeNames);
- 				}
- 			}
- 		}
-@@ -514,7 +536,8 @@
- 		result.setAnnotations(
- 			createAnnotations(method.getAnnotations(), this.environment, missingTypeNames),
- 			paramAnnotations,
--			isAnnotationType() ? convertMemberValue(method.getDefaultValue(), this.environment, missingTypeNames) : null);
-+			isAnnotationType() ? convertMemberValue(method.getDefaultValue(), this.environment, missingTypeNames) : null,
-+			this.environment);
- 
- 	if (use15specifics)
- 		result.tagBits |= method.getTagBits();
-@@ -524,18 +547,20 @@
- 		typeVars[i].declaringElement = result;
- 	return result;
- }
-+
- /**
-  * Create method bindings for binary type, filtering out <clinit> and synthetics
-  */
--private void createMethods(IBinaryMethod[] iMethods, long sourceLevel, char[][][] missingTypeNames) { 
-+private void createMethods(IBinaryMethod[] iMethods, long sourceLevel, char[][][] missingTypeNames) {
- 	if (iMethods == null) {
- 		this.methods = this.bridgeMethods = Binding.NO_METHODS;
- 		return;
--	}  
-+	}
-+
- 	ArrayList<MethodBinding> methodBindings = new ArrayList<MethodBinding>(iMethods.length);
- 	ArrayList<MethodBinding> bridgeBindings = new ArrayList<MethodBinding>(iMethods.length);
- 	boolean isViewedAsDeprecated = isViewedAsDeprecated();
--	boolean hasRestrictedAccess = hasRestrictedAccess();  
-+	boolean hasRestrictedAccess = hasRestrictedAccess();
- 	boolean discardedClinit = false;
-   
- 	for (int i = 0; i < iMethods.length; ++i) {
-@@ -568,6 +593,7 @@
- 	this.methods = methodBindings.size() == 0 ? Binding.NO_METHODS : methodBindings.toArray(new MethodBinding[methodBindings.size()]);
- 	this.bridgeMethods = bridgeBindings.size() == 0 ? Binding.NO_METHODS : bridgeBindings.toArray(new MethodBinding[bridgeBindings.size()]);
- }
-+
- private TypeVariableBinding[] createTypeVariables(SignatureWrapper wrapper, boolean assignVariables, char[][][] missingTypeNames) {
- 	// detect all type variables first
- 	char[] typeSignature = wrapper.signature;
-@@ -579,10 +605,10 @@
- 	createVariables: {
- 		for (int i = 1; i < length; i++) {
- 			switch(typeSignature[i]) {
--				case '<' : 
-+				case '<' :
- 					depth++;
- 					break;
--				case '>' : 
-+				case '>' :
- 					if (--depth < 0)
- 						break createVariables;
- 					break;
-@@ -595,7 +621,7 @@
- 						pendingVariable = false;
- 						int colon = CharOperation.indexOf(':', typeSignature, i);
- 						char[] variableName = CharOperation.subarray(typeSignature, i, colon);
--						variables.add(new TypeVariableBinding(variableName, this, rank++));
-+						variables.add(new TypeVariableBinding(variableName, this, rank++, this.environment));
- 					}
- 			}
- 		}
-@@ -612,6 +638,7 @@
- 	}
- 	return result;
- }
-+
- /* Answer the receiver's enclosing type... null if the receiver is a top level type.
- *
- * NOTE: enclosingType of a binary type is resolved when needed
-@@ -621,14 +648,14 @@
- 		return this.enclosingType;
- 
- 	// finish resolving the type
--	this.enclosingType = resolveType(this.enclosingType, this.environment, false);
-+	this.enclosingType = (ReferenceBinding) resolveType(this.enclosingType, this.environment, false /* no raw conversion */);
- 	this.tagBits &= ~TagBits.HasUnresolvedEnclosingType;
- 	return this.enclosingType;
- }
- // NOTE: the type of each field of a binary type is resolved when needed
- public FieldBinding[] fields() {
- 	if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
--		return fields;
-+		return this.fields;
- 
- 	// lazily sort fields
- 	if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
-@@ -637,17 +664,59 @@
- 			ReferenceBinding.sortFields(this.fields, 0, length);
- 		this.tagBits |= TagBits.AreFieldsSorted;
- 	}
--	for (int i = fields.length; --i >= 0;)
--		resolveTypeFor(fields[i]);
-+	for (int i = this.fields.length; --i >= 0;)
-+		resolveTypeFor(this.fields[i]);
- 	this.tagBits |= TagBits.AreFieldsComplete;
--	return fields;
-+	return this.fields;
-+}
-+
-+private MethodBinding findMethod(char[] methodDescriptor, char[][][] missingTypeNames) {
-+	int index = -1;
-+	while (methodDescriptor[++index] != '(') {
-+		// empty
-+	}
-+	char[] selector = new char[index];
-+	System.arraycopy(methodDescriptor, 0, selector, 0, index);
-+	TypeBinding[] parameters = Binding.NO_PARAMETERS;
-+	int numOfParams = 0;
-+	char nextChar;
-+	while ((nextChar = methodDescriptor[++index]) != ')') {
-+		if (nextChar != '[') {
-+			numOfParams++;
-+			if (nextChar == 'L')
-+				while ((nextChar = methodDescriptor[++index]) != ';'){/*empty*/}
-+		}
-+	}
-+
-+	int startIndex = 0;
-+	if (numOfParams > 0) {
-+		parameters = new TypeBinding[numOfParams];
-+		index = 1;
-+		int end = 0;   // first character is always '(' so skip it
-+		for (int i = 0; i < numOfParams; i++) {
-+			while ((nextChar = methodDescriptor[++end]) == '['){/*empty*/}
-+			if (nextChar == 'L')
-+				while ((nextChar = methodDescriptor[++end]) != ';'){/*empty*/}
-+
-+			if (i >= startIndex) {   // skip the synthetic arg if necessary
-+				parameters[i - startIndex] = this.environment.getTypeFromSignature(methodDescriptor, index, end, false, this, missingTypeNames);
-+			}
-+			index = end + 1;
-+		}
-+	}
-+
-+	return CharOperation.equals(selector, TypeConstants.INIT)
-+		? this.enclosingType.getExactConstructor(parameters)
-+		: this.enclosingType.getExactMethod(selector, parameters, null);
- }
-+
- /**
-  * @see org.eclipse.jdt.internal.compiler.lookup.TypeBinding#genericTypeSignature()
-  */
- public char[] genericTypeSignature() {
- 	return computeGenericTypeSignature(this.typeVariables);
- }
-+
- //NOTE: the return type, arg & exception types of each method of a binary type are resolved when needed
- public MethodBinding getExactConstructor(TypeBinding[] argumentTypes) {
- 
-@@ -661,8 +730,8 @@
- 	int argCount = argumentTypes.length;
- 	long range;
- 	if ((range = ReferenceBinding.binarySearch(TypeConstants.INIT, this.methods)) >= 0) {
--		nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {	
--			MethodBinding method = methods[imethod];
-+		nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
-+			MethodBinding method = this.methods[imethod];
- 			if (method.parameters.length == argCount) {
- 				resolveTypesFor(method);
- 				TypeBinding[] toMatch = method.parameters;
-@@ -671,7 +740,7 @@
- 						continue nextMethod;
- 				return method;
- 			}
--		}	
-+		}
- 	}
- 	return null;
- }
-@@ -680,7 +749,7 @@
- //searches up the hierarchy as long as no potential (but not exact) match was found.
- public MethodBinding getExactMethod(char[] selector, TypeBinding[] argumentTypes, CompilationUnitScope refScope) {
- 	// sender from refScope calls recordTypeReference(this)
--	
-+
- 	// lazily sort methods
- 	if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
- 		int length = this.methods.length;
-@@ -694,8 +763,8 @@
- 
- 	long range;
- 	if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
--		nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {	
--			MethodBinding method = methods[imethod];
-+		nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
-+			MethodBinding method = this.methods[imethod];
- 			foundNothing = false; // inner type lookups must know that a method with this name exists
- 			if (method.parameters.length == argCount) {
- 				resolveTypesFor(method);
-@@ -711,13 +780,13 @@
- 		if (isInterface()) {
- 			 if (superInterfaces().length == 1) { // ensure superinterfaces are resolved before checking
- 				if (refScope != null)
--					refScope.recordTypeReference(superInterfaces[0]);
--				return superInterfaces[0].getExactMethod(selector, argumentTypes, refScope);
-+					refScope.recordTypeReference(this.superInterfaces[0]);
-+				return this.superInterfaces[0].getExactMethod(selector, argumentTypes, refScope);
- 			 }
- 		} else if (superclass() != null) { // ensure superclass is resolved before checking
- 			if (refScope != null)
--				refScope.recordTypeReference(superclass);
--			return superclass.getExactMethod(selector, argumentTypes, refScope);
-+				refScope.recordTypeReference(this.superclass);
-+			return this.superclass.getExactMethod(selector, argumentTypes, refScope);
- 		}
- 	}
- 	return null;
-@@ -745,7 +814,7 @@
- 			int prefixLength = this.compoundName[this.compoundName.length - 1].length + 1; // enclosing$
- 			if (name.length == (prefixLength + typeName.length)) // enclosing $ typeName
- 				if (CharOperation.fragmentEquals(typeName, name, prefixLength, true)) // only check trailing portion
--					return this.memberTypes[i] = resolveType(memberType, this.environment, false); // no raw conversion for now
-+					return this.memberTypes[i] = (ReferenceBinding) resolveType(memberType, this.environment, false /* no raw conversion for now */);
- 	    } else if (CharOperation.equals(typeName, memberType.sourceName)) {
- 	        return memberType;
- 	    }
-@@ -761,7 +830,7 @@
- 			int length = end - start + 1;
- 			if ((this.tagBits & TagBits.AreMethodsComplete) != 0) {
- 				// simply clone method subset
--				MethodBinding[] result;				
-+				MethodBinding[] result;
- 				System.arraycopy(this.methods, start, result = new MethodBinding[length], 0, length);
- 				return result;
- 			}
-@@ -782,18 +851,59 @@
- 		MethodBinding[] result = new MethodBinding[length];
- 		// iterate methods to resolve them
- 		for (int i = start, index = 0; i <= end; i++, index++)
--			result[index] = resolveTypesFor(methods[i]);
-+			result[index] = resolveTypesFor(this.methods[i]);
- 		return result;
- 	}
- 	return Binding.NO_METHODS;
- }
-+// Answer methods named selector, which take no more than the suggestedParameterLength.
-+// The suggested parameter length is optional and may not be guaranteed by every type.
-+public MethodBinding[] getMethods(char[] selector, int suggestedParameterLength) {
-+	if ((this.tagBits & TagBits.AreMethodsComplete) != 0)
-+		return getMethods(selector);
-+	// lazily sort methods
-+	if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-+		int length = this.methods.length;
-+		if (length > 1)
-+			ReferenceBinding.sortMethods(this.methods, 0, length);
-+		this.tagBits |= TagBits.AreMethodsSorted;
-+	}
-+	long range;
-+	if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
-+		int start = (int) range, end = (int) (range >> 32);
-+		int length = end - start + 1;
-+		int count = 0;
-+		for (int i = start; i <= end; i++) {
-+			int len = this.methods[i].parameters.length;
-+			if (len <= suggestedParameterLength || (this.methods[i].isVarargs() && len == suggestedParameterLength + 1))
-+				count++;
-+		}
-+		if (count == 0) {
-+			MethodBinding[] result = new MethodBinding[length];
-+			// iterate methods to resolve them
-+			for (int i = start, index = 0; i <= end; i++)
-+				result[index++] = resolveTypesFor(this.methods[i]);
-+			return result;
-+		} else {
-+			MethodBinding[] result = new MethodBinding[count];
-+			// iterate methods to resolve them
-+			for (int i = start, index = 0; i <= end; i++) {
-+				int len = this.methods[i].parameters.length;
-+				if (len <= suggestedParameterLength || (this.methods[i].isVarargs() && len == suggestedParameterLength + 1))
-+					result[index++] = resolveTypesFor(this.methods[i]);
-+			}
-+			return result;
-+		}
-+	}
-+	return Binding.NO_METHODS;
-+}
- public boolean hasMemberTypes() {
-     return this.memberTypes.length > 0;
- }
- // NOTE: member types of binary types are resolved when needed
- public TypeVariableBinding getTypeVariable(char[] variableName) {
- 	TypeVariableBinding variable = super.getTypeVariable(variableName);
--	variable.resolve(this.environment);
-+	variable.resolve();
- 	return variable;
- }
- private void initializeTypeVariable(TypeVariableBinding variable, TypeVariableBinding[] existingVariables, SignatureWrapper wrapper, char[][][] missingTypeNames) {
-@@ -804,9 +914,9 @@
- 	wrapper.start = colon + 1; // skip name + ':'
- 	ReferenceBinding type, firstBound = null;
- 	if (wrapper.signature[wrapper.start] == ':') {
--		type = environment.getResolvedType(TypeConstants.JAVA_LANG_OBJECT, null);
-+		type = this.environment.getResolvedType(TypeConstants.JAVA_LANG_OBJECT, null);
- 	} else {
--		type = (ReferenceBinding) environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames);
-+		type = (ReferenceBinding) this.environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames);
- 		firstBound = type;
- 	}
- 
-@@ -819,7 +929,7 @@
- 		java.util.ArrayList types = new java.util.ArrayList(2);
- 		do {
- 			wrapper.start++; // skip ':'
--			types.add(environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames));
-+			types.add(this.environment.getTypeFromTypeSignature(wrapper, existingVariables, this, missingTypeNames));
- 		} while (wrapper.signature[wrapper.start] == ':');
- 		bounds = new ReferenceBinding[types.size()];
- 		types.toArray(bounds);
-@@ -850,6 +960,9 @@
- public boolean isGenericType() {
-     return this.typeVariables != Binding.NO_TYPE_VARIABLES;
- }
-+public boolean isHierarchyConnected() {
-+	return (this.tagBits & (TagBits.HasUnresolvedSuperclass | TagBits.HasUnresolvedSuperinterfaces)) == 0;
-+}
- public int kind() {
- 	if (this.typeVariables != Binding.NO_TYPE_VARIABLES)
- 		return Binding.GENERIC_TYPE;
-@@ -861,7 +974,7 @@
- 		return this.memberTypes;
- 
- 	for (int i = this.memberTypes.length; --i >= 0;)
--		this.memberTypes[i] = resolveType(this.memberTypes[i], this.environment, false); // no raw conversion for now
-+		this.memberTypes[i] = (ReferenceBinding) resolveType(this.memberTypes[i], this.environment, false /* no raw conversion for now */);
- 	this.tagBits &= ~TagBits.HasUnresolvedMemberTypes;
- 	return this.memberTypes;
- }
-@@ -880,15 +993,15 @@
- 			ReferenceBinding.sortMethods(this.bridgeMethods, 0, length);
- 		this.tagBits |= TagBits.AreMethodsSorted;
- 	}
--	for (int i = methods.length; --i >= 0;)
--		resolveTypesFor(methods[i]);
--	for (int i = bridgeMethods.length; --i >= 0;)
--		resolveTypesFor(bridgeMethods[i]);  
--	this.tagBits |= TagBits.AreMethodsComplete;  
-+	for (int i = this.methods.length; --i >= 0;)
-+		resolveTypesFor(this.methods[i]);
-+	for (int i = this.bridgeMethods.length; --i >= 0;)
-+		resolveTypesFor(this.bridgeMethods[i]);
-+	this.tagBits |= TagBits.AreMethodsComplete;
- }
- public MethodBinding[] methods() {
- 	lazyInitMethods();
--	return methods;
-+	return this.methods;
- }
- public MethodBinding[] bridgeMethods() {
- 	lazyInitMethods();
-@@ -898,11 +1011,11 @@
- 	if ((field.modifiers & ExtraCompilerModifiers.AccUnresolved) == 0)
- 		return field;
- 
--	TypeBinding resolvedType = resolveType(field.type, this.environment, null, 0);
-+	TypeBinding resolvedType = resolveType(field.type, this.environment, true /* raw conversion */);
- 	field.type = resolvedType;
- 	if ((resolvedType.tagBits & TagBits.HasMissingType) != 0) {
- 		field.tagBits |= TagBits.HasMissingType;
--	}		
-+	}
- 	field.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
- 	return field;
- }
-@@ -911,28 +1024,28 @@
- 		return method;
- 
- 	if (!method.isConstructor()) {
--		TypeBinding resolvedType = resolveType(method.returnType, this.environment, null, 0);
-+		TypeBinding resolvedType = resolveType(method.returnType, this.environment, true /* raw conversion */);
- 		method.returnType = resolvedType;
- 		if ((resolvedType.tagBits & TagBits.HasMissingType) != 0) {
- 			method.tagBits |= TagBits.HasMissingType;
--		}		
-+		}
- 	}
- 	for (int i = method.parameters.length; --i >= 0;) {
--		TypeBinding resolvedType = resolveType(method.parameters[i], this.environment, null, 0);
-+		TypeBinding resolvedType = resolveType(method.parameters[i], this.environment, true /* raw conversion */);
- 		method.parameters[i] = resolvedType;
- 		if ((resolvedType.tagBits & TagBits.HasMissingType) != 0) {
- 			method.tagBits |= TagBits.HasMissingType;
--		}		
-+		}
- 	}
- 	for (int i = method.thrownExceptions.length; --i >= 0;) {
--		ReferenceBinding resolvedType = resolveType(method.thrownExceptions[i], this.environment, true);
-+		ReferenceBinding resolvedType = (ReferenceBinding) resolveType(method.thrownExceptions[i], this.environment, true /* raw conversion */);
- 		method.thrownExceptions[i] = resolvedType;
- 		if ((resolvedType.tagBits & TagBits.HasMissingType) != 0) {
- 			method.tagBits |= TagBits.HasMissingType;
- 		}
- 	}
- 	for (int i = method.typeVariables.length; --i >= 0;) {
--		method.typeVariables[i].resolve(this.environment);
-+		method.typeVariables[i].resolve();
- 	}
- 	method.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
- 	return method;
-@@ -957,7 +1070,7 @@
- 		return this.superclass;
- 
- 	// finish resolving the type
--	this.superclass = resolveType(this.superclass, this.environment, true);
-+	this.superclass = (ReferenceBinding) resolveType(this.superclass, this.environment, true /* raw conversion */);
- 	this.tagBits &= ~TagBits.HasUnresolvedSuperclass;
- 	if (this.superclass.problemId() == ProblemReasons.NotFound)
- 		this.tagBits |= TagBits.HierarchyHasProblems; // propagate type inconsistency
-@@ -969,7 +1082,7 @@
- 		return this.superInterfaces;
- 
- 	for (int i = this.superInterfaces.length; --i >= 0;) {
--		this.superInterfaces[i] = resolveType(this.superInterfaces[i], this.environment, true);
-+		this.superInterfaces[i] = (ReferenceBinding) resolveType(this.superInterfaces[i], this.environment, true /* raw conversion */);
- 		if (this.superInterfaces[i].problemId() == ProblemReasons.NotFound)
- 			this.tagBits |= TagBits.HierarchyHasProblems; // propagate type inconsistency
- 	}
-@@ -981,7 +1094,7 @@
- 		return this.typeVariables;
- 
-  	for (int i = this.typeVariables.length; --i >= 0;)
--		this.typeVariables[i].resolve(this.environment);
-+		this.typeVariables[i].resolve();
- 	this.tagBits &= ~TagBits.HasUnresolvedTypeVariables;
- 	return this.typeVariables;
- }
-@@ -999,8 +1112,8 @@
- 	if (isEnum()) buffer.append("enum "); //$NON-NLS-1$
- 	else if (isAnnotationType()) buffer.append("@interface "); //$NON-NLS-1$
- 	else if (isClass()) buffer.append("class "); //$NON-NLS-1$
--	else buffer.append("interface "); //$NON-NLS-1$	
--	buffer.append((compoundName != null) ? CharOperation.toString(compoundName) : "UNNAMED TYPE"); //$NON-NLS-1$
-+	else buffer.append("interface "); //$NON-NLS-1$
-+	buffer.append((this.compoundName != null) ? CharOperation.toString(this.compoundName) : "UNNAMED TYPE"); //$NON-NLS-1$
- 
- 	if (this.typeVariables == null) {
- 		buffer.append("<NULL TYPE VARIABLES>"); //$NON-NLS-1$
-@@ -1018,51 +1131,51 @@
- 		buffer.append(">"); //$NON-NLS-1$
- 	}
- 	buffer.append("\n\textends "); //$NON-NLS-1$
--	buffer.append((superclass != null) ? superclass.debugName() : "NULL TYPE"); //$NON-NLS-1$
-+	buffer.append((this.superclass != null) ? this.superclass.debugName() : "NULL TYPE"); //$NON-NLS-1$
- 
--	if (superInterfaces != null) {
--		if (superInterfaces != Binding.NO_SUPERINTERFACES) {
-+	if (this.superInterfaces != null) {
-+		if (this.superInterfaces != Binding.NO_SUPERINTERFACES) {
- 			buffer.append("\n\timplements : "); //$NON-NLS-1$
--			for (int i = 0, length = superInterfaces.length; i < length; i++) {
-+			for (int i = 0, length = this.superInterfaces.length; i < length; i++) {
- 				if (i  > 0)
- 					buffer.append(", "); //$NON-NLS-1$
--				buffer.append((superInterfaces[i] != null) ? superInterfaces[i].debugName() : "NULL TYPE"); //$NON-NLS-1$
-+				buffer.append((this.superInterfaces[i] != null) ? this.superInterfaces[i].debugName() : "NULL TYPE"); //$NON-NLS-1$
- 			}
- 		}
- 	} else {
- 		buffer.append("NULL SUPERINTERFACES"); //$NON-NLS-1$
- 	}
- 
--	if (enclosingType != null) {
-+	if (this.enclosingType != null) {
- 		buffer.append("\n\tenclosing type : "); //$NON-NLS-1$
--		buffer.append(enclosingType.debugName());
-+		buffer.append(this.enclosingType.debugName());
- 	}
- 
--	if (fields != null) {
--		if (fields != Binding.NO_FIELDS) {
-+	if (this.fields != null) {
-+		if (this.fields != Binding.NO_FIELDS) {
- 			buffer.append("\n/*   fields   */"); //$NON-NLS-1$
--			for (int i = 0, length = fields.length; i < length; i++)
--				buffer.append((fields[i] != null) ? "\n" + fields[i].toString() : "\nNULL FIELD"); //$NON-NLS-1$ //$NON-NLS-2$
-+			for (int i = 0, length = this.fields.length; i < length; i++)
-+				buffer.append((this.fields[i] != null) ? "\n" + this.fields[i].toString() : "\nNULL FIELD"); //$NON-NLS-1$ //$NON-NLS-2$
- 		}
- 	} else {
- 		buffer.append("NULL FIELDS"); //$NON-NLS-1$
- 	}
- 
--	if (methods != null) {
--		if (methods != Binding.NO_METHODS) {
-+	if (this.methods != null) {
-+		if (this.methods != Binding.NO_METHODS) {
- 			buffer.append("\n/*   methods   */"); //$NON-NLS-1$
--			for (int i = 0, length = methods.length; i < length; i++)
--				buffer.append((methods[i] != null) ? "\n" + methods[i].toString() : "\nNULL METHOD"); //$NON-NLS-1$ //$NON-NLS-2$
-+			for (int i = 0, length = this.methods.length; i < length; i++)
-+				buffer.append((this.methods[i] != null) ? "\n" + this.methods[i].toString() : "\nNULL METHOD"); //$NON-NLS-1$ //$NON-NLS-2$
- 		}
- 	} else {
- 		buffer.append("NULL METHODS"); //$NON-NLS-1$
- 	}
- 
--	if (memberTypes != null) {
--		if (memberTypes != Binding.NO_MEMBER_TYPES) {
-+	if (this.memberTypes != null) {
-+		if (this.memberTypes != Binding.NO_MEMBER_TYPES) {
- 			buffer.append("\n/*   members   */"); //$NON-NLS-1$
--			for (int i = 0, length = memberTypes.length; i < length; i++)
--				buffer.append((memberTypes[i] != null) ? "\n" + memberTypes[i].toString() : "\nNULL TYPE"); //$NON-NLS-1$ //$NON-NLS-2$
-+			for (int i = 0, length = this.memberTypes.length; i < length; i++)
-+				buffer.append((this.memberTypes[i] != null) ? "\n" + this.memberTypes[i].toString() : "\nNULL TYPE"); //$NON-NLS-1$ //$NON-NLS-2$
- 		}
- 	} else {
- 		buffer.append("NULL MEMBER TYPES"); //$NON-NLS-1$
-@@ -1072,6 +1185,6 @@
- 	return buffer.toString();
- }
- MethodBinding[] unResolvedMethods() { // for the MethodVerifier so it doesn't resolve types
--	return methods;
-+	return this.methods;
- }
- }
-Index: gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java
-===================================================================
---- gwt-debian.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java	2011-12-21 11:43:29.177246756 +0100
-+++ gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/MethodBinding.java	2011-12-21 11:44:39.317245930 +0100
-@@ -1,5 +1,5 @@
- /*******************************************************************************
-- * Copyright (c) 2000, 2008 IBM Corporation and others.
-+ * Copyright (c) 2000, 2009 IBM Corporation and others.
-  * All rights reserved. This program and the accompanying materials
-  * are made available under the terms of the Eclipse Public License v1.0
-  * which accompanies this distribution, and is available at
-@@ -20,65 +20,66 @@
- import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
- import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
- import org.eclipse.jdt.internal.compiler.codegen.ConstantPool;
-+import org.eclipse.jdt.internal.compiler.util.Util;
- 
- public class MethodBinding extends Binding {
--  
--  public int modifiers;
--  public char[] selector;
--  public TypeBinding returnType;
--  public TypeBinding[] parameters;
--  public ReferenceBinding[] thrownExceptions;
--  public ReferenceBinding declaringClass;
--  public TypeVariableBinding[] typeVariables = Binding.NO_TYPE_VARIABLES;
--  char[] signature;
--  public long tagBits;
--  
-+
-+	public int modifiers;
-+	public char[] selector;
-+	public TypeBinding returnType;
-+	public TypeBinding[] parameters;
-+	public ReferenceBinding[] thrownExceptions;
-+	public ReferenceBinding declaringClass;
-+	public TypeVariableBinding[] typeVariables = Binding.NO_TYPE_VARIABLES;
-+	char[] signature;
-+	public long tagBits;
-+
- protected MethodBinding() {
--  // for creating problem or synthetic method
-+	// for creating problem or synthetic method
- }
- public MethodBinding(int modifiers, char[] selector, TypeBinding returnType, TypeBinding[] parameters, ReferenceBinding[] thrownExceptions, ReferenceBinding declaringClass) {
--  this.modifiers = modifiers;
--  this.selector = selector;
--  this.returnType = returnType;
--  this.parameters = (parameters == null || parameters.length == 0) ? Binding.NO_PARAMETERS : parameters;
--  this.thrownExceptions = (thrownExceptions == null || thrownExceptions.length == 0) ? Binding.NO_EXCEPTIONS : thrownExceptions;
--  this.declaringClass = declaringClass;
--  
--  // propagate the strictfp & deprecated modifiers
--  if (this.declaringClass != null) {
--    if (this.declaringClass.isStrictfp())
--      if (!(isNative() || isAbstract()))
--        this.modifiers |= ClassFileConstants.AccStrictfp;
--  }
-+	this.modifiers = modifiers;
-+	this.selector = selector;
-+	this.returnType = returnType;
-+	this.parameters = (parameters == null || parameters.length == 0) ? Binding.NO_PARAMETERS : parameters;
-+	this.thrownExceptions = (thrownExceptions == null || thrownExceptions.length == 0) ? Binding.NO_EXCEPTIONS : thrownExceptions;
-+	this.declaringClass = declaringClass;
-+
-+	// propagate the strictfp & deprecated modifiers
-+	if (this.declaringClass != null) {
-+		if (this.declaringClass.isStrictfp())
-+			if (!(isNative() || isAbstract()))
-+				this.modifiers |= ClassFileConstants.AccStrictfp;
-+	}
- }
- public MethodBinding(int modifiers, TypeBinding[] parameters, ReferenceBinding[] thrownExceptions, ReferenceBinding declaringClass) {
--  this(modifiers, TypeConstants.INIT, TypeBinding.VOID, parameters, thrownExceptions, declaringClass);
-+	this(modifiers, TypeConstants.INIT, TypeBinding.VOID, parameters, thrownExceptions, declaringClass);
- }
- // special API used to change method declaring class for runtime visibility check
- public MethodBinding(MethodBinding initialMethodBinding, ReferenceBinding declaringClass) {
--  this.modifiers = initialMethodBinding.modifiers;
--  this.selector = initialMethodBinding.selector;
--  this.returnType = initialMethodBinding.returnType;
--  this.parameters = initialMethodBinding.parameters;
--  this.thrownExceptions = initialMethodBinding.thrownExceptions;
--  this.declaringClass = declaringClass;
--  declaringClass.storeAnnotationHolder(this, initialMethodBinding.declaringClass.retrieveAnnotationHolder(initialMethodBinding, true));
-+	this.modifiers = initialMethodBinding.modifiers;
-+	this.selector = initialMethodBinding.selector;
-+	this.returnType = initialMethodBinding.returnType;
-+	this.parameters = initialMethodBinding.parameters;
-+	this.thrownExceptions = initialMethodBinding.thrownExceptions;
-+	this.declaringClass = declaringClass;
-+	declaringClass.storeAnnotationHolder(this, initialMethodBinding.declaringClass.retrieveAnnotationHolder(initialMethodBinding, true));
- }
- /* Answer true if the argument types & the receiver's parameters have the same erasure
- */
- public final boolean areParameterErasuresEqual(MethodBinding method) {
--  TypeBinding[] args = method.parameters;
--  if (parameters == args)
--    return true;
--
--  int length = parameters.length;
--  if (length != args.length)
--    return false;
--
--  for (int i = 0; i < length; i++)
--    if (parameters[i] != args[i] && parameters[i].erasure() != args[i].erasure())
--      return false;
--  return true;
-+	TypeBinding[] args = method.parameters;
-+	if (this.parameters == args)
-+		return true;
-+
-+	int length = this.parameters.length;
-+	if (length != args.length)
-+		return false;
-+
-+	for (int i = 0; i < length; i++)
-+		if (this.parameters[i] != args[i] && this.parameters[i].erasure() != args[i].erasure())
-+			return false;
-+	return true;
- }
- /*
-  * Returns true if given parameters are compatible with this method parameters.
-@@ -86,46 +87,46 @@
-  * passed as argument matches this MethodBinding number of parameters
-  */
- public final boolean areParametersCompatibleWith(TypeBinding[] arguments) {
--  int paramLength = this.parameters.length;
--  int argLength = arguments.length;
--  int lastIndex = argLength;
--  if (isVarargs()) {
--    lastIndex = paramLength - 1;
--    if (paramLength == argLength) { // accept X[] but not X or X[][]
--      TypeBinding varArgType = parameters[lastIndex]; // is an ArrayBinding by definition
--      TypeBinding lastArgument = arguments[lastIndex];
--      if (varArgType != lastArgument && !lastArgument.isCompatibleWith(varArgType))
--        return false;
--    } else if (paramLength < argLength) { // all remainig argument types must be compatible with the elementsType of varArgType
--      TypeBinding varArgType = ((ArrayBinding) parameters[lastIndex]).elementsType();
--      for (int i = lastIndex; i < argLength; i++)
--        if (varArgType != arguments[i] && !arguments[i].isCompatibleWith(varArgType))
--          return false;
--    } else if (lastIndex != argLength) { // can call foo(int i, X ... x) with foo(1) but NOT foo();
--      return false;
--    }
--    // now compare standard arguments from 0 to lastIndex
--  }
--  for (int i = 0; i < lastIndex; i++)
--    if (parameters[i] != arguments[i] && !arguments[i].isCompatibleWith(parameters[i]))
--      return false;
--  return true;
-+	int paramLength = this.parameters.length;
-+	int argLength = arguments.length;
-+	int lastIndex = argLength;
-+	if (isVarargs()) {
-+		lastIndex = paramLength - 1;
-+		if (paramLength == argLength) { // accept X[] but not X or X[][]
-+			TypeBinding varArgType = this.parameters[lastIndex]; // is an ArrayBinding by definition
-+			TypeBinding lastArgument = arguments[lastIndex];
-+			if (varArgType != lastArgument && !lastArgument.isCompatibleWith(varArgType))
-+				return false;
-+		} else if (paramLength < argLength) { // all remainig argument types must be compatible with the elementsType of varArgType
-+			TypeBinding varArgType = ((ArrayBinding) this.parameters[lastIndex]).elementsType();
-+			for (int i = lastIndex; i < argLength; i++)
-+				if (varArgType != arguments[i] && !arguments[i].isCompatibleWith(varArgType))
-+					return false;
-+		} else if (lastIndex != argLength) { // can call foo(int i, X ... x) with foo(1) but NOT foo();
-+			return false;
-+		}
-+		// now compare standard arguments from 0 to lastIndex
-+	}
-+	for (int i = 0; i < lastIndex; i++)
-+		if (this.parameters[i] != arguments[i] && !arguments[i].isCompatibleWith(this.parameters[i]))
-+			return false;
-+	return true;
- }
- /* Answer true if the argument types & the receiver's parameters are equal
- */
- public final boolean areParametersEqual(MethodBinding method) {
--  TypeBinding[] args = method.parameters;
--  if (parameters == args)
--    return true;
--
--  int length = parameters.length;
--  if (length != args.length)
--    return false;
--  
--  for (int i = 0; i < length; i++)
--    if (parameters[i] != args[i])
--      return false;
--  return true;
-+	TypeBinding[] args = method.parameters;
-+	if (this.parameters == args)
-+		return true;
-+
-+	int length = this.parameters.length;
-+	if (length != args.length)
-+		return false;
-+
-+	for (int i = 0; i < length; i++)
-+		if (this.parameters[i] != args[i])
-+			return false;
-+	return true;
- }
- 
- /* API
-@@ -135,18 +136,41 @@
- /* Answer true if the type variables have the same erasure
- */
- public final boolean areTypeVariableErasuresEqual(MethodBinding method) {
--  TypeVariableBinding[] vars = method.typeVariables;
--  if (this.typeVariables == vars)
--    return true;
--
--  int length = this.typeVariables.length;
--  if (length != vars.length)
--    return false;
--
--  for (int i = 0; i < length; i++)
--    if (this.typeVariables[i] != vars[i] && this.typeVariables[i].erasure() != vars[i].erasure())
--      return false;
--  return true;
-+	TypeVariableBinding[] vars = method.typeVariables;
-+	if (this.typeVariables == vars)
-+		return true;
-+
-+	int length = this.typeVariables.length;
-+	if (length != vars.length)
-+		return false;
-+
-+	for (int i = 0; i < length; i++)
-+		if (this.typeVariables[i] != vars[i] && this.typeVariables[i].erasure() != vars[i].erasure())
-+			return false;
-+	return true;
-+}
-+MethodBinding asRawMethod(LookupEnvironment env) {
-+	if (this.typeVariables == Binding.NO_TYPE_VARIABLES) return this;
-+
-+	// substitute type arguments with raw types
-+	int length = this.typeVariables.length;
-+	TypeBinding[] arguments = new TypeBinding[length];
-+	for (int i = 0; i < length; i++) {
-+		TypeVariableBinding var = this.typeVariables[i];
-+		if (var.boundsCount() <= 1) {
-+			arguments[i] = env.convertToRawType(var.upperBound(), false /*do not force conversion of enclosing types*/);
-+		} else {
-+			// use an intersection type to retain full bound information if more than 1 bound
-+			TypeBinding rawSuperclass = env.convertToRawType(var.superclass(), false);
-+			TypeBinding[] itsSuperinterfaces = var.superInterfaces();
-+			int superLength = itsSuperinterfaces.length;
-+			TypeBinding[] rawSuperinterfaces = new TypeBinding[superLength];
-+			for (int s = 0; s < superLength; s++)
-+				rawSuperinterfaces[s] = env.convertToRawType(itsSuperinterfaces[s], false);
-+			arguments[i] = env.createWildcard(null, 0, rawSuperclass, rawSuperinterfaces, org.eclipse.jdt.internal.compiler.ast.Wildcard.EXTENDS);
-+		}
-+	}
-+	return env.createParameterizedGenericMethod(this, arguments);
- }
- /* Answer true if the receiver is visible to the type provided by the scope.
- * InvocationSite implements isSuperAccess() to provide additional information
-@@ -158,45 +182,45 @@
- */
- 
- public final boolean canBeSeenBy(InvocationSite invocationSite, Scope scope) {
--  if (isPublic()) return true;
--
--  SourceTypeBinding invocationType = scope.enclosingSourceType();
--  if (invocationType == declaringClass) return true;
-+	if (isPublic()) return true;
- 
--  if (isProtected()) {
--    // answer true if the receiver is in the same package as the invocationType
--    if (invocationType.fPackage == declaringClass.fPackage) return true;
--    return invocationSite.isSuperAccess();
--  }
--
--  if (isPrivate()) {
--    // answer true if the invocationType and the declaringClass have a common enclosingType
--    // already know they are not the identical type
--    ReferenceBinding outerInvocationType = invocationType;
--    ReferenceBinding temp = outerInvocationType.enclosingType();
--    while (temp != null) {
--      outerInvocationType = temp;
--      temp = temp.enclosingType();
--    }
-+	SourceTypeBinding invocationType = scope.enclosingSourceType();
-+	if (invocationType == this.declaringClass) return true;
- 
--    ReferenceBinding outerDeclaringClass = (ReferenceBinding)declaringClass.erasure();
--    temp = outerDeclaringClass.enclosingType();
--    while (temp != null) {
--      outerDeclaringClass = temp;
--      temp = temp.enclosingType();
--    }
--    return outerInvocationType == outerDeclaringClass;
--  }
-+	if (isProtected()) {
-+		// answer true if the receiver is in the same package as the invocationType
-+		if (invocationType.fPackage == this.declaringClass.fPackage) return true;
-+		return invocationSite.isSuperAccess();
-+	}
-+
-+	if (isPrivate()) {
-+		// answer true if the invocationType and the declaringClass have a common enclosingType
-+		// already know they are not the identical type
-+		ReferenceBinding outerInvocationType = invocationType;
-+		ReferenceBinding temp = outerInvocationType.enclosingType();
-+		while (temp != null) {
-+			outerInvocationType = temp;
-+			temp = temp.enclosingType();
-+		}
-+
-+		ReferenceBinding outerDeclaringClass = (ReferenceBinding)this.declaringClass.erasure();
-+		temp = outerDeclaringClass.enclosingType();
-+		while (temp != null) {
-+			outerDeclaringClass = temp;
-+			temp = temp.enclosingType();
-+		}
-+		return outerInvocationType == outerDeclaringClass;
-+	}
- 
--  // isDefault()
--  return invocationType.fPackage == declaringClass.fPackage;
-+	// isDefault()
-+	return invocationType.fPackage == this.declaringClass.fPackage;
- }
- public final boolean canBeSeenBy(PackageBinding invocationPackage) {
--  if (isPublic()) return true;
--  if (isPrivate()) return false;
-+	if (isPublic()) return true;
-+	if (isPrivate()) return false;
- 
--  // isProtected() or isDefault()
--  return invocationPackage == declaringClass.getPackage();
-+	// isProtected() or isDefault()
-+	return invocationPackage == this.declaringClass.getPackage();
- }
- 
- /* Answer true if the receiver is visible to the type provided by the scope.
-@@ -206,133 +230,134 @@
- * NOTE: Cannot invoke this method with a compilation unit scope.
- */
- public final boolean canBeSeenBy(TypeBinding receiverType, InvocationSite invocationSite, Scope scope) {
--  if (isPublic()) return true;
-+	if (isPublic()) return true;
- 
--  SourceTypeBinding invocationType = scope.enclosingSourceType();
--  if (invocationType == declaringClass && invocationType == receiverType) return true;
-+	SourceTypeBinding invocationType = scope.enclosingSourceType();
-+	if (invocationType == this.declaringClass && invocationType == receiverType) return true;
- 
--  if (invocationType == null) // static import call
--    return !isPrivate() && scope.getCurrentPackage() == declaringClass.fPackage;
--
--  if (isProtected()) {
--    // answer true if the invocationType is the declaringClass or they are in the same package
--    // OR the invocationType is a subclass of the declaringClass
--    //    AND the receiverType is the invocationType or its subclass
--    //    OR the method is a static method accessed directly through a type
--    //    OR previous assertions are true for one of the enclosing type
--    if (invocationType == declaringClass) return true;
--    if (invocationType.fPackage == declaringClass.fPackage) return true;
--    
--    ReferenceBinding currentType = invocationType;
--    TypeBinding receiverErasure = receiverType.erasure();   
--    ReferenceBinding declaringErasure = (ReferenceBinding) declaringClass.erasure();
--    int depth = 0;
--    do {
--      if (currentType.findSuperTypeOriginatingFrom(declaringErasure) != null) {
--        if (invocationSite.isSuperAccess())
--          return true;
--        // receiverType can be an array binding in one case... see if you can change it
--        if (receiverType instanceof ArrayBinding)
--          return false;
--        if (isStatic()) {
--          if (depth > 0) invocationSite.setDepth(depth);
--          return true; // see 1FMEPDL - return invocationSite.isTypeAccess();
--        }
--        if (currentType == receiverErasure || receiverErasure.findSuperTypeOriginatingFrom(currentType) != null) {
--          if (depth > 0) invocationSite.setDepth(depth);
--          return true;
--        }
--      }
--      depth++;
--      currentType = currentType.enclosingType();
--    } while (currentType != null);
--    return false;
--  }
--
--  if (isPrivate()) {
--    // answer true if the receiverType is the declaringClass
--    // AND the invocationType and the declaringClass have a common enclosingType
--    receiverCheck: {
--      if (receiverType != declaringClass) {
--        // special tolerance for type variable direct bounds
--        if (receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(declaringClass.erasure()))
--          break receiverCheck;
--        return false;
--      }
--    }
-+	if (invocationType == null) // static import call
-+		return !isPrivate() && scope.getCurrentPackage() == this.declaringClass.fPackage;
- 
--    if (invocationType != declaringClass) {
--      ReferenceBinding outerInvocationType = invocationType;
--      ReferenceBinding temp = outerInvocationType.enclosingType();
--      while (temp != null) {
--        outerInvocationType = temp;
--        temp = temp.enclosingType();
--      }
--
--      ReferenceBinding outerDeclaringClass = (ReferenceBinding)declaringClass.erasure();
--      temp = outerDeclaringClass.enclosingType();
--      while (temp != null) {
--        outerDeclaringClass = temp;
--        temp = temp.enclosingType();
--      }
--      if (outerInvocationType != outerDeclaringClass) return false;
--    }
--    return true;
--  }
--
--  // isDefault()
--  PackageBinding declaringPackage = declaringClass.fPackage;
--  if (invocationType.fPackage != declaringPackage) return false;
--
--  // receiverType can be an array binding in one case... see if you can change it
--  if (receiverType instanceof ArrayBinding)
--    return false;
--  ReferenceBinding currentType = (ReferenceBinding) receiverType;
--  do {
--    if (declaringClass == currentType) return true;
--    PackageBinding currentPackage = currentType.fPackage;
--    // package could be null for wildcards/intersection types, ignore and recurse in superclass
--    if (currentPackage != null && currentPackage != declaringPackage) return false;
--  } while ((currentType = currentType.superclass()) != null);
--  return false;
-+	if (isProtected()) {
-+		// answer true if the invocationType is the declaringClass or they are in the same package
-+		// OR the invocationType is a subclass of the declaringClass
-+		//    AND the receiverType is the invocationType or its subclass
-+		//    OR the method is a static method accessed directly through a type
-+		//    OR previous assertions are true for one of the enclosing type
-+		if (invocationType == this.declaringClass) return true;
-+		if (invocationType.fPackage == this.declaringClass.fPackage) return true;
-+
-+		ReferenceBinding currentType = invocationType;
-+		TypeBinding receiverErasure = receiverType.erasure();
-+		ReferenceBinding declaringErasure = (ReferenceBinding) this.declaringClass.erasure();
-+		int depth = 0;
-+		do {
-+			if (currentType.findSuperTypeOriginatingFrom(declaringErasure) != null) {
-+				if (invocationSite.isSuperAccess())
-+					return true;
-+				// receiverType can be an array binding in one case... see if you can change it
-+				if (receiverType instanceof ArrayBinding)
-+					return false;
-+				if (isStatic()) {
-+					if (depth > 0) invocationSite.setDepth(depth);
-+					return true; // see 1FMEPDL - return invocationSite.isTypeAccess();
-+				}
-+				if (currentType == receiverErasure || receiverErasure.findSuperTypeOriginatingFrom(currentType) != null) {
-+					if (depth > 0) invocationSite.setDepth(depth);
-+					return true;
-+				}
-+			}
-+			depth++;
-+			currentType = currentType.enclosingType();
-+		} while (currentType != null);
-+		return false;
-+	}
-+
-+	if (isPrivate()) {
-+		// answer true if the receiverType is the declaringClass
-+		// AND the invocationType and the declaringClass have a common enclosingType
-+		receiverCheck: {
-+			if (receiverType != this.declaringClass) {
-+				// special tolerance for type variable direct bounds
-+				if (receiverType.isTypeVariable() && ((TypeVariableBinding) receiverType).isErasureBoundTo(this.declaringClass.erasure()))
-+					break receiverCheck;
-+				return false;
-+			}
-+		}
-+
-+		if (invocationType != this.declaringClass) {
-+			ReferenceBinding outerInvocationType = invocationType;
-+			ReferenceBinding temp = outerInvocationType.enclosingType();
-+			while (temp != null) {
-+				outerInvocationType = temp;
-+				temp = temp.enclosingType();
-+			}
-+
-+			ReferenceBinding outerDeclaringClass = (ReferenceBinding)this.declaringClass.erasure();
-+			temp = outerDeclaringClass.enclosingType();
-+			while (temp != null) {
-+				outerDeclaringClass = temp;
-+				temp = temp.enclosingType();
-+			}
-+			if (outerInvocationType != outerDeclaringClass) return false;
-+		}
-+		return true;
-+	}
-+
-+	// isDefault()
-+	PackageBinding declaringPackage = this.declaringClass.fPackage;
-+	if (invocationType.fPackage != declaringPackage) return false;
-+
-+	// receiverType can be an array binding in one case... see if you can change it
-+	if (receiverType instanceof ArrayBinding)
-+		return false;
-+	TypeBinding originalDeclaringClass = this.declaringClass.original();
-+	ReferenceBinding currentType = (ReferenceBinding) receiverType;
-+	do {
-+		if (originalDeclaringClass == currentType.original()) return true;
-+		PackageBinding currentPackage = currentType.fPackage;
-+		// package could be null for wildcards/intersection types, ignore and recurse in superclass
-+		if (currentPackage != null && currentPackage != declaringPackage) return false;
-+	} while ((currentType = currentType.superclass()) != null);
-+	return false;
- }
- 
- public List collectMissingTypes(List missingTypes) {
--  if ((this.tagBits & TagBits.HasMissingType) != 0) {
--    missingTypes = this.returnType.collectMissingTypes(missingTypes);
--    for (int i = 0, max = this.parameters.length; i < max; i++) {
--      missingTypes = this.parameters[i].collectMissingTypes(missingTypes);
--    }
--    for (int i = 0, max = this.thrownExceptions.length; i < max; i++) {
--      missingTypes = this.thrownExceptions[i].collectMissingTypes(missingTypes);
--    }
--    for (int i = 0, max = this.typeVariables.length; i < max; i++) {
--      TypeVariableBinding variable = this.typeVariables[i];
--      missingTypes = variable.superclass().collectMissingTypes(missingTypes);
--      ReferenceBinding[] interfaces = variable.superInterfaces();
--      for (int j = 0, length = interfaces.length; j < length; j++) {
--        missingTypes = interfaces[j].collectMissingTypes(missingTypes);
--      }
--    }
--  }
--  return missingTypes;
-+	if ((this.tagBits & TagBits.HasMissingType) != 0) {
-+		missingTypes = this.returnType.collectMissingTypes(missingTypes);
-+		for (int i = 0, max = this.parameters.length; i < max; i++) {
-+			missingTypes = this.parameters[i].collectMissingTypes(missingTypes);
-+		}
-+		for (int i = 0, max = this.thrownExceptions.length; i < max; i++) {
-+			missingTypes = this.thrownExceptions[i].collectMissingTypes(missingTypes);
-+		}
-+		for (int i = 0, max = this.typeVariables.length; i < max; i++) {
-+			TypeVariableBinding variable = this.typeVariables[i];
-+			missingTypes = variable.superclass().collectMissingTypes(missingTypes);
-+			ReferenceBinding[] interfaces = variable.superInterfaces();
-+			for (int j = 0, length = interfaces.length; j < length; j++) {
-+				missingTypes = interfaces[j].collectMissingTypes(missingTypes);
-+			}
-+		}
-+	}
-+	return missingTypes;
- }
- 
- MethodBinding computeSubstitutedMethod(MethodBinding method, LookupEnvironment env) {
--  int length = this.typeVariables.length;
--  TypeVariableBinding[] vars = method.typeVariables;
--  if (length != vars.length)
--    return null;
--
--  // must substitute to detect cases like:
--  //   <T1 extends X<T1>> void dup() {}
--  //   <T2 extends X<T2>> Object dup() {return null;}
--  ParameterizedGenericMethodBinding substitute =
--    env.createParameterizedGenericMethod(method, this.typeVariables);
--  for (int i = 0; i < length; i++)
--    if (!this.typeVariables[i].isInterchangeableWith(vars[i], substitute))
--      return null;
--  return substitute;
-+	int length = this.typeVariables.length;
-+	TypeVariableBinding[] vars = method.typeVariables;
-+	if (length != vars.length)
-+		return null;
-+
-+	// must substitute to detect cases like:
-+	//   <T1 extends X<T1>> void dup() {}
-+	//   <T2 extends X<T2>> Object dup() {return null;}
-+	ParameterizedGenericMethodBinding substitute =
-+		env.createParameterizedGenericMethod(method, this.typeVariables);
-+	for (int i = 0; i < length; i++)
-+		if (!this.typeVariables[i].isInterchangeableWith(vars[i], substitute))
-+			return null;
-+	return substitute;
- }
- 
- /*
-@@ -340,63 +365,55 @@
-  * p.X { <T> void bar(X<T> t) } --> Lp/X;.bar<T:Ljava/lang/Object;>(LX<TT;>;)V
-  */
- public char[] computeUniqueKey(boolean isLeaf) {
--  // declaring class 
--  char[] declaringKey = this.declaringClass.computeUniqueKey(false/*not a leaf*/);
--  int declaringLength = declaringKey.length;
--  
--  // selector
--  int selectorLength = this.selector == TypeConstants.INIT ? 0 : this.selector.length;
--  
--  // generic signature
--  char[] sig = genericSignature();
--  boolean isGeneric = sig != null;
--  if (!isGeneric) sig = signature();
--  int signatureLength = sig.length;
--  
--  // thrown exceptions
--  int thrownExceptionsLength = this.thrownExceptions.length;
--  int thrownExceptionsSignatureLength = 0;
--  char[][] thrownExceptionsSignatures = null;
--  boolean addThrownExceptions = thrownExceptionsLength > 0 && (!isGeneric || CharOperation.lastIndexOf('^', sig) < 0);
--  if (addThrownExceptions) {
--    thrownExceptionsSignatures = new char[thrownExceptionsLength][];
--    for (int i = 0; i < thrownExceptionsLength; i++) {
--      if (this.thrownExceptions[i] != null) {
--        thrownExceptionsSignatures[i] = this.thrownExceptions[i].signature();
--        thrownExceptionsSignatureLength += thrownExceptionsSignatures[i].length + 1;  // add one char for separator
--      }
--    }
--  }
--  
--  char[] uniqueKey = new char[declaringLength + 1 + selectorLength + signatureLength + thrownExceptionsSignatureLength];
--  int index = 0;
--  System.arraycopy(declaringKey, 0, uniqueKey, index, declaringLength);
--  index = declaringLength;
--  uniqueKey[index++] = '.';
--  System.arraycopy(this.selector, 0, uniqueKey, index, selectorLength);
--  index += selectorLength;
--  System.arraycopy(sig, 0, uniqueKey, index, signatureLength);
--  if (thrownExceptionsSignatureLength > 0) {
--    index += signatureLength;
--    for (int i = 0; i < thrownExceptionsLength; i++) {
--      char[] thrownExceptionSignature = thrownExceptionsSignatures[i];
--      if (thrownExceptionSignature != null) {
--        uniqueKey[index++] = '|';
--        int length = thrownExceptionSignature.length;
--        System.arraycopy(thrownExceptionSignature, 0, uniqueKey, index, length);
--        index += length;
--      }
--    }
--  }
--  return uniqueKey;
--}
--
--/* 
-- * Answer the declaring class to use in the constant pool
-- * may not be a reference binding (see subtypes)
-- */
--public TypeBinding constantPoolDeclaringClass() {
--  return this.declaringClass;
-+	// declaring class
-+	char[] declaringKey = this.declaringClass.computeUniqueKey(false/*not a leaf*/);
-+	int declaringLength = declaringKey.length;
-+
-+	// selector
-+	int selectorLength = this.selector == TypeConstants.INIT ? 0 : this.selector.length;
-+
-+	// generic signature
-+	char[] sig = genericSignature();
-+	boolean isGeneric = sig != null;
-+	if (!isGeneric) sig = signature();
-+	int signatureLength = sig.length;
-+
-+	// thrown exceptions
-+	int thrownExceptionsLength = this.thrownExceptions.length;
-+	int thrownExceptionsSignatureLength = 0;
-+	char[][] thrownExceptionsSignatures = null;
-+	boolean addThrownExceptions = thrownExceptionsLength > 0 && (!isGeneric || CharOperation.lastIndexOf('^', sig) < 0);
-+	if (addThrownExceptions) {
-+		thrownExceptionsSignatures = new char[thrownExceptionsLength][];
-+		for (int i = 0; i < thrownExceptionsLength; i++) {
-+			if (this.thrownExceptions[i] != null) {
-+				thrownExceptionsSignatures[i] = this.thrownExceptions[i].signature();
-+				thrownExceptionsSignatureLength += thrownExceptionsSignatures[i].length + 1;	// add one char for separator
-+			}
-+		}
-+	}
-+
-+	char[] uniqueKey = new char[declaringLength + 1 + selectorLength + signatureLength + thrownExceptionsSignatureLength];
-+	int index = 0;
-+	System.arraycopy(declaringKey, 0, uniqueKey, index, declaringLength);
-+	index = declaringLength;
-+	uniqueKey[index++] = '.';
-+	System.arraycopy(this.selector, 0, uniqueKey, index, selectorLength);
-+	index += selectorLength;
-+	System.arraycopy(sig, 0, uniqueKey, index, signatureLength);
-+	if (thrownExceptionsSignatureLength > 0) {
-+		index += signatureLength;
-+		for (int i = 0; i < thrownExceptionsLength; i++) {
-+			char[] thrownExceptionSignature = thrownExceptionsSignatures[i];
-+			if (thrownExceptionSignature != null) {
-+				uniqueKey[index++] = '|';
-+				int length = thrownExceptionSignature.length;
-+				System.arraycopy(thrownExceptionSignature, 0, uniqueKey, index, length);
-+				index += length;
-+			}
-+		}
-+	}
-+	return uniqueKey;
- }
- 
- /* Answer the receiver's constant pool name.
-@@ -406,61 +423,78 @@
- * or the source name of the method
- */
- public final char[] constantPoolName() {
--  return selector;
-+	return this.selector;
-+}
-+
-+public MethodBinding findOriginalInheritedMethod(MethodBinding inheritedMethod) {
-+	MethodBinding inheritedOriginal = inheritedMethod.original();
-+	TypeBinding superType = this.declaringClass.findSuperTypeOriginatingFrom(inheritedOriginal.declaringClass);
-+	if (superType == null || !(superType instanceof ReferenceBinding)) return null;
-+
-+	if (inheritedOriginal.declaringClass != superType) {
-+		// must find inherited method with the same substituted variables
-+		MethodBinding[] superMethods = ((ReferenceBinding) superType).getMethods(inheritedOriginal.selector, inheritedOriginal.parameters.length);
-+		for (int m = 0, l = superMethods.length; m < l; m++)
-+			if (superMethods[m].original() == inheritedOriginal)
-+				return superMethods[m];
-+	}
-+	return inheritedOriginal;
- }
- 
- /**
-+ * <pre>
-  *<typeParam1 ... typeParamM>(param1 ... paramN)returnType thrownException1 ... thrownExceptionP
-  * T foo(T t) throws X<T>   --->   (TT;)TT;LX<TT;>;
-  * void bar(X<T> t)   -->   (LX<TT;>;)V
-  * <T> void bar(X<T> t)   -->  <T:Ljava.lang.Object;>(LX<TT;>;)V
-+ * </pre>
-  */
- public char[] genericSignature() {
--  if ((this.modifiers & ExtraCompilerModifiers.AccGenericSignature) == 0) return null;
--  StringBuffer sig = new StringBuffer(10);
--  if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
--    sig.append('<');
--    for (int i = 0, length = this.typeVariables.length; i < length; i++) {
--      sig.append(this.typeVariables[i].genericSignature());
--    }
--    sig.append('>');
--  }
--  sig.append('(');
--  for (int i = 0, length = this.parameters.length; i < length; i++) {
--    sig.append(this.parameters[i].genericTypeSignature());
--  }
--  sig.append(')');
--  if (this.returnType != null)
--    sig.append(this.returnType.genericTypeSignature());
--  
--  // only append thrown exceptions if any is generic/parameterized
--  boolean needExceptionSignatures = false;
--  int length = this.thrownExceptions.length;
--  for (int i = 0; i < length; i++) {
--    if((this.thrownExceptions[i].modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0) {
--      needExceptionSignatures = true;
--      break;
--    }
--  }
--  if (needExceptionSignatures) {
--    for (int i = 0; i < length; i++) {
--      sig.append('^');
--      sig.append(this.thrownExceptions[i].genericTypeSignature());
--    }
--  }
--  int sigLength = sig.length();
--  char[] genericSignature = new char[sigLength];
--  sig.getChars(0, sigLength, genericSignature, 0);  
--  return genericSignature;
-+	if ((this.modifiers & ExtraCompilerModifiers.AccGenericSignature) == 0) return null;
-+	StringBuffer sig = new StringBuffer(10);
-+	if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
-+		sig.append('<');
-+		for (int i = 0, length = this.typeVariables.length; i < length; i++) {
-+			sig.append(this.typeVariables[i].genericSignature());
-+		}
-+		sig.append('>');
-+	}
-+	sig.append('(');
-+	for (int i = 0, length = this.parameters.length; i < length; i++) {
-+		sig.append(this.parameters[i].genericTypeSignature());
-+	}
-+	sig.append(')');
-+	if (this.returnType != null)
-+		sig.append(this.returnType.genericTypeSignature());
-+
-+	// only append thrown exceptions if any is generic/parameterized
-+	boolean needExceptionSignatures = false;
-+	int length = this.thrownExceptions.length;
-+	for (int i = 0; i < length; i++) {
-+		if((this.thrownExceptions[i].modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0) {
-+			needExceptionSignatures = true;
-+			break;
-+		}
-+	}
-+	if (needExceptionSignatures) {
-+		for (int i = 0; i < length; i++) {
-+			sig.append('^');
-+			sig.append(this.thrownExceptions[i].genericTypeSignature());
-+		}
-+	}
-+	int sigLength = sig.length();
-+	char[] genericSignature = new char[sigLength];
-+	sig.getChars(0, sigLength, genericSignature, 0);
-+	return genericSignature;
- }
- 
- public final int getAccessFlags() {
--  return modifiers & ExtraCompilerModifiers.AccJustFlag;
-+	return this.modifiers & ExtraCompilerModifiers.AccJustFlag;
- }
- 
- public AnnotationBinding[] getAnnotations() {
--  MethodBinding originalMethod = this.original();
--  return originalMethod.declaringClass.retrieveAnnotations(originalMethod);
-+	MethodBinding originalMethod = original();
-+	return originalMethod.declaringClass.retrieveAnnotations(originalMethod);
- }
- 
- /**
-@@ -469,142 +503,226 @@
-  * @see org.eclipse.jdt.internal.compiler.lookup.Binding#getAnnotationTagBits()
-  */
- public long getAnnotationTagBits() {
--  MethodBinding originalMethod = this.original();
--  if ((originalMethod.tagBits & TagBits.AnnotationResolved) == 0 && originalMethod.declaringClass instanceof SourceTypeBinding) {
--    ClassScope scope = ((SourceTypeBinding) originalMethod.declaringClass).scope;
--    if (scope != null) {
--      TypeDeclaration typeDecl = scope.referenceContext;
--      AbstractMethodDeclaration methodDecl = typeDecl.declarationOf(originalMethod);
--      if (methodDecl != null)
--        ASTNode.resolveAnnotations(methodDecl.scope, methodDecl.annotations, originalMethod);
--    }
--  }
--  return originalMethod.tagBits;
-+	MethodBinding originalMethod = original();
-+	if ((originalMethod.tagBits & TagBits.AnnotationResolved) == 0 && originalMethod.declaringClass instanceof SourceTypeBinding) {
-+		ClassScope scope = ((SourceTypeBinding) originalMethod.declaringClass).scope;
-+		if (scope != null) {
-+			TypeDeclaration typeDecl = scope.referenceContext;
-+			AbstractMethodDeclaration methodDecl = typeDecl.declarationOf(originalMethod);
-+			if (methodDecl != null)
-+				ASTNode.resolveAnnotations(methodDecl.scope, methodDecl.annotations, originalMethod);
-+		}
-+	}
-+	return originalMethod.tagBits;
- }
-+
- /**
-  * @return the default value for this annotation method or <code>null</code> if there is no default value
-  */
- public Object getDefaultValue() {
--  MethodBinding originalMethod = this.original();
--  if ((originalMethod.tagBits & TagBits.DefaultValueResolved) == 0) {
--    //The method has not been resolved nor has its class been resolved.
--    //It can only be from a source type within compilation units to process.
--    if (originalMethod.declaringClass instanceof SourceTypeBinding) {
--      SourceTypeBinding sourceType = (SourceTypeBinding) originalMethod.declaringClass;
--      if (sourceType.scope != null) {
--        AbstractMethodDeclaration methodDeclaration = originalMethod.sourceMethod();
--        if (methodDeclaration != null && methodDeclaration.isAnnotationMethod()) {
--          methodDeclaration.resolve(sourceType.scope);
--        }
--      }
--    }
--    originalMethod.tagBits |= TagBits.DefaultValueResolved;
--  }
--  AnnotationHolder holder = originalMethod.declaringClass.retrieveAnnotationHolder(originalMethod, true);
--  return holder == null ? null : holder.getDefaultValue();
-+	MethodBinding originalMethod = original();
-+	if ((originalMethod.tagBits & TagBits.DefaultValueResolved) == 0) {
-+		//The method has not been resolved nor has its class been resolved.
-+		//It can only be from a source type within compilation units to process.
-+		if (originalMethod.declaringClass instanceof SourceTypeBinding) {
-+			SourceTypeBinding sourceType = (SourceTypeBinding) originalMethod.declaringClass;
-+			if (sourceType.scope != null) {
-+				AbstractMethodDeclaration methodDeclaration = originalMethod.sourceMethod();
-+				if (methodDeclaration != null && methodDeclaration.isAnnotationMethod()) {
-+					methodDeclaration.resolve(sourceType.scope);
-+				}
-+			}
-+		}
-+		originalMethod.tagBits |= TagBits.DefaultValueResolved;
-+	}
-+	AnnotationHolder holder = originalMethod.declaringClass.retrieveAnnotationHolder(originalMethod, true);
-+	return holder == null ? null : holder.getDefaultValue();
-+}
-+
-+/**
-+ * Return the highest method/constructor in supertype hierarchy with same selector and arguments
-+ */
-+public MethodBinding getHighestOverridenMethod(LookupEnvironment environment) {
-+	MethodBinding bestMethod = this;
-+    ReferenceBinding currentType = this.declaringClass;
-+    if (this.isConstructor()) {
-+    	// walk superclasses - only
-+    	do {
-+    		MethodBinding superMethod = currentType.getExactConstructor(this.parameters);
-+    		if (superMethod != null) {
-+    			bestMethod = superMethod;
-+    		}
-+    	} while ((currentType = currentType.superclass()) != null);
-+    	return bestMethod;
-+    }
-+    MethodVerifier verifier = environment.methodVerifier();
-+	// walk superclasses
-+	ReferenceBinding[] interfacesToVisit = null;
-+	int nextPosition = 0;
-+	do {
-+		MethodBinding[] superMethods = currentType.getMethods(this.selector);
-+		for (int i = 0, length = superMethods.length; i < length; i++) {
-+			if (verifier.doesMethodOverride(this, superMethods[i])) {
-+				bestMethod = superMethods[i];
-+				break;
-+			}
-+		}
-+		ReferenceBinding[] itsInterfaces = currentType.superInterfaces();
-+		if (itsInterfaces != null && itsInterfaces != Binding.NO_SUPERINTERFACES) {
-+			if (interfacesToVisit == null) {
-+				interfacesToVisit = itsInterfaces;
-+				nextPosition = interfacesToVisit.length;
-+			} else {
-+				int itsLength = itsInterfaces.length;
-+				if (nextPosition + itsLength >= interfacesToVisit.length)
-+					System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
-+				nextInterface : for (int a = 0; a < itsLength; a++) {
-+					ReferenceBinding next = itsInterfaces[a];
-+					for (int b = 0; b < nextPosition; b++)
-+						if (next == interfacesToVisit[b]) continue nextInterface;
-+					interfacesToVisit[nextPosition++] = next;
-+				}
-+			}
-+		}
-+	} while ((currentType = currentType.superclass()) != null);
-+	if (bestMethod.declaringClass.id == TypeIds.T_JavaLangObject) {
-+		return bestMethod;
-+	}
-+	// walk superinterfaces
-+	for (int i = 0; i < nextPosition; i++) {
-+		currentType = interfacesToVisit[i];
-+		MethodBinding[] superMethods = currentType.getMethods(this.selector);
-+		for (int j = 0, length = superMethods.length; j < length; j++) {
-+			MethodBinding superMethod = superMethods[j];
-+			if (verifier.doesMethodOverride(this, superMethod)) {
-+				TypeBinding bestReturnType = bestMethod.returnType;
-+				if (bestReturnType == superMethod.returnType
-+						|| bestMethod.returnType.findSuperTypeOriginatingFrom(superMethod.returnType) != null) {
-+					bestMethod = superMethod;
-+				}
-+				break;
-+			}
-+		}
-+		ReferenceBinding[] itsInterfaces = currentType.superInterfaces();
-+		if (itsInterfaces != null && itsInterfaces != Binding.NO_SUPERINTERFACES) {
-+			int itsLength = itsInterfaces.length;
-+			if (nextPosition + itsLength >= interfacesToVisit.length)
-+				System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
-+			nextInterface : for (int a = 0; a < itsLength; a++) {
-+				ReferenceBinding next = itsInterfaces[a];
-+				for (int b = 0; b < nextPosition; b++)
-+					if (next == interfacesToVisit[b]) continue nextInterface;
-+				interfacesToVisit[nextPosition++] = next;
-+			}
-+		}
-+	}
-+	return bestMethod;
- }
- 
- /**
-  * @return the annotations for each of the method parameters or <code>null></code>
-- *  if there's no parameter or no annotation at all.
-+ * 	if there's no parameter or no annotation at all.
-  */
- public AnnotationBinding[][] getParameterAnnotations() {
--  int length = this.parameters.length;
--  if (this.parameters == null || length == 0) {
--    return null;
--  }
--  MethodBinding originalMethod = this.original();
--  AnnotationHolder holder = originalMethod.declaringClass.retrieveAnnotationHolder(originalMethod, true);
--  AnnotationBinding[][] allParameterAnnotations = holder == null ? null : holder.getParameterAnnotations();
--  if (allParameterAnnotations == null && (this.tagBits & TagBits.HasParameterAnnotations) != 0) {
--    allParameterAnnotations = new AnnotationBinding[length][];
--    // forward reference to method, where param annotations have not yet been associated to method
--    if (this.declaringClass instanceof SourceTypeBinding) {
--      SourceTypeBinding sourceType = (SourceTypeBinding) this.declaringClass;
--      if (sourceType.scope != null) {
--        AbstractMethodDeclaration methodDecl = sourceType.scope.referenceType().declarationOf(this);
--        for (int i = 0; i < length; i++) {
--          Argument argument = methodDecl.arguments[i];
--          if (argument.annotations != null) {
--            ASTNode.resolveAnnotations(methodDecl.scope, argument.annotations, argument.binding);
--            allParameterAnnotations[i] = argument.binding.getAnnotations();
--          } else {
--            allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
--          }
--        }
--      } else {
--        for (int i = 0; i < length; i++) {
--          allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
--        }
--      }
--    } else {
--      for (int i = 0; i < length; i++) {
--        allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
--      }
--    }
--    this.setParameterAnnotations(allParameterAnnotations);
--  }
--  return allParameterAnnotations;
-+	int length;
-+	if ((length = this.parameters.length) == 0) {
-+		return null;
-+	}
-+	MethodBinding originalMethod = original();
-+	AnnotationHolder holder = originalMethod.declaringClass.retrieveAnnotationHolder(originalMethod, true);
-+	AnnotationBinding[][] allParameterAnnotations = holder == null ? null : holder.getParameterAnnotations();
-+	if (allParameterAnnotations == null && (this.tagBits & TagBits.HasParameterAnnotations) != 0) {
-+		allParameterAnnotations = new AnnotationBinding[length][];
-+		// forward reference to method, where param annotations have not yet been associated to method
-+		if (this.declaringClass instanceof SourceTypeBinding) {
-+			SourceTypeBinding sourceType = (SourceTypeBinding) this.declaringClass;
-+			if (sourceType.scope != null) {
-+				AbstractMethodDeclaration methodDecl = sourceType.scope.referenceType().declarationOf(this);
-+				for (int i = 0; i < length; i++) {
-+					Argument argument = methodDecl.arguments[i];
-+					if (argument.annotations != null) {
-+						ASTNode.resolveAnnotations(methodDecl.scope, argument.annotations, argument.binding);
-+						allParameterAnnotations[i] = argument.binding.getAnnotations();
-+					} else {
-+						allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
-+					}
-+				}
-+			} else {
-+				for (int i = 0; i < length; i++) {
-+					allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
-+				}
-+			}
-+		} else {
-+			for (int i = 0; i < length; i++) {
-+				allParameterAnnotations[i] = Binding.NO_ANNOTATIONS;
-+			}
-+		}
-+		setParameterAnnotations(allParameterAnnotations);
-+	}
-+	return allParameterAnnotations;
- }
-+
- public TypeVariableBinding getTypeVariable(char[] variableName) {
--  for (int i = this.typeVariables.length; --i >= 0;)
--    if (CharOperation.equals(this.typeVariables[i].sourceName, variableName))
--      return this.typeVariables[i];
--  return null;
-+	for (int i = this.typeVariables.length; --i >= 0;)
-+		if (CharOperation.equals(this.typeVariables[i].sourceName, variableName))
-+			return this.typeVariables[i];
-+	return null;
- }
-+
- /**
-  * Returns true if method got substituted parameter types
-  * (see ParameterizedMethodBinding)
-  */
- public boolean hasSubstitutedParameters() {
--  return false;
-+	return false;
- }
-+
- /* Answer true if the return type got substituted.
-  */
- public boolean hasSubstitutedReturnType() {
--  return false;
-+	return false;
- }
- 
- /* Answer true if the receiver is an abstract method
- */
- public final boolean isAbstract() {
--  return (modifiers & ClassFileConstants.AccAbstract) != 0;
-+	return (this.modifiers & ClassFileConstants.AccAbstract) != 0;
- }
- 
- /* Answer true if the receiver is a bridge method
- */
- public final boolean isBridge() {
--  return (modifiers & ClassFileConstants.AccBridge) != 0;
-+	return (this.modifiers & ClassFileConstants.AccBridge) != 0;
- }
- 
- /* Answer true if the receiver is a constructor
- */
- public final boolean isConstructor() {
--  return selector == TypeConstants.INIT;
-+	return this.selector == TypeConstants.INIT;
- }
- 
- /* Answer true if the receiver has default visibility
- */
- public final boolean isDefault() {
--  return !isPublic() && !isProtected() && !isPrivate();
-+	return !isPublic() && !isProtected() && !isPrivate();
- }
- 
- /* Answer true if the receiver is a system generated default abstract method
- */
- public final boolean isDefaultAbstract() {
--  return (modifiers & ExtraCompilerModifiers.AccDefaultAbstract) != 0;
-+	return (this.modifiers & ExtraCompilerModifiers.AccDefaultAbstract) != 0;
- }
- 
- /* Answer true if the receiver is a deprecated method
- */
- public final boolean isDeprecated() {
--  return (modifiers & ClassFileConstants.AccDeprecated) != 0;
-+	return (this.modifiers & ClassFileConstants.AccDeprecated) != 0;
- }
- 
- /* Answer true if the receiver is final and cannot be overridden
- */
- public final boolean isFinal() {
--  return (modifiers & ClassFileConstants.AccFinal) != 0;
-+	return (this.modifiers & ClassFileConstants.AccFinal) != 0;
- }
- 
- /* Answer true if the receiver is implementing another method
-@@ -612,98 +730,107 @@
-  * Only set for source methods
- */
- public final boolean isImplementing() {
--  return (modifiers & ExtraCompilerModifiers.AccImplementing) != 0;
-+	return (this.modifiers & ExtraCompilerModifiers.AccImplementing) != 0;
- }
- 
- /*
-  * Answer true if the receiver is a "public static void main(String[])" method
-  */
- public final boolean isMain() {
--  if (this.selector.length == 4 && CharOperation.equals(this.selector, TypeConstants.MAIN)
--      && ((this.modifiers & (ClassFileConstants.AccPublic | ClassFileConstants.AccStatic)) != 0)
--      && TypeBinding.VOID == this.returnType  
--      && this.parameters.length == 1) {
--    TypeBinding paramType = this.parameters[0];
--    if (paramType.dimensions() == 1 && paramType.leafComponentType().id == TypeIds.T_JavaLangString) {
--      return true;
--    }
--  }
--  return false;
-+	if (this.selector.length == 4 && CharOperation.equals(this.selector, TypeConstants.MAIN)
-+			&& ((this.modifiers & (ClassFileConstants.AccPublic | ClassFileConstants.AccStatic)) != 0)
-+			&& TypeBinding.VOID == this.returnType
-+			&& this.parameters.length == 1) {
-+		TypeBinding paramType = this.parameters[0];
-+		if (paramType.dimensions() == 1 && paramType.leafComponentType().id == TypeIds.T_JavaLangString) {
-+			return true;
-+		}
-+	}
-+	return false;
- }
- 
- /* Answer true if the receiver is a native method
- */
- public final boolean isNative() {
--  return (modifiers & ClassFileConstants.AccNative) != 0;
-+	return (this.modifiers & ClassFileConstants.AccNative) != 0;
- }
- 
- /* Answer true if the receiver is overriding another method
-  * Only set for source methods
- */
- public final boolean isOverriding() {
--  return (modifiers & ExtraCompilerModifiers.AccOverriding) != 0;
-+	return (this.modifiers & ExtraCompilerModifiers.AccOverriding) != 0;
- }
- /* Answer true if the receiver has private visibility
- */
- public final boolean isPrivate() {
--  return (modifiers & ClassFileConstants.AccPrivate) != 0;
-+	return (this.modifiers & ClassFileConstants.AccPrivate) != 0;
- }
-+
-+/* Answer true if the receiver has private visibility or if any of its enclosing types do.
-+*/
-+public final boolean isOrEnclosedByPrivateType() {
-+	if ((this.modifiers & ClassFileConstants.AccPrivate) != 0)
-+		return true;
-+	return this.declaringClass != null && this.declaringClass.isOrEnclosedByPrivateType();
-+}
-+
- /* Answer true if the receiver has protected visibility
- */
- public final boolean isProtected() {
--  return (modifiers & ClassFileConstants.AccProtected) != 0;
-+	return (this.modifiers & ClassFileConstants.AccProtected) != 0;
- }
- 
- /* Answer true if the receiver has public visibility
- */
- public final boolean isPublic() {
--  return (modifiers & ClassFileConstants.AccPublic) != 0;
-+	return (this.modifiers & ClassFileConstants.AccPublic) != 0;
- }
- 
- /* Answer true if the receiver is a static method
- */
- public final boolean isStatic() {
--  return (modifiers & ClassFileConstants.AccStatic) != 0;
-+	return (this.modifiers & ClassFileConstants.AccStatic) != 0;
- }
- 
- /* Answer true if all float operations must adher to IEEE 754 float/double rules
- */
- public final boolean isStrictfp() {
--  return (modifiers & ClassFileConstants.AccStrictfp) != 0;
-+	return (this.modifiers & ClassFileConstants.AccStrictfp) != 0;
- }
- 
- /* Answer true if the receiver is a synchronized method
- */
- public final boolean isSynchronized() {
--  return (modifiers & ClassFileConstants.AccSynchronized) != 0;
-+	return (this.modifiers & ClassFileConstants.AccSynchronized) != 0;
- }
- 
- /* Answer true if the receiver has public visibility
- */
- public final boolean isSynthetic() {
--  return (modifiers & ClassFileConstants.AccSynthetic) != 0;
-+	return (this.modifiers & ClassFileConstants.AccSynthetic) != 0;
- }
- 
- /* Answer true if the receiver has private visibility and is used locally
- */
- public final boolean isUsed() {
--  return (modifiers & ExtraCompilerModifiers.AccLocallyUsed) != 0;
-+	return (this.modifiers & ExtraCompilerModifiers.AccLocallyUsed) != 0;
- }
- 
- /* Answer true if the receiver method has varargs
- */
- public final boolean isVarargs() {
--  return (modifiers & ClassFileConstants.AccVarargs) != 0;
-+	return (this.modifiers & ClassFileConstants.AccVarargs) != 0;
- }
- 
- /* Answer true if the receiver's declaring type is deprecated (or any of its enclosing types)
- */
- public final boolean isViewedAsDeprecated() {
--  return (modifiers & (ClassFileConstants.AccDeprecated | ExtraCompilerModifiers.AccDeprecatedImplicitly)) != 0;
-+	return (this.modifiers & (ClassFileConstants.AccDeprecated | ExtraCompilerModifiers.AccDeprecatedImplicitly)) != 0;
- }
- 
- public final int kind() {
--  return Binding.METHOD;
-+	return Binding.METHOD;
- }
- /* Answer true if the receiver is visible to the invocationPackage.
- */
-@@ -712,76 +839,76 @@
-  * Returns the original method (as opposed to parameterized instances)
-  */
- public MethodBinding original() {
--  return this;
-+	return this;
- }
- 
- public char[] readableName() /* foo(int, Thread) */ {
--  StringBuffer buffer = new StringBuffer(parameters.length + 1 * 20);
--  if (isConstructor())
--    buffer.append(declaringClass.sourceName());
--  else
--    buffer.append(selector);
--  buffer.append('(');
--  if (parameters != Binding.NO_PARAMETERS) {
--    for (int i = 0, length = parameters.length; i < length; i++) {
--      if (i > 0)
--        buffer.append(", "); //$NON-NLS-1$
--      buffer.append(parameters[i].sourceName());
--    }
--  }
--  buffer.append(')');
--  return buffer.toString().toCharArray();
-+	StringBuffer buffer = new StringBuffer(this.parameters.length + 1 * 20);
-+	if (isConstructor())
-+		buffer.append(this.declaringClass.sourceName());
-+	else
-+		buffer.append(this.selector);
-+	buffer.append('(');
-+	if (this.parameters != Binding.NO_PARAMETERS) {
-+		for (int i = 0, length = this.parameters.length; i < length; i++) {
-+			if (i > 0)
-+				buffer.append(", "); //$NON-NLS-1$
-+			buffer.append(this.parameters[i].sourceName());
-+		}
-+	}
-+	buffer.append(')');
-+	return buffer.toString().toCharArray();
- }
- public void setAnnotations(AnnotationBinding[] annotations) {
--  this.declaringClass.storeAnnotations(this, annotations);
-+	this.declaringClass.storeAnnotations(this, annotations);
- }
--public void setAnnotations(AnnotationBinding[] annotations, AnnotationBinding[][] parameterAnnotations, Object defaultValue) {
--  this.declaringClass.storeAnnotationHolder(this,  AnnotationHolder.storeAnnotations(annotations, parameterAnnotations, defaultValue));
-+public void setAnnotations(AnnotationBinding[] annotations, AnnotationBinding[][] parameterAnnotations, Object defaultValue, LookupEnvironment optionalEnv) {
-+	this.declaringClass.storeAnnotationHolder(this,  AnnotationHolder.storeAnnotations(annotations, parameterAnnotations, defaultValue, optionalEnv));
- }
- public void setDefaultValue(Object defaultValue) {
--  MethodBinding originalMethod = this.original();
--  originalMethod.tagBits |= TagBits.DefaultValueResolved;
-+	MethodBinding originalMethod = original();
-+	originalMethod.tagBits |= TagBits.DefaultValueResolved;
- 
--  AnnotationHolder holder = this.declaringClass.retrieveAnnotationHolder(this, false);
--  if (holder == null)
--    setAnnotations(null, null, defaultValue);
--  else
--    setAnnotations(holder.getAnnotations(), holder.getParameterAnnotations(), defaultValue);
-+	AnnotationHolder holder = this.declaringClass.retrieveAnnotationHolder(this, false);
-+	if (holder == null)
-+		setAnnotations(null, null, defaultValue, null);
-+	else
-+		setAnnotations(holder.getAnnotations(), holder.getParameterAnnotations(), defaultValue, null);
- }
- public void setParameterAnnotations(AnnotationBinding[][] parameterAnnotations) {
--  AnnotationHolder holder = this.declaringClass.retrieveAnnotationHolder(this, false);
--  if (holder == null)
--    setAnnotations(null, parameterAnnotations, null);
--  else
--    setAnnotations(holder.getAnnotations(), parameterAnnotations, holder.getDefaultValue());
-+	AnnotationHolder holder = this.declaringClass.retrieveAnnotationHolder(this, false);
-+	if (holder == null)
-+		setAnnotations(null, parameterAnnotations, null, null);
-+	else
-+		setAnnotations(holder.getAnnotations(), parameterAnnotations, holder.getDefaultValue(), null);
- }
- protected final void setSelector(char[] selector) {
--  this.selector = selector;
--  this.signature = null;
-+	this.selector = selector;
-+	this.signature = null;
- }
- 
- /**
-  * @see org.eclipse.jdt.internal.compiler.lookup.Binding#shortReadableName()
-  */
- public char[] shortReadableName() {
--  StringBuffer buffer = new StringBuffer(parameters.length + 1 * 20);
--  if (isConstructor())
--    buffer.append(declaringClass.shortReadableName());
--  else
--    buffer.append(selector);
--  buffer.append('(');
--  if (parameters != Binding.NO_PARAMETERS) {
--    for (int i = 0, length = parameters.length; i < length; i++) {
--      if (i > 0)
--        buffer.append(", "); //$NON-NLS-1$
--      buffer.append(parameters[i].shortReadableName());
--    }
--  }
--  buffer.append(')');
--  int nameLength = buffer.length();
--  char[] shortReadableName = new char[nameLength];
--  buffer.getChars(0, nameLength, shortReadableName, 0);     
--  return shortReadableName;
-+	StringBuffer buffer = new StringBuffer(this.parameters.length + 1 * 20);
-+	if (isConstructor())
-+		buffer.append(this.declaringClass.shortReadableName());
-+	else
-+		buffer.append(this.selector);
-+	buffer.append('(');
-+	if (this.parameters != Binding.NO_PARAMETERS) {
-+		for (int i = 0, length = this.parameters.length; i < length; i++) {
-+			if (i > 0)
-+				buffer.append(", "); //$NON-NLS-1$
-+			buffer.append(this.parameters[i].shortReadableName());
-+		}
-+	}
-+	buffer.append(')');
-+	int nameLength = buffer.length();
-+	char[] shortReadableName = new char[nameLength];
-+	buffer.getChars(0, nameLength, shortReadableName, 0);
-+	return shortReadableName;
- }
- 
- /* Answer the receiver's signature.
-@@ -791,219 +918,219 @@
- * type changes, the cached state is invalid.
- */
- public final char[] signature() /* (ILjava/lang/Thread;)Ljava/lang/Object; */ {
--  if (signature != null)
--    return signature;
-+	if (this.signature != null)
-+		return this.signature;
- 
--  StringBuffer buffer = new StringBuffer(parameters.length + 1 * 20);
--  buffer.append('(');
--  
--  TypeBinding[] targetParameters = this.parameters;
--  boolean isConstructor = isConstructor();
--  if (isConstructor && declaringClass.isEnum()) { // insert String name,int ordinal 
--    buffer.append(ConstantPool.JavaLangStringSignature);
--    buffer.append(TypeBinding.INT.signature());
--  }
--  boolean needSynthetics = isConstructor && declaringClass.isNestedType();
--  if (needSynthetics) {
--    // take into account the synthetic argument type signatures as well
--    ReferenceBinding[] syntheticArgumentTypes = declaringClass.syntheticEnclosingInstanceTypes();
--    if (syntheticArgumentTypes != null) {
--      for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
--        buffer.append(syntheticArgumentTypes[i].signature());
--      }
--    }
--    
--    if (this instanceof SyntheticMethodBinding) {
--      targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
--    }
--  }
-+	StringBuffer buffer = new StringBuffer(this.parameters.length + 1 * 20);
-+	buffer.append('(');
- 
--  if (targetParameters != Binding.NO_PARAMETERS) {
--    for (int i = 0; i < targetParameters.length; i++) {
--      buffer.append(targetParameters[i].signature());
--    }
--  }
--  if (needSynthetics) {
--    SyntheticArgumentBinding[] syntheticOuterArguments = declaringClass.syntheticOuterLocalVariables();
--    int count = syntheticOuterArguments == null ? 0 : syntheticOuterArguments.length;
--    for (int i = 0; i < count; i++) {
--      buffer.append(syntheticOuterArguments[i].type.signature());
--    }
--    // move the extra padding arguments of the synthetic constructor invocation to the end    
--    for (int i = targetParameters.length, extraLength = parameters.length; i < extraLength; i++) {
--      buffer.append(parameters[i].signature());
--    }
--  }
--  buffer.append(')');
--  if (this.returnType != null)
--    buffer.append(this.returnType.signature());
--  int nameLength = buffer.length();
--  signature = new char[nameLength];
--  buffer.getChars(0, nameLength, signature, 0);     
--  
--  return signature;
-+	TypeBinding[] targetParameters = this.parameters;
-+	boolean isConstructor = isConstructor();
-+	if (isConstructor && this.declaringClass.isEnum()) { // insert String name,int ordinal
-+		buffer.append(ConstantPool.JavaLangStringSignature);
-+		buffer.append(TypeBinding.INT.signature());
-+	}
-+	boolean needSynthetics = isConstructor && this.declaringClass.isNestedType();
-+	if (needSynthetics) {
-+		// take into account the synthetic argument type signatures as well
-+		ReferenceBinding[] syntheticArgumentTypes = this.declaringClass.syntheticEnclosingInstanceTypes();
-+		if (syntheticArgumentTypes != null) {
-+			for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
-+				buffer.append(syntheticArgumentTypes[i].signature());
-+			}
-+		}
-+
-+		if (this instanceof SyntheticMethodBinding) {
-+			targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
-+		}
-+	}
-+
-+	if (targetParameters != Binding.NO_PARAMETERS) {
-+		for (int i = 0; i < targetParameters.length; i++) {
-+			buffer.append(targetParameters[i].signature());
-+		}
-+	}
-+	if (needSynthetics) {
-+		SyntheticArgumentBinding[] syntheticOuterArguments = this.declaringClass.syntheticOuterLocalVariables();
-+		int count = syntheticOuterArguments == null ? 0 : syntheticOuterArguments.length;
-+		for (int i = 0; i < count; i++) {
-+			buffer.append(syntheticOuterArguments[i].type.signature());
-+		}
-+		// move the extra padding arguments of the synthetic constructor invocation to the end
-+		for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) {
-+			buffer.append(this.parameters[i].signature());
-+		}
-+	}
-+	buffer.append(')');
-+	if (this.returnType != null)
-+		buffer.append(this.returnType.signature());
-+	int nameLength = buffer.length();
-+	this.signature = new char[nameLength];
-+	buffer.getChars(0, nameLength, this.signature, 0);
-+
-+	return this.signature;
- }
- /*
-  * This method is used to record references to nested types inside the method signature.
-  * This is the one that must be used during code generation.
-- * 
-+ *
-  * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=171184
-  */
- public final char[] signature(ClassFile classFile) {
--  if (signature != null) {
--    if ((this.tagBits & TagBits.ContainsNestedTypesInSignature) != 0) {
--      // we need to record inner classes references
--      boolean isConstructor = isConstructor();
--      TypeBinding[] targetParameters = this.parameters;
--      boolean needSynthetics = isConstructor && declaringClass.isNestedType();
--      if (needSynthetics) {
--        // take into account the synthetic argument type signatures as well
--        ReferenceBinding[] syntheticArgumentTypes = declaringClass.syntheticEnclosingInstanceTypes();
--        if (syntheticArgumentTypes != null) {
--          for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
--            ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i];
--            if (syntheticArgumentType.isNestedType()) {
--              classFile.recordInnerClasses(syntheticArgumentType);
--            }
--          }
--        }
--        if (this instanceof SyntheticMethodBinding) {
--          targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
--        }
--      }
--
--      if (targetParameters != Binding.NO_PARAMETERS) {
--        for (int i = 0; i < targetParameters.length; i++) {
--          TypeBinding targetParameter = targetParameters[i];
--          TypeBinding leafTargetParameterType = targetParameter.leafComponentType();
--          if (leafTargetParameterType.isNestedType()) {
--            classFile.recordInnerClasses(leafTargetParameterType);
--          }
--        }
--      }
--      if (needSynthetics) {
--        // move the extra padding arguments of the synthetic constructor invocation to the end    
--        for (int i = targetParameters.length, extraLength = parameters.length; i < extraLength; i++) {
--          TypeBinding parameter = parameters[i];
--          TypeBinding leafParameterType = parameter.leafComponentType();
--          if (leafParameterType.isNestedType()) {
--            classFile.recordInnerClasses(leafParameterType);
--          }
--        }
--      }
--      if (this.returnType != null) {
--        TypeBinding ret = this.returnType.leafComponentType();
--        if (ret.isNestedType()) {
--          classFile.recordInnerClasses(ret);
--        }
--      }
--    }
--    return signature;
--  }
--
--  StringBuffer buffer = new StringBuffer(parameters.length + 1 * 20);
--  buffer.append('(');
--  
--  TypeBinding[] targetParameters = this.parameters;
--  boolean isConstructor = isConstructor();
--  if (isConstructor && declaringClass.isEnum()) { // insert String name,int ordinal 
--    buffer.append(ConstantPool.JavaLangStringSignature);
--    buffer.append(TypeBinding.INT.signature());
--  }
--  boolean needSynthetics = isConstructor && declaringClass.isNestedType();
--  if (needSynthetics) {
--    // take into account the synthetic argument type signatures as well
--    ReferenceBinding[] syntheticArgumentTypes = declaringClass.syntheticEnclosingInstanceTypes();
--    if (syntheticArgumentTypes != null) {
--      for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
--        ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i];
--        if (syntheticArgumentType.isNestedType()) {
--          this.tagBits |= TagBits.ContainsNestedTypesInSignature;
--          classFile.recordInnerClasses(syntheticArgumentType);
--        }
--        buffer.append(syntheticArgumentType.signature());
--      }
--    }
--    
--    if (this instanceof SyntheticMethodBinding) {
--      targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
--    }
--  }
-+	if (this.signature != null) {
-+		if ((this.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+			// we need to record inner classes references
-+			boolean isConstructor = isConstructor();
-+			TypeBinding[] targetParameters = this.parameters;
-+			boolean needSynthetics = isConstructor && this.declaringClass.isNestedType();
-+			if (needSynthetics) {
-+				// take into account the synthetic argument type signatures as well
-+				ReferenceBinding[] syntheticArgumentTypes = this.declaringClass.syntheticEnclosingInstanceTypes();
-+				if (syntheticArgumentTypes != null) {
-+					for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
-+						ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i];
-+						if ((syntheticArgumentType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+							Util.recordNestedType(classFile, syntheticArgumentType);
-+						}
-+					}
-+				}
-+				if (this instanceof SyntheticMethodBinding) {
-+					targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
-+				}
-+			}
-+
-+			if (targetParameters != Binding.NO_PARAMETERS) {
-+				for (int i = 0, max = targetParameters.length; i < max; i++) {
-+					TypeBinding targetParameter = targetParameters[i];
-+					TypeBinding leafTargetParameterType = targetParameter.leafComponentType();
-+					if ((leafTargetParameterType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+						Util.recordNestedType(classFile, leafTargetParameterType);
-+					}
-+				}
-+			}
-+			if (needSynthetics) {
-+				// move the extra padding arguments of the synthetic constructor invocation to the end
-+				for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) {
-+					TypeBinding parameter = this.parameters[i];
-+					TypeBinding leafParameterType = parameter.leafComponentType();
-+					if ((leafParameterType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+						Util.recordNestedType(classFile, leafParameterType);
-+					}
-+				}
-+			}
-+			if (this.returnType != null) {
-+				TypeBinding ret = this.returnType.leafComponentType();
-+				if ((ret.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+					Util.recordNestedType(classFile, ret);
-+				}
-+			}
-+		}
-+		return this.signature;
-+	}
-+
-+	StringBuffer buffer = new StringBuffer(this.parameters.length + 1 * 20);
-+	buffer.append('(');
-+
-+	TypeBinding[] targetParameters = this.parameters;
-+	boolean isConstructor = isConstructor();
-+	if (isConstructor && this.declaringClass.isEnum()) { // insert String name,int ordinal
-+		buffer.append(ConstantPool.JavaLangStringSignature);
-+		buffer.append(TypeBinding.INT.signature());
-+	}
-+	boolean needSynthetics = isConstructor && this.declaringClass.isNestedType();
-+	if (needSynthetics) {
-+		// take into account the synthetic argument type signatures as well
-+		ReferenceBinding[] syntheticArgumentTypes = this.declaringClass.syntheticEnclosingInstanceTypes();
-+		if (syntheticArgumentTypes != null) {
-+			for (int i = 0, count = syntheticArgumentTypes.length; i < count; i++) {
-+				ReferenceBinding syntheticArgumentType = syntheticArgumentTypes[i];
-+				if ((syntheticArgumentType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+					this.tagBits |= TagBits.ContainsNestedTypeReferences;
-+					Util.recordNestedType(classFile, syntheticArgumentType);
-+				}
-+				buffer.append(syntheticArgumentType.signature());
-+			}
-+		}
-+
-+		if (this instanceof SyntheticMethodBinding) {
-+			targetParameters = ((SyntheticMethodBinding)this).targetMethod.parameters;
-+		}
-+	}
-+
-+	if (targetParameters != Binding.NO_PARAMETERS) {
-+		for (int i = 0, max = targetParameters.length; i < max; i++) {
-+			TypeBinding targetParameter = targetParameters[i];
-+			TypeBinding leafTargetParameterType = targetParameter.leafComponentType();
-+			if ((leafTargetParameterType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+				this.tagBits |= TagBits.ContainsNestedTypeReferences;
-+				Util.recordNestedType(classFile, leafTargetParameterType);
-+			}
-+			buffer.append(targetParameter.signature());
-+		}
-+	}
-+	if (needSynthetics) {
-+		SyntheticArgumentBinding[] syntheticOuterArguments = this.declaringClass.syntheticOuterLocalVariables();
-+		int count = syntheticOuterArguments == null ? 0 : syntheticOuterArguments.length;
-+		for (int i = 0; i < count; i++) {
-+			buffer.append(syntheticOuterArguments[i].type.signature());
-+		}
-+		// move the extra padding arguments of the synthetic constructor invocation to the end
-+		for (int i = targetParameters.length, extraLength = this.parameters.length; i < extraLength; i++) {
-+			TypeBinding parameter = this.parameters[i];
-+			TypeBinding leafParameterType = parameter.leafComponentType();
-+			if ((leafParameterType.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+				this.tagBits |= TagBits.ContainsNestedTypeReferences;
-+				Util.recordNestedType(classFile, leafParameterType);
-+			}
-+			buffer.append(parameter.signature());
-+		}
-+	}
-+	buffer.append(')');
-+	if (this.returnType != null) {
-+		TypeBinding ret = this.returnType.leafComponentType();
-+		if ((ret.tagBits & TagBits.ContainsNestedTypeReferences) != 0) {
-+			this.tagBits |= TagBits.ContainsNestedTypeReferences;
-+			Util.recordNestedType(classFile, ret);
-+		}
-+		buffer.append(this.returnType.signature());
-+	}
-+	int nameLength = buffer.length();
-+	this.signature = new char[nameLength];
-+	buffer.getChars(0, nameLength, this.signature, 0);
- 
--  if (targetParameters != Binding.NO_PARAMETERS) {
--    for (int i = 0; i < targetParameters.length; i++) {
--      TypeBinding targetParameter = targetParameters[i];
--      TypeBinding leafTargetParameterType = targetParameter.leafComponentType();
--      if (leafTargetParameterType.isNestedType()) {
--        this.tagBits |= TagBits.ContainsNestedTypesInSignature;
--        classFile.recordInnerClasses(leafTargetParameterType);
--      }
--      buffer.append(targetParameter.signature());
--    }
--  }
--  if (needSynthetics) {
--    SyntheticArgumentBinding[] syntheticOuterArguments = declaringClass.syntheticOuterLocalVariables();
--    int count = syntheticOuterArguments == null ? 0 : syntheticOuterArguments.length;
--    for (int i = 0; i < count; i++) {
--      buffer.append(syntheticOuterArguments[i].type.signature());
--    }
--    // move the extra padding arguments of the synthetic constructor invocation to the end    
--    for (int i = targetParameters.length, extraLength = parameters.length; i < extraLength; i++) {
--      TypeBinding parameter = parameters[i];
--      TypeBinding leafParameterType = parameter.leafComponentType();
--      if (leafParameterType.isNestedType()) {
--        this.tagBits |= TagBits.ContainsNestedTypesInSignature;
--        classFile.recordInnerClasses(leafParameterType);
--      }
--      buffer.append(parameter.signature());
--    }
--  }
--  buffer.append(')');
--  if (this.returnType != null) {
--    TypeBinding ret = this.returnType.leafComponentType();
--    if (ret.isNestedType()) {
--      this.tagBits |= TagBits.ContainsNestedTypesInSignature;
--      classFile.recordInnerClasses(ret);
--    }
--    buffer.append(this.returnType.signature());
--  }
--  int nameLength = buffer.length();
--  signature = new char[nameLength];
--  buffer.getChars(0, nameLength, signature, 0);
--  
--  return signature;
-+	return this.signature;
- }
- public final int sourceEnd() {
--  AbstractMethodDeclaration method = sourceMethod();
--  if (method == null) {
--    if (this.declaringClass instanceof SourceTypeBinding)
--      return ((SourceTypeBinding) this.declaringClass).sourceEnd();
--    return 0;
--  }
--  return method.sourceEnd;
-+	AbstractMethodDeclaration method = sourceMethod();
-+	if (method == null) {
-+		if (this.declaringClass instanceof SourceTypeBinding)
-+			return ((SourceTypeBinding) this.declaringClass).sourceEnd();
-+		return 0;
-+	}
-+	return method.sourceEnd;
- }
- public AbstractMethodDeclaration sourceMethod() {
--  SourceTypeBinding sourceType;
--  try {
--    sourceType = (SourceTypeBinding) declaringClass;
--  } catch (ClassCastException e) {
--    return null;    
--  }
--
--  AbstractMethodDeclaration[] methods = sourceType.scope.referenceContext.methods;
--  for (int i = methods.length; --i >= 0;)
--    if (this == methods[i].binding)
--      return methods[i];
--  return null;    
-+	SourceTypeBinding sourceType;
-+	try {
-+		sourceType = (SourceTypeBinding) this.declaringClass;
-+	} catch (ClassCastException e) {
-+		return null;
-+	}
-+
-+	AbstractMethodDeclaration[] methods = sourceType.scope.referenceContext.methods;
-+	for (int i = methods.length; --i >= 0;)
-+		if (this == methods[i].binding)
-+			return methods[i];
-+	return null;
- }
- public final int sourceStart() {
--  AbstractMethodDeclaration method = sourceMethod();
--  if (method == null) {
--    if (this.declaringClass instanceof SourceTypeBinding)
--      return ((SourceTypeBinding) this.declaringClass).sourceStart();
--    return 0;
--  }
--  return method.sourceStart;
-+	AbstractMethodDeclaration method = sourceMethod();
-+	if (method == null) {
-+		if (this.declaringClass instanceof SourceTypeBinding)
-+			return ((SourceTypeBinding) this.declaringClass).sourceStart();
-+		return 0;
-+	}
-+	return method.sourceStart;
- }
- 
- /**
-@@ -1011,46 +1138,46 @@
-  * For generic method invocations, tiebreak needs to use generic method with erasure substitutes.
-  */
- public MethodBinding tiebreakMethod() {
--  return this;
-+	return this;
- }
- public String toString() {
--  StringBuffer output = new StringBuffer(10);
--  if ((this.modifiers & ExtraCompilerModifiers.AccUnresolved) != 0) {
--    output.append("[unresolved] "); //$NON-NLS-1$
--  }
--  ASTNode.printModifiers(this.modifiers, output);
--  output.append(returnType != null ? returnType.debugName() : "<no type>"); //$NON-NLS-1$
--  output.append(" "); //$NON-NLS-1$
--  output.append(selector != null ? new String(selector) : "<no selector>"); //$NON-NLS-1$
--  output.append("("); //$NON-NLS-1$
--  if (parameters != null) {
--    if (parameters != Binding.NO_PARAMETERS) {
--      for (int i = 0, length = parameters.length; i < length; i++) {
--        if (i  > 0)
--          output.append(", "); //$NON-NLS-1$
--        output.append(parameters[i] != null ? parameters[i].debugName() : "<no argument type>"); //$NON-NLS-1$
--      }
--    }
--  } else {
--    output.append("<no argument types>"); //$NON-NLS-1$
--  }
--  output.append(") "); //$NON-NLS-1$
--
--  if (thrownExceptions != null) {
--    if (thrownExceptions != Binding.NO_EXCEPTIONS) {
--      output.append("throws "); //$NON-NLS-1$
--      for (int i = 0, length = thrownExceptions.length; i < length; i++) {
--        if (i  > 0)
--          output.append(", "); //$NON-NLS-1$
--        output.append((thrownExceptions[i] != null) ? thrownExceptions[i].debugName() : "<no exception type>"); //$NON-NLS-1$
--      }
--    }
--  } else {
--    output.append("<no exception types>"); //$NON-NLS-1$
--  }
--  return output.toString();
-+	StringBuffer output = new StringBuffer(10);
-+	if ((this.modifiers & ExtraCompilerModifiers.AccUnresolved) != 0) {
-+		output.append("[unresolved] "); //$NON-NLS-1$
-+	}
-+	ASTNode.printModifiers(this.modifiers, output);
-+	output.append(this.returnType != null ? this.returnType.debugName() : "<no type>"); //$NON-NLS-1$
-+	output.append(" "); //$NON-NLS-1$
-+	output.append(this.selector != null ? new String(this.selector) : "<no selector>"); //$NON-NLS-1$
-+	output.append("("); //$NON-NLS-1$
-+	if (this.parameters != null) {
-+		if (this.parameters != Binding.NO_PARAMETERS) {
-+			for (int i = 0, length = this.parameters.length; i < length; i++) {
-+				if (i  > 0)
-+					output.append(", "); //$NON-NLS-1$
-+				output.append(this.parameters[i] != null ? this.parameters[i].debugName() : "<no argument type>"); //$NON-NLS-1$
-+			}
-+		}
-+	} else {
-+		output.append("<no argument types>"); //$NON-NLS-1$
-+	}
-+	output.append(") "); //$NON-NLS-1$
-+
-+	if (this.thrownExceptions != null) {
-+		if (this.thrownExceptions != Binding.NO_EXCEPTIONS) {
-+			output.append("throws "); //$NON-NLS-1$
-+			for (int i = 0, length = this.thrownExceptions.length; i < length; i++) {
-+				if (i  > 0)
-+					output.append(", "); //$NON-NLS-1$
-+				output.append((this.thrownExceptions[i] != null) ? this.thrownExceptions[i].debugName() : "<no exception type>"); //$NON-NLS-1$
-+			}
-+		}
-+	} else {
-+		output.append("<no exception types>"); //$NON-NLS-1$
-+	}
-+	return output.toString();
- }
- public TypeVariableBinding[] typeVariables() {
--  return this.typeVariables;
-+	return this.typeVariables;
- }
- }
-Index: gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
-===================================================================
---- gwt-debian.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java	2011-12-21 11:43:29.209247312 +0100
-+++ gwt-debian/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java	2011-12-21 11:44:39.325245355 +0100
-@@ -1,5 +1,5 @@
- /*******************************************************************************
-- * Copyright (c) 2000, 2008 IBM Corporation and others.
-+ * Copyright (c) 2000, 2009 IBM Corporation and others.
-  * All rights reserved. This program and the accompanying materials
-  * are made available under the terms of the Eclipse Public License v1.0
-  * which accompanies this distribution, and is available at
-@@ -10,7 +10,7 @@
-  *******************************************************************************/
- package org.eclipse.jdt.internal.compiler.lookup;
- 
--import com.google.gwt.dev.util.collect.HashMap;
-+import java.util.Iterator;
- 
- import org.eclipse.jdt.core.compiler.CharOperation;
- import org.eclipse.jdt.internal.compiler.ast.ASTNode;
-@@ -27,626 +27,624 @@
+Description: Minor fix to build with JDT 3.7
+Author: Brian Thomason <brian.thomason at eucalyptus.com>
+Bug-Debian: http://bugs.debian.org/624205
+Bug-Debian: http://bugs.debian.org/629733
+
+--- gwt-2.4.0.orig/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
++++ gwt-2.4.0/dev/core/src/org/eclipse/jdt/internal/compiler/lookup/SourceTypeBinding.java
+@@ -26,6 +26,7 @@ import org.eclipse.jdt.internal.compiler
+ import org.eclipse.jdt.internal.compiler.impl.Constant;
  import org.eclipse.jdt.internal.compiler.util.SimpleLookupTable;
  import org.eclipse.jdt.internal.compiler.util.Util;
++import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
  
--import java.util.Hashtable;
--import java.util.Iterator;
-+import com.google.gwt.dev.util.collect.HashMap;
- 
- public class SourceTypeBinding extends ReferenceBinding {
--  public ReferenceBinding superclass;
--  public ReferenceBinding[] superInterfaces;
--  private FieldBinding[] fields;
--  private MethodBinding[] methods;
--  public ReferenceBinding[] memberTypes;
--  public TypeVariableBinding[] typeVariables;
--
--  public ClassScope scope;
--
--  // Synthetics are separated into 5 categories: methods, super methods, fields, class literals, changed declaring type bindings and bridge methods
--  // if a new category is added, also increment MAX_SYNTHETICS
--  private final static int METHOD_EMUL = 0;
--  private final static int FIELD_EMUL = 1;
--  private final static int CLASS_LITERAL_EMUL = 2;
--  private final static int RECEIVER_TYPE_EMUL = 3;
--  
--  private final static int MAX_SYNTHETICS = 4;
-+	public ReferenceBinding superclass;
-+	public ReferenceBinding[] superInterfaces;
-+	private FieldBinding[] fields;
-+	private MethodBinding[] methods;
-+	public ReferenceBinding[] memberTypes;
-+	public TypeVariableBinding[] typeVariables;
-+
-+	public ClassScope scope;
-+
-+	// Synthetics are separated into 4 categories: methods, super methods, fields, class literals and bridge methods
-+	// if a new category is added, also increment MAX_SYNTHETICS
-+	private final static int METHOD_EMUL = 0;
-+	private final static int FIELD_EMUL = 1;
-+	private final static int CLASS_LITERAL_EMUL = 2;
-+
-+	private final static int MAX_SYNTHETICS = 3;
- 
--  HashMap[] synthetics;
--  char[] genericReferenceTypeSignature;
-+	HashMap[] synthetics;
-+	char[] genericReferenceTypeSignature;
- 
--  private SimpleLookupTable storedAnnotations = null; // keys are this ReferenceBinding & its fields and methods, value is an AnnotationHolder
-+	private SimpleLookupTable storedAnnotations = null; // keys are this ReferenceBinding & its fields and methods, value is an AnnotationHolder
- 
- public SourceTypeBinding(char[][] compoundName, PackageBinding fPackage, ClassScope scope) {
--  this.compoundName = compoundName;
--  this.fPackage = fPackage;
--  this.fileName = scope.referenceCompilationUnit().getFileName();
--  this.modifiers = scope.referenceContext.modifiers;
--  this.sourceName = scope.referenceContext.name;
--  this.scope = scope;
--
--  // expect the fields & methods to be initialized correctly later
--  this.fields = Binding.UNINITIALIZED_FIELDS;
--  this.methods = Binding.UNINITIALIZED_METHODS;
-+	this.compoundName = compoundName;
-+	this.fPackage = fPackage;
-+	this.fileName = scope.referenceCompilationUnit().getFileName();
-+	this.modifiers = scope.referenceContext.modifiers;
-+	this.sourceName = scope.referenceContext.name;
-+	this.scope = scope;
-+
-+	// expect the fields & methods to be initialized correctly later
-+	this.fields = Binding.UNINITIALIZED_FIELDS;
-+	this.methods = Binding.UNINITIALIZED_METHODS;
- 
--  computeId();
-+	computeId();
- }
- 
- private void addDefaultAbstractMethods() {
--  if ((this.tagBits & TagBits.KnowsDefaultAbstractMethods) != 0) return;
-+	if ((this.tagBits & TagBits.KnowsDefaultAbstractMethods) != 0) return;
- 
--  this.tagBits |= TagBits.KnowsDefaultAbstractMethods;
--  if (isClass() && isAbstract()) {
--    if (this.scope.compilerOptions().targetJDK >= ClassFileConstants.JDK1_2)
--      return; // no longer added for post 1.2 targets
--
--    ReferenceBinding[] itsInterfaces = superInterfaces();
--    if (itsInterfaces != Binding.NO_SUPERINTERFACES) {
--      MethodBinding[] defaultAbstracts = null;
--      int defaultAbstractsCount = 0;
--      ReferenceBinding[] interfacesToVisit = itsInterfaces;
--      int nextPosition = interfacesToVisit.length;
--      for (int i = 0; i < nextPosition; i++) {
--        ReferenceBinding superType = interfacesToVisit[i];
--        if (superType.isValidBinding()) {
--          MethodBinding[] superMethods = superType.methods();
--          nextAbstractMethod: for (int m = superMethods.length; --m >= 0;) {
--            MethodBinding method = superMethods[m];
--            // explicitly implemented ?
--            if (implementsMethod(method))
--              continue nextAbstractMethod;
--            if (defaultAbstractsCount == 0) {
--              defaultAbstracts = new MethodBinding[5];
--            } else {
--              // already added as default abstract ?
--              for (int k = 0; k < defaultAbstractsCount; k++) {
--                MethodBinding alreadyAdded = defaultAbstracts[k];
--                if (CharOperation.equals(alreadyAdded.selector, method.selector) && alreadyAdded.areParametersEqual(method))
--                  continue nextAbstractMethod;
--              }
--            }
--            MethodBinding defaultAbstract = new MethodBinding(
--                method.modifiers | ExtraCompilerModifiers.AccDefaultAbstract | ClassFileConstants.AccSynthetic,
--                method.selector,
--                method.returnType,
--                method.parameters,
--                method.thrownExceptions,
--                this);
--            if (defaultAbstractsCount == defaultAbstracts.length)
--              System.arraycopy(defaultAbstracts, 0, defaultAbstracts = new MethodBinding[2 * defaultAbstractsCount], 0, defaultAbstractsCount);
--            defaultAbstracts[defaultAbstractsCount++] = defaultAbstract;
--          }
--
--          if ((itsInterfaces = superType.superInterfaces()) != Binding.NO_SUPERINTERFACES) {
--            int itsLength = itsInterfaces.length;
--            if (nextPosition + itsLength >= interfacesToVisit.length)
--              System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
--            nextInterface : for (int a = 0; a < itsLength; a++) {
--              ReferenceBinding next = itsInterfaces[a];
--              for (int b = 0; b < nextPosition; b++)
--                if (next == interfacesToVisit[b]) continue nextInterface;
--              interfacesToVisit[nextPosition++] = next;
--            }
--          }
--        }
--      }
--      if (defaultAbstractsCount > 0) {
--        int length = this.methods.length;
--        System.arraycopy(this.methods, 0, this.methods = new MethodBinding[length + defaultAbstractsCount], 0, length);
--        System.arraycopy(defaultAbstracts, 0, this.methods, length, defaultAbstractsCount);
--        // re-sort methods
--        length = length + defaultAbstractsCount;
--        if (length > 1)
--          ReferenceBinding.sortMethods(this.methods, 0, length);
--        // this.tagBits |= TagBits.AreMethodsSorted; -- already set in #methods()
--      }
--    }
--  }
-+	this.tagBits |= TagBits.KnowsDefaultAbstractMethods;
-+	if (isClass() && isAbstract()) {
-+		if (this.scope.compilerOptions().targetJDK >= ClassFileConstants.JDK1_2)
-+			return; // no longer added for post 1.2 targets
-+
-+		ReferenceBinding[] itsInterfaces = superInterfaces();
-+		if (itsInterfaces != Binding.NO_SUPERINTERFACES) {
-+			MethodBinding[] defaultAbstracts = null;
-+			int defaultAbstractsCount = 0;
-+			ReferenceBinding[] interfacesToVisit = itsInterfaces;
-+			int nextPosition = interfacesToVisit.length;
-+			for (int i = 0; i < nextPosition; i++) {
-+				ReferenceBinding superType = interfacesToVisit[i];
-+				if (superType.isValidBinding()) {
-+					MethodBinding[] superMethods = superType.methods();
-+					nextAbstractMethod: for (int m = superMethods.length; --m >= 0;) {
-+						MethodBinding method = superMethods[m];
-+						// explicitly implemented ?
-+						if (implementsMethod(method))
-+							continue nextAbstractMethod;
-+						if (defaultAbstractsCount == 0) {
-+							defaultAbstracts = new MethodBinding[5];
-+						} else {
-+							// already added as default abstract ?
-+							for (int k = 0; k < defaultAbstractsCount; k++) {
-+								MethodBinding alreadyAdded = defaultAbstracts[k];
-+								if (CharOperation.equals(alreadyAdded.selector, method.selector) && alreadyAdded.areParametersEqual(method))
-+									continue nextAbstractMethod;
-+							}
-+						}
-+						MethodBinding defaultAbstract = new MethodBinding(
-+								method.modifiers | ExtraCompilerModifiers.AccDefaultAbstract | ClassFileConstants.AccSynthetic,
-+								method.selector,
-+								method.returnType,
-+								method.parameters,
-+								method.thrownExceptions,
-+								this);
-+						if (defaultAbstractsCount == defaultAbstracts.length)
-+							System.arraycopy(defaultAbstracts, 0, defaultAbstracts = new MethodBinding[2 * defaultAbstractsCount], 0, defaultAbstractsCount);
-+						defaultAbstracts[defaultAbstractsCount++] = defaultAbstract;
-+					}
-+
-+					if ((itsInterfaces = superType.superInterfaces()) != Binding.NO_SUPERINTERFACES) {
-+						int itsLength = itsInterfaces.length;
-+						if (nextPosition + itsLength >= interfacesToVisit.length)
-+							System.arraycopy(interfacesToVisit, 0, interfacesToVisit = new ReferenceBinding[nextPosition + itsLength + 5], 0, nextPosition);
-+						nextInterface : for (int a = 0; a < itsLength; a++) {
-+							ReferenceBinding next = itsInterfaces[a];
-+							for (int b = 0; b < nextPosition; b++)
-+								if (next == interfacesToVisit[b]) continue nextInterface;
-+							interfacesToVisit[nextPosition++] = next;
-+						}
-+					}
-+				}
-+			}
-+			if (defaultAbstractsCount > 0) {
-+				int length = this.methods.length;
-+				System.arraycopy(this.methods, 0, this.methods = new MethodBinding[length + defaultAbstractsCount], 0, length);
-+				System.arraycopy(defaultAbstracts, 0, this.methods, length, defaultAbstractsCount);
-+				// re-sort methods
-+				length = length + defaultAbstractsCount;
-+				if (length > 1)
-+					ReferenceBinding.sortMethods(this.methods, 0, length);
-+				// this.tagBits |= TagBits.AreMethodsSorted; -- already set in #methods()
-+			}
-+		}
-+	}
- }
- /* Add a new synthetic field for <actualOuterLocalVariable>.
--* Answer the new field or the existing field if one already existed.
-+*	Answer the new field or the existing field if one already existed.
- */
- public FieldBinding addSyntheticFieldForInnerclass(LocalVariableBinding actualOuterLocalVariable) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
--    this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
--  
--  FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(actualOuterLocalVariable);
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      CharOperation.concat(TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX, actualOuterLocalVariable.name), 
--      actualOuterLocalVariable.type, 
--      ClassFileConstants.AccPrivate | ClassFileConstants.AccFinal | ClassFileConstants.AccSynthetic, 
--      this, 
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
--    this.synthetics[SourceTypeBinding.FIELD_EMUL].put(actualOuterLocalVariable, synthField);
--  }
--
--  // ensure there is not already such a field defined by the user
--  boolean needRecheck;
--  int index = 1;
--  do {
--    needRecheck = false;
--    FieldBinding existingField;
--    if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--      TypeDeclaration typeDecl = this.scope.referenceContext;
--      for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--        FieldDeclaration fieldDecl = typeDecl.fields[i];
--        if (fieldDecl.binding == existingField) {
--          synthField.name = CharOperation.concat(
--            TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX,
--            actualOuterLocalVariable.name,
--            ("$" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
--          needRecheck = true;
--          break;
--        }
--      }
--    }
--  } while (needRecheck);
--  return synthField;
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
-+
-+	FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(actualOuterLocalVariable);
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			CharOperation.concat(TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX, actualOuterLocalVariable.name),
-+			actualOuterLocalVariable.type,
-+			ClassFileConstants.AccPrivate | ClassFileConstants.AccFinal | ClassFileConstants.AccSynthetic,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL].put(actualOuterLocalVariable, synthField);
-+	}
-+
-+	// ensure there is not already such a field defined by the user
-+	boolean needRecheck;
-+	int index = 1;
-+	do {
-+		needRecheck = false;
-+		FieldBinding existingField;
-+		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+			TypeDeclaration typeDecl = this.scope.referenceContext;
-+			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+				FieldDeclaration fieldDecl = typeDecl.fields[i];
-+				if (fieldDecl.binding == existingField) {
-+					synthField.name = CharOperation.concat(
-+						TypeConstants.SYNTHETIC_OUTER_LOCAL_PREFIX,
-+						actualOuterLocalVariable.name,
-+						("$" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
-+					needRecheck = true;
-+					break;
-+				}
-+			}
-+		}
-+	} while (needRecheck);
-+	return synthField;
- }
- /* Add a new synthetic field for <enclosingType>.
--* Answer the new field or the existing field if one already existed.
-+*	Answer the new field or the existing field if one already existed.
- */
- public FieldBinding addSyntheticFieldForInnerclass(ReferenceBinding enclosingType) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
- 
--  FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(enclosingType);
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      CharOperation.concat(
--        TypeConstants.SYNTHETIC_ENCLOSING_INSTANCE_PREFIX,
--        String.valueOf(enclosingType.depth()).toCharArray()),
--      enclosingType,
--      ClassFileConstants.AccDefault | ClassFileConstants.AccFinal | ClassFileConstants.AccSynthetic,
--      this,
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
--    this.synthetics[SourceTypeBinding.FIELD_EMUL].put(enclosingType, synthField);
--  }
--  // ensure there is not already such a field defined by the user
--  boolean needRecheck;
--  do {
--    needRecheck = false;
--    FieldBinding existingField;
--    if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--      TypeDeclaration typeDecl = this.scope.referenceContext;
--      for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--        FieldDeclaration fieldDecl = typeDecl.fields[i];
--        if (fieldDecl.binding == existingField) {
--          if (this.scope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_5) {
--            synthField.name = CharOperation.concat(
--              synthField.name,
--              "$".toCharArray()); //$NON-NLS-1$
--            needRecheck = true;
--          } else {
--            this.scope.problemReporter().duplicateFieldInType(this, fieldDecl);
--          }
--          break;
--        }
--      }
--    }
--  } while (needRecheck);
--  return synthField;
-+	FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(enclosingType);
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			CharOperation.concat(
-+				TypeConstants.SYNTHETIC_ENCLOSING_INSTANCE_PREFIX,
-+				String.valueOf(enclosingType.depth()).toCharArray()),
-+			enclosingType,
-+			ClassFileConstants.AccDefault | ClassFileConstants.AccFinal | ClassFileConstants.AccSynthetic,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL].put(enclosingType, synthField);
-+	}
-+	// ensure there is not already such a field defined by the user
-+	boolean needRecheck;
-+	do {
-+		needRecheck = false;
-+		FieldBinding existingField;
-+		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+			TypeDeclaration typeDecl = this.scope.referenceContext;
-+			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+				FieldDeclaration fieldDecl = typeDecl.fields[i];
-+				if (fieldDecl.binding == existingField) {
-+					if (this.scope.compilerOptions().complianceLevel >= ClassFileConstants.JDK1_5) {
-+						synthField.name = CharOperation.concat(
-+							synthField.name,
-+							"$".toCharArray()); //$NON-NLS-1$
-+						needRecheck = true;
-+					} else {
-+						this.scope.problemReporter().duplicateFieldInType(this, fieldDecl);
-+					}
-+					break;
-+				}
-+			}
-+		}
-+	} while (needRecheck);
-+	return synthField;
- }
- /* Add a new synthetic field for a class literal access.
--* Answer the new field or the existing field if one already existed.
-+*	Answer the new field or the existing field if one already existed.
- */
- public FieldBinding addSyntheticFieldForClassLiteral(TypeBinding targetType, BlockScope blockScope) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] == null)
-     this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] = new HashMap();
- 
--  // use a different table than FIELDS, given there might be a collision between emulation of X.this$0 and X.class.
--  FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].get(targetType);
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      CharOperation.concat(
--        TypeConstants.SYNTHETIC_CLASS,
--        String.valueOf(this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size()).toCharArray()),
--      blockScope.getJavaLangClass(),
--      ClassFileConstants.AccDefault | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic,
--      this,
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size());
--    this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].put(targetType, synthField);
--  }
--  // ensure there is not already such a field defined by the user
--  FieldBinding existingField;
--  if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--    TypeDeclaration typeDecl = blockScope.referenceType();
--    for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--      FieldDeclaration fieldDecl = typeDecl.fields[i];
--      if (fieldDecl.binding == existingField) {
--        blockScope.problemReporter().duplicateFieldInType(this, fieldDecl);
--        break;
--      }
--    }
--  }   
--  return synthField;
-+	// use a different table than FIELDS, given there might be a collision between emulation of X.this$0 and X.class.
-+	FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].get(targetType);
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			CharOperation.concat(
-+				TypeConstants.SYNTHETIC_CLASS,
-+				String.valueOf(this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size()).toCharArray()),
-+			blockScope.getJavaLangClass(),
-+			ClassFileConstants.AccDefault | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size());
-+		this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].put(targetType, synthField);
-+	}
-+	// ensure there is not already such a field defined by the user
-+	FieldBinding existingField;
-+	if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+		TypeDeclaration typeDecl = blockScope.referenceType();
-+		for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+			FieldDeclaration fieldDecl = typeDecl.fields[i];
-+			if (fieldDecl.binding == existingField) {
-+				blockScope.problemReporter().duplicateFieldInType(this, fieldDecl);
-+				break;
-+			}
-+		}
-+	}
-+	return synthField;
- }
- /* Add a new synthetic field for the emulation of the assert statement.
--* Answer the new field or the existing field if one already existed.
-+*	Answer the new field or the existing field if one already existed.
- */
- public FieldBinding addSyntheticFieldForAssert(BlockScope blockScope) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
- 
--  FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get("assertionEmulation"); //$NON-NLS-1$
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      TypeConstants.SYNTHETIC_ASSERT_DISABLED,
--      TypeBinding.BOOLEAN,
--      ClassFileConstants.AccDefault | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic | ClassFileConstants.AccFinal,
--      this,
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
--    this.synthetics[SourceTypeBinding.FIELD_EMUL].put("assertionEmulation", synthField); //$NON-NLS-1$
--  }
--  // ensure there is not already such a field defined by the user
--  // ensure there is not already such a field defined by the user
--  boolean needRecheck;
--  int index = 0;
--  do {
--    needRecheck = false;
--    FieldBinding existingField;
--    if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--      TypeDeclaration typeDecl = this.scope.referenceContext;
--      for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--        FieldDeclaration fieldDecl = typeDecl.fields[i];
--        if (fieldDecl.binding == existingField) {
--          synthField.name = CharOperation.concat(
--            TypeConstants.SYNTHETIC_ASSERT_DISABLED,
--            ("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
--          needRecheck = true;
--          break;
--        }
--      }
--    }
--  } while (needRecheck);
--  return synthField;
-+	FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get("assertionEmulation"); //$NON-NLS-1$
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			TypeConstants.SYNTHETIC_ASSERT_DISABLED,
-+			TypeBinding.BOOLEAN,
-+			ClassFileConstants.AccDefault | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic | ClassFileConstants.AccFinal,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL].put("assertionEmulation", synthField); //$NON-NLS-1$
-+	}
-+	// ensure there is not already such a field defined by the user
-+	// ensure there is not already such a field defined by the user
-+	boolean needRecheck;
-+	int index = 0;
-+	do {
-+		needRecheck = false;
-+		FieldBinding existingField;
-+		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+			TypeDeclaration typeDecl = this.scope.referenceContext;
-+			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+				FieldDeclaration fieldDecl = typeDecl.fields[i];
-+				if (fieldDecl.binding == existingField) {
-+					synthField.name = CharOperation.concat(
-+						TypeConstants.SYNTHETIC_ASSERT_DISABLED,
-+						("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
-+					needRecheck = true;
-+					break;
-+				}
-+			}
-+		}
-+	} while (needRecheck);
-+	return synthField;
- }
- /* Add a new synthetic field for recording all enum constant values
--* Answer the new field or the existing field if one already existed.
-+*	Answer the new field or the existing field if one already existed.
- */
- public FieldBinding addSyntheticFieldForEnumValues() {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
- 
--  FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get("enumConstantValues"); //$NON-NLS-1$
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      TypeConstants.SYNTHETIC_ENUM_VALUES,
--      this.scope.createArrayType(this,1),
--      ClassFileConstants.AccPrivate | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic | ClassFileConstants.AccFinal,
--      this,
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
--    this.synthetics[SourceTypeBinding.FIELD_EMUL].put("enumConstantValues", synthField); //$NON-NLS-1$
--  }
--  // ensure there is not already such a field defined by the user
--  // ensure there is not already such a field defined by the user
--  boolean needRecheck;
--  int index = 0;
--  do {
--    needRecheck = false;
--    FieldBinding existingField;
--    if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--      TypeDeclaration typeDecl = this.scope.referenceContext;
--      for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--        FieldDeclaration fieldDecl = typeDecl.fields[i];
--        if (fieldDecl.binding == existingField) {
--          synthField.name = CharOperation.concat(
--            TypeConstants.SYNTHETIC_ENUM_VALUES,
--            ("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
--          needRecheck = true;
--          break;
--        }
--      }
--    }
--  } while (needRecheck);
--  return synthField;
-+	FieldBinding synthField = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get("enumConstantValues"); //$NON-NLS-1$
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			TypeConstants.SYNTHETIC_ENUM_VALUES,
-+			this.scope.createArrayType(this,1),
-+			ClassFileConstants.AccPrivate | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic | ClassFileConstants.AccFinal,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL].put("enumConstantValues", synthField); //$NON-NLS-1$
-+	}
-+	// ensure there is not already such a field defined by the user
-+	// ensure there is not already such a field defined by the user
-+	boolean needRecheck;
-+	int index = 0;
-+	do {
-+		needRecheck = false;
-+		FieldBinding existingField;
-+		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+			TypeDeclaration typeDecl = this.scope.referenceContext;
-+			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+				FieldDeclaration fieldDecl = typeDecl.fields[i];
-+				if (fieldDecl.binding == existingField) {
-+					synthField.name = CharOperation.concat(
-+						TypeConstants.SYNTHETIC_ENUM_VALUES,
-+						("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
-+					needRecheck = true;
-+					break;
-+				}
-+			}
-+		}
-+	} while (needRecheck);
-+	return synthField;
- }
- /* Add a new synthetic access method for read/write access to <targetField>.
--  Answer the new method or the existing method if one already existed.
-+	Answer the new method or the existing method if one already existed.
- */
--public SyntheticMethodBinding addSyntheticMethod(FieldBinding targetField, boolean isReadAccess) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-+public SyntheticMethodBinding addSyntheticMethod(FieldBinding targetField, boolean isReadAccess, boolean isSuperAccess) {
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap();
- 
--  SyntheticMethodBinding accessMethod = null;
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(targetField);
--  if (accessors == null) {
--    accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, this);
--    this.synthetics[SourceTypeBinding.METHOD_EMUL].put(targetField, accessors = new SyntheticMethodBinding[2]);
--    accessors[isReadAccess ? 0 : 1] = accessMethod;   
--  } else {
--    if ((accessMethod = accessors[isReadAccess ? 0 : 1]) == null) {
--      accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, this);
--      accessors[isReadAccess ? 0 : 1] = accessMethod;
--    }
--  }
--  return accessMethod;
-+	SyntheticMethodBinding accessMethod = null;
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(targetField);
-+	if (accessors == null) {
-+		accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, isSuperAccess, this);
-+		this.synthetics[SourceTypeBinding.METHOD_EMUL].put(targetField, accessors = new SyntheticMethodBinding[2]);
-+		accessors[isReadAccess ? 0 : 1] = accessMethod;
-+	} else {
-+		if ((accessMethod = accessors[isReadAccess ? 0 : 1]) == null) {
-+			accessMethod = new SyntheticMethodBinding(targetField, isReadAccess, isSuperAccess, this);
-+			accessors[isReadAccess ? 0 : 1] = accessMethod;
-+		}
-+	}
-+	return accessMethod;
- }
- /* Add a new synthetic method the enum type. Selector can either be 'values' or 'valueOf'.
-  * char[] constants from TypeConstants must be used: TypeConstants.VALUES/VALUEOF
- */
- public SyntheticMethodBinding addSyntheticEnumMethod(char[] selector) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap();
- 
--  SyntheticMethodBinding accessMethod = null;
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(selector);
--  if (accessors == null) {
--    accessMethod = new SyntheticMethodBinding(this, selector);
--    this.synthetics[SourceTypeBinding.METHOD_EMUL].put(selector, accessors = new SyntheticMethodBinding[2]);
--    accessors[0] = accessMethod;    
--  } else {
--    if ((accessMethod = accessors[0]) == null) {
--      accessMethod = new SyntheticMethodBinding(this, selector);
--      accessors[0] = accessMethod;
--    }
--  }
--  return accessMethod;
-+	SyntheticMethodBinding accessMethod = null;
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(selector);
-+	if (accessors == null) {
-+		accessMethod = new SyntheticMethodBinding(this, selector);
-+		this.synthetics[SourceTypeBinding.METHOD_EMUL].put(selector, accessors = new SyntheticMethodBinding[2]);
-+		accessors[0] = accessMethod;
-+	} else {
-+		if ((accessMethod = accessors[0]) == null) {
-+			accessMethod = new SyntheticMethodBinding(this, selector);
-+			accessors[0] = accessMethod;
-+		}
-+	}
-+	return accessMethod;
- }
- /*
-- * Add a synthetic field to handle the cache of the switch translation table for the corresponding enum type 
-+ * Add a synthetic field to handle the cache of the switch translation table for the corresponding enum type
-  */
- public SyntheticFieldBinding addSyntheticFieldForSwitchEnum(char[] fieldName, String key) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.FIELD_EMUL] = new HashMap();
- 
--  SyntheticFieldBinding synthField = (SyntheticFieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(key);
--  if (synthField == null) {
--    synthField = new SyntheticFieldBinding(
--      fieldName,
--      this.scope.createArrayType(TypeBinding.INT,1),
--      ClassFileConstants.AccPrivate | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic,
--      this,
--      Constant.NotAConstant,
--      this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
--    this.synthetics[SourceTypeBinding.FIELD_EMUL].put(key, synthField);
--  }
--  // ensure there is not already such a field defined by the user
--  boolean needRecheck;
--  int index = 0;
--  do {
--    needRecheck = false;
--    FieldBinding existingField;
--    if ((existingField = this.getField(synthField.name, true /*resolve*/)) != null) {
--      TypeDeclaration typeDecl = this.scope.referenceContext;
--      for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
--        FieldDeclaration fieldDecl = typeDecl.fields[i];
--        if (fieldDecl.binding == existingField) {
--          synthField.name = CharOperation.concat(
--            fieldName,
--            ("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
--          needRecheck = true;
--          break;
--        }
--      }
--    }
--  } while (needRecheck);
--  return synthField;
-+	SyntheticFieldBinding synthField = (SyntheticFieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(key);
-+	if (synthField == null) {
-+		synthField = new SyntheticFieldBinding(
-+			fieldName,
-+			this.scope.createArrayType(TypeBinding.INT,1),
-+			ClassFileConstants.AccPrivate | ClassFileConstants.AccStatic | ClassFileConstants.AccSynthetic,
-+			this,
-+			Constant.NotAConstant,
-+			this.synthetics[SourceTypeBinding.FIELD_EMUL].size());
-+		this.synthetics[SourceTypeBinding.FIELD_EMUL].put(key, synthField);
-+	}
-+	// ensure there is not already such a field defined by the user
-+	boolean needRecheck;
-+	int index = 0;
-+	do {
-+		needRecheck = false;
-+		FieldBinding existingField;
-+		if ((existingField = getField(synthField.name, true /*resolve*/)) != null) {
-+			TypeDeclaration typeDecl = this.scope.referenceContext;
-+			for (int i = 0, max = typeDecl.fields.length; i < max; i++) {
-+				FieldDeclaration fieldDecl = typeDecl.fields[i];
-+				if (fieldDecl.binding == existingField) {
-+					synthField.name = CharOperation.concat(
-+						fieldName,
-+						("_" + String.valueOf(index++)).toCharArray()); //$NON-NLS-1$
-+					needRecheck = true;
-+					break;
-+				}
-+			}
-+		}
-+	} while (needRecheck);
-+	return synthField;
- }
- /* Add a new synthetic method the enum type. Selector can either be 'values' or 'valueOf'.
-  * char[] constants from TypeConstants must be used: TypeConstants.VALUES/VALUEOF
- */
- public SyntheticMethodBinding addSyntheticMethodForSwitchEnum(TypeBinding enumBinding) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap();
- 
--  SyntheticMethodBinding accessMethod = null;
--  char[] selector = CharOperation.concat(TypeConstants.SYNTHETIC_SWITCH_ENUM_TABLE, enumBinding.constantPoolName());
--  CharOperation.replace(selector, '/', '$');
--  final String key = new String(selector);
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(key);
--  // first add the corresponding synthetic field
--  if (accessors == null) {
--    // then create the synthetic method
--    final SyntheticFieldBinding fieldBinding = this.addSyntheticFieldForSwitchEnum(selector, key);
--    accessMethod = new SyntheticMethodBinding(fieldBinding, this, enumBinding, selector);
--    this.synthetics[SourceTypeBinding.METHOD_EMUL].put(key, accessors = new SyntheticMethodBinding[2]);
--    accessors[0] = accessMethod;
--  } else {
--    if ((accessMethod = accessors[0]) == null) {
--      final SyntheticFieldBinding fieldBinding = this.addSyntheticFieldForSwitchEnum(selector, key);
--      accessMethod = new SyntheticMethodBinding(fieldBinding, this, enumBinding, selector);
--      accessors[0] = accessMethod;
--    }
--  }
--  return accessMethod;
-+	SyntheticMethodBinding accessMethod = null;
-+	char[] selector = CharOperation.concat(TypeConstants.SYNTHETIC_SWITCH_ENUM_TABLE, enumBinding.constantPoolName());
-+	CharOperation.replace(selector, '/', '$');
-+	final String key = new String(selector);
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(key);
-+	// first add the corresponding synthetic field
-+	if (accessors == null) {
-+		// then create the synthetic method
-+		final SyntheticFieldBinding fieldBinding = addSyntheticFieldForSwitchEnum(selector, key);
-+		accessMethod = new SyntheticMethodBinding(fieldBinding, this, enumBinding, selector);
-+		this.synthetics[SourceTypeBinding.METHOD_EMUL].put(key, accessors = new SyntheticMethodBinding[2]);
-+		accessors[0] = accessMethod;
-+	} else {
-+		if ((accessMethod = accessors[0]) == null) {
-+			final SyntheticFieldBinding fieldBinding = addSyntheticFieldForSwitchEnum(selector, key);
-+			accessMethod = new SyntheticMethodBinding(fieldBinding, this, enumBinding, selector);
-+			accessors[0] = accessMethod;
-+		}
-+	}
-+	return accessMethod;
- }
- /* Add a new synthetic access method for access to <targetMethod>.
-  * Must distinguish access method used for super access from others (need to use invokespecial bytecode)
--  Answer the new method or the existing method if one already existed.
-+	Answer the new method or the existing method if one already existed.
- */
- public SyntheticMethodBinding addSyntheticMethod(MethodBinding targetMethod, boolean isSuperAccess) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null)
-     this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap();
- 
--  SyntheticMethodBinding accessMethod = null;
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(targetMethod);
--  if (accessors == null) {
--    accessMethod = new SyntheticMethodBinding(targetMethod, isSuperAccess, this);
--    this.synthetics[SourceTypeBinding.METHOD_EMUL].put(targetMethod, accessors = new SyntheticMethodBinding[2]);
--    accessors[isSuperAccess ? 0 : 1] = accessMethod;    
--  } else {
--    if ((accessMethod = accessors[isSuperAccess ? 0 : 1]) == null) {
--      accessMethod = new SyntheticMethodBinding(targetMethod, isSuperAccess, this);
--      accessors[isSuperAccess ? 0 : 1] = accessMethod;
--    }
--  }
--  return accessMethod;
-+	SyntheticMethodBinding accessMethod = null;
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(targetMethod);
-+	if (accessors == null) {
-+		accessMethod = new SyntheticMethodBinding(targetMethod, isSuperAccess, this);
-+		this.synthetics[SourceTypeBinding.METHOD_EMUL].put(targetMethod, accessors = new SyntheticMethodBinding[2]);
-+		accessors[isSuperAccess ? 0 : 1] = accessMethod;
-+	} else {
-+		if ((accessMethod = accessors[isSuperAccess ? 0 : 1]) == null) {
-+			accessMethod = new SyntheticMethodBinding(targetMethod, isSuperAccess, this);
-+			accessors[isSuperAccess ? 0 : 1] = accessMethod;
-+		}
-+	}
-+	return accessMethod;
- }
--/* 
-+/*
-  * Record the fact that bridge methods need to be generated to override certain inherited methods
-  */
- public SyntheticMethodBinding addSyntheticBridgeMethod(MethodBinding inheritedMethodToBridge, MethodBinding targetMethod) {
--  if (isInterface()) return null; // only classes & enums get bridge methods
--  // targetMethod may be inherited
--  if (inheritedMethodToBridge.returnType.erasure() == targetMethod.returnType.erasure()
--    && inheritedMethodToBridge.areParameterErasuresEqual(targetMethod)) {
--      return null; // do not need bridge method
--  }
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null) {
-+	if (isInterface()) return null; // only classes & enums get bridge methods
-+	// targetMethod may be inherited
-+	if (inheritedMethodToBridge.returnType.erasure() == targetMethod.returnType.erasure()
-+		&& inheritedMethodToBridge.areParameterErasuresEqual(targetMethod)) {
-+			return null; // do not need bridge method
-+	}
-+	if (this.synthetics == null)
-+		this.synthetics = new HashMap[MAX_SYNTHETICS];
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null) {
-     this.synthetics[SourceTypeBinding.METHOD_EMUL] = new HashMap();
--  } else {
--    // check to see if there is another equivalent inheritedMethod already added
--    Iterator synthMethods = this.synthetics[SourceTypeBinding.METHOD_EMUL].keySet().iterator();
--    while (synthMethods.hasNext()) {
--      Object synthetic = synthMethods.next();
--      if (synthetic instanceof MethodBinding) {
--        MethodBinding method = (MethodBinding) synthetic;
--        if (CharOperation.equals(inheritedMethodToBridge.selector, method.selector)
--          && inheritedMethodToBridge.returnType.erasure() == method.returnType.erasure()
--          && inheritedMethodToBridge.areParameterErasuresEqual(method)) {
--            return null;
--        }
--      }
--    }
--  }
--
--  SyntheticMethodBinding accessMethod = null;
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(inheritedMethodToBridge);
--  if (accessors == null) {
--    accessMethod = new SyntheticMethodBinding(inheritedMethodToBridge, targetMethod, this);
--    this.synthetics[SourceTypeBinding.METHOD_EMUL].put(inheritedMethodToBridge, accessors = new SyntheticMethodBinding[2]);
--    accessors[1] = accessMethod;    
--  } else {
--    if ((accessMethod = accessors[1]) == null) {
--      accessMethod = new SyntheticMethodBinding(inheritedMethodToBridge, targetMethod, this);
--      accessors[1] = accessMethod;
--    }
--  }
--  return accessMethod;
-+	} else {
-+		// check to see if there is another equivalent inheritedMethod already added
-+		Iterator synthMethods = this.synthetics[SourceTypeBinding.METHOD_EMUL].keySet().iterator();
-+		while (synthMethods.hasNext()) {
-+			Object synthetic = synthMethods.next();
-+			if (synthetic instanceof MethodBinding) {
-+				MethodBinding method = (MethodBinding) synthetic;
-+				if (CharOperation.equals(inheritedMethodToBridge.selector, method.selector)
-+					&& inheritedMethodToBridge.returnType.erasure() == method.returnType.erasure()
-+					&& inheritedMethodToBridge.areParameterErasuresEqual(method)) {
-+						return null;
-+				}
-+			}
-+		}
-+	}
-+
-+	SyntheticMethodBinding accessMethod = null;
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(inheritedMethodToBridge);
-+	if (accessors == null) {
-+		accessMethod = new SyntheticMethodBinding(inheritedMethodToBridge, targetMethod, this);
-+		this.synthetics[SourceTypeBinding.METHOD_EMUL].put(inheritedMethodToBridge, accessors = new SyntheticMethodBinding[2]);
-+		accessors[1] = accessMethod;
-+	} else {
-+		if ((accessMethod = accessors[1]) == null) {
-+			accessMethod = new SyntheticMethodBinding(inheritedMethodToBridge, targetMethod, this);
-+			accessors[1] = accessMethod;
-+		}
-+	}
-+	return accessMethod;
- }
- boolean areFieldsInitialized() {
--  return this.fields != Binding.UNINITIALIZED_FIELDS;
-+	return this.fields != Binding.UNINITIALIZED_FIELDS;
- }
- boolean areMethodsInitialized() {
--  return this.methods != Binding.UNINITIALIZED_METHODS;
-+	return this.methods != Binding.UNINITIALIZED_METHODS;
- }
- public int kind() {
--  if (this.typeVariables != Binding.NO_TYPE_VARIABLES) return Binding.GENERIC_TYPE;
--  return Binding.TYPE;
-+	if (this.typeVariables != Binding.NO_TYPE_VARIABLES) return Binding.GENERIC_TYPE;
-+	return Binding.TYPE;
- }
- 
- public char[] computeUniqueKey(boolean isLeaf) {
--  char[] uniqueKey = super.computeUniqueKey(isLeaf);
--  if (uniqueKey.length == 2) return uniqueKey; // problem type's unique key is "L;"
--  if (Util.isClassFileName(this.fileName)) return uniqueKey; // no need to insert compilation unit name for a .class file
--  
--  // insert compilation unit name if the type name is not the main type name
--  int end = CharOperation.lastIndexOf('.', this.fileName);
--  if (end != -1) {
--    int start = CharOperation.lastIndexOf('/', this.fileName) + 1;
--    char[] mainTypeName = CharOperation.subarray(this.fileName, start, end);
--    start = CharOperation.lastIndexOf('/', uniqueKey) + 1;
--    if (start == 0)
--      start = 1; // start after L
--    end = CharOperation.indexOf('$', uniqueKey, start);
--    if (end == -1)
--      end = CharOperation.indexOf('<', uniqueKey, start);
--    if (end == -1)
--      end = CharOperation.indexOf(';', uniqueKey, start);
--    char[] topLevelType = CharOperation.subarray(uniqueKey, start, end);
--    if (!CharOperation.equals(topLevelType, mainTypeName)) {
--      StringBuffer buffer = new StringBuffer();
--      buffer.append(uniqueKey, 0, start);
--      buffer.append(mainTypeName);
--      buffer.append('~');
--      buffer.append(topLevelType);
--      buffer.append(uniqueKey, end, uniqueKey.length - end);
--      int length = buffer.length();
--      uniqueKey = new char[length];
--      buffer.getChars(0, length, uniqueKey, 0);
--      return uniqueKey;
--    }
--  }
--  return uniqueKey;
-+	char[] uniqueKey = super.computeUniqueKey(isLeaf);
-+	if (uniqueKey.length == 2) return uniqueKey; // problem type's unique key is "L;"
-+	if (Util.isClassFileName(this.fileName)) return uniqueKey; // no need to insert compilation unit name for a .class file
-+
-+	// insert compilation unit name if the type name is not the main type name
-+	int end = CharOperation.lastIndexOf('.', this.fileName);
-+	if (end != -1) {
-+		int start = CharOperation.lastIndexOf('/', this.fileName) + 1;
-+		char[] mainTypeName = CharOperation.subarray(this.fileName, start, end);
-+		start = CharOperation.lastIndexOf('/', uniqueKey) + 1;
-+		if (start == 0)
-+			start = 1; // start after L
-+		end = CharOperation.indexOf('$', uniqueKey, start);
-+		if (end == -1)
-+			end = CharOperation.indexOf('<', uniqueKey, start);
-+		if (end == -1)
-+			end = CharOperation.indexOf(';', uniqueKey, start);
-+		char[] topLevelType = CharOperation.subarray(uniqueKey, start, end);
-+		if (!CharOperation.equals(topLevelType, mainTypeName)) {
-+			StringBuffer buffer = new StringBuffer();
-+			buffer.append(uniqueKey, 0, start);
-+			buffer.append(mainTypeName);
-+			buffer.append('~');
-+			buffer.append(topLevelType);
-+			buffer.append(uniqueKey, end, uniqueKey.length - end);
-+			int length = buffer.length();
-+			uniqueKey = new char[length];
-+			buffer.getChars(0, length, uniqueKey, 0);
-+			return uniqueKey;
-+		}
-+	}
-+	return uniqueKey;
- }
- 
- void faultInTypesForFieldsAndMethods() {
--  // check @Deprecated annotation
--  getAnnotationTagBits(); // marks as deprecated by side effect
--  ReferenceBinding enclosingType = this.enclosingType();
--  if (enclosingType != null && enclosingType.isViewedAsDeprecated() && !this.isDeprecated())
--    this.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
--  fields();
--  methods();
-+	// check @Deprecated annotation
-+	getAnnotationTagBits(); // marks as deprecated by side effect
-+	ReferenceBinding enclosingType = enclosingType();
-+	if (enclosingType != null && enclosingType.isViewedAsDeprecated() && !isDeprecated())
-+		this.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
-+	fields();
-+	methods();
- 
--  for (int i = 0, length = this.memberTypes.length; i < length; i++)
--    ((SourceTypeBinding) this.memberTypes[i]).faultInTypesForFieldsAndMethods();
-+	for (int i = 0, length = this.memberTypes.length; i < length; i++)
-+		((SourceTypeBinding) this.memberTypes[i]).faultInTypesForFieldsAndMethods();
- }
- // NOTE: the type of each field of a source type is resolved when needed
- public FieldBinding[] fields() {
--  if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
--    return this.fields; 
-+	if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
-+		return this.fields;
- 
--  int failed = 0;
--  FieldBinding[] resolvedFields = this.fields;
--  try {
--    // lazily sort fields
--    if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
--      int length = this.fields.length;
--      if (length > 1)
--        ReferenceBinding.sortFields(this.fields, 0, length);
--      this.tagBits |= TagBits.AreFieldsSorted;
--    }
--    for (int i = 0, length = this.fields.length; i < length; i++) {
--      if (resolveTypeFor(this.fields[i]) == null) {
--        // do not alter original field array until resolution is over, due to reentrance (143259)
--        if (resolvedFields == this.fields) {
--          System.arraycopy(this.fields, 0, resolvedFields = new FieldBinding[length], 0, length);
--        }
--        resolvedFields[i] = null;
--        failed++;
--      }
--    }
--  } finally {
--    if (failed > 0) {
--      // ensure fields are consistent reqardless of the error
--      int newSize = resolvedFields.length - failed;
--      if (newSize == 0)
--        return this.fields = Binding.NO_FIELDS;
--
--      FieldBinding[] newFields = new FieldBinding[newSize];
--      for (int i = 0, j = 0, length = resolvedFields.length; i < length; i++) {
--        if (resolvedFields[i] != null)
--          newFields[j++] = resolvedFields[i];
--      }
--      this.fields = newFields;
--    }
--  }
--  this.tagBits |= TagBits.AreFieldsComplete;
--  return this.fields;
-+	int failed = 0;
-+	FieldBinding[] resolvedFields = this.fields;
-+	try {
-+		// lazily sort fields
-+		if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
-+			int length = this.fields.length;
-+			if (length > 1)
-+				ReferenceBinding.sortFields(this.fields, 0, length);
-+			this.tagBits |= TagBits.AreFieldsSorted;
-+		}
-+		for (int i = 0, length = this.fields.length; i < length; i++) {
-+			if (resolveTypeFor(this.fields[i]) == null) {
-+				// do not alter original field array until resolution is over, due to reentrance (143259)
-+				if (resolvedFields == this.fields) {
-+					System.arraycopy(this.fields, 0, resolvedFields = new FieldBinding[length], 0, length);
-+				}
-+				resolvedFields[i] = null;
-+				failed++;
-+			}
-+		}
-+	} finally {
-+		if (failed > 0) {
-+			// ensure fields are consistent reqardless of the error
-+			int newSize = resolvedFields.length - failed;
-+			if (newSize == 0)
-+				return this.fields = Binding.NO_FIELDS;
-+
-+			FieldBinding[] newFields = new FieldBinding[newSize];
-+			for (int i = 0, j = 0, length = resolvedFields.length; i < length; i++) {
-+				if (resolvedFields[i] != null)
-+					newFields[j++] = resolvedFields[i];
-+			}
-+			this.fields = newFields;
-+		}
-+	}
-+	this.tagBits |= TagBits.AreFieldsComplete;
-+	return this.fields;
- }
- /**
-  * @see org.eclipse.jdt.internal.compiler.lookup.TypeBinding#genericTypeSignature()
-  */
- public char[] genericTypeSignature() {
-     if (this.genericReferenceTypeSignature == null)
--      this.genericReferenceTypeSignature = computeGenericTypeSignature(this.typeVariables);
-+    	this.genericReferenceTypeSignature = computeGenericTypeSignature(this.typeVariables);
-     return this.genericReferenceTypeSignature;
- }
- /**
-@@ -655,29 +653,29 @@
-  */
- public char[] genericSignature() {
-     StringBuffer sig = null;
--  if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
--      sig = new StringBuffer(10);
--      sig.append('<');
--      for (int i = 0, length = this.typeVariables.length; i < length; i++)
--          sig.append(this.typeVariables[i].genericSignature());
--      sig.append('>');
--  } else {
--      // could still need a signature if any of supertypes is parameterized
--      noSignature: if (this.superclass == null || !this.superclass.isParameterizedType()) {
--        for (int i = 0, length = this.superInterfaces.length; i < length; i++)
--            if (this.superInterfaces[i].isParameterizedType())
--          break noSignature;
--          return null;
--      }
--      sig = new StringBuffer(10);
--  }
--  if (this.superclass != null)
--    sig.append(this.superclass.genericTypeSignature());
--  else // interface scenario only (as Object cannot be generic) - 65953
--    sig.append(this.scope.getJavaLangObject().genericTypeSignature());
-+	if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
-+	    sig = new StringBuffer(10);
-+	    sig.append('<');
-+	    for (int i = 0, length = this.typeVariables.length; i < length; i++)
-+	        sig.append(this.typeVariables[i].genericSignature());
-+	    sig.append('>');
-+	} else {
-+	    // could still need a signature if any of supertypes is parameterized
-+	    noSignature: if (this.superclass == null || !this.superclass.isParameterizedType()) {
-+		    for (int i = 0, length = this.superInterfaces.length; i < length; i++)
-+		        if (this.superInterfaces[i].isParameterizedType())
-+					break noSignature;
-+	        return null;
-+	    }
-+	    sig = new StringBuffer(10);
-+	}
-+	if (this.superclass != null)
-+		sig.append(this.superclass.genericTypeSignature());
-+	else // interface scenario only (as Object cannot be generic) - 65953
-+		sig.append(this.scope.getJavaLangObject().genericTypeSignature());
-     for (int i = 0, length = this.superInterfaces.length; i < length; i++)
-         sig.append(this.superInterfaces[i].genericTypeSignature());
--  return sig.toString().toCharArray();
-+	return sig.toString().toCharArray();
- }
- 
- /**
-@@ -686,330 +684,330 @@
-  * @see org.eclipse.jdt.internal.compiler.lookup.Binding#getAnnotationTagBits()
-  */
- public long getAnnotationTagBits() {
--  if ((this.tagBits & TagBits.AnnotationResolved) == 0 && this.scope != null) {
--    TypeDeclaration typeDecl = this.scope.referenceContext;
--    boolean old = typeDecl.staticInitializerScope.insideTypeAnnotation;
--    try {
--      typeDecl.staticInitializerScope.insideTypeAnnotation = true;
--      ASTNode.resolveAnnotations(typeDecl.staticInitializerScope, typeDecl.annotations, this);
--    } finally {
--      typeDecl.staticInitializerScope.insideTypeAnnotation = old;
--    }
--    if ((this.tagBits & TagBits.AnnotationDeprecated) != 0)
--      this.modifiers |= ClassFileConstants.AccDeprecated;
--  }
--  return this.tagBits;
-+	if ((this.tagBits & TagBits.AnnotationResolved) == 0 && this.scope != null) {
-+		TypeDeclaration typeDecl = this.scope.referenceContext;
-+		boolean old = typeDecl.staticInitializerScope.insideTypeAnnotation;
-+		try {
-+			typeDecl.staticInitializerScope.insideTypeAnnotation = true;
-+			ASTNode.resolveAnnotations(typeDecl.staticInitializerScope, typeDecl.annotations, this);
-+		} finally {
-+			typeDecl.staticInitializerScope.insideTypeAnnotation = old;
-+		}
-+		if ((this.tagBits & TagBits.AnnotationDeprecated) != 0)
-+			this.modifiers |= ClassFileConstants.AccDeprecated;
-+	}
-+	return this.tagBits;
- }
- public MethodBinding[] getDefaultAbstractMethods() {
--  int count = 0;
--  for (int i = this.methods.length; --i >= 0;)
--    if (this.methods[i].isDefaultAbstract())
--      count++;
--  if (count == 0) return Binding.NO_METHODS;
--
--  MethodBinding[] result = new MethodBinding[count];
--  count = 0;
--  for (int i = this.methods.length; --i >= 0;)
--    if (this.methods[i].isDefaultAbstract())
--      result[count++] = this.methods[i];
--  return result;
-+	int count = 0;
-+	for (int i = this.methods.length; --i >= 0;)
-+		if (this.methods[i].isDefaultAbstract())
-+			count++;
-+	if (count == 0) return Binding.NO_METHODS;
-+
-+	MethodBinding[] result = new MethodBinding[count];
-+	count = 0;
-+	for (int i = this.methods.length; --i >= 0;)
-+		if (this.methods[i].isDefaultAbstract())
-+			result[count++] = this.methods[i];
-+	return result;
- }
- // NOTE: the return type, arg & exception types of each method of a source type are resolved when needed
- public MethodBinding getExactConstructor(TypeBinding[] argumentTypes) {
--  int argCount = argumentTypes.length;
--  if ((this.tagBits & TagBits.AreMethodsComplete) != 0) { // have resolved all arg types & return type of the methods
--    long range;
--    if ((range = ReferenceBinding.binarySearch(TypeConstants.INIT, this.methods)) >= 0) {
--      nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
--        MethodBinding method = this.methods[imethod];
--        if (method.parameters.length == argCount) {
--          TypeBinding[] toMatch = method.parameters;
--          for (int iarg = 0; iarg < argCount; iarg++)
--            if (toMatch[iarg] != argumentTypes[iarg])
--              continue nextMethod;
--          return method;
--        }
--      }
--    }
--  } else {
--    // lazily sort methods
--    if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
--      int length = this.methods.length;
--      if (length > 1)
--        ReferenceBinding.sortMethods(this.methods, 0, length);
--      this.tagBits |= TagBits.AreMethodsSorted;
--    }   
--    long range;
--    if ((range = ReferenceBinding.binarySearch(TypeConstants.INIT, this.methods)) >= 0) {
--      nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
--        MethodBinding method = this.methods[imethod];
--        if (resolveTypesFor(method) == null || method.returnType == null) {
--          methods();
--          return getExactConstructor(argumentTypes);  // try again since the problem methods have been removed
--        }
--        if (method.parameters.length == argCount) {
--          TypeBinding[] toMatch = method.parameters;
--          for (int iarg = 0; iarg < argCount; iarg++)
--            if (toMatch[iarg] != argumentTypes[iarg])
--              continue nextMethod;
--          return method;
--        }
--      }
--    }
--  } 
--  return null;
-+	int argCount = argumentTypes.length;
-+	if ((this.tagBits & TagBits.AreMethodsComplete) != 0) { // have resolved all arg types & return type of the methods
-+		long range;
-+		if ((range = ReferenceBinding.binarySearch(TypeConstants.INIT, this.methods)) >= 0) {
-+			nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
-+				MethodBinding method = this.methods[imethod];
-+				if (method.parameters.length == argCount) {
-+					TypeBinding[] toMatch = method.parameters;
-+					for (int iarg = 0; iarg < argCount; iarg++)
-+						if (toMatch[iarg] != argumentTypes[iarg])
-+							continue nextMethod;
-+					return method;
-+				}
-+			}
-+		}
-+	} else {
-+		// lazily sort methods
-+		if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-+			int length = this.methods.length;
-+			if (length > 1)
-+				ReferenceBinding.sortMethods(this.methods, 0, length);
-+			this.tagBits |= TagBits.AreMethodsSorted;
-+		}
-+		long range;
-+		if ((range = ReferenceBinding.binarySearch(TypeConstants.INIT, this.methods)) >= 0) {
-+			nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
-+				MethodBinding method = this.methods[imethod];
-+				if (resolveTypesFor(method) == null || method.returnType == null) {
-+					methods();
-+					return getExactConstructor(argumentTypes);  // try again since the problem methods have been removed
-+				}
-+				if (method.parameters.length == argCount) {
-+					TypeBinding[] toMatch = method.parameters;
-+					for (int iarg = 0; iarg < argCount; iarg++)
-+						if (toMatch[iarg] != argumentTypes[iarg])
-+							continue nextMethod;
-+					return method;
-+				}
-+			}
-+		}
-+	}
-+	return null;
- }
- 
- //NOTE: the return type, arg & exception types of each method of a source type are resolved when needed
- //searches up the hierarchy as long as no potential (but not exact) match was found.
- public MethodBinding getExactMethod(char[] selector, TypeBinding[] argumentTypes, CompilationUnitScope refScope) {
--  // sender from refScope calls recordTypeReference(this)
--  int argCount = argumentTypes.length;
--  boolean foundNothing = true;
--
--  if ((this.tagBits & TagBits.AreMethodsComplete) != 0) { // have resolved all arg types & return type of the methods
--    long range;
--    if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
--      nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
--        MethodBinding method = this.methods[imethod];
--        foundNothing = false; // inner type lookups must know that a method with this name exists
--        if (method.parameters.length == argCount) {
--          TypeBinding[] toMatch = method.parameters;
--          for (int iarg = 0; iarg < argCount; iarg++)
--            if (toMatch[iarg] != argumentTypes[iarg])
--              continue nextMethod;
--          return method;
--        }
--      }
--    }
--  } else {
--    // lazily sort methods
--    if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
--      int length = this.methods.length;
--      if (length > 1)
--        ReferenceBinding.sortMethods(this.methods, 0, length);
--      this.tagBits |= TagBits.AreMethodsSorted;
--    }
--    
--    long range;
--    if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
--      // check unresolved method
--      int start = (int) range, end = (int) (range >> 32);
--      for (int imethod = start; imethod <= end; imethod++) {
--        MethodBinding method = this.methods[imethod];     
--        if (resolveTypesFor(method) == null || method.returnType == null) {
--          methods();
--          return getExactMethod(selector, argumentTypes, refScope); // try again since the problem methods have been removed
--        }
--      }
--      // check dup collisions
--      boolean isSource15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
--      for (int i = start; i <= end; i++) {
--        MethodBinding method1 = this.methods[i];
--        for (int j = end; j > i; j--) {
--          MethodBinding method2 = this.methods[j];
--          boolean paramsMatch = isSource15
--            ? method1.areParameterErasuresEqual(method2)
--            : method1.areParametersEqual(method2);
--          if (paramsMatch) {
--            methods();
--            return getExactMethod(selector, argumentTypes, refScope); // try again since the problem methods have been removed
--          }
--        }
--      }
--      nextMethod: for (int imethod = start; imethod <= end; imethod++) {
--        MethodBinding method = this.methods[imethod];           
--        TypeBinding[] toMatch = method.parameters;
--        if (toMatch.length == argCount) {
--          for (int iarg = 0; iarg < argCount; iarg++)
--            if (toMatch[iarg] != argumentTypes[iarg])
--              continue nextMethod;
--          return method;
--        }
--      }       
--    }
--  }
--
--  if (foundNothing) {
--    if (isInterface()) {
--       if (this.superInterfaces.length == 1) {
--        if (refScope != null)
--          refScope.recordTypeReference(this.superInterfaces[0]);
--        return this.superInterfaces[0].getExactMethod(selector, argumentTypes, refScope);
--       }
--    } else if (this.superclass != null) {
--      if (refScope != null)
--        refScope.recordTypeReference(this.superclass);
--      return this.superclass.getExactMethod(selector, argumentTypes, refScope);
--    }
--  }
--  return null;
-+	// sender from refScope calls recordTypeReference(this)
-+	int argCount = argumentTypes.length;
-+	boolean foundNothing = true;
-+
-+	if ((this.tagBits & TagBits.AreMethodsComplete) != 0) { // have resolved all arg types & return type of the methods
-+		long range;
-+		if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
-+			nextMethod: for (int imethod = (int)range, end = (int)(range >> 32); imethod <= end; imethod++) {
-+				MethodBinding method = this.methods[imethod];
-+				foundNothing = false; // inner type lookups must know that a method with this name exists
-+				if (method.parameters.length == argCount) {
-+					TypeBinding[] toMatch = method.parameters;
-+					for (int iarg = 0; iarg < argCount; iarg++)
-+						if (toMatch[iarg] != argumentTypes[iarg])
-+							continue nextMethod;
-+					return method;
-+				}
-+			}
-+		}
-+	} else {
-+		// lazily sort methods
-+		if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-+			int length = this.methods.length;
-+			if (length > 1)
-+				ReferenceBinding.sortMethods(this.methods, 0, length);
-+			this.tagBits |= TagBits.AreMethodsSorted;
-+		}
-+
-+		long range;
-+		if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
-+			// check unresolved method
-+			int start = (int) range, end = (int) (range >> 32);
-+			for (int imethod = start; imethod <= end; imethod++) {
-+				MethodBinding method = this.methods[imethod];
-+				if (resolveTypesFor(method) == null || method.returnType == null) {
-+					methods();
-+					return getExactMethod(selector, argumentTypes, refScope); // try again since the problem methods have been removed
-+				}
-+			}
-+			// check dup collisions
-+			boolean isSource15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
-+			for (int i = start; i <= end; i++) {
-+				MethodBinding method1 = this.methods[i];
-+				for (int j = end; j > i; j--) {
-+					MethodBinding method2 = this.methods[j];
-+					boolean paramsMatch = isSource15
-+						? method1.areParameterErasuresEqual(method2)
-+						: method1.areParametersEqual(method2);
-+					if (paramsMatch) {
-+						methods();
-+						return getExactMethod(selector, argumentTypes, refScope); // try again since the problem methods have been removed
-+					}
-+				}
-+			}
-+			nextMethod: for (int imethod = start; imethod <= end; imethod++) {
-+				MethodBinding method = this.methods[imethod];
-+				TypeBinding[] toMatch = method.parameters;
-+				if (toMatch.length == argCount) {
-+					for (int iarg = 0; iarg < argCount; iarg++)
-+						if (toMatch[iarg] != argumentTypes[iarg])
-+							continue nextMethod;
-+					return method;
-+				}
-+			}
-+		}
-+	}
-+
-+	if (foundNothing) {
-+		if (isInterface()) {
-+			 if (this.superInterfaces.length == 1) {
-+				if (refScope != null)
-+					refScope.recordTypeReference(this.superInterfaces[0]);
-+				return this.superInterfaces[0].getExactMethod(selector, argumentTypes, refScope);
-+			 }
-+		} else if (this.superclass != null) {
-+			if (refScope != null)
-+				refScope.recordTypeReference(this.superclass);
-+			return this.superclass.getExactMethod(selector, argumentTypes, refScope);
-+		}
-+	}
-+	return null;
- }
- 
- //NOTE: the type of a field of a source type is resolved when needed
- public FieldBinding getField(char[] fieldName, boolean needResolve) {
--  
--  if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
--    return ReferenceBinding.binarySearch(fieldName, this.fields);
--
--  // lazily sort fields
--  if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
--    int length = this.fields.length;
--    if (length > 1)
--      ReferenceBinding.sortFields(this.fields, 0, length);
--    this.tagBits |= TagBits.AreFieldsSorted;
--  }   
--  // always resolve anyway on source types
--  FieldBinding field = ReferenceBinding.binarySearch(fieldName, this.fields);
--  if (field != null) {
--    FieldBinding result = null;
--    try {
--      result = resolveTypeFor(field);
--      return result;
--    } finally {
--      if (result == null) {
--        // ensure fields are consistent reqardless of the error
--        int newSize = this.fields.length - 1;
--        if (newSize == 0) {
--          this.fields = Binding.NO_FIELDS;
--        } else {
--          FieldBinding[] newFields = new FieldBinding[newSize];
--          int index = 0;
--          for (int i = 0, length = this.fields.length; i < length; i++) {
--            FieldBinding f = this.fields[i];
--            if (f == field) continue;
--            newFields[index++] = f;
--          }
--          this.fields = newFields;
--        }
--      }
--    }
--  }
--  return null;
-+
-+	if ((this.tagBits & TagBits.AreFieldsComplete) != 0)
-+		return ReferenceBinding.binarySearch(fieldName, this.fields);
-+
-+	// lazily sort fields
-+	if ((this.tagBits & TagBits.AreFieldsSorted) == 0) {
-+		int length = this.fields.length;
-+		if (length > 1)
-+			ReferenceBinding.sortFields(this.fields, 0, length);
-+		this.tagBits |= TagBits.AreFieldsSorted;
-+	}
-+	// always resolve anyway on source types
-+	FieldBinding field = ReferenceBinding.binarySearch(fieldName, this.fields);
-+	if (field != null) {
-+		FieldBinding result = null;
-+		try {
-+			result = resolveTypeFor(field);
-+			return result;
-+		} finally {
-+			if (result == null) {
-+				// ensure fields are consistent reqardless of the error
-+				int newSize = this.fields.length - 1;
-+				if (newSize == 0) {
-+					this.fields = Binding.NO_FIELDS;
-+				} else {
-+					FieldBinding[] newFields = new FieldBinding[newSize];
-+					int index = 0;
-+					for (int i = 0, length = this.fields.length; i < length; i++) {
-+						FieldBinding f = this.fields[i];
-+						if (f == field) continue;
-+						newFields[index++] = f;
-+					}
-+					this.fields = newFields;
-+				}
-+			}
-+		}
-+	}
-+	return null;
- }
- 
- // NOTE: the return type, arg & exception types of each method of a source type are resolved when needed
- public MethodBinding[] getMethods(char[] selector) {
--  if ((this.tagBits & TagBits.AreMethodsComplete) != 0) {
--    long range;
--    if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
--      int start = (int) range, end = (int) (range >> 32);
--      int length = end - start + 1;
--      MethodBinding[] result;
--      System.arraycopy(this.methods, start, result = new MethodBinding[length], 0, length);
--      return result;
--    } else {
--      return Binding.NO_METHODS;      
--    }
--  }
--  // lazily sort methods
--  if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
--    int length = this.methods.length;
--    if (length > 1)
--      ReferenceBinding.sortMethods(this.methods, 0, length);
--    this.tagBits |= TagBits.AreMethodsSorted;
--  }
--  MethodBinding[] result; 
--  long range;
--  if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
--    int start = (int) range, end = (int) (range >> 32);
--    for (int i = start; i <= end; i++) {
--      MethodBinding method = this.methods[i];
--      if (resolveTypesFor(method) == null || method.returnType == null) {
--        methods();
--        return getMethods(selector); // try again since the problem methods have been removed
--      }
--    }
--    int length = end - start + 1;
--    System.arraycopy(this.methods, start, result = new MethodBinding[length], 0, length);
--  } else {
--    return Binding.NO_METHODS;
--  }
--  boolean isSource15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
--  for (int i = 0, length = result.length - 1; i < length; i++) {
--    MethodBinding method = result[i];
--    for (int j = length; j > i; j--) {
--      boolean paramsMatch = isSource15
--        ? method.areParameterErasuresEqual(result[j])
--        : method.areParametersEqual(result[j]);
--      if (paramsMatch) {
--        methods();
--        return getMethods(selector); // try again since the duplicate methods have been removed
--      }
--    }
--  }
--  return result;
-+	if ((this.tagBits & TagBits.AreMethodsComplete) != 0) {
-+		long range;
-+		if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
-+			int start = (int) range, end = (int) (range >> 32);
-+			int length = end - start + 1;
-+			MethodBinding[] result;
-+			System.arraycopy(this.methods, start, result = new MethodBinding[length], 0, length);
-+			return result;
-+		} else {
-+			return Binding.NO_METHODS;
-+		}
-+	}
-+	// lazily sort methods
-+	if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-+		int length = this.methods.length;
-+		if (length > 1)
-+			ReferenceBinding.sortMethods(this.methods, 0, length);
-+		this.tagBits |= TagBits.AreMethodsSorted;
-+	}
-+	MethodBinding[] result;
-+	long range;
-+	if ((range = ReferenceBinding.binarySearch(selector, this.methods)) >= 0) {
-+		int start = (int) range, end = (int) (range >> 32);
-+		for (int i = start; i <= end; i++) {
-+			MethodBinding method = this.methods[i];
-+			if (resolveTypesFor(method) == null || method.returnType == null) {
-+				methods();
-+				return getMethods(selector); // try again since the problem methods have been removed
-+			}
-+		}
-+		int length = end - start + 1;
-+		System.arraycopy(this.methods, start, result = new MethodBinding[length], 0, length);
-+	} else {
-+		return Binding.NO_METHODS;
-+	}
-+	boolean isSource15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
-+	for (int i = 0, length = result.length - 1; i < length; i++) {
-+		MethodBinding method = result[i];
-+		for (int j = length; j > i; j--) {
-+			boolean paramsMatch = isSource15
-+				? method.areParameterErasuresEqual(result[j])
-+				: method.areParametersEqual(result[j]);
-+			if (paramsMatch) {
-+				methods();
-+				return getMethods(selector); // try again since the duplicate methods have been removed
-+			}
-+		}
-+	}
-+	return result;
- }
- /* Answer the synthetic field for <actualOuterLocalVariable>
--* or null if one does not exist.
-+*	or null if one does not exist.
- */
- public FieldBinding getSyntheticField(LocalVariableBinding actualOuterLocalVariable) {
--  if (this.synthetics == null || this.synthetics[SourceTypeBinding.FIELD_EMUL] == null) return null;
--  return (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(actualOuterLocalVariable);
-+	if (this.synthetics == null || this.synthetics[SourceTypeBinding.FIELD_EMUL] == null) return null;
-+	return (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(actualOuterLocalVariable);
- }
- /* Answer the synthetic field for <targetEnclosingType>
--* or null if one does not exist.
-+*	or null if one does not exist.
- */
- public FieldBinding getSyntheticField(ReferenceBinding targetEnclosingType, boolean onlyExactMatch) {
- 
--  if (this.synthetics == null || this.synthetics[SourceTypeBinding.FIELD_EMUL] == null) return null;
--  FieldBinding field = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(targetEnclosingType);
--  if (field != null) return field;
--
--  // type compatibility : to handle cases such as
--  // class T { class M{}}
--  // class S extends T { class N extends M {}} --> need to use S as a default enclosing instance for the super constructor call in N().
--  if (!onlyExactMatch){
--    Iterator accessFields = this.synthetics[SourceTypeBinding.FIELD_EMUL].values().iterator();
--    while (accessFields.hasNext()) {
--      field = (FieldBinding) accessFields.next();
--      if (CharOperation.prefixEquals(TypeConstants.SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, field.name)
--        && field.type.findSuperTypeOriginatingFrom(targetEnclosingType) != null)
--          return field;
--    }
--  }
--  return null;
-+	if (this.synthetics == null || this.synthetics[SourceTypeBinding.FIELD_EMUL] == null) return null;
-+	FieldBinding field = (FieldBinding) this.synthetics[SourceTypeBinding.FIELD_EMUL].get(targetEnclosingType);
-+	if (field != null) return field;
-+
-+	// type compatibility : to handle cases such as
-+	// class T { class M{}}
-+	// class S extends T { class N extends M {}} --> need to use S as a default enclosing instance for the super constructor call in N().
-+	if (!onlyExactMatch){
-+		Iterator accessFields = this.synthetics[SourceTypeBinding.FIELD_EMUL].values().iterator();
-+		while (accessFields.hasNext()) {
-+			field = (FieldBinding) accessFields.next();
-+			if (CharOperation.prefixEquals(TypeConstants.SYNTHETIC_ENCLOSING_INSTANCE_PREFIX, field.name)
-+				&& field.type.findSuperTypeOriginatingFrom(targetEnclosingType) != null)
-+					return field;
-+		}
-+	}
-+	return null;
- }
--/* 
-+/*
-  * Answer the bridge method associated for an  inherited methods or null if one does not exist
-  */
- public SyntheticMethodBinding getSyntheticBridgeMethod(MethodBinding inheritedMethodToBridge) {
--  if (this.synthetics == null) return null;
--  if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null) return null;
--  SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(inheritedMethodToBridge);
--  if (accessors == null) return null;
--  return accessors[1];
-+	if (this.synthetics == null) return null;
-+	if (this.synthetics[SourceTypeBinding.METHOD_EMUL] == null) return null;
-+	SyntheticMethodBinding[] accessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(inheritedMethodToBridge);
-+	if (accessors == null) return null;
-+	return accessors[1];
- }
- 
- /**
-  * @see org.eclipse.jdt.internal.compiler.lookup.Binding#initializeDeprecatedAnnotationTagBits()
-  */
- public void initializeDeprecatedAnnotationTagBits() {
--  if ((this.tagBits & TagBits.DeprecatedAnnotationResolved) == 0) {
--    TypeDeclaration typeDecl = this.scope.referenceContext;
--    boolean old = typeDecl.staticInitializerScope.insideTypeAnnotation;
--    try {
--      typeDecl.staticInitializerScope.insideTypeAnnotation = true;
--      ASTNode.resolveDeprecatedAnnotations(typeDecl.staticInitializerScope, typeDecl.annotations, this);
--      this.tagBits |= TagBits.DeprecatedAnnotationResolved;
--    } finally {
--      typeDecl.staticInitializerScope.insideTypeAnnotation = old;
--    }
--    if ((this.tagBits & TagBits.AnnotationDeprecated) != 0) {
--      this.modifiers |= ClassFileConstants.AccDeprecated;
--    }
--  }
-+	if ((this.tagBits & TagBits.DeprecatedAnnotationResolved) == 0) {
-+		TypeDeclaration typeDecl = this.scope.referenceContext;
-+		boolean old = typeDecl.staticInitializerScope.insideTypeAnnotation;
-+		try {
-+			typeDecl.staticInitializerScope.insideTypeAnnotation = true;
-+			ASTNode.resolveDeprecatedAnnotations(typeDecl.staticInitializerScope, typeDecl.annotations, this);
-+			this.tagBits |= TagBits.DeprecatedAnnotationResolved;
-+		} finally {
-+			typeDecl.staticInitializerScope.insideTypeAnnotation = old;
-+		}
-+		if ((this.tagBits & TagBits.AnnotationDeprecated) != 0) {
-+			this.modifiers |= ClassFileConstants.AccDeprecated;
-+		}
-+	}
- }
- 
- // ensure the receiver knows its hierarchy & fields/methods so static imports can be resolved correctly
- // see bug 230026
- void initializeForStaticImports() {
--  if (this.scope == null) return; // already initialized
-+	if (this.scope == null) return; // already initialized
- 
--  if (this.superInterfaces == null)
--    this.scope.connectTypeHierarchy();
--  this.scope.buildFields();
--  this.scope.buildMethods();
-+	if (this.superInterfaces == null)
-+		this.scope.connectTypeHierarchy();
-+	this.scope.buildFields();
-+	this.scope.buildMethods();
- }
- 
- /**
-@@ -1018,655 +1016,613 @@
-  */
- public boolean isEquivalentTo(TypeBinding otherType) {
- 
--  if (this == otherType) return true;
--  if (otherType == null) return false;
--  switch(otherType.kind()) {
--
--    case Binding.WILDCARD_TYPE :
--    case Binding.INTERSECTION_TYPE:
--      return ((WildcardBinding) otherType).boundCheck(this);
--
--    case Binding.PARAMETERIZED_TYPE :
--      if ((otherType.tagBits & TagBits.HasDirectWildcard) == 0 && (!this.isMemberType() || !otherType.isMemberType())) 
--        return false; // should have been identical
--      ParameterizedTypeBinding otherParamType = (ParameterizedTypeBinding) otherType;
--      if (this != otherParamType.genericType()) 
--        return false;
--      if (!isStatic()) { // static member types do not compare their enclosing
--              ReferenceBinding enclosing = enclosingType();
--              if (enclosing != null) {
--                ReferenceBinding otherEnclosing = otherParamType.enclosingType();
--                if (otherEnclosing == null) return false;
--                if ((otherEnclosing.tagBits & TagBits.HasDirectWildcard) == 0) {
--            if (enclosing != otherEnclosing) return false;
--                } else {
--                  if (!enclosing.isEquivalentTo(otherParamType.enclosingType())) return false;
--                }
--              }       
--      }
--      int length = this.typeVariables == null ? 0 : this.typeVariables.length;
--      TypeBinding[] otherArguments = otherParamType.arguments;
--      int otherLength = otherArguments == null ? 0 : otherArguments.length;
--      if (otherLength != length) 
--        return false;
--      for (int i = 0; i < length; i++)
--        if (!this.typeVariables[i].isTypeArgumentContainedBy(otherArguments[i]))
--          return false;
--      return true;
--
--    case Binding.RAW_TYPE :
--          return otherType.erasure() == this;
--  }
--  return false;
-+	if (this == otherType) return true;
-+	if (otherType == null) return false;
-+	switch(otherType.kind()) {
-+
-+		case Binding.WILDCARD_TYPE :
-+		case Binding.INTERSECTION_TYPE:
-+			return ((WildcardBinding) otherType).boundCheck(this);
-+
-+		case Binding.PARAMETERIZED_TYPE :
-+			if ((otherType.tagBits & TagBits.HasDirectWildcard) == 0 && (!isMemberType() || !otherType.isMemberType()))
-+				return false; // should have been identical
-+			ParameterizedTypeBinding otherParamType = (ParameterizedTypeBinding) otherType;
-+			if (this != otherParamType.genericType())
-+				return false;
-+			if (!isStatic()) { // static member types do not compare their enclosing
-+            	ReferenceBinding enclosing = enclosingType();
-+            	if (enclosing != null) {
-+            		ReferenceBinding otherEnclosing = otherParamType.enclosingType();
-+            		if (otherEnclosing == null) return false;
-+            		if ((otherEnclosing.tagBits & TagBits.HasDirectWildcard) == 0) {
-+						if (enclosing != otherEnclosing) return false;
-+            		} else {
-+            			if (!enclosing.isEquivalentTo(otherParamType.enclosingType())) return false;
-+            		}
-+            	}
-+			}
-+			int length = this.typeVariables == null ? 0 : this.typeVariables.length;
-+			TypeBinding[] otherArguments = otherParamType.arguments;
-+			int otherLength = otherArguments == null ? 0 : otherArguments.length;
-+			if (otherLength != length)
-+				return false;
-+			for (int i = 0; i < length; i++)
-+				if (!this.typeVariables[i].isTypeArgumentContainedBy(otherArguments[i]))
-+					return false;
-+			return true;
-+
-+		case Binding.RAW_TYPE :
-+	        return otherType.erasure() == this;
-+	}
-+	return false;
- }
- public boolean isGenericType() {
-     return this.typeVariables != Binding.NO_TYPE_VARIABLES;
- }
--public ReferenceBinding[] memberTypes() {
--  return this.memberTypes;
-+public boolean isHierarchyConnected() {
-+	return (this.tagBits & TagBits.EndHierarchyCheck) != 0;
- }
--public FieldBinding getUpdatedFieldBinding(FieldBinding targetField, ReferenceBinding newDeclaringClass) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL] == null)
--    this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL] = new HashMap();
--
--  Hashtable fieldMap = (Hashtable) this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL].get(targetField);
--  if (fieldMap == null) {
--    fieldMap = new Hashtable(5);
--    this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL].put(targetField, fieldMap);
--  }
--  FieldBinding updatedField = (FieldBinding) fieldMap.get(newDeclaringClass);
--  if (updatedField == null){
--    updatedField = new FieldBinding(targetField, newDeclaringClass);
--    fieldMap.put(newDeclaringClass, updatedField);
--  }
--  return updatedField;
--}
--public MethodBinding getUpdatedMethodBinding(MethodBinding targetMethod, ReferenceBinding newDeclaringClass) {
--  if (this.synthetics == null)
--    this.synthetics = new HashMap[MAX_SYNTHETICS];
--  if (this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL] == null)
--    this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL] = new HashMap();
--
--  Hashtable methodMap = (Hashtable) this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL].get(targetMethod);
--  if (methodMap == null) {
--    methodMap = new Hashtable(5);
--    this.synthetics[SourceTypeBinding.RECEIVER_TYPE_EMUL].put(targetMethod, methodMap);
--  }
--  MethodBinding updatedMethod = (MethodBinding) methodMap.get(newDeclaringClass);
--  if (updatedMethod == null){
--    updatedMethod = new MethodBinding(targetMethod, newDeclaringClass);
--    methodMap.put(newDeclaringClass, updatedMethod);
--  }
--  return updatedMethod;
-+public ReferenceBinding[] memberTypes() {
-+	return this.memberTypes;
- }
- public boolean hasMemberTypes() {
-     return this.memberTypes.length > 0;
- }
-+
- // NOTE: the return type, arg & exception types of each method of a source type are resolved when needed
- public MethodBinding[] methods() {
--  if ((this.tagBits & TagBits.AreMethodsComplete) != 0)
--    return this.methods;
--  
--  // lazily sort methods
--  if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
--    int length = this.methods.length;
--    if (length > 1)
--      ReferenceBinding.sortMethods(this.methods, 0, length);
--    this.tagBits |= TagBits.AreMethodsSorted;
--  }
--
--  int failed = 0;
--  MethodBinding[] resolvedMethods = this.methods;
--  try {
--    for (int i = 0, length = this.methods.length; i < length; i++) {
--      if (resolveTypesFor(this.methods[i]) == null) {
--        // do not alter original method array until resolution is over, due to reentrance (143259)
--        if (resolvedMethods == this.methods) {
--          System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
--        }       
--        resolvedMethods[i] = null; // unable to resolve parameters
--        failed++;
--      }
--    }
--
--    // find & report collision cases
--    boolean complyTo15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
--    for (int i = 0, length = this.methods.length; i < length; i++) {
--      MethodBinding method = resolvedMethods[i];
--      if (method == null) 
--        continue;
--      char[] selector = method.selector;
--      AbstractMethodDeclaration methodDecl = null;
--      nextSibling: for (int j = i + 1; j < length; j++) {
--        MethodBinding method2 = resolvedMethods[j];
--        if (method2 == null)
--          continue nextSibling;
--        if (!CharOperation.equals(selector, method2.selector)) 
--          break nextSibling; // methods with same selector are contiguous
--
--        if (complyTo15 && method.returnType != null && method2.returnType != null) {
--          // 8.4.2, for collision to be detected between m1 and m2:
--          // signature(m1) == signature(m2) i.e. same arity, same type parameter count, can be substituted
--          // signature(m1) == erasure(signature(m2)) or erasure(signature(m1)) == signature(m2)
--          TypeBinding[] params1 = method.parameters;
--          TypeBinding[] params2 = method2.parameters;
--          int pLength = params1.length;
--          if (pLength != params2.length)
--            continue nextSibling;
--
--          TypeVariableBinding[] vars = method.typeVariables;
--          TypeVariableBinding[] vars2 = method2.typeVariables;
--          boolean equalTypeVars = vars == vars2;
--          MethodBinding subMethod = method2;
--          if (!equalTypeVars) {
--            MethodBinding temp = method.computeSubstitutedMethod(method2, this.scope.environment());
--            if (temp != null) {
--              equalTypeVars = true;
--              subMethod = temp;
--            }
--          }
--          boolean equalParams = method.areParametersEqual(subMethod);
--          if (equalParams && equalTypeVars) {
--            // duplicates regardless of return types
--          } else if (method.returnType.erasure() == subMethod.returnType.erasure() && (equalParams || method.areParameterErasuresEqual(method2))) {
--            // name clash for sure if not duplicates, report as duplicates
--          } else if (!equalTypeVars && vars != Binding.NO_TYPE_VARIABLES && vars2 != Binding.NO_TYPE_VARIABLES) {
--            // type variables are different so we can distinguish between methods
--            continue nextSibling;
--          } else if (pLength > 0) {
--            // check to see if the erasure of either method is equal to the other
--            int index = pLength;
--            for (; --index >= 0;) {
--              if (params1[index] != params2[index].erasure())
--                break;
--              if (params1[index] == params2[index]) {
--                TypeBinding type = params1[index].leafComponentType();
--                if (type instanceof SourceTypeBinding && type.typeVariables() != Binding.NO_TYPE_VARIABLES) {
--                  index = pLength; // handle comparing identical source types like X<T>... its erasure is itself BUT we need to answer false
--                  break;
--                }
--              }
--            }
--            if (index >= 0 && index < pLength) {
--              for (index = pLength; --index >= 0;)
--                if (params1[index].erasure() != params2[index])
--                  break;
--            }
--            if (index >= 0)
--              continue nextSibling;
--          }
--        } else if (!method.areParametersEqual(method2)) { // prior to 1.5, parameter identity meant a collision case
--          continue nextSibling;
--        }
--        boolean isEnumSpecialMethod = isEnum() && (CharOperation.equals(selector,TypeConstants.VALUEOF) || CharOperation.equals(selector,TypeConstants.VALUES));
--        // report duplicate
--        if (methodDecl == null) {
--          methodDecl = method.sourceMethod(); // cannot be retrieved after binding is lost & may still be null if method is special
--          if (methodDecl != null && methodDecl.binding != null) { // ensure its a valid user defined method
--            if (isEnumSpecialMethod) {
--              this.scope.problemReporter().duplicateEnumSpecialMethod(this, methodDecl);
--            } else {
+ import java.util.Hashtable;
+ import java.util.Iterator;
+@@ -1202,13 +1203,14 @@ public MethodBinding[] methods() {
+         }
+         boolean isEnumSpecialMethod = isEnum() && (CharOperation.equals(selector,TypeConstants.VALUEOF) || CharOperation.equals(selector,TypeConstants.VALUES));
+         // report duplicate
++        int severity = ProblemSeverities.Error;
+         if (methodDecl == null) {
+           methodDecl = method.sourceMethod(); // cannot be retrieved after binding is lost & may still be null if method is special
+           if (methodDecl != null && methodDecl.binding != null) { // ensure its a valid user defined method
+             if (isEnumSpecialMethod) {
+               this.scope.problemReporter().duplicateEnumSpecialMethod(this, methodDecl);
+             } else {
 -              this.scope.problemReporter().duplicateMethodInType(this, methodDecl, method.areParametersEqual(method2));
--            }
--            methodDecl.binding = null;
--            // do not alter original method array until resolution is over, due to reentrance (143259)
--            if (resolvedMethods == this.methods) {
--              System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
--            }               
--            resolvedMethods[i] = null;
--            failed++;
--          }
--        }
--        AbstractMethodDeclaration method2Decl = method2.sourceMethod();
--        if (method2Decl != null && method2Decl.binding != null) { // ensure its a valid user defined method
--          if (isEnumSpecialMethod) {
--            this.scope.problemReporter().duplicateEnumSpecialMethod(this, method2Decl);
--          } else {
++              this.scope.problemReporter().duplicateMethodInType(this, methodDecl, method.areParametersEqual(method2), severity);
+             }
+             methodDecl.binding = null;
+             // do not alter original method array until resolution is over, due to reentrance (143259)
+@@ -1224,7 +1226,7 @@ public MethodBinding[] methods() {
+           if (isEnumSpecialMethod) {
+             this.scope.problemReporter().duplicateEnumSpecialMethod(this, method2Decl);
+           } else {
 -            this.scope.problemReporter().duplicateMethodInType(this, method2Decl, method.areParametersEqual(method2));
--          }
--          method2Decl.binding = null;
--          // do not alter original method array until resolution is over, due to reentrance (143259)
--          if (resolvedMethods == this.methods) {
--            System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
--          }             
--          resolvedMethods[j] = null;
--          failed++;
--        }
--      }
--      if (method.returnType == null && methodDecl == null) { // forget method with invalid return type... was kept to detect possible collisions
--        methodDecl = method.sourceMethod();
--        if (methodDecl != null) {
--          methodDecl.binding = null;
--        }
--        // do not alter original method array until resolution is over, due to reentrance (143259)
--        if (resolvedMethods == this.methods) {
--          System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
--        }           
--        resolvedMethods[i] = null;
--        failed++;
--      }
--    }
--  } finally {
--    if (failed > 0) {
--      int newSize = resolvedMethods.length - failed;
--      if (newSize == 0) {
--        this.methods = Binding.NO_METHODS;
--      } else {
--        MethodBinding[] newMethods = new MethodBinding[newSize];
--        for (int i = 0, j = 0, length = resolvedMethods.length; i < length; i++)
--          if (resolvedMethods[i] != null)
--            newMethods[j++] = resolvedMethods[i];
--        this.methods = newMethods;
--      }
--    }
--
--    // handle forward references to potential default abstract methods
--    addDefaultAbstractMethods();
--    this.tagBits |= TagBits.AreMethodsComplete;
--  }   
--  return this.methods;
--}
--private FieldBinding resolveTypeFor(FieldBinding field) {
--  if ((field.modifiers & ExtraCompilerModifiers.AccUnresolved) == 0)
--    return field;
--
--  if (this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
--    if ((field.getAnnotationTagBits() & TagBits.AnnotationDeprecated) != 0)
--      field.modifiers |= ClassFileConstants.AccDeprecated;
--  }
--  if (isViewedAsDeprecated() && !field.isDeprecated())
--    field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;  
--  if (hasRestrictedAccess())
--    field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
--  FieldDeclaration[] fieldDecls = this.scope.referenceContext.fields;
--  for (int f = 0, length = fieldDecls.length; f < length; f++) {
--    if (fieldDecls[f].binding != field)
--      continue;
--
--      MethodScope initializationScope = field.isStatic() 
--        ? this.scope.referenceContext.staticInitializerScope 
--        : this.scope.referenceContext.initializerScope;
--      FieldBinding previousField = initializationScope.initializedField;
--      try {
--        initializationScope.initializedField = field;
--        FieldDeclaration fieldDecl = fieldDecls[f];
--        TypeBinding fieldType = 
--          fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT
--            ? initializationScope.environment().convertToRawType(this, false /*do not force conversion of enclosing types*/) // enum constant is implicitly of declaring enum type
--            : fieldDecl.type.resolveType(initializationScope, true /* check bounds*/);
--        field.type = fieldType;
--        field.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
--        if (fieldType == null) {
--          fieldDecl.binding = null;
--          return null;
--        }
--        if (fieldType == TypeBinding.VOID) {
--          this.scope.problemReporter().variableTypeCannotBeVoid(fieldDecl);
--          fieldDecl.binding = null;
--          return null;
--        }
--        if (fieldType.isArrayType() && ((ArrayBinding) fieldType).leafComponentType == TypeBinding.VOID) {
--          this.scope.problemReporter().variableTypeCannotBeVoidArray(fieldDecl);
--          fieldDecl.binding = null;
--          return null;
--        }
--        if ((fieldType.tagBits & TagBits.HasMissingType) != 0) {
--          field.tagBits |= TagBits.HasMissingType;
--        }           
--        TypeBinding leafType = fieldType.leafComponentType();
--        if (leafType instanceof ReferenceBinding && (((ReferenceBinding)leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0) {
--          field.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
--        }       
--      } finally {
--          initializationScope.initializedField = previousField;
--      }
--    return field;
--  }
--  return null; // should never reach this point
-+	if ((this.tagBits & TagBits.AreMethodsComplete) != 0)
-+		return this.methods;
-+
-+	// lazily sort methods
-+	if ((this.tagBits & TagBits.AreMethodsSorted) == 0) {
-+		int length = this.methods.length;
-+		if (length > 1)
-+			ReferenceBinding.sortMethods(this.methods, 0, length);
-+		this.tagBits |= TagBits.AreMethodsSorted;
-+	}
-+
-+	int failed = 0;
-+	MethodBinding[] resolvedMethods = this.methods;
-+	try {
-+		for (int i = 0, length = this.methods.length; i < length; i++) {
-+			if (resolveTypesFor(this.methods[i]) == null) {
-+				// do not alter original method array until resolution is over, due to reentrance (143259)
-+				if (resolvedMethods == this.methods) {
-+					System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
-+				}
-+				resolvedMethods[i] = null; // unable to resolve parameters
-+				failed++;
-+			}
-+		}
-+
-+		// find & report collision cases
-+		boolean complyTo15 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5;
-+		boolean complyTo17 = this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_7;
-+		for (int i = 0, length = this.methods.length; i < length; i++) {
-+			MethodBinding method = resolvedMethods[i];
-+			if (method == null)
-+				continue;
-+			char[] selector = method.selector;
-+			AbstractMethodDeclaration methodDecl = null;
-+			nextSibling: for (int j = i + 1; j < length; j++) {
-+				MethodBinding method2 = resolvedMethods[j];
-+				if (method2 == null)
-+					continue nextSibling;
-+				if (!CharOperation.equals(selector, method2.selector))
-+					break nextSibling; // methods with same selector are contiguous
-+
-+				if (complyTo15 && method.returnType != null && method2.returnType != null) {
-+					// 8.4.2, for collision to be detected between m1 and m2:
-+					// signature(m1) == signature(m2) i.e. same arity, same type parameter count, can be substituted
-+					// signature(m1) == erasure(signature(m2)) or erasure(signature(m1)) == signature(m2)
-+					TypeBinding[] params1 = method.parameters;
-+					TypeBinding[] params2 = method2.parameters;
-+					int pLength = params1.length;
-+					if (pLength != params2.length)
-+						continue nextSibling;
-+
-+					TypeVariableBinding[] vars = method.typeVariables;
-+					TypeVariableBinding[] vars2 = method2.typeVariables;
-+					boolean equalTypeVars = vars == vars2;
-+					MethodBinding subMethod = method2;
-+					if (!equalTypeVars) {
-+						MethodBinding temp = method.computeSubstitutedMethod(method2, this.scope.environment());
-+						if (temp != null) {
-+							equalTypeVars = true;
-+							subMethod = temp;
-+						}
-+					}
-+					boolean equalParams = method.areParametersEqual(subMethod);
-+					if (equalParams && equalTypeVars) {
-+						// duplicates regardless of return types
-+					} else if ((complyTo17 || method.returnType.erasure() == subMethod.returnType.erasure())
-+						&& (equalParams || method.areParameterErasuresEqual(method2))) {
-+						// with fix for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6182950
-+						// we now ignore return types when detecting duplicates, just as we did before 1.5
-+						// name clash for sure if not duplicates, report as duplicates
-+						// FYI for now we will only make this change when compliance is set to 1.7 or higher
-+					} else if (!equalTypeVars && vars != Binding.NO_TYPE_VARIABLES && vars2 != Binding.NO_TYPE_VARIABLES) {
-+						// type variables are different so we can distinguish between methods
-+						continue nextSibling;
-+					} else if (pLength > 0) {
-+						// check to see if the erasure of either method is equal to the other
-+						int index = pLength;
-+						for (; --index >= 0;) {
-+							if (params1[index] != params2[index].erasure())
-+								break;
-+							if (params1[index] == params2[index]) {
-+								TypeBinding type = params1[index].leafComponentType();
-+								if (type instanceof SourceTypeBinding && type.typeVariables() != Binding.NO_TYPE_VARIABLES) {
-+									index = pLength; // handle comparing identical source types like X<T>... its erasure is itself BUT we need to answer false
-+									break;
-+								}
-+							}
-+						}
-+						if (index >= 0 && index < pLength) {
-+							for (index = pLength; --index >= 0;)
-+								if (params1[index].erasure() != params2[index])
-+									break;
-+						}
-+						if (index >= 0)
-+							continue nextSibling;
-+					}
-+				} else if (!method.areParametersEqual(method2)) { // prior to 1.5, parameter identity meant a collision case
-+					continue nextSibling;
-+				}
-+				boolean isEnumSpecialMethod = isEnum() && (CharOperation.equals(selector,TypeConstants.VALUEOF) || CharOperation.equals(selector,TypeConstants.VALUES));
-+				// report duplicate
-+				boolean removeMethod2 = true;
-+				if (methodDecl == null) {
-+					methodDecl = method.sourceMethod(); // cannot be retrieved after binding is lost & may still be null if method is special
-+					if (methodDecl != null && methodDecl.binding != null) { // ensure its a valid user defined method
-+						boolean removeMethod = method.returnType == null && method2.returnType != null;
-+						if (isEnumSpecialMethod) {
-+							this.scope.problemReporter().duplicateEnumSpecialMethod(this, methodDecl);
-+							// remove user defined methods & keep the synthetic
-+							removeMethod = true;
-+						} else {
-+							this.scope.problemReporter().duplicateMethodInType(this, methodDecl, method.areParametersEqual(method2));
-+						}
-+						if (removeMethod) {
-+							removeMethod2 = false;
-+							methodDecl.binding = null;
-+							// do not alter original method array until resolution is over, due to reentrance (143259)
-+							if (resolvedMethods == this.methods)
-+								System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
-+							resolvedMethods[i] = null;
-+							failed++;
-+						}
-+					}
-+				}
-+				AbstractMethodDeclaration method2Decl = method2.sourceMethod();
-+				if (method2Decl != null && method2Decl.binding != null) { // ensure its a valid user defined method
-+					if (isEnumSpecialMethod) {
-+						this.scope.problemReporter().duplicateEnumSpecialMethod(this, method2Decl);
-+						removeMethod2 = true;
-+					} else {
-+						this.scope.problemReporter().duplicateMethodInType(this, method2Decl, method.areParametersEqual(method2));
-+					}
-+					if (removeMethod2) {
-+						method2Decl.binding = null;
-+						// do not alter original method array until resolution is over, due to reentrance (143259)
-+						if (resolvedMethods == this.methods)
-+							System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
-+						resolvedMethods[j] = null;
-+						failed++;
-+					}
-+				}
-+			}
-+			if (method.returnType == null && resolvedMethods[i] != null) { // forget method with invalid return type... was kept to detect possible collisions
-+				methodDecl = method.sourceMethod();
-+				if (methodDecl != null)
-+					methodDecl.binding = null;
-+				// do not alter original method array until resolution is over, due to reentrance (143259)
-+				if (resolvedMethods == this.methods)
-+					System.arraycopy(this.methods, 0, resolvedMethods = new MethodBinding[length], 0, length);
-+				resolvedMethods[i] = null;
-+				failed++;
-+			}
-+		}
-+	} finally {
-+		if (failed > 0) {
-+			int newSize = resolvedMethods.length - failed;
-+			if (newSize == 0) {
-+				this.methods = Binding.NO_METHODS;
-+			} else {
-+				MethodBinding[] newMethods = new MethodBinding[newSize];
-+				for (int i = 0, j = 0, length = resolvedMethods.length; i < length; i++)
-+					if (resolvedMethods[i] != null)
-+						newMethods[j++] = resolvedMethods[i];
-+				this.methods = newMethods;
-+			}
-+		}
-+
-+		// handle forward references to potential default abstract methods
-+		addDefaultAbstractMethods();
-+		this.tagBits |= TagBits.AreMethodsComplete;
-+	}
-+	return this.methods;
-+}
-+public FieldBinding resolveTypeFor(FieldBinding field) {
-+	if ((field.modifiers & ExtraCompilerModifiers.AccUnresolved) == 0)
-+		return field;
-+
-+	if (this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
-+		if ((field.getAnnotationTagBits() & TagBits.AnnotationDeprecated) != 0)
-+			field.modifiers |= ClassFileConstants.AccDeprecated;
-+	}
-+	if (isViewedAsDeprecated() && !field.isDeprecated())
-+		field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
-+	if (hasRestrictedAccess())
-+		field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
-+	FieldDeclaration[] fieldDecls = this.scope.referenceContext.fields;
-+	for (int f = 0, length = fieldDecls.length; f < length; f++) {
-+		if (fieldDecls[f].binding != field)
-+			continue;
-+
-+			MethodScope initializationScope = field.isStatic()
-+				? this.scope.referenceContext.staticInitializerScope
-+				: this.scope.referenceContext.initializerScope;
-+			FieldBinding previousField = initializationScope.initializedField;
-+			try {
-+				initializationScope.initializedField = field;
-+				FieldDeclaration fieldDecl = fieldDecls[f];
-+				TypeBinding fieldType =
-+					fieldDecl.getKind() == AbstractVariableDeclaration.ENUM_CONSTANT
-+						? initializationScope.environment().convertToRawType(this, false /*do not force conversion of enclosing types*/) // enum constant is implicitly of declaring enum type
-+						: fieldDecl.type.resolveType(initializationScope, true /* check bounds*/);
-+				field.type = fieldType;
-+				field.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
-+				if (fieldType == null) {
-+					fieldDecl.binding = null;
-+					return null;
-+				}
-+				if (fieldType == TypeBinding.VOID) {
-+					this.scope.problemReporter().variableTypeCannotBeVoid(fieldDecl);
-+					fieldDecl.binding = null;
-+					return null;
-+				}
-+				if (fieldType.isArrayType() && ((ArrayBinding) fieldType).leafComponentType == TypeBinding.VOID) {
-+					this.scope.problemReporter().variableTypeCannotBeVoidArray(fieldDecl);
-+					fieldDecl.binding = null;
-+					return null;
-+				}
-+				if ((fieldType.tagBits & TagBits.HasMissingType) != 0) {
-+					field.tagBits |= TagBits.HasMissingType;
-+				}
-+				TypeBinding leafType = fieldType.leafComponentType();
-+				if (leafType instanceof ReferenceBinding && (((ReferenceBinding)leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0) {
-+					field.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
-+				}
-+			} finally {
-+			    initializationScope.initializedField = previousField;
-+			}
-+		return field;
-+	}
-+	return null; // should never reach this point
- }
- public MethodBinding resolveTypesFor(MethodBinding method) {
--  if ((method.modifiers & ExtraCompilerModifiers.AccUnresolved) == 0)
--    return method;
-+	if ((method.modifiers & ExtraCompilerModifiers.AccUnresolved) == 0)
-+		return method;
- 
--  if (this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
--    if ((method.getAnnotationTagBits() & TagBits.AnnotationDeprecated) != 0)
--      method.modifiers |= ClassFileConstants.AccDeprecated;
--  }
--  if (isViewedAsDeprecated() && !method.isDeprecated())
--    method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
--  if (hasRestrictedAccess())
--    method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
--
--  AbstractMethodDeclaration methodDecl = method.sourceMethod();
--  if (methodDecl == null) return null; // method could not be resolved in previous iteration
--
--  TypeParameter[] typeParameters = methodDecl.typeParameters();
--  if (typeParameters != null) {
--    methodDecl.scope.connectTypeVariables(typeParameters, true);
--    // Perform deferred bound checks for type variables (only done after type variable hierarchy is connected)
--    for (int i = 0, paramLength = typeParameters.length; i < paramLength; i++)
--      typeParameters[i].checkBounds(methodDecl.scope);
--  }
--  TypeReference[] exceptionTypes = methodDecl.thrownExceptions;
--  if (exceptionTypes != null) {
--    int size = exceptionTypes.length;
--    method.thrownExceptions = new ReferenceBinding[size];
--    int count = 0;
--    ReferenceBinding resolvedExceptionType;
--    for (int i = 0; i < size; i++) {
--      resolvedExceptionType = (ReferenceBinding) exceptionTypes[i].resolveType(methodDecl.scope, true /* check bounds*/);
--      if (resolvedExceptionType == null)
--        continue;
--      if (resolvedExceptionType.isBoundParameterizedType()) {
--        methodDecl.scope.problemReporter().invalidParameterizedExceptionType(resolvedExceptionType, exceptionTypes[i]);
--        continue;
--      }
--      if (resolvedExceptionType.findSuperTypeOriginatingFrom(TypeIds.T_JavaLangThrowable, true) == null) {
--        if (resolvedExceptionType.isValidBinding()) {
--          methodDecl.scope.problemReporter().cannotThrowType(exceptionTypes[i], resolvedExceptionType);
--          continue;
--        }
--      }
--      if ((resolvedExceptionType.tagBits & TagBits.HasMissingType) != 0) {
--        method.tagBits |= TagBits.HasMissingType;
--      }           
--      method.modifiers |= (resolvedExceptionType.modifiers & ExtraCompilerModifiers.AccGenericSignature);
--      method.thrownExceptions[count++] = resolvedExceptionType;
--    }
--    if (count < size)
--      System.arraycopy(method.thrownExceptions, 0, method.thrownExceptions = new ReferenceBinding[count], 0, count);
--  }
--
--  boolean foundArgProblem = false;
--  Argument[] arguments = methodDecl.arguments;
--  if (arguments != null) {
--    int size = arguments.length;
--    method.parameters = Binding.NO_PARAMETERS;
--    TypeBinding[] newParameters = new TypeBinding[size];
--    for (int i = 0; i < size; i++) {
--      Argument arg = arguments[i];
--      if (arg.annotations != null) {
--        method.tagBits |= TagBits.HasParameterAnnotations;
--      }
--      TypeBinding parameterType = arg.type.resolveType(methodDecl.scope, true /* check bounds*/);
--      if (parameterType == null) {
--        foundArgProblem = true;
--      } else if (parameterType == TypeBinding.VOID) {
--        methodDecl.scope.problemReporter().argumentTypeCannotBeVoid(this, methodDecl, arg);
--        foundArgProblem = true;
--      } else {
--        if ((parameterType.tagBits & TagBits.HasMissingType) != 0) {
--          method.tagBits |= TagBits.HasMissingType;
--        }           
--        TypeBinding leafType = parameterType.leafComponentType();
--        if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
--          method.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
--        newParameters[i] = parameterType;
--        arg.binding = new LocalVariableBinding(arg, parameterType, arg.modifiers, true);
--      }
--    }
--    // only assign parameters if no problems are found
--    if (!foundArgProblem) {
--      method.parameters = newParameters;
--    }
--  }
--
--  boolean foundReturnTypeProblem = false;
--  if (!method.isConstructor()) {
--    TypeReference returnType = methodDecl instanceof MethodDeclaration
--      ? ((MethodDeclaration) methodDecl).returnType
--      : null;
--    if (returnType == null) {
--      methodDecl.scope.problemReporter().missingReturnType(methodDecl);
--      method.returnType = null;
--      foundReturnTypeProblem = true;
--    } else {
--      TypeBinding methodType = returnType.resolveType(methodDecl.scope, true /* check bounds*/);
--      if (methodType == null) {
--        foundReturnTypeProblem = true;
--      } else if (methodType.isArrayType() && ((ArrayBinding) methodType).leafComponentType == TypeBinding.VOID) {
--        methodDecl.scope.problemReporter().returnTypeCannotBeVoidArray((MethodDeclaration) methodDecl);
--        foundReturnTypeProblem = true;
--      } else {
--        if ((methodType.tagBits & TagBits.HasMissingType) != 0) {
--          method.tagBits |= TagBits.HasMissingType;
--        }         
--        method.returnType = methodType;
--        TypeBinding leafType = methodType.leafComponentType();
--        if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
--          method.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
--      }
--    }
--  }
--  if (foundArgProblem) {
--    methodDecl.binding = null;
--    method.parameters = Binding.NO_PARAMETERS; // see 107004
--    // nullify type parameter bindings as well as they have a backpointer to the method binding
--    // (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=81134)
--    if (typeParameters != null)
--      for (int i = 0, length = typeParameters.length; i < length; i++)
--        typeParameters[i].binding = null;
--    return null;
--  }
--  if (foundReturnTypeProblem)
--    return method; // but its still unresolved with a null return type & is still connected to its method declaration
-+	if (this.scope.compilerOptions().sourceLevel >= ClassFileConstants.JDK1_5) {
-+		if ((method.getAnnotationTagBits() & TagBits.AnnotationDeprecated) != 0)
-+			method.modifiers |= ClassFileConstants.AccDeprecated;
-+	}
-+	if (isViewedAsDeprecated() && !method.isDeprecated())
-+		method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly;
-+	if (hasRestrictedAccess())
-+		method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess;
-+
-+	AbstractMethodDeclaration methodDecl = method.sourceMethod();
-+	if (methodDecl == null) return null; // method could not be resolved in previous iteration
-+
-+	TypeParameter[] typeParameters = methodDecl.typeParameters();
-+	if (typeParameters != null) {
-+		methodDecl.scope.connectTypeVariables(typeParameters, true);
-+		// Perform deferred bound checks for type variables (only done after type variable hierarchy is connected)
-+		for (int i = 0, paramLength = typeParameters.length; i < paramLength; i++)
-+			typeParameters[i].checkBounds(methodDecl.scope);
-+	}
-+	TypeReference[] exceptionTypes = methodDecl.thrownExceptions;
-+	if (exceptionTypes != null) {
-+		int size = exceptionTypes.length;
-+		method.thrownExceptions = new ReferenceBinding[size];
-+		int count = 0;
-+		ReferenceBinding resolvedExceptionType;
-+		for (int i = 0; i < size; i++) {
-+			resolvedExceptionType = (ReferenceBinding) exceptionTypes[i].resolveType(methodDecl.scope, true /* check bounds*/);
-+			if (resolvedExceptionType == null)
-+				continue;
-+			if (resolvedExceptionType.isBoundParameterizedType()) {
-+				methodDecl.scope.problemReporter().invalidParameterizedExceptionType(resolvedExceptionType, exceptionTypes[i]);
-+				continue;
-+			}
-+			if (resolvedExceptionType.findSuperTypeOriginatingFrom(TypeIds.T_JavaLangThrowable, true) == null) {
-+				if (resolvedExceptionType.isValidBinding()) {
-+					methodDecl.scope.problemReporter().cannotThrowType(exceptionTypes[i], resolvedExceptionType);
-+					continue;
-+				}
-+			}
-+			if ((resolvedExceptionType.tagBits & TagBits.HasMissingType) != 0) {
-+				method.tagBits |= TagBits.HasMissingType;
-+			}
-+			method.modifiers |= (resolvedExceptionType.modifiers & ExtraCompilerModifiers.AccGenericSignature);
-+			method.thrownExceptions[count++] = resolvedExceptionType;
-+		}
-+		if (count < size)
-+			System.arraycopy(method.thrownExceptions, 0, method.thrownExceptions = new ReferenceBinding[count], 0, count);
-+	}
-+
-+	boolean foundArgProblem = false;
-+	Argument[] arguments = methodDecl.arguments;
-+	if (arguments != null) {
-+		int size = arguments.length;
-+		method.parameters = Binding.NO_PARAMETERS;
-+		TypeBinding[] newParameters = new TypeBinding[size];
-+		for (int i = 0; i < size; i++) {
-+			Argument arg = arguments[i];
-+			if (arg.annotations != null) {
-+				method.tagBits |= TagBits.HasParameterAnnotations;
-+			}
-+			TypeBinding parameterType = arg.type.resolveType(methodDecl.scope, true /* check bounds*/);
-+			if (parameterType == null) {
-+				foundArgProblem = true;
-+			} else if (parameterType == TypeBinding.VOID) {
-+				methodDecl.scope.problemReporter().argumentTypeCannotBeVoid(this, methodDecl, arg);
-+				foundArgProblem = true;
-+			} else {
-+				if ((parameterType.tagBits & TagBits.HasMissingType) != 0) {
-+					method.tagBits |= TagBits.HasMissingType;
-+				}
-+				TypeBinding leafType = parameterType.leafComponentType();
-+				if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
-+					method.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
-+				newParameters[i] = parameterType;
-+				arg.binding = new LocalVariableBinding(arg, parameterType, arg.modifiers, true);
-+			}
-+		}
-+		// only assign parameters if no problems are found
-+		if (!foundArgProblem) {
-+			method.parameters = newParameters;
-+		}
-+	}
-+
-+	boolean foundReturnTypeProblem = false;
-+	if (!method.isConstructor()) {
-+		TypeReference returnType = methodDecl instanceof MethodDeclaration
-+			? ((MethodDeclaration) methodDecl).returnType
-+			: null;
-+		if (returnType == null) {
-+			methodDecl.scope.problemReporter().missingReturnType(methodDecl);
-+			method.returnType = null;
-+			foundReturnTypeProblem = true;
-+		} else {
-+			TypeBinding methodType = returnType.resolveType(methodDecl.scope, true /* check bounds*/);
-+			if (methodType == null) {
-+				foundReturnTypeProblem = true;
-+			} else if (methodType.isArrayType() && ((ArrayBinding) methodType).leafComponentType == TypeBinding.VOID) {
-+				methodDecl.scope.problemReporter().returnTypeCannotBeVoidArray((MethodDeclaration) methodDecl);
-+				foundReturnTypeProblem = true;
-+			} else {
-+				if ((methodType.tagBits & TagBits.HasMissingType) != 0) {
-+					method.tagBits |= TagBits.HasMissingType;
-+				}
-+				method.returnType = methodType;
-+				TypeBinding leafType = methodType.leafComponentType();
-+				if (leafType instanceof ReferenceBinding && (((ReferenceBinding) leafType).modifiers & ExtraCompilerModifiers.AccGenericSignature) != 0)
-+					method.modifiers |= ExtraCompilerModifiers.AccGenericSignature;
-+			}
-+		}
-+	}
-+	if (foundArgProblem) {
-+		methodDecl.binding = null;
-+		method.parameters = Binding.NO_PARAMETERS; // see 107004
-+		// nullify type parameter bindings as well as they have a backpointer to the method binding
-+		// (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=81134)
-+		if (typeParameters != null)
-+			for (int i = 0, length = typeParameters.length; i < length; i++)
-+				typeParameters[i].binding = null;
-+		return null;
-+	}
-+	if (foundReturnTypeProblem)
-+		return method; // but its still unresolved with a null return type & is still connected to its method declaration
- 
--  method.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
--  return method;
-+	method.modifiers &= ~ExtraCompilerModifiers.AccUnresolved;
-+	return method;
- }
- public AnnotationHolder retrieveAnnotationHolder(Binding binding, boolean forceInitialization) {
--  if (forceInitialization)
--    binding.getAnnotationTagBits(); // ensure annotations are up to date
--  return super.retrieveAnnotationHolder(binding, false);
-+	if (forceInitialization)
-+		binding.getAnnotationTagBits(); // ensure annotations are up to date
-+	return super.retrieveAnnotationHolder(binding, false);
- }
- public void setFields(FieldBinding[] fields) {
--  this.fields = fields;
-+	this.fields = fields;
- }
- public void setMethods(MethodBinding[] methods) {
--  this.methods = methods;
-+	this.methods = methods;
- }
- public final int sourceEnd() {
--  return this.scope.referenceContext.sourceEnd;
-+	return this.scope.referenceContext.sourceEnd;
- }
- public final int sourceStart() {
--  return this.scope.referenceContext.sourceStart;
-+	return this.scope.referenceContext.sourceStart;
- }
- SimpleLookupTable storedAnnotations(boolean forceInitialize) {
--  if (forceInitialize && this.storedAnnotations == null && this.scope != null) { // scope null when no annotation cached, and type got processed fully (159631)
--    this.scope.referenceCompilationUnit().compilationResult.hasAnnotations = true;
--    if (!this.scope.environment().globalOptions.storeAnnotations)
--      return null; // not supported during this compile
--    this.storedAnnotations = new SimpleLookupTable(3);
--  }
--  return this.storedAnnotations;
-+	if (forceInitialize && this.storedAnnotations == null && this.scope != null) { // scope null when no annotation cached, and type got processed fully (159631)
-+		this.scope.referenceCompilationUnit().compilationResult.hasAnnotations = true;
-+		if (!this.scope.environment().globalOptions.storeAnnotations)
-+			return null; // not supported during this compile
-+		this.storedAnnotations = new SimpleLookupTable(3);
-+	}
-+	return this.storedAnnotations;
- }
- public ReferenceBinding superclass() {
--  return this.superclass;
-+	return this.superclass;
- }
- public ReferenceBinding[] superInterfaces() {
--  return this.superInterfaces;
-+	return this.superInterfaces;
- }
--// TODO (philippe) could be a performance issue since some senders are building the list just to count them
--public SyntheticMethodBinding[] syntheticMethods() {
--  
--  if (this.synthetics == null || this.synthetics[SourceTypeBinding.METHOD_EMUL] == null || this.synthetics[SourceTypeBinding.METHOD_EMUL].size() == 0) return null;
- 
--  // difficult to compute size up front because of the embedded arrays so assume there is only 1
--  int index = 0;
--  SyntheticMethodBinding[] bindings = new SyntheticMethodBinding[1];
--  Iterator fieldsOrMethods = this.synthetics[SourceTypeBinding.METHOD_EMUL].keySet().iterator();
--  while (fieldsOrMethods.hasNext()) {
--
--    Object fieldOrMethod = fieldsOrMethods.next();
--
--    if (fieldOrMethod instanceof MethodBinding) {
--
--      SyntheticMethodBinding[] methodAccessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(fieldOrMethod);
--      int numberOfAccessors = 0;
--      if (methodAccessors[0] != null) numberOfAccessors++;
--      if (methodAccessors[1] != null) numberOfAccessors++;
--      if (index + numberOfAccessors > bindings.length)
--        System.arraycopy(bindings, 0, (bindings = new SyntheticMethodBinding[index + numberOfAccessors]), 0, index);
--      if (methodAccessors[0] != null) 
--        bindings[index++] = methodAccessors[0]; // super access 
--      if (methodAccessors[1] != null) 
--        bindings[index++] = methodAccessors[1]; // normal access or bridge
--
--    } else {
--
--      SyntheticMethodBinding[] fieldAccessors = (SyntheticMethodBinding[]) this.synthetics[SourceTypeBinding.METHOD_EMUL].get(fieldOrMethod);
--      int numberOfAccessors = 0;
--      if (fieldAccessors[0] != null) numberOfAccessors++;
--      if (fieldAccessors[1] != null) numberOfAccessors++;
--      if (index + numberOfAccessors > bindings.length)
--        System.arraycopy(bindings, 0, (bindings = new SyntheticMethodBinding[index + numberOfAccessors]), 0, index);
--      if (fieldAccessors[0] != null) 
--        bindings[index++] = fieldAccessors[0]; // read access
--      if (fieldAccessors[1] != null) 
--        bindings[index++] = fieldAccessors[1]; // write access
--    }
--  }
--
--  // sort them in according to their own indexes
--  int length;
--  SyntheticMethodBinding[] sortedBindings = new SyntheticMethodBinding[length = bindings.length];
--  for (int i = 0; i < length; i++){
--    SyntheticMethodBinding binding = bindings[i];
--    sortedBindings[binding.index] = binding;
--  }
--  return sortedBindings;
-+public SyntheticMethodBinding[] syntheticMethods() {
-+	if (this.synthetics == null
-+			|| this.synthetics[SourceTypeBinding.METHOD_EMUL] == null
-+			|| this.synthetics[SourceTypeBinding.METHOD_EMUL].size() == 0) {
-+		return null;
-+	}
-+	// difficult to compute size up front because of the embedded arrays so assume there is only 1
-+	int index = 0;
-+	SyntheticMethodBinding[] bindings = new SyntheticMethodBinding[1];
-+	Iterator methodArrayIterator = this.synthetics[SourceTypeBinding.METHOD_EMUL].values().iterator();
-+	while (methodArrayIterator.hasNext()) {
-+		SyntheticMethodBinding[] methodAccessors = (SyntheticMethodBinding[]) methodArrayIterator.next();
-+		for (int i = 0, max = methodAccessors.length; i < max; i++) {
-+			if (methodAccessors[i] != null) {
-+				if (index+1 > bindings.length) {
-+					System.arraycopy(bindings, 0, (bindings = new SyntheticMethodBinding[index + 1]), 0, index);
-+				}
-+				bindings[index++] = methodAccessors[i];
-+			}
-+		}
-+	}
-+	// sort them in according to their own indexes
-+	int length;
-+	SyntheticMethodBinding[] sortedBindings = new SyntheticMethodBinding[length = bindings.length];
-+	for (int i = 0; i < length; i++){
-+		SyntheticMethodBinding binding = bindings[i];
-+		sortedBindings[binding.index] = binding;
-+	}
-+	return sortedBindings;
- }
- /**
-  * Answer the collection of synthetic fields to append into the classfile
-  */
- public FieldBinding[] syntheticFields() {
--  
--  if (this.synthetics == null) return null;
--
--  int fieldSize = this.synthetics[SourceTypeBinding.FIELD_EMUL] == null ? 0 : this.synthetics[SourceTypeBinding.FIELD_EMUL].size();
--  int literalSize = this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] == null ? 0 :this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size();
--  int totalSize = fieldSize + literalSize;
--  if (totalSize == 0) return null;
--  FieldBinding[] bindings = new FieldBinding[totalSize];
--
--  // add innerclass synthetics
--  if (this.synthetics[SourceTypeBinding.FIELD_EMUL] != null){
--    Iterator elements = this.synthetics[SourceTypeBinding.FIELD_EMUL].values().iterator();
--    for (int i = 0; i < fieldSize; i++) {
--      SyntheticFieldBinding synthBinding = (SyntheticFieldBinding) elements.next();
--      bindings[synthBinding.index] = synthBinding;
--    }
--  }
--  // add class literal synthetics
--  if (this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] != null){
--    Iterator elements = this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].values().iterator();
--    for (int i = 0; i < literalSize; i++) {
--      SyntheticFieldBinding synthBinding = (SyntheticFieldBinding) elements.next();
--      bindings[fieldSize+synthBinding.index] = synthBinding;
--    }
--  }
--  return bindings;
-+	if (this.synthetics == null) return null;
-+	int fieldSize = this.synthetics[SourceTypeBinding.FIELD_EMUL] == null ? 0 : this.synthetics[SourceTypeBinding.FIELD_EMUL].size();
-+	int literalSize = this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] == null ? 0 :this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].size();
-+	int totalSize = fieldSize + literalSize;
-+	if (totalSize == 0) return null;
-+	FieldBinding[] bindings = new FieldBinding[totalSize];
-+
-+	// add innerclass synthetics
-+	if (this.synthetics[SourceTypeBinding.FIELD_EMUL] != null){
-+		Iterator elements = this.synthetics[SourceTypeBinding.FIELD_EMUL].values().iterator();
-+		for (int i = 0; i < fieldSize; i++) {
-+			SyntheticFieldBinding synthBinding = (SyntheticFieldBinding) elements.next();
-+			bindings[synthBinding.index] = synthBinding;
-+		}
-+	}
-+	// add class literal synthetics
-+	if (this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL] != null){
-+		Iterator elements = this.synthetics[SourceTypeBinding.CLASS_LITERAL_EMUL].values().iterator();
-+		for (int i = 0; i < literalSize; i++) {
-+			SyntheticFieldBinding synthBinding = (SyntheticFieldBinding) elements.next();
-+			bindings[fieldSize+synthBinding.index] = synthBinding;
-+		}
-+	}
-+	return bindings;
- }
- public String toString() {
-     StringBuffer buffer = new StringBuffer(30);
-     buffer.append("(id="); //$NON-NLS-1$
--    if (this.id == TypeIds.NoId) 
-+    if (this.id == TypeIds.NoId)
-         buffer.append("NoId"); //$NON-NLS-1$
--    else 
-+    else
-         buffer.append(this.id);
-     buffer.append(")\n"); //$NON-NLS-1$
--  if (isDeprecated()) buffer.append("deprecated "); //$NON-NLS-1$
--  if (isPublic()) buffer.append("public "); //$NON-NLS-1$
--  if (isProtected()) buffer.append("protected "); //$NON-NLS-1$
--  if (isPrivate()) buffer.append("private "); //$NON-NLS-1$
--  if (isAbstract() && isClass()) buffer.append("abstract "); //$NON-NLS-1$
--  if (isStatic() && isNestedType()) buffer.append("static "); //$NON-NLS-1$
--  if (isFinal()) buffer.append("final "); //$NON-NLS-1$
--
--  if (isEnum()) buffer.append("enum "); //$NON-NLS-1$
--  else if (isAnnotationType()) buffer.append("@interface "); //$NON-NLS-1$
--  else if (isClass()) buffer.append("class "); //$NON-NLS-1$
--  else buffer.append("interface "); //$NON-NLS-1$
--  buffer.append((this.compoundName != null) ? CharOperation.toString(this.compoundName) : "UNNAMED TYPE"); //$NON-NLS-1$
--
--  if (this.typeVariables == null) {
--    buffer.append("<NULL TYPE VARIABLES>"); //$NON-NLS-1$
--  } else if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
--    buffer.append("<"); //$NON-NLS-1$
--    for (int i = 0, length = this.typeVariables.length; i < length; i++) {
--      if (i  > 0) buffer.append(", "); //$NON-NLS-1$
--      if (this.typeVariables[i] == null) {
--        buffer.append("NULL TYPE VARIABLE"); //$NON-NLS-1$
--        continue;
--      }
--      char[] varChars = this.typeVariables[i].toString().toCharArray();
--      buffer.append(varChars, 1, varChars.length - 2);
--    }
--    buffer.append(">"); //$NON-NLS-1$
--  }
--  buffer.append("\n\textends "); //$NON-NLS-1$
--  buffer.append((this.superclass != null) ? this.superclass.debugName() : "NULL TYPE"); //$NON-NLS-1$
--
--  if (this.superInterfaces != null) {
--    if (this.superInterfaces != Binding.NO_SUPERINTERFACES) {
--      buffer.append("\n\timplements : "); //$NON-NLS-1$
--      for (int i = 0, length = this.superInterfaces.length; i < length; i++) {
--        if (i  > 0)
--          buffer.append(", "); //$NON-NLS-1$
--        buffer.append((this.superInterfaces[i] != null) ? this.superInterfaces[i].debugName() : "NULL TYPE"); //$NON-NLS-1$
--      }
--    }
--  } else {
--    buffer.append("NULL SUPERINTERFACES"); //$NON-NLS-1$
--  }
--
--  if (enclosingType() != null) {
--    buffer.append("\n\tenclosing type : "); //$NON-NLS-1$
--    buffer.append(enclosingType().debugName());
--  }
--
--  if (this.fields != null) {
--    if (this.fields != Binding.NO_FIELDS) {
--      buffer.append("\n/*   fields   */"); //$NON-NLS-1$
--      for (int i = 0, length = this.fields.length; i < length; i++)
--          buffer.append('\n').append((this.fields[i] != null) ? this.fields[i].toString() : "NULL FIELD"); //$NON-NLS-1$ 
--    }
--  } else {
--    buffer.append("NULL FIELDS"); //$NON-NLS-1$
--  }
--
--  if (this.methods != null) {
--    if (this.methods != Binding.NO_METHODS) {
--      buffer.append("\n/*   methods   */"); //$NON-NLS-1$
--      for (int i = 0, length = this.methods.length; i < length; i++)
--        buffer.append('\n').append((this.methods[i] != null) ? this.methods[i].toString() : "NULL METHOD"); //$NON-NLS-1$
--    }
--  } else {
--    buffer.append("NULL METHODS"); //$NON-NLS-1$
--  }
--
--  if (this.memberTypes != null) {
--    if (this.memberTypes != Binding.NO_MEMBER_TYPES) {
--      buffer.append("\n/*   members   */"); //$NON-NLS-1$
--      for (int i = 0, length = this.memberTypes.length; i < length; i++)
--        buffer.append('\n').append((this.memberTypes[i] != null) ? this.memberTypes[i].toString() : "NULL TYPE"); //$NON-NLS-1$
--    }
--  } else {
--    buffer.append("NULL MEMBER TYPES"); //$NON-NLS-1$
--  }
-+	if (isDeprecated()) buffer.append("deprecated "); //$NON-NLS-1$
-+	if (isPublic()) buffer.append("public "); //$NON-NLS-1$
-+	if (isProtected()) buffer.append("protected "); //$NON-NLS-1$
-+	if (isPrivate()) buffer.append("private "); //$NON-NLS-1$
-+	if (isAbstract() && isClass()) buffer.append("abstract "); //$NON-NLS-1$
-+	if (isStatic() && isNestedType()) buffer.append("static "); //$NON-NLS-1$
-+	if (isFinal()) buffer.append("final "); //$NON-NLS-1$
-+
-+	if (isEnum()) buffer.append("enum "); //$NON-NLS-1$
-+	else if (isAnnotationType()) buffer.append("@interface "); //$NON-NLS-1$
-+	else if (isClass()) buffer.append("class "); //$NON-NLS-1$
-+	else buffer.append("interface "); //$NON-NLS-1$
-+	buffer.append((this.compoundName != null) ? CharOperation.toString(this.compoundName) : "UNNAMED TYPE"); //$NON-NLS-1$
-+
-+	if (this.typeVariables == null) {
-+		buffer.append("<NULL TYPE VARIABLES>"); //$NON-NLS-1$
-+	} else if (this.typeVariables != Binding.NO_TYPE_VARIABLES) {
-+		buffer.append("<"); //$NON-NLS-1$
-+		for (int i = 0, length = this.typeVariables.length; i < length; i++) {
-+			if (i  > 0) buffer.append(", "); //$NON-NLS-1$
-+			if (this.typeVariables[i] == null) {
-+				buffer.append("NULL TYPE VARIABLE"); //$NON-NLS-1$
-+				continue;
-+			}
-+			char[] varChars = this.typeVariables[i].toString().toCharArray();
-+			buffer.append(varChars, 1, varChars.length - 2);
-+		}
-+		buffer.append(">"); //$NON-NLS-1$
-+	}
-+	buffer.append("\n\textends "); //$NON-NLS-1$
-+	buffer.append((this.superclass != null) ? this.superclass.debugName() : "NULL TYPE"); //$NON-NLS-1$
-+
-+	if (this.superInterfaces != null) {
-+		if (this.superInterfaces != Binding.NO_SUPERINTERFACES) {
-+			buffer.append("\n\timplements : "); //$NON-NLS-1$
-+			for (int i = 0, length = this.superInterfaces.length; i < length; i++) {
-+				if (i  > 0)
-+					buffer.append(", "); //$NON-NLS-1$
-+				buffer.append((this.superInterfaces[i] != null) ? this.superInterfaces[i].debugName() : "NULL TYPE"); //$NON-NLS-1$
-+			}
-+		}
-+	} else {
-+		buffer.append("NULL SUPERINTERFACES"); //$NON-NLS-1$
-+	}
-+
-+	if (enclosingType() != null) {
-+		buffer.append("\n\tenclosing type : "); //$NON-NLS-1$
-+		buffer.append(enclosingType().debugName());
-+	}
-+
-+	if (this.fields != null) {
-+		if (this.fields != Binding.NO_FIELDS) {
-+			buffer.append("\n/*   fields   */"); //$NON-NLS-1$
-+			for (int i = 0, length = this.fields.length; i < length; i++)
-+			    buffer.append('\n').append((this.fields[i] != null) ? this.fields[i].toString() : "NULL FIELD"); //$NON-NLS-1$
-+		}
-+	} else {
-+		buffer.append("NULL FIELDS"); //$NON-NLS-1$
-+	}
-+
-+	if (this.methods != null) {
-+		if (this.methods != Binding.NO_METHODS) {
-+			buffer.append("\n/*   methods   */"); //$NON-NLS-1$
-+			for (int i = 0, length = this.methods.length; i < length; i++)
-+				buffer.append('\n').append((this.methods[i] != null) ? this.methods[i].toString() : "NULL METHOD"); //$NON-NLS-1$
-+		}
-+	} else {
-+		buffer.append("NULL METHODS"); //$NON-NLS-1$
-+	}
-+
-+	if (this.memberTypes != null) {
-+		if (this.memberTypes != Binding.NO_MEMBER_TYPES) {
-+			buffer.append("\n/*   members   */"); //$NON-NLS-1$
-+			for (int i = 0, length = this.memberTypes.length; i < length; i++)
-+				buffer.append('\n').append((this.memberTypes[i] != null) ? this.memberTypes[i].toString() : "NULL TYPE"); //$NON-NLS-1$
-+		}
-+	} else {
-+		buffer.append("NULL MEMBER TYPES"); //$NON-NLS-1$
-+	}
- 
--  buffer.append("\n\n"); //$NON-NLS-1$
--  return buffer.toString();
-+	buffer.append("\n\n"); //$NON-NLS-1$
-+	return buffer.toString();
- }
- public TypeVariableBinding[] typeVariables() {
--  return this.typeVariables;
-+	return this.typeVariables;
- }
- void verifyMethods(MethodVerifier verifier) {
--  verifier.verify(this);
-+	verifier.verify(this);
- 
--  for (int i = this.memberTypes.length; --i >= 0;)
--     ((SourceTypeBinding) this.memberTypes[i]).verifyMethods(verifier);
-+	for (int i = this.memberTypes.length; --i >= 0;)
-+		 ((SourceTypeBinding) this.memberTypes[i]).verifyMethods(verifier);
- }
- }
-Index: gwt-debian/dev/core/test/com/google/gwt/dev/javac/BinaryTypeReferenceRestrictionsCheckerTest.java
-===================================================================
---- gwt-debian.orig/dev/core/test/com/google/gwt/dev/javac/BinaryTypeReferenceRestrictionsCheckerTest.java	2011-12-21 11:44:26.308746537 +0100
-+++ gwt-debian/dev/core/test/com/google/gwt/dev/javac/BinaryTypeReferenceRestrictionsCheckerTest.java	2011-12-21 11:45:03.408745229 +0100
-@@ -1,12 +1,12 @@
- /*
-  * Copyright 2008 Google Inc.
-- * 
-+ *
-  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
-  * use this file except in compliance with the License. You may obtain a copy of
-  * the License at
-- * 
-+ *
-  * http://www.apache.org/licenses/LICENSE-2.0
-- * 
-+ *
-  * Unless required by applicable law or agreed to in writing, software
-  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-@@ -47,7 +47,7 @@
- import java.util.List;
- 
- /**
-- * 
-+ *
-  */
- public class BinaryTypeReferenceRestrictionsCheckerTest extends TestCase {
-   /**
++            this.scope.problemReporter().duplicateMethodInType(this, method2Decl, method.areParametersEqual(method2), severity);
+           }
+           method2Decl.binding = null;
+           // do not alter original method array until resolution is over, due to reentrance (143259)

Added: gwt/trunk/debian/patches/generated-protobuf-class
===================================================================
--- gwt/trunk/debian/patches/generated-protobuf-class	                        (rev 0)
+++ gwt/trunk/debian/patches/generated-protobuf-class	2012-07-04 12:08:23 UTC (rev 219)
@@ -0,0 +1,18491 @@
+Description: Class generated by protobuf rather than using the internal copy from Google
+Author: Brian Thomason <brian.thomason at eucalyptus.com>
+
+--- gwt-2.4.0.orig/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
++++ gwt-2.4.0/dev/core/src/com/google/gwt/dev/jjs/impl/GwtAstBuilder.java
+@@ -152,6 +152,7 @@ import org.eclipse.jdt.internal.compiler
+ import org.eclipse.jdt.internal.compiler.ast.MessageSend;
+ import org.eclipse.jdt.internal.compiler.ast.MethodDeclaration;
+ import org.eclipse.jdt.internal.compiler.ast.NameReference;
++import org.eclipse.jdt.internal.compiler.ast.TypeReference;
+ import org.eclipse.jdt.internal.compiler.ast.NormalAnnotation;
+ import org.eclipse.jdt.internal.compiler.ast.NullLiteral;
+ import org.eclipse.jdt.internal.compiler.ast.OR_OR_Expression;
+@@ -543,7 +544,7 @@ public class GwtAstBuilder {
+         SourceInfo info = makeSourceInfo(x);
+         JType type = typeMap.get(x.resolvedType);
+         JExpression expression = pop(x.expression);
+-        if (x.type instanceof NameReference) {
++        if (x.type instanceof TypeReference) {
+           pop(x.type);
+         }
+         push(new JCastOperation(info, type, expression));
+--- gwt-2.4.0.orig/dev/core/src/com/google/gwt/dev/shell/remoteui/RemoteMessageProto.java
++++ gwt-2.4.0/dev/core/src/com/google/gwt/dev/shell/remoteui/RemoteMessageProto.java
+@@ -1,18 +1,53 @@
+ // Generated by the protocol buffer compiler.  DO NOT EDIT!
++// source: core/src/com/google/gwt/dev/shell/remoteui/remotemessage.proto
+ 
+ package com.google.gwt.dev.shell.remoteui;
+ 
+ public final class RemoteMessageProto {
+   private RemoteMessageProto() {}
+   public static void registerAllExtensions(
+-      com.google.gwt.dev.protobuf.ExtensionRegistry registry) {
++      com.google.protobuf.ExtensionRegistry registry) {
++  }
++  public interface MessageOrBuilder
++      extends com.google.protobuf.MessageOrBuilder {
++    
++    // optional string protocolVersion = 1;
++    boolean hasProtocolVersion();
++    String getProtocolVersion();
++    
++    // optional .com.google.gwt.dev.shell.remoteui.Message.MessageType messageType = 2;
++    boolean hasMessageType();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType getMessageType();
++    
++    // required uint32 messageId = 3;
++    boolean hasMessageId();
++    int getMessageId();
++    
++    // optional .com.google.gwt.dev.shell.remoteui.Message.Request request = 4;
++    boolean hasRequest();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request getRequest();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder getRequestOrBuilder();
++    
++    // optional .com.google.gwt.dev.shell.remoteui.Message.Response response = 5;
++    boolean hasResponse();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response getResponse();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder getResponseOrBuilder();
++    
++    // optional .com.google.gwt.dev.shell.remoteui.Message.Failure failure = 6;
++    boolean hasFailure();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure getFailure();
++    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder getFailureOrBuilder();
+   }
+   public static final class Message extends
+-      com.google.gwt.dev.protobuf.GeneratedMessage {
++      com.google.protobuf.GeneratedMessage
++      implements MessageOrBuilder {
+     // Use Message.newBuilder() to construct.
+-    private Message() {}
++    private Message(Builder builder) {
++      super(builder);
++    }
++    private Message(boolean noInit) {}
+     
+-    private static final Message defaultInstance = new Message();
++    private static final Message defaultInstance;
+     public static Message getDefaultInstance() {
+       return defaultInstance;
+     }
+@@ -21,23 +56,27 @@ public final class RemoteMessageProto {
+       return defaultInstance;
+     }
+     
+-    public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++    public static final com.google.protobuf.Descriptors.Descriptor
+         getDescriptor() {
+       return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor;
+     }
+     
+-    protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+         internalGetFieldAccessorTable() {
+       return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_fieldAccessorTable;
+     }
+     
+     public enum MessageType
+-        implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++        implements com.google.protobuf.ProtocolMessageEnum {
+       REQUEST(0, 0),
+       RESPONSE(1, 1),
+       FAILURE(2, 2),
+       ;
+       
++      public static final int REQUEST_VALUE = 0;
++      public static final int RESPONSE_VALUE = 1;
++      public static final int FAILURE_VALUE = 2;
++      
+       
+       public final int getNumber() { return value; }
+       
+@@ -50,27 +89,27 @@ public final class RemoteMessageProto {
+         }
+       }
+       
+-      public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<MessageType>
++      public static com.google.protobuf.Internal.EnumLiteMap<MessageType>
+           internalGetValueMap() {
+         return internalValueMap;
+       }
+-      private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<MessageType>
++      private static com.google.protobuf.Internal.EnumLiteMap<MessageType>
+           internalValueMap =
+-            new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<MessageType>() {
++            new com.google.protobuf.Internal.EnumLiteMap<MessageType>() {
+               public MessageType findValueByNumber(int number) {
+-                return MessageType.valueOf(number)
+-      ;        }
++                return MessageType.valueOf(number);
++              }
+             };
+       
+-      public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++      public final com.google.protobuf.Descriptors.EnumValueDescriptor
+           getValueDescriptor() {
+         return getDescriptor().getValues().get(index);
+       }
+-      public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++      public final com.google.protobuf.Descriptors.EnumDescriptor
+           getDescriptorForType() {
+         return getDescriptor();
+       }
+-      public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++      public static final com.google.protobuf.Descriptors.EnumDescriptor
+           getDescriptor() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.getDescriptor().getEnumTypes().get(0);
+       }
+@@ -78,32 +117,54 @@ public final class RemoteMessageProto {
+       private static final MessageType[] VALUES = {
+         REQUEST, RESPONSE, FAILURE, 
+       };
++      
+       public static MessageType valueOf(
+-          com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++          com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+         if (desc.getType() != getDescriptor()) {
+           throw new java.lang.IllegalArgumentException(
+             "EnumValueDescriptor is not for this type.");
+         }
+         return VALUES[desc.getIndex()];
+       }
++      
+       private final int index;
+       private final int value;
++      
+       private MessageType(int index, int value) {
+         this.index = index;
+         this.value = value;
+       }
+       
+-      static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-      }
++      // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.MessageType)
+     }
+     
++    public interface RequestOrBuilder
++        extends com.google.protobuf.MessageOrBuilder {
++      
++      // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ServiceType serviceType = 1;
++      boolean hasServiceType();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType getServiceType();
++      
++      // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest viewerRequest = 2;
++      boolean hasViewerRequest();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest getViewerRequest();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder getViewerRequestOrBuilder();
++      
++      // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest devModeRequest = 3;
++      boolean hasDevModeRequest();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest getDevModeRequest();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder getDevModeRequestOrBuilder();
++    }
+     public static final class Request extends
+-        com.google.gwt.dev.protobuf.GeneratedMessage {
++        com.google.protobuf.GeneratedMessage
++        implements RequestOrBuilder {
+       // Use Request.newBuilder() to construct.
+-      private Request() {}
++      private Request(Builder builder) {
++        super(builder);
++      }
++      private Request(boolean noInit) {}
+       
+-      private static final Request defaultInstance = new Request();
++      private static final Request defaultInstance;
+       public static Request getDefaultInstance() {
+         return defaultInstance;
+       }
+@@ -112,22 +173,25 @@ public final class RemoteMessageProto {
+         return defaultInstance;
+       }
+       
+-      public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++      public static final com.google.protobuf.Descriptors.Descriptor
+           getDescriptor() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor;
+       }
+       
+-      protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+           internalGetFieldAccessorTable() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_fieldAccessorTable;
+       }
+       
+       public enum ServiceType
+-          implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++          implements com.google.protobuf.ProtocolMessageEnum {
+         VIEWER(0, 0),
+         DEV_MODE(1, 1),
+         ;
+         
++        public static final int VIEWER_VALUE = 0;
++        public static final int DEV_MODE_VALUE = 1;
++        
+         
+         public final int getNumber() { return value; }
+         
+@@ -139,27 +203,27 @@ public final class RemoteMessageProto {
+           }
+         }
+         
+-        public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ServiceType>
++        public static com.google.protobuf.Internal.EnumLiteMap<ServiceType>
+             internalGetValueMap() {
+           return internalValueMap;
+         }
+-        private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ServiceType>
++        private static com.google.protobuf.Internal.EnumLiteMap<ServiceType>
+             internalValueMap =
+-              new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ServiceType>() {
++              new com.google.protobuf.Internal.EnumLiteMap<ServiceType>() {
+                 public ServiceType findValueByNumber(int number) {
+-                  return ServiceType.valueOf(number)
+-        ;        }
++                  return ServiceType.valueOf(number);
++                }
+               };
+         
+-        public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++        public final com.google.protobuf.Descriptors.EnumValueDescriptor
+             getValueDescriptor() {
+           return getDescriptor().getValues().get(index);
+         }
+-        public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++        public final com.google.protobuf.Descriptors.EnumDescriptor
+             getDescriptorForType() {
+           return getDescriptor();
+         }
+-        public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++        public static final com.google.protobuf.Descriptors.EnumDescriptor
+             getDescriptor() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDescriptor().getEnumTypes().get(0);
+         }
+@@ -167,32 +231,74 @@ public final class RemoteMessageProto {
+         private static final ServiceType[] VALUES = {
+           VIEWER, DEV_MODE, 
+         };
++        
+         public static ServiceType valueOf(
+-            com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++            com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+           if (desc.getType() != getDescriptor()) {
+             throw new java.lang.IllegalArgumentException(
+               "EnumValueDescriptor is not for this type.");
+           }
+           return VALUES[desc.getIndex()];
+         }
++        
+         private final int index;
+         private final int value;
++        
+         private ServiceType(int index, int value) {
+           this.index = index;
+           this.value = value;
+         }
+         
+-        static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-        }
++        // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ServiceType)
+       }
+       
++      public interface ViewerRequestOrBuilder
++          extends com.google.protobuf.MessageOrBuilder {
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType requestType = 1;
++        boolean hasRequestType();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getRequestType();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange = 2;
++        boolean hasCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange getCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog addLog = 3;
++        boolean hasAddLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog getAddLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder getAddLogOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogBranch addLogBranch = 4;
++        boolean hasAddLogBranch();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch getAddLogBranch();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder getAddLogBranchOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogEntry addLogEntry = 5;
++        boolean hasAddLogEntry();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry getAddLogEntry();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder getAddLogEntryOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.DisconnectLog disconnectLog = 6;
++        boolean hasDisconnectLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog getDisconnectLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder getDisconnectLogOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.Initialize initialize = 7;
++        boolean hasInitialize();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize getInitialize();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder getInitializeOrBuilder();
++      }
+       public static final class ViewerRequest extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage {
++          com.google.protobuf.GeneratedMessage
++          implements ViewerRequestOrBuilder {
+         // Use ViewerRequest.newBuilder() to construct.
+-        private ViewerRequest() {}
++        private ViewerRequest(Builder builder) {
++          super(builder);
++        }
++        private ViewerRequest(boolean noInit) {}
+         
+-        private static final ViewerRequest defaultInstance = new ViewerRequest();
++        private static final ViewerRequest defaultInstance;
+         public static ViewerRequest getDefaultInstance() {
+           return defaultInstance;
+         }
+@@ -201,18 +307,18 @@ public final class RemoteMessageProto {
+           return defaultInstance;
+         }
+         
+-        public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public static final com.google.protobuf.Descriptors.Descriptor
+             getDescriptor() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor;
+         }
+         
+-        protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+             internalGetFieldAccessorTable() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_fieldAccessorTable;
+         }
+         
+         public enum RequestType
+-            implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++            implements com.google.protobuf.ProtocolMessageEnum {
+           CAPABILITY_EXCHANGE(0, 0),
+           ADD_LOG(1, 1),
+           ADD_LOG_BRANCH(2, 2),
+@@ -221,6 +327,13 @@ public final class RemoteMessageProto {
+           INITIALIZE(5, 5),
+           ;
+           
++          public static final int CAPABILITY_EXCHANGE_VALUE = 0;
++          public static final int ADD_LOG_VALUE = 1;
++          public static final int ADD_LOG_BRANCH_VALUE = 2;
++          public static final int ADD_LOG_ENTRY_VALUE = 3;
++          public static final int DISCONNECT_LOG_VALUE = 4;
++          public static final int INITIALIZE_VALUE = 5;
++          
+           
+           public final int getNumber() { return value; }
+           
+@@ -236,27 +349,27 @@ public final class RemoteMessageProto {
+             }
+           }
+           
+-          public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>
++          public static com.google.protobuf.Internal.EnumLiteMap<RequestType>
+               internalGetValueMap() {
+             return internalValueMap;
+           }
+-          private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>
++          private static com.google.protobuf.Internal.EnumLiteMap<RequestType>
+               internalValueMap =
+-                new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>() {
++                new com.google.protobuf.Internal.EnumLiteMap<RequestType>() {
+                   public RequestType findValueByNumber(int number) {
+-                    return RequestType.valueOf(number)
+-          ;        }
++                    return RequestType.valueOf(number);
++                  }
+                 };
+           
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++          public final com.google.protobuf.Descriptors.EnumValueDescriptor
+               getValueDescriptor() {
+             return getDescriptor().getValues().get(index);
+           }
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptorForType() {
+             return getDescriptor();
+           }
+-          public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public static final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDescriptor().getEnumTypes().get(0);
+           }
+@@ -264,32 +377,40 @@ public final class RemoteMessageProto {
+           private static final RequestType[] VALUES = {
+             CAPABILITY_EXCHANGE, ADD_LOG, ADD_LOG_BRANCH, ADD_LOG_ENTRY, DISCONNECT_LOG, INITIALIZE, 
+           };
++          
+           public static RequestType valueOf(
+-              com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++              com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+             if (desc.getType() != getDescriptor()) {
+               throw new java.lang.IllegalArgumentException(
+                 "EnumValueDescriptor is not for this type.");
+             }
+             return VALUES[desc.getIndex()];
+           }
++          
+           private final int index;
+           private final int value;
++          
+           private RequestType(int index, int value) {
+             this.index = index;
+             this.value = value;
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-          }
++          // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType)
+         }
+         
++        public interface CapabilityExchangeOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++        }
+         public static final class CapabilityExchange extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements CapabilityExchangeOrBuilder {
+           // Use CapabilityExchange.newBuilder() to construct.
+-          private CapabilityExchange() {}
++          private CapabilityExchange(Builder builder) {
++            super(builder);
++          }
++          private CapabilityExchange(boolean noInit) {}
+           
+-          private static final CapabilityExchange defaultInstance = new CapabilityExchange();
++          private static final CapabilityExchange defaultInstance;
+           public static CapabilityExchange getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -298,22 +419,30 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_fieldAccessorTable;
+           }
+           
++          private void initFields() {
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
++            getSerializedSize();
+             getUnknownFields().writeTo(output);
+           }
+           
+@@ -328,26 +457,33 @@ public final class RemoteMessageProto {
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -357,30 +493,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -393,37 +538,52 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange();
++              super.clear();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDescriptor();
+             }
+@@ -432,36 +592,31 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange(this);
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange)other);
+               } else {
+@@ -476,23 +631,29 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -501,23 +662,50 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.CapabilityExchange)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new CapabilityExchange(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.CapabilityExchange)
+         }
+         
++        public interface AddLogOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.LogType type = 1;
++          boolean hasType();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType getType();
++          
++          // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog = 2;
++          boolean hasModuleLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog getModuleLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder getModuleLogOrBuilder();
++          
++          // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ServerLog serverLog = 3;
++          boolean hasServerLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog getServerLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder getServerLogOrBuilder();
++          
++          // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.MainLog mainLog = 4;
++          boolean hasMainLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog getMainLog();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder getMainLogOrBuilder();
++        }
+         public static final class AddLog extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements AddLogOrBuilder {
+           // Use AddLog.newBuilder() to construct.
+-          private AddLog() {}
++          private AddLog(Builder builder) {
++            super(builder);
++          }
++          private AddLog(boolean noInit) {}
+           
+-          private static final AddLog defaultInstance = new AddLog();
++          private static final AddLog defaultInstance;
+           public static AddLog getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -526,23 +714,27 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_fieldAccessorTable;
+           }
+           
+           public enum LogType
+-              implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++              implements com.google.protobuf.ProtocolMessageEnum {
+             MAIN(0, 0),
+             MODULE(1, 1),
+             WEB_SERVER(2, 2),
+             ;
+             
++            public static final int MAIN_VALUE = 0;
++            public static final int MODULE_VALUE = 1;
++            public static final int WEB_SERVER_VALUE = 2;
++            
+             
+             public final int getNumber() { return value; }
+             
+@@ -555,27 +747,27 @@ public final class RemoteMessageProto {
+               }
+             }
+             
+-            public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<LogType>
++            public static com.google.protobuf.Internal.EnumLiteMap<LogType>
+                 internalGetValueMap() {
+               return internalValueMap;
+             }
+-            private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<LogType>
++            private static com.google.protobuf.Internal.EnumLiteMap<LogType>
+                 internalValueMap =
+-                  new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<LogType>() {
++                  new com.google.protobuf.Internal.EnumLiteMap<LogType>() {
+                     public LogType findValueByNumber(int number) {
+-                      return LogType.valueOf(number)
+-            ;        }
++                      return LogType.valueOf(number);
++                    }
+                   };
+             
+-            public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++            public final com.google.protobuf.Descriptors.EnumValueDescriptor
+                 getValueDescriptor() {
+               return getDescriptor().getValues().get(index);
+             }
+-            public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++            public final com.google.protobuf.Descriptors.EnumDescriptor
+                 getDescriptorForType() {
+               return getDescriptor();
+             }
+-            public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++            public static final com.google.protobuf.Descriptors.EnumDescriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDescriptor().getEnumTypes().get(0);
+             }
+@@ -583,32 +775,68 @@ public final class RemoteMessageProto {
+             private static final LogType[] VALUES = {
+               MAIN, MODULE, WEB_SERVER, 
+             };
++            
+             public static LogType valueOf(
+-                com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++                com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+               if (desc.getType() != getDescriptor()) {
+                 throw new java.lang.IllegalArgumentException(
+                   "EnumValueDescriptor is not for this type.");
+               }
+               return VALUES[desc.getIndex()];
+             }
++            
+             private final int index;
+             private final int value;
++            
+             private LogType(int index, int value) {
+               this.index = index;
+               this.value = value;
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-            }
++            // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.LogType)
+           }
+           
++          public interface ModuleLogOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++            
++            // required string name = 1;
++            boolean hasName();
++            String getName();
++            
++            // optional bytes icon = 2;
++            boolean hasIcon();
++            com.google.protobuf.ByteString getIcon();
++            
++            // optional string sessionKey = 3;
++            boolean hasSessionKey();
++            String getSessionKey();
++            
++            // optional string userAgent = 4;
++            boolean hasUserAgent();
++            String getUserAgent();
++            
++            // optional string url = 5;
++            boolean hasUrl();
++            String getUrl();
++            
++            // optional string tabKey = 6;
++            boolean hasTabKey();
++            String getTabKey();
++            
++            // optional string remoteHost = 7;
++            boolean hasRemoteHost();
++            String getRemoteHost();
++          }
+           public static final class ModuleLog extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements ModuleLogOrBuilder {
+             // Use ModuleLog.newBuilder() to construct.
+-            private ModuleLog() {}
++            private ModuleLog(Builder builder) {
++              super(builder);
++            }
++            private ModuleLog(boolean noInit) {}
+             
+-            private static final ModuleLog defaultInstance = new ModuleLog();
++            private static final ModuleLog defaultInstance;
+             public static ModuleLog getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -617,92 +845,264 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_fieldAccessorTable;
+             }
+             
++            private int bitField0_;
+             // required string name = 1;
+             public static final int NAME_FIELD_NUMBER = 1;
+-            private boolean hasName;
+-            private java.lang.String name_ = "";
+-            public boolean hasName() { return hasName; }
+-            public java.lang.String getName() { return name_; }
++            private java.lang.Object name_;
++            public boolean hasName() {
++              return ((bitField0_ & 0x00000001) == 0x00000001);
++            }
++            public String getName() {
++              java.lang.Object ref = name_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  name_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getNameBytes() {
++              java.lang.Object ref = name_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                name_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional bytes icon = 2;
+             public static final int ICON_FIELD_NUMBER = 2;
+-            private boolean hasIcon;
+-            private com.google.gwt.dev.protobuf.ByteString icon_ = com.google.gwt.dev.protobuf.ByteString.EMPTY;
+-            public boolean hasIcon() { return hasIcon; }
+-            public com.google.gwt.dev.protobuf.ByteString getIcon() { return icon_; }
++            private com.google.protobuf.ByteString icon_;
++            public boolean hasIcon() {
++              return ((bitField0_ & 0x00000002) == 0x00000002);
++            }
++            public com.google.protobuf.ByteString getIcon() {
++              return icon_;
++            }
+             
+             // optional string sessionKey = 3;
+             public static final int SESSIONKEY_FIELD_NUMBER = 3;
+-            private boolean hasSessionKey;
+-            private java.lang.String sessionKey_ = "";
+-            public boolean hasSessionKey() { return hasSessionKey; }
+-            public java.lang.String getSessionKey() { return sessionKey_; }
++            private java.lang.Object sessionKey_;
++            public boolean hasSessionKey() {
++              return ((bitField0_ & 0x00000004) == 0x00000004);
++            }
++            public String getSessionKey() {
++              java.lang.Object ref = sessionKey_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  sessionKey_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getSessionKeyBytes() {
++              java.lang.Object ref = sessionKey_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                sessionKey_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional string userAgent = 4;
+             public static final int USERAGENT_FIELD_NUMBER = 4;
+-            private boolean hasUserAgent;
+-            private java.lang.String userAgent_ = "";
+-            public boolean hasUserAgent() { return hasUserAgent; }
+-            public java.lang.String getUserAgent() { return userAgent_; }
++            private java.lang.Object userAgent_;
++            public boolean hasUserAgent() {
++              return ((bitField0_ & 0x00000008) == 0x00000008);
++            }
++            public String getUserAgent() {
++              java.lang.Object ref = userAgent_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  userAgent_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getUserAgentBytes() {
++              java.lang.Object ref = userAgent_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                userAgent_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional string url = 5;
+             public static final int URL_FIELD_NUMBER = 5;
+-            private boolean hasUrl;
+-            private java.lang.String url_ = "";
+-            public boolean hasUrl() { return hasUrl; }
+-            public java.lang.String getUrl() { return url_; }
++            private java.lang.Object url_;
++            public boolean hasUrl() {
++              return ((bitField0_ & 0x00000010) == 0x00000010);
++            }
++            public String getUrl() {
++              java.lang.Object ref = url_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  url_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getUrlBytes() {
++              java.lang.Object ref = url_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                url_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional string tabKey = 6;
+             public static final int TABKEY_FIELD_NUMBER = 6;
+-            private boolean hasTabKey;
+-            private java.lang.String tabKey_ = "";
+-            public boolean hasTabKey() { return hasTabKey; }
+-            public java.lang.String getTabKey() { return tabKey_; }
++            private java.lang.Object tabKey_;
++            public boolean hasTabKey() {
++              return ((bitField0_ & 0x00000020) == 0x00000020);
++            }
++            public String getTabKey() {
++              java.lang.Object ref = tabKey_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  tabKey_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getTabKeyBytes() {
++              java.lang.Object ref = tabKey_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                tabKey_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional string remoteHost = 7;
+             public static final int REMOTEHOST_FIELD_NUMBER = 7;
+-            private boolean hasRemoteHost;
+-            private java.lang.String remoteHost_ = "";
+-            public boolean hasRemoteHost() { return hasRemoteHost; }
+-            public java.lang.String getRemoteHost() { return remoteHost_; }
++            private java.lang.Object remoteHost_;
++            public boolean hasRemoteHost() {
++              return ((bitField0_ & 0x00000040) == 0x00000040);
++            }
++            public String getRemoteHost() {
++              java.lang.Object ref = remoteHost_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  remoteHost_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getRemoteHostBytes() {
++              java.lang.Object ref = remoteHost_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                remoteHost_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
++            private void initFields() {
++              name_ = "";
++              icon_ = com.google.protobuf.ByteString.EMPTY;
++              sessionKey_ = "";
++              userAgent_ = "";
++              url_ = "";
++              tabKey_ = "";
++              remoteHost_ = "";
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
+-              if (!hasName) return false;
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              if (!hasName()) {
++                memoizedIsInitialized = 0;
++                return false;
++              }
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
+-              if (hasName()) {
+-                output.writeString(1, getName());
++              getSerializedSize();
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                output.writeBytes(1, getNameBytes());
+               }
+-              if (hasIcon()) {
+-                output.writeBytes(2, getIcon());
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                output.writeBytes(2, icon_);
+               }
+-              if (hasSessionKey()) {
+-                output.writeString(3, getSessionKey());
++              if (((bitField0_ & 0x00000004) == 0x00000004)) {
++                output.writeBytes(3, getSessionKeyBytes());
+               }
+-              if (hasUserAgent()) {
+-                output.writeString(4, getUserAgent());
++              if (((bitField0_ & 0x00000008) == 0x00000008)) {
++                output.writeBytes(4, getUserAgentBytes());
+               }
+-              if (hasUrl()) {
+-                output.writeString(5, getUrl());
++              if (((bitField0_ & 0x00000010) == 0x00000010)) {
++                output.writeBytes(5, getUrlBytes());
+               }
+-              if (hasTabKey()) {
+-                output.writeString(6, getTabKey());
++              if (((bitField0_ & 0x00000020) == 0x00000020)) {
++                output.writeBytes(6, getTabKeyBytes());
+               }
+-              if (hasRemoteHost()) {
+-                output.writeString(7, getRemoteHost());
++              if (((bitField0_ & 0x00000040) == 0x00000040)) {
++                output.writeBytes(7, getRemoteHostBytes());
+               }
+               getUnknownFields().writeTo(output);
+             }
+@@ -713,59 +1113,66 @@ public final class RemoteMessageProto {
+               if (size != -1) return size;
+             
+               size = 0;
+-              if (hasName()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(1, getName());
+-              }
+-              if (hasIcon()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeBytesSize(2, getIcon());
+-              }
+-              if (hasSessionKey()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(3, getSessionKey());
+-              }
+-              if (hasUserAgent()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(4, getUserAgent());
+-              }
+-              if (hasUrl()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(5, getUrl());
+-              }
+-              if (hasTabKey()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(6, getTabKey());
+-              }
+-              if (hasRemoteHost()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(7, getRemoteHost());
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(1, getNameBytes());
++              }
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(2, icon_);
++              }
++              if (((bitField0_ & 0x00000004) == 0x00000004)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(3, getSessionKeyBytes());
++              }
++              if (((bitField0_ & 0x00000008) == 0x00000008)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(4, getUserAgentBytes());
++              }
++              if (((bitField0_ & 0x00000010) == 0x00000010)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(5, getUrlBytes());
++              }
++              if (((bitField0_ & 0x00000020) == 0x00000020)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(6, getTabKeyBytes());
++              }
++              if (((bitField0_ & 0x00000040) == 0x00000040)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(7, getRemoteHostBytes());
+               }
+               size += getUnknownFields().getSerializedSize();
+               memoizedSerializedSize = size;
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -775,30 +1182,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -811,37 +1227,66 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog();
++                super.clear();
++                name_ = "";
++                bitField0_ = (bitField0_ & ~0x00000001);
++                icon_ = com.google.protobuf.ByteString.EMPTY;
++                bitField0_ = (bitField0_ & ~0x00000002);
++                sessionKey_ = "";
++                bitField0_ = (bitField0_ & ~0x00000004);
++                userAgent_ = "";
++                bitField0_ = (bitField0_ & ~0x00000008);
++                url_ = "";
++                bitField0_ = (bitField0_ & ~0x00000010);
++                tabKey_ = "";
++                bitField0_ = (bitField0_ & ~0x00000020);
++                remoteHost_ = "";
++                bitField0_ = (bitField0_ & ~0x00000040);
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDescriptor();
+               }
+@@ -850,36 +1295,62 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog(this);
++                int from_bitField0_ = bitField0_;
++                int to_bitField0_ = 0;
++                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                  to_bitField0_ |= 0x00000001;
++                }
++                result.name_ = name_;
++                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                  to_bitField0_ |= 0x00000002;
++                }
++                result.icon_ = icon_;
++                if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++                  to_bitField0_ |= 0x00000004;
++                }
++                result.sessionKey_ = sessionKey_;
++                if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++                  to_bitField0_ |= 0x00000008;
++                }
++                result.userAgent_ = userAgent_;
++                if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
++                  to_bitField0_ |= 0x00000010;
++                }
++                result.url_ = url_;
++                if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
++                  to_bitField0_ |= 0x00000020;
++                }
++                result.tabKey_ = tabKey_;
++                if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
++                  to_bitField0_ |= 0x00000040;
++                }
++                result.remoteHost_ = remoteHost_;
++                result.bitField0_ = to_bitField0_;
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog)other);
+                 } else {
+@@ -915,223 +1386,350 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                if (!hasName()) {
++                  
++                  return false;
++                }
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+                     }
+                     case 10: {
+-                      setName(input.readString());
++                      bitField0_ |= 0x00000001;
++                      name_ = input.readBytes();
+                       break;
+                     }
+                     case 18: {
+-                      setIcon(input.readBytes());
++                      bitField0_ |= 0x00000002;
++                      icon_ = input.readBytes();
+                       break;
+                     }
+                     case 26: {
+-                      setSessionKey(input.readString());
++                      bitField0_ |= 0x00000004;
++                      sessionKey_ = input.readBytes();
+                       break;
+                     }
+                     case 34: {
+-                      setUserAgent(input.readString());
++                      bitField0_ |= 0x00000008;
++                      userAgent_ = input.readBytes();
+                       break;
+                     }
+                     case 42: {
+-                      setUrl(input.readString());
++                      bitField0_ |= 0x00000010;
++                      url_ = input.readBytes();
+                       break;
+                     }
+                     case 50: {
+-                      setTabKey(input.readString());
++                      bitField0_ |= 0x00000020;
++                      tabKey_ = input.readBytes();
+                       break;
+                     }
+                     case 58: {
+-                      setRemoteHost(input.readString());
++                      bitField0_ |= 0x00000040;
++                      remoteHost_ = input.readBytes();
+                       break;
+                     }
+                   }
+                 }
+               }
+               
++              private int bitField0_;
+               
+               // required string name = 1;
++              private java.lang.Object name_ = "";
+               public boolean hasName() {
+-                return result.hasName();
++                return ((bitField0_ & 0x00000001) == 0x00000001);
+               }
+-              public java.lang.String getName() {
+-                return result.getName();
++              public String getName() {
++                java.lang.Object ref = name_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  name_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setName(java.lang.String value) {
++              public Builder setName(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasName = true;
+-                result.name_ = value;
++  bitField0_ |= 0x00000001;
++                name_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearName() {
+-                result.hasName = false;
+-                result.name_ = getDefaultInstance().getName();
++                bitField0_ = (bitField0_ & ~0x00000001);
++                name_ = getDefaultInstance().getName();
++                onChanged();
+                 return this;
+               }
++              void setName(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000001;
++                name_ = value;
++                onChanged();
++              }
+               
+               // optional bytes icon = 2;
++              private com.google.protobuf.ByteString icon_ = com.google.protobuf.ByteString.EMPTY;
+               public boolean hasIcon() {
+-                return result.hasIcon();
++                return ((bitField0_ & 0x00000002) == 0x00000002);
+               }
+-              public com.google.gwt.dev.protobuf.ByteString getIcon() {
+-                return result.getIcon();
++              public com.google.protobuf.ByteString getIcon() {
++                return icon_;
+               }
+-              public Builder setIcon(com.google.gwt.dev.protobuf.ByteString value) {
++              public Builder setIcon(com.google.protobuf.ByteString value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasIcon = true;
+-                result.icon_ = value;
++  bitField0_ |= 0x00000002;
++                icon_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearIcon() {
+-                result.hasIcon = false;
+-                result.icon_ = getDefaultInstance().getIcon();
++                bitField0_ = (bitField0_ & ~0x00000002);
++                icon_ = getDefaultInstance().getIcon();
++                onChanged();
+                 return this;
+               }
+               
+               // optional string sessionKey = 3;
++              private java.lang.Object sessionKey_ = "";
+               public boolean hasSessionKey() {
+-                return result.hasSessionKey();
++                return ((bitField0_ & 0x00000004) == 0x00000004);
+               }
+-              public java.lang.String getSessionKey() {
+-                return result.getSessionKey();
++              public String getSessionKey() {
++                java.lang.Object ref = sessionKey_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  sessionKey_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setSessionKey(java.lang.String value) {
++              public Builder setSessionKey(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasSessionKey = true;
+-                result.sessionKey_ = value;
++  bitField0_ |= 0x00000004;
++                sessionKey_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearSessionKey() {
+-                result.hasSessionKey = false;
+-                result.sessionKey_ = getDefaultInstance().getSessionKey();
++                bitField0_ = (bitField0_ & ~0x00000004);
++                sessionKey_ = getDefaultInstance().getSessionKey();
++                onChanged();
+                 return this;
+               }
++              void setSessionKey(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000004;
++                sessionKey_ = value;
++                onChanged();
++              }
+               
+               // optional string userAgent = 4;
++              private java.lang.Object userAgent_ = "";
+               public boolean hasUserAgent() {
+-                return result.hasUserAgent();
++                return ((bitField0_ & 0x00000008) == 0x00000008);
+               }
+-              public java.lang.String getUserAgent() {
+-                return result.getUserAgent();
++              public String getUserAgent() {
++                java.lang.Object ref = userAgent_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  userAgent_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setUserAgent(java.lang.String value) {
++              public Builder setUserAgent(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasUserAgent = true;
+-                result.userAgent_ = value;
++  bitField0_ |= 0x00000008;
++                userAgent_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearUserAgent() {
+-                result.hasUserAgent = false;
+-                result.userAgent_ = getDefaultInstance().getUserAgent();
++                bitField0_ = (bitField0_ & ~0x00000008);
++                userAgent_ = getDefaultInstance().getUserAgent();
++                onChanged();
+                 return this;
+               }
++              void setUserAgent(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000008;
++                userAgent_ = value;
++                onChanged();
++              }
+               
+               // optional string url = 5;
++              private java.lang.Object url_ = "";
+               public boolean hasUrl() {
+-                return result.hasUrl();
++                return ((bitField0_ & 0x00000010) == 0x00000010);
+               }
+-              public java.lang.String getUrl() {
+-                return result.getUrl();
++              public String getUrl() {
++                java.lang.Object ref = url_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  url_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setUrl(java.lang.String value) {
++              public Builder setUrl(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasUrl = true;
+-                result.url_ = value;
++  bitField0_ |= 0x00000010;
++                url_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearUrl() {
+-                result.hasUrl = false;
+-                result.url_ = getDefaultInstance().getUrl();
++                bitField0_ = (bitField0_ & ~0x00000010);
++                url_ = getDefaultInstance().getUrl();
++                onChanged();
+                 return this;
+               }
++              void setUrl(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000010;
++                url_ = value;
++                onChanged();
++              }
+               
+               // optional string tabKey = 6;
++              private java.lang.Object tabKey_ = "";
+               public boolean hasTabKey() {
+-                return result.hasTabKey();
++                return ((bitField0_ & 0x00000020) == 0x00000020);
+               }
+-              public java.lang.String getTabKey() {
+-                return result.getTabKey();
++              public String getTabKey() {
++                java.lang.Object ref = tabKey_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  tabKey_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setTabKey(java.lang.String value) {
++              public Builder setTabKey(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasTabKey = true;
+-                result.tabKey_ = value;
++  bitField0_ |= 0x00000020;
++                tabKey_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearTabKey() {
+-                result.hasTabKey = false;
+-                result.tabKey_ = getDefaultInstance().getTabKey();
++                bitField0_ = (bitField0_ & ~0x00000020);
++                tabKey_ = getDefaultInstance().getTabKey();
++                onChanged();
+                 return this;
+               }
++              void setTabKey(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000020;
++                tabKey_ = value;
++                onChanged();
++              }
+               
+               // optional string remoteHost = 7;
++              private java.lang.Object remoteHost_ = "";
+               public boolean hasRemoteHost() {
+-                return result.hasRemoteHost();
++                return ((bitField0_ & 0x00000040) == 0x00000040);
+               }
+-              public java.lang.String getRemoteHost() {
+-                return result.getRemoteHost();
++              public String getRemoteHost() {
++                java.lang.Object ref = remoteHost_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  remoteHost_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setRemoteHost(java.lang.String value) {
++              public Builder setRemoteHost(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasRemoteHost = true;
+-                result.remoteHost_ = value;
++  bitField0_ |= 0x00000040;
++                remoteHost_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearRemoteHost() {
+-                result.hasRemoteHost = false;
+-                result.remoteHost_ = getDefaultInstance().getRemoteHost();
++                bitField0_ = (bitField0_ & ~0x00000040);
++                remoteHost_ = getDefaultInstance().getRemoteHost();
++                onChanged();
+                 return this;
+               }
++              void setRemoteHost(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000040;
++                remoteHost_ = value;
++                onChanged();
++              }
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ModuleLog)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new ModuleLog(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ModuleLog)
+           }
+           
++          public interface ServerLogOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++            
++            // required string name = 1;
++            boolean hasName();
++            String getName();
++            
++            // optional bytes icon = 2;
++            boolean hasIcon();
++            com.google.protobuf.ByteString getIcon();
++          }
+           public static final class ServerLog extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements ServerLogOrBuilder {
+             // Use ServerLog.newBuilder() to construct.
+-            private ServerLog() {}
++            private ServerLog(Builder builder) {
++              super(builder);
++            }
++            private ServerLog(boolean noInit) {}
+             
+-            private static final ServerLog defaultInstance = new ServerLog();
++            private static final ServerLog defaultInstance;
+             public static ServerLog getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -1140,42 +1738,84 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_fieldAccessorTable;
+             }
+             
++            private int bitField0_;
+             // required string name = 1;
+             public static final int NAME_FIELD_NUMBER = 1;
+-            private boolean hasName;
+-            private java.lang.String name_ = "";
+-            public boolean hasName() { return hasName; }
+-            public java.lang.String getName() { return name_; }
++            private java.lang.Object name_;
++            public boolean hasName() {
++              return ((bitField0_ & 0x00000001) == 0x00000001);
++            }
++            public String getName() {
++              java.lang.Object ref = name_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  name_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getNameBytes() {
++              java.lang.Object ref = name_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                name_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional bytes icon = 2;
+             public static final int ICON_FIELD_NUMBER = 2;
+-            private boolean hasIcon;
+-            private com.google.gwt.dev.protobuf.ByteString icon_ = com.google.gwt.dev.protobuf.ByteString.EMPTY;
+-            public boolean hasIcon() { return hasIcon; }
+-            public com.google.gwt.dev.protobuf.ByteString getIcon() { return icon_; }
++            private com.google.protobuf.ByteString icon_;
++            public boolean hasIcon() {
++              return ((bitField0_ & 0x00000002) == 0x00000002);
++            }
++            public com.google.protobuf.ByteString getIcon() {
++              return icon_;
++            }
+             
++            private void initFields() {
++              name_ = "";
++              icon_ = com.google.protobuf.ByteString.EMPTY;
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
+-              if (!hasName) return false;
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              if (!hasName()) {
++                memoizedIsInitialized = 0;
++                return false;
++              }
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
+-              if (hasName()) {
+-                output.writeString(1, getName());
++              getSerializedSize();
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                output.writeBytes(1, getNameBytes());
+               }
+-              if (hasIcon()) {
+-                output.writeBytes(2, getIcon());
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                output.writeBytes(2, icon_);
+               }
+               getUnknownFields().writeTo(output);
+             }
+@@ -1186,39 +1826,46 @@ public final class RemoteMessageProto {
+               if (size != -1) return size;
+             
+               size = 0;
+-              if (hasName()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(1, getName());
+-              }
+-              if (hasIcon()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeBytesSize(2, getIcon());
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(1, getNameBytes());
++              }
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(2, icon_);
+               }
+               size += getUnknownFields().getSerializedSize();
+               memoizedSerializedSize = size;
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -1228,30 +1875,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -1264,37 +1920,56 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog();
++                super.clear();
++                name_ = "";
++                bitField0_ = (bitField0_ & ~0x00000001);
++                icon_ = com.google.protobuf.ByteString.EMPTY;
++                bitField0_ = (bitField0_ & ~0x00000002);
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDescriptor();
+               }
+@@ -1303,36 +1978,42 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog(this);
++                int from_bitField0_ = bitField0_;
++                int to_bitField0_ = 0;
++                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                  to_bitField0_ |= 0x00000001;
++                }
++                result.name_ = name_;
++                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                  to_bitField0_ |= 0x00000002;
++                }
++                result.icon_ = icon_;
++                result.bitField0_ = to_bitField0_;
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog)other);
+                 } else {
+@@ -1353,98 +2034,137 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                if (!hasName()) {
++                  
++                  return false;
++                }
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+                     }
+                     case 10: {
+-                      setName(input.readString());
++                      bitField0_ |= 0x00000001;
++                      name_ = input.readBytes();
+                       break;
+                     }
+                     case 18: {
+-                      setIcon(input.readBytes());
++                      bitField0_ |= 0x00000002;
++                      icon_ = input.readBytes();
+                       break;
+                     }
+                   }
+                 }
+               }
+               
++              private int bitField0_;
+               
+               // required string name = 1;
++              private java.lang.Object name_ = "";
+               public boolean hasName() {
+-                return result.hasName();
++                return ((bitField0_ & 0x00000001) == 0x00000001);
+               }
+-              public java.lang.String getName() {
+-                return result.getName();
++              public String getName() {
++                java.lang.Object ref = name_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  name_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setName(java.lang.String value) {
++              public Builder setName(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasName = true;
+-                result.name_ = value;
++  bitField0_ |= 0x00000001;
++                name_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearName() {
+-                result.hasName = false;
+-                result.name_ = getDefaultInstance().getName();
++                bitField0_ = (bitField0_ & ~0x00000001);
++                name_ = getDefaultInstance().getName();
++                onChanged();
+                 return this;
+               }
++              void setName(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000001;
++                name_ = value;
++                onChanged();
++              }
+               
+               // optional bytes icon = 2;
++              private com.google.protobuf.ByteString icon_ = com.google.protobuf.ByteString.EMPTY;
+               public boolean hasIcon() {
+-                return result.hasIcon();
++                return ((bitField0_ & 0x00000002) == 0x00000002);
+               }
+-              public com.google.gwt.dev.protobuf.ByteString getIcon() {
+-                return result.getIcon();
++              public com.google.protobuf.ByteString getIcon() {
++                return icon_;
+               }
+-              public Builder setIcon(com.google.gwt.dev.protobuf.ByteString value) {
++              public Builder setIcon(com.google.protobuf.ByteString value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasIcon = true;
+-                result.icon_ = value;
++  bitField0_ |= 0x00000002;
++                icon_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearIcon() {
+-                result.hasIcon = false;
+-                result.icon_ = getDefaultInstance().getIcon();
++                bitField0_ = (bitField0_ & ~0x00000002);
++                icon_ = getDefaultInstance().getIcon();
++                onChanged();
+                 return this;
+               }
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ServerLog)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new ServerLog(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ServerLog)
+           }
+           
++          public interface MainLogOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++          }
+           public static final class MainLog extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements MainLogOrBuilder {
+             // Use MainLog.newBuilder() to construct.
+-            private MainLog() {}
++            private MainLog(Builder builder) {
++              super(builder);
++            }
++            private MainLog(boolean noInit) {}
+             
+-            private static final MainLog defaultInstance = new MainLog();
++            private static final MainLog defaultInstance;
+             public static MainLog getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -1453,22 +2173,30 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_fieldAccessorTable;
+             }
+             
++            private void initFields() {
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
++              getSerializedSize();
+               getUnknownFields().writeTo(output);
+             }
+             
+@@ -1483,26 +2211,33 @@ public final class RemoteMessageProto {
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -1512,30 +2247,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -1548,37 +2292,52 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog();
++                super.clear();
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDescriptor();
+               }
+@@ -1587,36 +2346,31 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog(this);
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog)other);
+                 } else {
+@@ -1631,23 +2385,29 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+@@ -1656,68 +2416,109 @@ public final class RemoteMessageProto {
+                 }
+               }
+               
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.MainLog)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new MainLog(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.MainLog)
+           }
+           
++          private int bitField0_;
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.LogType type = 1;
+           public static final int TYPE_FIELD_NUMBER = 1;
+-          private boolean hasType;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
+-          public boolean hasType() { return hasType; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType getType() { return type_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType type_;
++          public boolean hasType() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType getType() {
++            return type_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog = 2;
+           public static final int MODULELOG_FIELD_NUMBER = 2;
+-          private boolean hasModuleLog;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
+-          public boolean hasModuleLog() { return hasModuleLog; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog getModuleLog() { return moduleLog_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog_;
++          public boolean hasModuleLog() {
++            return ((bitField0_ & 0x00000002) == 0x00000002);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog getModuleLog() {
++            return moduleLog_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder getModuleLogOrBuilder() {
++            return moduleLog_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ServerLog serverLog = 3;
+           public static final int SERVERLOG_FIELD_NUMBER = 3;
+-          private boolean hasServerLog;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
+-          public boolean hasServerLog() { return hasServerLog; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog getServerLog() { return serverLog_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog serverLog_;
++          public boolean hasServerLog() {
++            return ((bitField0_ & 0x00000004) == 0x00000004);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog getServerLog() {
++            return serverLog_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder getServerLogOrBuilder() {
++            return serverLog_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.MainLog mainLog = 4;
+           public static final int MAINLOG_FIELD_NUMBER = 4;
+-          private boolean hasMainLog;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
+-          public boolean hasMainLog() { return hasMainLog; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog getMainLog() { return mainLog_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog mainLog_;
++          public boolean hasMainLog() {
++            return ((bitField0_ & 0x00000008) == 0x00000008);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog getMainLog() {
++            return mainLog_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder getMainLogOrBuilder() {
++            return mainLog_;
++          }
+           
++          private void initFields() {
++            type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
++            moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
++            serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
++            mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
+             if (hasModuleLog()) {
+-              if (!getModuleLog().isInitialized()) return false;
++              if (!getModuleLog().isInitialized()) {
++                memoizedIsInitialized = 0;
++                return false;
++              }
+             }
+             if (hasServerLog()) {
+-              if (!getServerLog().isInitialized()) return false;
++              if (!getServerLog().isInitialized()) {
++                memoizedIsInitialized = 0;
++                return false;
++              }
+             }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasType()) {
+-              output.writeEnum(1, getType().getNumber());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeEnum(1, type_.getNumber());
+             }
+-            if (hasModuleLog()) {
+-              output.writeMessage(2, getModuleLog());
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              output.writeMessage(2, moduleLog_);
+             }
+-            if (hasServerLog()) {
+-              output.writeMessage(3, getServerLog());
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              output.writeMessage(3, serverLog_);
+             }
+-            if (hasMainLog()) {
+-              output.writeMessage(4, getMainLog());
++            if (((bitField0_ & 0x00000008) == 0x00000008)) {
++              output.writeMessage(4, mainLog_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -1728,47 +2529,54 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasType()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeEnumSize(1, getType().getNumber());
+-            }
+-            if (hasModuleLog()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(2, getModuleLog());
+-            }
+-            if (hasServerLog()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(3, getServerLog());
+-            }
+-            if (hasMainLog()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(4, getMainLog());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeEnumSize(1, type_.getNumber());
++            }
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(2, moduleLog_);
++            }
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(3, serverLog_);
++            }
++            if (((bitField0_ & 0x00000008) == 0x00000008)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(4, mainLog_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -1778,30 +2586,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -1814,37 +2631,75 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getModuleLogFieldBuilder();
++                getServerLogFieldBuilder();
++                getMainLogFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              if (moduleLogBuilder_ == null) {
++                moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
++              } else {
++                moduleLogBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog();
++              bitField0_ = (bitField0_ & ~0x00000002);
++              if (serverLogBuilder_ == null) {
++                serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
++              } else {
++                serverLogBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000004);
++              if (mainLogBuilder_ == null) {
++                mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
++              } else {
++                mainLogBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000008);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDescriptor();
+             }
+@@ -1853,36 +2708,62 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.type_ = type_;
++              if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                to_bitField0_ |= 0x00000002;
++              }
++              if (moduleLogBuilder_ == null) {
++                result.moduleLog_ = moduleLog_;
++              } else {
++                result.moduleLog_ = moduleLogBuilder_.build();
++              }
++              if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++                to_bitField0_ |= 0x00000004;
++              }
++              if (serverLogBuilder_ == null) {
++                result.serverLog_ = serverLog_;
++              } else {
++                result.serverLog_ = serverLogBuilder_.build();
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog returnMe = result;
+-              result = null;
+-              return returnMe;
++              if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++                to_bitField0_ |= 0x00000008;
++              }
++              if (mainLogBuilder_ == null) {
++                result.mainLog_ = mainLog_;
++              } else {
++                result.mainLog_ = mainLogBuilder_.build();
++              }
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog)other);
+               } else {
+@@ -1909,23 +2790,41 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (hasModuleLog()) {
++                if (!getModuleLog().isInitialized()) {
++                  
++                  return false;
++                }
++              }
++              if (hasServerLog()) {
++                if (!getServerLog().isInitialized()) {
++                  
++                  return false;
++                }
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -1936,7 +2835,8 @@ public final class RemoteMessageProto {
+                     if (value == null) {
+                       unknownFields.mergeVarintField(1, rawValue);
+                     } else {
+-                      setType(value);
++                      bitField0_ |= 0x00000001;
++                      type_ = value;
+                     }
+                     break;
+                   }
+@@ -1971,155 +2871,347 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.LogType type = 1;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
+             public boolean hasType() {
+-              return result.hasType();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType getType() {
+-              return result.getType();
++              return type_;
+             }
+             public Builder setType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType value) {
+               if (value == null) {
+                 throw new NullPointerException();
+               }
+-              result.hasType = true;
+-              result.type_ = value;
++              bitField0_ |= 0x00000001;
++              type_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearType() {
+-              result.hasType = false;
+-              result.type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              type_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.LogType.MAIN;
++              onChanged();
+               return this;
+             }
+             
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog = 2;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder> moduleLogBuilder_;
+             public boolean hasModuleLog() {
+-              return result.hasModuleLog();
++              return ((bitField0_ & 0x00000002) == 0x00000002);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog getModuleLog() {
+-              return result.getModuleLog();
++              if (moduleLogBuilder_ == null) {
++                return moduleLog_;
++              } else {
++                return moduleLogBuilder_.getMessage();
++              }
+             }
+             public Builder setModuleLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (moduleLogBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                moduleLog_ = value;
++                onChanged();
++              } else {
++                moduleLogBuilder_.setMessage(value);
+               }
+-              result.hasModuleLog = true;
+-              result.moduleLog_ = value;
++              bitField0_ |= 0x00000002;
+               return this;
+             }
+-            public Builder setModuleLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder builderForValue) {
+-              result.hasModuleLog = true;
+-              result.moduleLog_ = builderForValue.build();
++            public Builder setModuleLog(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder builderForValue) {
++              if (moduleLogBuilder_ == null) {
++                moduleLog_ = builderForValue.build();
++                onChanged();
++              } else {
++                moduleLogBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000002;
+               return this;
+             }
+             public Builder mergeModuleLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog value) {
+-              if (result.hasModuleLog() &&
+-                  result.moduleLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance()) {
+-                result.moduleLog_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.newBuilder(result.moduleLog_).mergeFrom(value).buildPartial();
++              if (moduleLogBuilder_ == null) {
++                if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                    moduleLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance()) {
++                  moduleLog_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.newBuilder(moduleLog_).mergeFrom(value).buildPartial();
++                } else {
++                  moduleLog_ = value;
++                }
++                onChanged();
+               } else {
+-                result.moduleLog_ = value;
++                moduleLogBuilder_.mergeFrom(value);
+               }
+-              result.hasModuleLog = true;
++              bitField0_ |= 0x00000002;
+               return this;
+             }
+             public Builder clearModuleLog() {
+-              result.hasModuleLog = false;
+-              result.moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
++              if (moduleLogBuilder_ == null) {
++                moduleLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.getDefaultInstance();
++                onChanged();
++              } else {
++                moduleLogBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000002);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder getModuleLogBuilder() {
++              bitField0_ |= 0x00000002;
++              onChanged();
++              return getModuleLogFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder getModuleLogOrBuilder() {
++              if (moduleLogBuilder_ != null) {
++                return moduleLogBuilder_.getMessageOrBuilder();
++              } else {
++                return moduleLog_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder> 
++                getModuleLogFieldBuilder() {
++              if (moduleLogBuilder_ == null) {
++                moduleLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLogOrBuilder>(
++                        moduleLog_,
++                        getParentForChildren(),
++                        isClean());
++                moduleLog_ = null;
++              }
++              return moduleLogBuilder_;
++            }
+             
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.ServerLog serverLog = 3;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder> serverLogBuilder_;
+             public boolean hasServerLog() {
+-              return result.hasServerLog();
++              return ((bitField0_ & 0x00000004) == 0x00000004);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog getServerLog() {
+-              return result.getServerLog();
++              if (serverLogBuilder_ == null) {
++                return serverLog_;
++              } else {
++                return serverLogBuilder_.getMessage();
++              }
+             }
+             public Builder setServerLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (serverLogBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                serverLog_ = value;
++                onChanged();
++              } else {
++                serverLogBuilder_.setMessage(value);
+               }
+-              result.hasServerLog = true;
+-              result.serverLog_ = value;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+-            public Builder setServerLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder builderForValue) {
+-              result.hasServerLog = true;
+-              result.serverLog_ = builderForValue.build();
++            public Builder setServerLog(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder builderForValue) {
++              if (serverLogBuilder_ == null) {
++                serverLog_ = builderForValue.build();
++                onChanged();
++              } else {
++                serverLogBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder mergeServerLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog value) {
+-              if (result.hasServerLog() &&
+-                  result.serverLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance()) {
+-                result.serverLog_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.newBuilder(result.serverLog_).mergeFrom(value).buildPartial();
++              if (serverLogBuilder_ == null) {
++                if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                    serverLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance()) {
++                  serverLog_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.newBuilder(serverLog_).mergeFrom(value).buildPartial();
++                } else {
++                  serverLog_ = value;
++                }
++                onChanged();
+               } else {
+-                result.serverLog_ = value;
++                serverLogBuilder_.mergeFrom(value);
+               }
+-              result.hasServerLog = true;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder clearServerLog() {
+-              result.hasServerLog = false;
+-              result.serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
++              if (serverLogBuilder_ == null) {
++                serverLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.getDefaultInstance();
++                onChanged();
++              } else {
++                serverLogBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000004);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder getServerLogBuilder() {
++              bitField0_ |= 0x00000004;
++              onChanged();
++              return getServerLogFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder getServerLogOrBuilder() {
++              if (serverLogBuilder_ != null) {
++                return serverLogBuilder_.getMessageOrBuilder();
++              } else {
++                return serverLog_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder> 
++                getServerLogFieldBuilder() {
++              if (serverLogBuilder_ == null) {
++                serverLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLogOrBuilder>(
++                        serverLog_,
++                        getParentForChildren(),
++                        isClean());
++                serverLog_ = null;
++              }
++              return serverLogBuilder_;
++            }
+             
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog.MainLog mainLog = 4;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder> mainLogBuilder_;
+             public boolean hasMainLog() {
+-              return result.hasMainLog();
++              return ((bitField0_ & 0x00000008) == 0x00000008);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog getMainLog() {
+-              return result.getMainLog();
++              if (mainLogBuilder_ == null) {
++                return mainLog_;
++              } else {
++                return mainLogBuilder_.getMessage();
++              }
+             }
+             public Builder setMainLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (mainLogBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                mainLog_ = value;
++                onChanged();
++              } else {
++                mainLogBuilder_.setMessage(value);
+               }
+-              result.hasMainLog = true;
+-              result.mainLog_ = value;
++              bitField0_ |= 0x00000008;
+               return this;
+             }
+-            public Builder setMainLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder builderForValue) {
+-              result.hasMainLog = true;
+-              result.mainLog_ = builderForValue.build();
++            public Builder setMainLog(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder builderForValue) {
++              if (mainLogBuilder_ == null) {
++                mainLog_ = builderForValue.build();
++                onChanged();
++              } else {
++                mainLogBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000008;
+               return this;
+             }
+             public Builder mergeMainLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog value) {
+-              if (result.hasMainLog() &&
+-                  result.mainLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance()) {
+-                result.mainLog_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.newBuilder(result.mainLog_).mergeFrom(value).buildPartial();
++              if (mainLogBuilder_ == null) {
++                if (((bitField0_ & 0x00000008) == 0x00000008) &&
++                    mainLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance()) {
++                  mainLog_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.newBuilder(mainLog_).mergeFrom(value).buildPartial();
++                } else {
++                  mainLog_ = value;
++                }
++                onChanged();
+               } else {
+-                result.mainLog_ = value;
++                mainLogBuilder_.mergeFrom(value);
+               }
+-              result.hasMainLog = true;
++              bitField0_ |= 0x00000008;
+               return this;
+             }
+             public Builder clearMainLog() {
+-              result.hasMainLog = false;
+-              result.mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
++              if (mainLogBuilder_ == null) {
++                mainLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.getDefaultInstance();
++                onChanged();
++              } else {
++                mainLogBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000008);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder getMainLogBuilder() {
++              bitField0_ |= 0x00000008;
++              onChanged();
++              return getMainLogFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder getMainLogOrBuilder() {
++              if (mainLogBuilder_ != null) {
++                return mainLogBuilder_.getMessageOrBuilder();
++              } else {
++                return mainLog_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder> 
++                getMainLogFieldBuilder() {
++              if (mainLogBuilder_ == null) {
++                mainLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLogOrBuilder>(
++                        mainLog_,
++                        getParentForChildren(),
++                        isClean());
++                mainLog_ = null;
++              }
++              return mainLogBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new AddLog(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog)
+         }
+         
++        public interface LogDataOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required string summary = 1;
++          boolean hasSummary();
++          String getSummary();
++          
++          // optional string level = 2;
++          boolean hasLevel();
++          String getLevel();
++          
++          // optional bool needsAttention = 3;
++          boolean hasNeedsAttention();
++          boolean getNeedsAttention();
++          
++          // optional string details = 4;
++          boolean hasDetails();
++          String getDetails();
++          
++          // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo = 5;
++          boolean hasHelpInfo();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo getHelpInfo();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder getHelpInfoOrBuilder();
++        }
+         public static final class LogData extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements LogDataOrBuilder {
+           // Use LogData.newBuilder() to construct.
+-          private LogData() {}
++          private LogData(Builder builder) {
++            super(builder);
++          }
++          private LogData(boolean noInit) {}
+           
+-          private static final LogData defaultInstance = new LogData();
++          private static final LogData defaultInstance;
+           public static LogData getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -2128,22 +3220,37 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_fieldAccessorTable;
+           }
+           
++          public interface HelpInfoOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++            
++            // optional string url = 1;
++            boolean hasUrl();
++            String getUrl();
++            
++            // optional string text = 2;
++            boolean hasText();
++            String getText();
++          }
+           public static final class HelpInfo extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements HelpInfoOrBuilder {
+             // Use HelpInfo.newBuilder() to construct.
+-            private HelpInfo() {}
++            private HelpInfo(Builder builder) {
++              super(builder);
++            }
++            private HelpInfo(boolean noInit) {}
+             
+-            private static final HelpInfo defaultInstance = new HelpInfo();
++            private static final HelpInfo defaultInstance;
+             public static HelpInfo getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -2152,41 +3259,102 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_fieldAccessorTable;
+             }
+             
++            private int bitField0_;
+             // optional string url = 1;
+             public static final int URL_FIELD_NUMBER = 1;
+-            private boolean hasUrl;
+-            private java.lang.String url_ = "";
+-            public boolean hasUrl() { return hasUrl; }
+-            public java.lang.String getUrl() { return url_; }
++            private java.lang.Object url_;
++            public boolean hasUrl() {
++              return ((bitField0_ & 0x00000001) == 0x00000001);
++            }
++            public String getUrl() {
++              java.lang.Object ref = url_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  url_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getUrlBytes() {
++              java.lang.Object ref = url_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                url_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
+             // optional string text = 2;
+             public static final int TEXT_FIELD_NUMBER = 2;
+-            private boolean hasText;
+-            private java.lang.String text_ = "";
+-            public boolean hasText() { return hasText; }
+-            public java.lang.String getText() { return text_; }
++            private java.lang.Object text_;
++            public boolean hasText() {
++              return ((bitField0_ & 0x00000002) == 0x00000002);
++            }
++            public String getText() {
++              java.lang.Object ref = text_;
++              if (ref instanceof String) {
++                return (String) ref;
++              } else {
++                com.google.protobuf.ByteString bs = 
++                    (com.google.protobuf.ByteString) ref;
++                String s = bs.toStringUtf8();
++                if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                  text_ = s;
++                }
++                return s;
++              }
++            }
++            private com.google.protobuf.ByteString getTextBytes() {
++              java.lang.Object ref = text_;
++              if (ref instanceof String) {
++                com.google.protobuf.ByteString b = 
++                    com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++                text_ = b;
++                return b;
++              } else {
++                return (com.google.protobuf.ByteString) ref;
++              }
++            }
+             
++            private void initFields() {
++              url_ = "";
++              text_ = "";
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
+-              if (hasUrl()) {
+-                output.writeString(1, getUrl());
++              getSerializedSize();
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                output.writeBytes(1, getUrlBytes());
+               }
+-              if (hasText()) {
+-                output.writeString(2, getText());
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                output.writeBytes(2, getTextBytes());
+               }
+               getUnknownFields().writeTo(output);
+             }
+@@ -2197,39 +3365,46 @@ public final class RemoteMessageProto {
+               if (size != -1) return size;
+             
+               size = 0;
+-              if (hasUrl()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(1, getUrl());
+-              }
+-              if (hasText()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSize(2, getText());
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(1, getUrlBytes());
++              }
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeBytesSize(2, getTextBytes());
+               }
+               size += getUnknownFields().getSerializedSize();
+               memoizedSerializedSize = size;
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -2239,30 +3414,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -2275,37 +3459,56 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo();
++                super.clear();
++                url_ = "";
++                bitField0_ = (bitField0_ & ~0x00000001);
++                text_ = "";
++                bitField0_ = (bitField0_ & ~0x00000002);
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDescriptor();
+               }
+@@ -2314,36 +3517,42 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo(this);
++                int from_bitField0_ = bitField0_;
++                int to_bitField0_ = 0;
++                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                  to_bitField0_ |= 0x00000001;
++                }
++                result.url_ = url_;
++                if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                  to_bitField0_ |= 0x00000002;
++                }
++                result.text_ = text_;
++                result.bitField0_ = to_bitField0_;
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo)other);
+                 } else {
+@@ -2364,148 +3573,289 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+                     }
+                     case 10: {
+-                      setUrl(input.readString());
++                      bitField0_ |= 0x00000001;
++                      url_ = input.readBytes();
+                       break;
+                     }
+                     case 18: {
+-                      setText(input.readString());
++                      bitField0_ |= 0x00000002;
++                      text_ = input.readBytes();
+                       break;
+                     }
+                   }
+                 }
+               }
+               
++              private int bitField0_;
+               
+               // optional string url = 1;
++              private java.lang.Object url_ = "";
+               public boolean hasUrl() {
+-                return result.hasUrl();
++                return ((bitField0_ & 0x00000001) == 0x00000001);
+               }
+-              public java.lang.String getUrl() {
+-                return result.getUrl();
++              public String getUrl() {
++                java.lang.Object ref = url_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  url_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setUrl(java.lang.String value) {
++              public Builder setUrl(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasUrl = true;
+-                result.url_ = value;
++  bitField0_ |= 0x00000001;
++                url_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearUrl() {
+-                result.hasUrl = false;
+-                result.url_ = getDefaultInstance().getUrl();
++                bitField0_ = (bitField0_ & ~0x00000001);
++                url_ = getDefaultInstance().getUrl();
++                onChanged();
+                 return this;
+               }
++              void setUrl(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000001;
++                url_ = value;
++                onChanged();
++              }
+               
+               // optional string text = 2;
++              private java.lang.Object text_ = "";
+               public boolean hasText() {
+-                return result.hasText();
++                return ((bitField0_ & 0x00000002) == 0x00000002);
+               }
+-              public java.lang.String getText() {
+-                return result.getText();
++              public String getText() {
++                java.lang.Object ref = text_;
++                if (!(ref instanceof String)) {
++                  String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                  text_ = s;
++                  return s;
++                } else {
++                  return (String) ref;
++                }
+               }
+-              public Builder setText(java.lang.String value) {
++              public Builder setText(String value) {
+                 if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasText = true;
+-                result.text_ = value;
++  bitField0_ |= 0x00000002;
++                text_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearText() {
+-                result.hasText = false;
+-                result.text_ = getDefaultInstance().getText();
++                bitField0_ = (bitField0_ & ~0x00000002);
++                text_ = getDefaultInstance().getText();
++                onChanged();
+                 return this;
+               }
++              void setText(com.google.protobuf.ByteString value) {
++                bitField0_ |= 0x00000002;
++                text_ = value;
++                onChanged();
++              }
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData.HelpInfo)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new HelpInfo(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData.HelpInfo)
+           }
+           
++          private int bitField0_;
+           // required string summary = 1;
+           public static final int SUMMARY_FIELD_NUMBER = 1;
+-          private boolean hasSummary;
+-          private java.lang.String summary_ = "";
+-          public boolean hasSummary() { return hasSummary; }
+-          public java.lang.String getSummary() { return summary_; }
++          private java.lang.Object summary_;
++          public boolean hasSummary() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public String getSummary() {
++            java.lang.Object ref = summary_;
++            if (ref instanceof String) {
++              return (String) ref;
++            } else {
++              com.google.protobuf.ByteString bs = 
++                  (com.google.protobuf.ByteString) ref;
++              String s = bs.toStringUtf8();
++              if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                summary_ = s;
++              }
++              return s;
++            }
++          }
++          private com.google.protobuf.ByteString getSummaryBytes() {
++            java.lang.Object ref = summary_;
++            if (ref instanceof String) {
++              com.google.protobuf.ByteString b = 
++                  com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++              summary_ = b;
++              return b;
++            } else {
++              return (com.google.protobuf.ByteString) ref;
++            }
++          }
+           
+           // optional string level = 2;
+           public static final int LEVEL_FIELD_NUMBER = 2;
+-          private boolean hasLevel;
+-          private java.lang.String level_ = "";
+-          public boolean hasLevel() { return hasLevel; }
+-          public java.lang.String getLevel() { return level_; }
++          private java.lang.Object level_;
++          public boolean hasLevel() {
++            return ((bitField0_ & 0x00000002) == 0x00000002);
++          }
++          public String getLevel() {
++            java.lang.Object ref = level_;
++            if (ref instanceof String) {
++              return (String) ref;
++            } else {
++              com.google.protobuf.ByteString bs = 
++                  (com.google.protobuf.ByteString) ref;
++              String s = bs.toStringUtf8();
++              if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                level_ = s;
++              }
++              return s;
++            }
++          }
++          private com.google.protobuf.ByteString getLevelBytes() {
++            java.lang.Object ref = level_;
++            if (ref instanceof String) {
++              com.google.protobuf.ByteString b = 
++                  com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++              level_ = b;
++              return b;
++            } else {
++              return (com.google.protobuf.ByteString) ref;
++            }
++          }
+           
+           // optional bool needsAttention = 3;
+           public static final int NEEDSATTENTION_FIELD_NUMBER = 3;
+-          private boolean hasNeedsAttention;
+-          private boolean needsAttention_ = false;
+-          public boolean hasNeedsAttention() { return hasNeedsAttention; }
+-          public boolean getNeedsAttention() { return needsAttention_; }
++          private boolean needsAttention_;
++          public boolean hasNeedsAttention() {
++            return ((bitField0_ & 0x00000004) == 0x00000004);
++          }
++          public boolean getNeedsAttention() {
++            return needsAttention_;
++          }
+           
+           // optional string details = 4;
+           public static final int DETAILS_FIELD_NUMBER = 4;
+-          private boolean hasDetails;
+-          private java.lang.String details_ = "";
+-          public boolean hasDetails() { return hasDetails; }
+-          public java.lang.String getDetails() { return details_; }
++          private java.lang.Object details_;
++          public boolean hasDetails() {
++            return ((bitField0_ & 0x00000008) == 0x00000008);
++          }
++          public String getDetails() {
++            java.lang.Object ref = details_;
++            if (ref instanceof String) {
++              return (String) ref;
++            } else {
++              com.google.protobuf.ByteString bs = 
++                  (com.google.protobuf.ByteString) ref;
++              String s = bs.toStringUtf8();
++              if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                details_ = s;
++              }
++              return s;
++            }
++          }
++          private com.google.protobuf.ByteString getDetailsBytes() {
++            java.lang.Object ref = details_;
++            if (ref instanceof String) {
++              com.google.protobuf.ByteString b = 
++                  com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++              details_ = b;
++              return b;
++            } else {
++              return (com.google.protobuf.ByteString) ref;
++            }
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo = 5;
+           public static final int HELPINFO_FIELD_NUMBER = 5;
+-          private boolean hasHelpInfo;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
+-          public boolean hasHelpInfo() { return hasHelpInfo; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo getHelpInfo() { return helpInfo_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo_;
++          public boolean hasHelpInfo() {
++            return ((bitField0_ & 0x00000010) == 0x00000010);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo getHelpInfo() {
++            return helpInfo_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder getHelpInfoOrBuilder() {
++            return helpInfo_;
++          }
+           
++          private void initFields() {
++            summary_ = "";
++            level_ = "";
++            needsAttention_ = false;
++            details_ = "";
++            helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasSummary) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasSummary()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasSummary()) {
+-              output.writeString(1, getSummary());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeBytes(1, getSummaryBytes());
+             }
+-            if (hasLevel()) {
+-              output.writeString(2, getLevel());
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              output.writeBytes(2, getLevelBytes());
+             }
+-            if (hasNeedsAttention()) {
+-              output.writeBool(3, getNeedsAttention());
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              output.writeBool(3, needsAttention_);
+             }
+-            if (hasDetails()) {
+-              output.writeString(4, getDetails());
++            if (((bitField0_ & 0x00000008) == 0x00000008)) {
++              output.writeBytes(4, getDetailsBytes());
+             }
+-            if (hasHelpInfo()) {
+-              output.writeMessage(5, getHelpInfo());
++            if (((bitField0_ & 0x00000010) == 0x00000010)) {
++              output.writeMessage(5, helpInfo_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -2516,51 +3866,58 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasSummary()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeStringSize(1, getSummary());
+-            }
+-            if (hasLevel()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeStringSize(2, getLevel());
+-            }
+-            if (hasNeedsAttention()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeBoolSize(3, getNeedsAttention());
+-            }
+-            if (hasDetails()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeStringSize(4, getDetails());
+-            }
+-            if (hasHelpInfo()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(5, getHelpInfo());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeBytesSize(1, getSummaryBytes());
++            }
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeBytesSize(2, getLevelBytes());
++            }
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeBoolSize(3, needsAttention_);
++            }
++            if (((bitField0_ & 0x00000008) == 0x00000008)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeBytesSize(4, getDetailsBytes());
++            }
++            if (((bitField0_ & 0x00000010) == 0x00000010)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(5, helpInfo_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -2570,30 +3927,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -2606,37 +3972,67 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getHelpInfoFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              summary_ = "";
++              bitField0_ = (bitField0_ & ~0x00000001);
++              level_ = "";
++              bitField0_ = (bitField0_ & ~0x00000002);
++              needsAttention_ = false;
++              bitField0_ = (bitField0_ & ~0x00000004);
++              details_ = "";
++              bitField0_ = (bitField0_ & ~0x00000008);
++              if (helpInfoBuilder_ == null) {
++                helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
++              } else {
++                helpInfoBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData();
++              bitField0_ = (bitField0_ & ~0x00000010);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDescriptor();
+             }
+@@ -2645,36 +4041,58 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.summary_ = summary_;
++              if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                to_bitField0_ |= 0x00000002;
++              }
++              result.level_ = level_;
++              if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++                to_bitField0_ |= 0x00000004;
++              }
++              result.needsAttention_ = needsAttention_;
++              if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++                to_bitField0_ |= 0x00000008;
++              }
++              result.details_ = details_;
++              if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
++                to_bitField0_ |= 0x00000010;
++              }
++              if (helpInfoBuilder_ == null) {
++                result.helpInfo_ = helpInfo_;
++              } else {
++                result.helpInfo_ = helpInfoBuilder_.build();
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData returnMe = result;
+-              result = null;
+-              return returnMe;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData)other);
+               } else {
+@@ -2704,41 +4122,55 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasSummary()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 10: {
+-                    setSummary(input.readString());
++                    bitField0_ |= 0x00000001;
++                    summary_ = input.readBytes();
+                     break;
+                   }
+                   case 18: {
+-                    setLevel(input.readString());
++                    bitField0_ |= 0x00000002;
++                    level_ = input.readBytes();
+                     break;
+                   }
+                   case 24: {
+-                    setNeedsAttention(input.readBool());
++                    bitField0_ |= 0x00000004;
++                    needsAttention_ = input.readBool();
+                     break;
+                   }
+                   case 34: {
+-                    setDetails(input.readString());
++                    bitField0_ |= 0x00000008;
++                    details_ = input.readBytes();
+                     break;
+                   }
+                   case 42: {
+@@ -2754,141 +4186,264 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required string summary = 1;
++            private java.lang.Object summary_ = "";
+             public boolean hasSummary() {
+-              return result.hasSummary();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+-            public java.lang.String getSummary() {
+-              return result.getSummary();
++            public String getSummary() {
++              java.lang.Object ref = summary_;
++              if (!(ref instanceof String)) {
++                String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                summary_ = s;
++                return s;
++              } else {
++                return (String) ref;
++              }
+             }
+-            public Builder setSummary(java.lang.String value) {
++            public Builder setSummary(String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasSummary = true;
+-              result.summary_ = value;
++  bitField0_ |= 0x00000001;
++              summary_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearSummary() {
+-              result.hasSummary = false;
+-              result.summary_ = getDefaultInstance().getSummary();
++              bitField0_ = (bitField0_ & ~0x00000001);
++              summary_ = getDefaultInstance().getSummary();
++              onChanged();
+               return this;
+             }
++            void setSummary(com.google.protobuf.ByteString value) {
++              bitField0_ |= 0x00000001;
++              summary_ = value;
++              onChanged();
++            }
+             
+             // optional string level = 2;
++            private java.lang.Object level_ = "";
+             public boolean hasLevel() {
+-              return result.hasLevel();
++              return ((bitField0_ & 0x00000002) == 0x00000002);
+             }
+-            public java.lang.String getLevel() {
+-              return result.getLevel();
++            public String getLevel() {
++              java.lang.Object ref = level_;
++              if (!(ref instanceof String)) {
++                String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                level_ = s;
++                return s;
++              } else {
++                return (String) ref;
++              }
+             }
+-            public Builder setLevel(java.lang.String value) {
++            public Builder setLevel(String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasLevel = true;
+-              result.level_ = value;
++  bitField0_ |= 0x00000002;
++              level_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearLevel() {
+-              result.hasLevel = false;
+-              result.level_ = getDefaultInstance().getLevel();
++              bitField0_ = (bitField0_ & ~0x00000002);
++              level_ = getDefaultInstance().getLevel();
++              onChanged();
+               return this;
+             }
++            void setLevel(com.google.protobuf.ByteString value) {
++              bitField0_ |= 0x00000002;
++              level_ = value;
++              onChanged();
++            }
+             
+             // optional bool needsAttention = 3;
++            private boolean needsAttention_ ;
+             public boolean hasNeedsAttention() {
+-              return result.hasNeedsAttention();
++              return ((bitField0_ & 0x00000004) == 0x00000004);
+             }
+             public boolean getNeedsAttention() {
+-              return result.getNeedsAttention();
++              return needsAttention_;
+             }
+             public Builder setNeedsAttention(boolean value) {
+-              result.hasNeedsAttention = true;
+-              result.needsAttention_ = value;
++              bitField0_ |= 0x00000004;
++              needsAttention_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearNeedsAttention() {
+-              result.hasNeedsAttention = false;
+-              result.needsAttention_ = false;
++              bitField0_ = (bitField0_ & ~0x00000004);
++              needsAttention_ = false;
++              onChanged();
+               return this;
+             }
+             
+             // optional string details = 4;
++            private java.lang.Object details_ = "";
+             public boolean hasDetails() {
+-              return result.hasDetails();
++              return ((bitField0_ & 0x00000008) == 0x00000008);
+             }
+-            public java.lang.String getDetails() {
+-              return result.getDetails();
++            public String getDetails() {
++              java.lang.Object ref = details_;
++              if (!(ref instanceof String)) {
++                String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                details_ = s;
++                return s;
++              } else {
++                return (String) ref;
++              }
+             }
+-            public Builder setDetails(java.lang.String value) {
++            public Builder setDetails(String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasDetails = true;
+-              result.details_ = value;
++  bitField0_ |= 0x00000008;
++              details_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearDetails() {
+-              result.hasDetails = false;
+-              result.details_ = getDefaultInstance().getDetails();
++              bitField0_ = (bitField0_ & ~0x00000008);
++              details_ = getDefaultInstance().getDetails();
++              onChanged();
+               return this;
+             }
++            void setDetails(com.google.protobuf.ByteString value) {
++              bitField0_ |= 0x00000008;
++              details_ = value;
++              onChanged();
++            }
+             
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo = 5;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder> helpInfoBuilder_;
+             public boolean hasHelpInfo() {
+-              return result.hasHelpInfo();
++              return ((bitField0_ & 0x00000010) == 0x00000010);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo getHelpInfo() {
+-              return result.getHelpInfo();
++              if (helpInfoBuilder_ == null) {
++                return helpInfo_;
++              } else {
++                return helpInfoBuilder_.getMessage();
++              }
+             }
+             public Builder setHelpInfo(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (helpInfoBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                helpInfo_ = value;
++                onChanged();
++              } else {
++                helpInfoBuilder_.setMessage(value);
+               }
+-              result.hasHelpInfo = true;
+-              result.helpInfo_ = value;
++              bitField0_ |= 0x00000010;
+               return this;
+             }
+-            public Builder setHelpInfo(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder builderForValue) {
+-              result.hasHelpInfo = true;
+-              result.helpInfo_ = builderForValue.build();
++            public Builder setHelpInfo(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder builderForValue) {
++              if (helpInfoBuilder_ == null) {
++                helpInfo_ = builderForValue.build();
++                onChanged();
++              } else {
++                helpInfoBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000010;
+               return this;
+             }
+             public Builder mergeHelpInfo(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo value) {
+-              if (result.hasHelpInfo() &&
+-                  result.helpInfo_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance()) {
+-                result.helpInfo_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.newBuilder(result.helpInfo_).mergeFrom(value).buildPartial();
++              if (helpInfoBuilder_ == null) {
++                if (((bitField0_ & 0x00000010) == 0x00000010) &&
++                    helpInfo_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance()) {
++                  helpInfo_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.newBuilder(helpInfo_).mergeFrom(value).buildPartial();
++                } else {
++                  helpInfo_ = value;
++                }
++                onChanged();
+               } else {
+-                result.helpInfo_ = value;
++                helpInfoBuilder_.mergeFrom(value);
+               }
+-              result.hasHelpInfo = true;
++              bitField0_ |= 0x00000010;
+               return this;
+             }
+             public Builder clearHelpInfo() {
+-              result.hasHelpInfo = false;
+-              result.helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
++              if (helpInfoBuilder_ == null) {
++                helpInfo_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.getDefaultInstance();
++                onChanged();
++              } else {
++                helpInfoBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000010);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder getHelpInfoBuilder() {
++              bitField0_ |= 0x00000010;
++              onChanged();
++              return getHelpInfoFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder getHelpInfoOrBuilder() {
++              if (helpInfoBuilder_ != null) {
++                return helpInfoBuilder_.getMessageOrBuilder();
++              } else {
++                return helpInfo_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder> 
++                getHelpInfoFieldBuilder() {
++              if (helpInfoBuilder_ == null) {
++                helpInfoBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfoOrBuilder>(
++                        helpInfo_,
++                        getParentForChildren(),
++                        isClean());
++                helpInfo_ = null;
++              }
++              return helpInfoBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new LogData(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData)
+         }
+         
++        public interface AddLogBranchOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required uint32 parentLogHandle = 1;
++          boolean hasParentLogHandle();
++          int getParentLogHandle();
++          
++          // required uint32 indexInParent = 2;
++          boolean hasIndexInParent();
++          int getIndexInParent();
++          
++          // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
++          boolean hasLogData();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder();
++        }
+         public static final class AddLogBranch extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements AddLogBranchOrBuilder {
+           // Use AddLogBranch.newBuilder() to construct.
+-          private AddLogBranch() {}
++          private AddLogBranch(Builder builder) {
++            super(builder);
++          }
++          private AddLogBranch(boolean noInit) {}
+           
+-          private static final AddLogBranch defaultInstance = new AddLogBranch();
++          private static final AddLogBranch defaultInstance;
+           public static AddLogBranch getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -2897,55 +4452,91 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // required uint32 parentLogHandle = 1;
+           public static final int PARENTLOGHANDLE_FIELD_NUMBER = 1;
+-          private boolean hasParentLogHandle;
+-          private int parentLogHandle_ = 0;
+-          public boolean hasParentLogHandle() { return hasParentLogHandle; }
+-          public int getParentLogHandle() { return parentLogHandle_; }
++          private int parentLogHandle_;
++          public boolean hasParentLogHandle() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public int getParentLogHandle() {
++            return parentLogHandle_;
++          }
+           
+           // required uint32 indexInParent = 2;
+           public static final int INDEXINPARENT_FIELD_NUMBER = 2;
+-          private boolean hasIndexInParent;
+-          private int indexInParent_ = 0;
+-          public boolean hasIndexInParent() { return hasIndexInParent; }
+-          public int getIndexInParent() { return indexInParent_; }
++          private int indexInParent_;
++          public boolean hasIndexInParent() {
++            return ((bitField0_ & 0x00000002) == 0x00000002);
++          }
++          public int getIndexInParent() {
++            return indexInParent_;
++          }
+           
+           // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
+           public static final int LOGDATA_FIELD_NUMBER = 3;
+-          private boolean hasLogData;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
+-          public boolean hasLogData() { return hasLogData; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() { return logData_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_;
++          public boolean hasLogData() {
++            return ((bitField0_ & 0x00000004) == 0x00000004);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() {
++            return logData_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder() {
++            return logData_;
++          }
+           
++          private void initFields() {
++            parentLogHandle_ = 0;
++            indexInParent_ = 0;
++            logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasParentLogHandle) return false;
+-            if (!hasIndexInParent) return false;
+-            if (!hasLogData) return false;
+-            if (!getLogData().isInitialized()) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasParentLogHandle()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!hasIndexInParent()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!hasLogData()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!getLogData().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasParentLogHandle()) {
+-              output.writeUInt32(1, getParentLogHandle());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeUInt32(1, parentLogHandle_);
+             }
+-            if (hasIndexInParent()) {
+-              output.writeUInt32(2, getIndexInParent());
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              output.writeUInt32(2, indexInParent_);
+             }
+-            if (hasLogData()) {
+-              output.writeMessage(3, getLogData());
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              output.writeMessage(3, logData_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -2956,43 +4547,50 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasParentLogHandle()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(1, getParentLogHandle());
+-            }
+-            if (hasIndexInParent()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(2, getIndexInParent());
+-            }
+-            if (hasLogData()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(3, getLogData());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(1, parentLogHandle_);
++            }
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(2, indexInParent_);
++            }
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(3, logData_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -3002,30 +4600,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -3038,37 +4645,63 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getLogDataFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              parentLogHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              indexInParent_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000002);
++              if (logDataBuilder_ == null) {
++                logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++              } else {
++                logDataBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch();
++              bitField0_ = (bitField0_ & ~0x00000004);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDescriptor();
+             }
+@@ -3077,36 +4710,50 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.parentLogHandle_ = parentLogHandle_;
++              if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                to_bitField0_ |= 0x00000002;
++              }
++              result.indexInParent_ = indexInParent_;
++              if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++                to_bitField0_ |= 0x00000004;
++              }
++              if (logDataBuilder_ == null) {
++                result.logData_ = logData_;
++              } else {
++                result.logData_ = logDataBuilder_.build();
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch returnMe = result;
+-              result = null;
+-              return returnMe;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch)other);
+               } else {
+@@ -3130,33 +4777,57 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasParentLogHandle()) {
++                
++                return false;
++              }
++              if (!hasIndexInParent()) {
++                
++                return false;
++              }
++              if (!hasLogData()) {
++                
++                return false;
++              }
++              if (!getLogData().isInitialized()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 8: {
+-                    setParentLogHandle(input.readUInt32());
++                    bitField0_ |= 0x00000001;
++                    parentLogHandle_ = input.readUInt32();
+                     break;
+                   }
+                   case 16: {
+-                    setIndexInParent(input.readUInt32());
++                    bitField0_ |= 0x00000002;
++                    indexInParent_ = input.readUInt32();
+                     break;
+                   }
+                   case 26: {
+@@ -3172,96 +4843,177 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required uint32 parentLogHandle = 1;
++            private int parentLogHandle_ ;
+             public boolean hasParentLogHandle() {
+-              return result.hasParentLogHandle();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public int getParentLogHandle() {
+-              return result.getParentLogHandle();
++              return parentLogHandle_;
+             }
+             public Builder setParentLogHandle(int value) {
+-              result.hasParentLogHandle = true;
+-              result.parentLogHandle_ = value;
++              bitField0_ |= 0x00000001;
++              parentLogHandle_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearParentLogHandle() {
+-              result.hasParentLogHandle = false;
+-              result.parentLogHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              parentLogHandle_ = 0;
++              onChanged();
+               return this;
+             }
+             
+             // required uint32 indexInParent = 2;
++            private int indexInParent_ ;
+             public boolean hasIndexInParent() {
+-              return result.hasIndexInParent();
++              return ((bitField0_ & 0x00000002) == 0x00000002);
+             }
+             public int getIndexInParent() {
+-              return result.getIndexInParent();
++              return indexInParent_;
+             }
+             public Builder setIndexInParent(int value) {
+-              result.hasIndexInParent = true;
+-              result.indexInParent_ = value;
++              bitField0_ |= 0x00000002;
++              indexInParent_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearIndexInParent() {
+-              result.hasIndexInParent = false;
+-              result.indexInParent_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000002);
++              indexInParent_ = 0;
++              onChanged();
+               return this;
+             }
+             
+             // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder> logDataBuilder_;
+             public boolean hasLogData() {
+-              return result.hasLogData();
++              return ((bitField0_ & 0x00000004) == 0x00000004);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() {
+-              return result.getLogData();
++              if (logDataBuilder_ == null) {
++                return logData_;
++              } else {
++                return logDataBuilder_.getMessage();
++              }
+             }
+             public Builder setLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (logDataBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                logData_ = value;
++                onChanged();
++              } else {
++                logDataBuilder_.setMessage(value);
+               }
+-              result.hasLogData = true;
+-              result.logData_ = value;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+-            public Builder setLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder builderForValue) {
+-              result.hasLogData = true;
+-              result.logData_ = builderForValue.build();
++            public Builder setLogData(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder builderForValue) {
++              if (logDataBuilder_ == null) {
++                logData_ = builderForValue.build();
++                onChanged();
++              } else {
++                logDataBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder mergeLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData value) {
+-              if (result.hasLogData() &&
+-                  result.logData_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance()) {
+-                result.logData_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder(result.logData_).mergeFrom(value).buildPartial();
++              if (logDataBuilder_ == null) {
++                if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                    logData_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance()) {
++                  logData_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder(logData_).mergeFrom(value).buildPartial();
++                } else {
++                  logData_ = value;
++                }
++                onChanged();
+               } else {
+-                result.logData_ = value;
++                logDataBuilder_.mergeFrom(value);
+               }
+-              result.hasLogData = true;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder clearLogData() {
+-              result.hasLogData = false;
+-              result.logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++              if (logDataBuilder_ == null) {
++                logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++                onChanged();
++              } else {
++                logDataBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000004);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder getLogDataBuilder() {
++              bitField0_ |= 0x00000004;
++              onChanged();
++              return getLogDataFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder() {
++              if (logDataBuilder_ != null) {
++                return logDataBuilder_.getMessageOrBuilder();
++              } else {
++                return logData_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder> 
++                getLogDataFieldBuilder() {
++              if (logDataBuilder_ == null) {
++                logDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder>(
++                        logData_,
++                        getParentForChildren(),
++                        isClean());
++                logData_ = null;
++              }
++              return logDataBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogBranch)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new AddLogBranch(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogBranch)
+         }
+         
++        public interface AddLogEntryOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required uint32 logHandle = 1;
++          boolean hasLogHandle();
++          int getLogHandle();
++          
++          // required uint32 indexInLog = 2;
++          boolean hasIndexInLog();
++          int getIndexInLog();
++          
++          // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
++          boolean hasLogData();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder();
++        }
+         public static final class AddLogEntry extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements AddLogEntryOrBuilder {
+           // Use AddLogEntry.newBuilder() to construct.
+-          private AddLogEntry() {}
++          private AddLogEntry(Builder builder) {
++            super(builder);
++          }
++          private AddLogEntry(boolean noInit) {}
+           
+-          private static final AddLogEntry defaultInstance = new AddLogEntry();
++          private static final AddLogEntry defaultInstance;
+           public static AddLogEntry getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -3270,55 +5022,91 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // required uint32 logHandle = 1;
+           public static final int LOGHANDLE_FIELD_NUMBER = 1;
+-          private boolean hasLogHandle;
+-          private int logHandle_ = 0;
+-          public boolean hasLogHandle() { return hasLogHandle; }
+-          public int getLogHandle() { return logHandle_; }
++          private int logHandle_;
++          public boolean hasLogHandle() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public int getLogHandle() {
++            return logHandle_;
++          }
+           
+           // required uint32 indexInLog = 2;
+           public static final int INDEXINLOG_FIELD_NUMBER = 2;
+-          private boolean hasIndexInLog;
+-          private int indexInLog_ = 0;
+-          public boolean hasIndexInLog() { return hasIndexInLog; }
+-          public int getIndexInLog() { return indexInLog_; }
++          private int indexInLog_;
++          public boolean hasIndexInLog() {
++            return ((bitField0_ & 0x00000002) == 0x00000002);
++          }
++          public int getIndexInLog() {
++            return indexInLog_;
++          }
+           
+           // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
+           public static final int LOGDATA_FIELD_NUMBER = 3;
+-          private boolean hasLogData;
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
+-          public boolean hasLogData() { return hasLogData; }
+-          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() { return logData_; }
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_;
++          public boolean hasLogData() {
++            return ((bitField0_ & 0x00000004) == 0x00000004);
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() {
++            return logData_;
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder() {
++            return logData_;
++          }
+           
++          private void initFields() {
++            logHandle_ = 0;
++            indexInLog_ = 0;
++            logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasLogHandle) return false;
+-            if (!hasIndexInLog) return false;
+-            if (!hasLogData) return false;
+-            if (!getLogData().isInitialized()) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasLogHandle()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!hasIndexInLog()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!hasLogData()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            if (!getLogData().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasLogHandle()) {
+-              output.writeUInt32(1, getLogHandle());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeUInt32(1, logHandle_);
+             }
+-            if (hasIndexInLog()) {
+-              output.writeUInt32(2, getIndexInLog());
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              output.writeUInt32(2, indexInLog_);
+             }
+-            if (hasLogData()) {
+-              output.writeMessage(3, getLogData());
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              output.writeMessage(3, logData_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -3329,43 +5117,50 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasLogHandle()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(1, getLogHandle());
+-            }
+-            if (hasIndexInLog()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(2, getIndexInLog());
+-            }
+-            if (hasLogData()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(3, getLogData());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(1, logHandle_);
++            }
++            if (((bitField0_ & 0x00000002) == 0x00000002)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(2, indexInLog_);
++            }
++            if (((bitField0_ & 0x00000004) == 0x00000004)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(3, logData_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -3375,30 +5170,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -3411,37 +5215,63 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getLogDataFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              indexInLog_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000002);
++              if (logDataBuilder_ == null) {
++                logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++              } else {
++                logDataBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry();
++              bitField0_ = (bitField0_ & ~0x00000004);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDescriptor();
+             }
+@@ -3450,36 +5280,50 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.logHandle_ = logHandle_;
++              if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++                to_bitField0_ |= 0x00000002;
++              }
++              result.indexInLog_ = indexInLog_;
++              if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++                to_bitField0_ |= 0x00000004;
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry returnMe = result;
+-              result = null;
+-              return returnMe;
++              if (logDataBuilder_ == null) {
++                result.logData_ = logData_;
++              } else {
++                result.logData_ = logDataBuilder_.build();
++              }
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry)other);
+               } else {
+@@ -3503,33 +5347,57 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasLogHandle()) {
++                
++                return false;
++              }
++              if (!hasIndexInLog()) {
++                
++                return false;
++              }
++              if (!hasLogData()) {
++                
++                return false;
++              }
++              if (!getLogData().isInitialized()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 8: {
+-                    setLogHandle(input.readUInt32());
++                    bitField0_ |= 0x00000001;
++                    logHandle_ = input.readUInt32();
+                     break;
+                   }
+                   case 16: {
+-                    setIndexInLog(input.readUInt32());
++                    bitField0_ |= 0x00000002;
++                    indexInLog_ = input.readUInt32();
+                     break;
+                   }
+                   case 26: {
+@@ -3545,96 +5413,168 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required uint32 logHandle = 1;
++            private int logHandle_ ;
+             public boolean hasLogHandle() {
+-              return result.hasLogHandle();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public int getLogHandle() {
+-              return result.getLogHandle();
++              return logHandle_;
+             }
+             public Builder setLogHandle(int value) {
+-              result.hasLogHandle = true;
+-              result.logHandle_ = value;
++              bitField0_ |= 0x00000001;
++              logHandle_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearLogHandle() {
+-              result.hasLogHandle = false;
+-              result.logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              logHandle_ = 0;
++              onChanged();
+               return this;
+             }
+             
+             // required uint32 indexInLog = 2;
++            private int indexInLog_ ;
+             public boolean hasIndexInLog() {
+-              return result.hasIndexInLog();
++              return ((bitField0_ & 0x00000002) == 0x00000002);
+             }
+             public int getIndexInLog() {
+-              return result.getIndexInLog();
++              return indexInLog_;
+             }
+             public Builder setIndexInLog(int value) {
+-              result.hasIndexInLog = true;
+-              result.indexInLog_ = value;
++              bitField0_ |= 0x00000002;
++              indexInLog_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearIndexInLog() {
+-              result.hasIndexInLog = false;
+-              result.indexInLog_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000002);
++              indexInLog_ = 0;
++              onChanged();
+               return this;
+             }
+             
+             // required .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.LogData logData = 3;
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder> logDataBuilder_;
+             public boolean hasLogData() {
+-              return result.hasLogData();
++              return ((bitField0_ & 0x00000004) == 0x00000004);
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData getLogData() {
+-              return result.getLogData();
++              if (logDataBuilder_ == null) {
++                return logData_;
++              } else {
++                return logDataBuilder_.getMessage();
++              }
+             }
+             public Builder setLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (logDataBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                logData_ = value;
++                onChanged();
++              } else {
++                logDataBuilder_.setMessage(value);
+               }
+-              result.hasLogData = true;
+-              result.logData_ = value;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+-            public Builder setLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder builderForValue) {
+-              result.hasLogData = true;
+-              result.logData_ = builderForValue.build();
++            public Builder setLogData(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder builderForValue) {
++              if (logDataBuilder_ == null) {
++                logData_ = builderForValue.build();
++                onChanged();
++              } else {
++                logDataBuilder_.setMessage(builderForValue.build());
++              }
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder mergeLogData(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData value) {
+-              if (result.hasLogData() &&
+-                  result.logData_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance()) {
+-                result.logData_ =
+-                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder(result.logData_).mergeFrom(value).buildPartial();
++              if (logDataBuilder_ == null) {
++                if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                    logData_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance()) {
++                  logData_ =
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.newBuilder(logData_).mergeFrom(value).buildPartial();
++                } else {
++                  logData_ = value;
++                }
++                onChanged();
+               } else {
+-                result.logData_ = value;
++                logDataBuilder_.mergeFrom(value);
+               }
+-              result.hasLogData = true;
++              bitField0_ |= 0x00000004;
+               return this;
+             }
+             public Builder clearLogData() {
+-              result.hasLogData = false;
+-              result.logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++              if (logDataBuilder_ == null) {
++                logData_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.getDefaultInstance();
++                onChanged();
++              } else {
++                logDataBuilder_.clear();
++              }
++              bitField0_ = (bitField0_ & ~0x00000004);
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder getLogDataBuilder() {
++              bitField0_ |= 0x00000004;
++              onChanged();
++              return getLogDataFieldBuilder().getBuilder();
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder getLogDataOrBuilder() {
++              if (logDataBuilder_ != null) {
++                return logDataBuilder_.getMessageOrBuilder();
++              } else {
++                return logData_;
++              }
++            }
++            private com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder> 
++                getLogDataFieldBuilder() {
++              if (logDataBuilder_ == null) {
++                logDataBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogDataOrBuilder>(
++                        logData_,
++                        getParentForChildren(),
++                        isClean());
++                logData_ = null;
++              }
++              return logDataBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogEntry)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new AddLogEntry(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogEntry)
+         }
+         
++        public interface DisconnectLogOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required uint32 logHandle = 1;
++          boolean hasLogHandle();
++          int getLogHandle();
++        }
+         public static final class DisconnectLog extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements DisconnectLogOrBuilder {
+           // Use DisconnectLog.newBuilder() to construct.
+-          private DisconnectLog() {}
++          private DisconnectLog(Builder builder) {
++            super(builder);
++          }
++          private DisconnectLog(boolean noInit) {}
+           
+-          private static final DisconnectLog defaultInstance = new DisconnectLog();
++          private static final DisconnectLog defaultInstance;
+           public static DisconnectLog getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -3643,32 +5583,48 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // required uint32 logHandle = 1;
+           public static final int LOGHANDLE_FIELD_NUMBER = 1;
+-          private boolean hasLogHandle;
+-          private int logHandle_ = 0;
+-          public boolean hasLogHandle() { return hasLogHandle; }
+-          public int getLogHandle() { return logHandle_; }
++          private int logHandle_;
++          public boolean hasLogHandle() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public int getLogHandle() {
++            return logHandle_;
++          }
+           
++          private void initFields() {
++            logHandle_ = 0;
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasLogHandle) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasLogHandle()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasLogHandle()) {
+-              output.writeUInt32(1, getLogHandle());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeUInt32(1, logHandle_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -3679,35 +5635,42 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasLogHandle()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(1, getLogHandle());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(1, logHandle_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -3717,30 +5680,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -3753,37 +5725,54 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog();
++              super.clear();
++              logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDescriptor();
+             }
+@@ -3792,36 +5781,38 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.logHandle_ = logHandle_;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog)other);
+               } else {
+@@ -3839,70 +5830,102 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasLogHandle()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 8: {
+-                    setLogHandle(input.readUInt32());
++                    bitField0_ |= 0x00000001;
++                    logHandle_ = input.readUInt32();
+                     break;
+                   }
+                 }
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required uint32 logHandle = 1;
++            private int logHandle_ ;
+             public boolean hasLogHandle() {
+-              return result.hasLogHandle();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public int getLogHandle() {
+-              return result.getLogHandle();
++              return logHandle_;
+             }
+             public Builder setLogHandle(int value) {
+-              result.hasLogHandle = true;
+-              result.logHandle_ = value;
++              bitField0_ |= 0x00000001;
++              logHandle_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearLogHandle() {
+-              result.hasLogHandle = false;
+-              result.logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              logHandle_ = 0;
++              onChanged();
+               return this;
+             }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.DisconnectLog)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new DisconnectLog(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.DisconnectLog)
+         }
+         
++        public interface InitializeOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // optional string clientId = 1;
++          boolean hasClientId();
++          String getClientId();
++          
++          // repeated string startupURLs = 2;
++          java.util.List<String> getStartupURLsList();
++          int getStartupURLsCount();
++          String getStartupURLs(int index);
++        }
+         public static final class Initialize extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements InitializeOrBuilder {
+           // Use Initialize.newBuilder() to construct.
+-          private Initialize() {}
++          private Initialize(Builder builder) {
++            super(builder);
++          }
++          private Initialize(boolean noInit) {}
+           
+-          private static final Initialize defaultInstance = new Initialize();
++          private static final Initialize defaultInstance;
+           public static Initialize getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -3911,46 +5934,84 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // optional string clientId = 1;
+           public static final int CLIENTID_FIELD_NUMBER = 1;
+-          private boolean hasClientId;
+-          private java.lang.String clientId_ = "";
+-          public boolean hasClientId() { return hasClientId; }
+-          public java.lang.String getClientId() { return clientId_; }
++          private java.lang.Object clientId_;
++          public boolean hasClientId() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public String getClientId() {
++            java.lang.Object ref = clientId_;
++            if (ref instanceof String) {
++              return (String) ref;
++            } else {
++              com.google.protobuf.ByteString bs = 
++                  (com.google.protobuf.ByteString) ref;
++              String s = bs.toStringUtf8();
++              if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++                clientId_ = s;
++              }
++              return s;
++            }
++          }
++          private com.google.protobuf.ByteString getClientIdBytes() {
++            java.lang.Object ref = clientId_;
++            if (ref instanceof String) {
++              com.google.protobuf.ByteString b = 
++                  com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++              clientId_ = b;
++              return b;
++            } else {
++              return (com.google.protobuf.ByteString) ref;
++            }
++          }
+           
+           // repeated string startupURLs = 2;
+           public static final int STARTUPURLS_FIELD_NUMBER = 2;
+-          private java.util.List<java.lang.String> startupURLs_ =
+-            java.util.Collections.emptyList();
+-          public java.util.List<java.lang.String> getStartupURLsList() {
++          private com.google.protobuf.LazyStringList startupURLs_;
++          public java.util.List<String>
++              getStartupURLsList() {
+             return startupURLs_;
+           }
+-          public int getStartupURLsCount() { return startupURLs_.size(); }
+-          public java.lang.String getStartupURLs(int index) {
++          public int getStartupURLsCount() {
++            return startupURLs_.size();
++          }
++          public String getStartupURLs(int index) {
+             return startupURLs_.get(index);
+           }
+           
++          private void initFields() {
++            clientId_ = "";
++            startupURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasClientId()) {
+-              output.writeString(1, getClientId());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeBytes(1, getClientIdBytes());
+             }
+-            for (java.lang.String element : getStartupURLsList()) {
+-              output.writeString(2, element);
++            for (int i = 0; i < startupURLs_.size(); i++) {
++              output.writeBytes(2, startupURLs_.getByteString(i));
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -3961,15 +6022,15 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasClientId()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeStringSize(1, getClientId());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeBytesSize(1, getClientIdBytes());
+             }
+             {
+               int dataSize = 0;
+-              for (java.lang.String element : getStartupURLsList()) {
+-                dataSize += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeStringSizeNoTag(element);
++              for (int i = 0; i < startupURLs_.size(); i++) {
++                dataSize += com.google.protobuf.CodedOutputStream
++                  .computeBytesSizeNoTag(startupURLs_.getByteString(i));
+               }
+               size += dataSize;
+               size += 1 * getStartupURLsList().size();
+@@ -3979,26 +6040,33 @@ public final class RemoteMessageProto {
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -4008,30 +6076,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -4044,37 +6121,56 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize();
++              super.clear();
++              clientId_ = "";
++              bitField0_ = (bitField0_ & ~0x00000001);
++              startupURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
++              bitField0_ = (bitField0_ & ~0x00000002);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDescriptor();
+             }
+@@ -4083,40 +6179,44 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              if (result.startupURLs_ != java.util.Collections.EMPTY_LIST) {
+-                result.startupURLs_ =
+-                  java.util.Collections.unmodifiableList(result.startupURLs_);
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.clientId_ = clientId_;
++              if (((bitField0_ & 0x00000002) == 0x00000002)) {
++                startupURLs_ = new com.google.protobuf.UnmodifiableLazyStringList(
++                    startupURLs_);
++                bitField0_ = (bitField0_ & ~0x00000002);
++              }
++              result.startupURLs_ = startupURLs_;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize)other);
+               } else {
+@@ -4131,207 +6231,319 @@ public final class RemoteMessageProto {
+                 setClientId(other.getClientId());
+               }
+               if (!other.startupURLs_.isEmpty()) {
+-                if (result.startupURLs_.isEmpty()) {
+-                  result.startupURLs_ = new java.util.ArrayList<java.lang.String>();
++                if (startupURLs_.isEmpty()) {
++                  startupURLs_ = other.startupURLs_;
++                  bitField0_ = (bitField0_ & ~0x00000002);
++                } else {
++                  ensureStartupURLsIsMutable();
++                  startupURLs_.addAll(other.startupURLs_);
+                 }
+-                result.startupURLs_.addAll(other.startupURLs_);
++                onChanged();
+               }
+               this.mergeUnknownFields(other.getUnknownFields());
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 10: {
+-                    setClientId(input.readString());
++                    bitField0_ |= 0x00000001;
++                    clientId_ = input.readBytes();
+                     break;
+                   }
+                   case 18: {
+-                    addStartupURLs(input.readString());
++                    ensureStartupURLsIsMutable();
++                    startupURLs_.add(input.readBytes());
+                     break;
+                   }
+                 }
+               }
+             }
+             
++            private int bitField0_;
+             
+             // optional string clientId = 1;
++            private java.lang.Object clientId_ = "";
+             public boolean hasClientId() {
+-              return result.hasClientId();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+-            public java.lang.String getClientId() {
+-              return result.getClientId();
++            public String getClientId() {
++              java.lang.Object ref = clientId_;
++              if (!(ref instanceof String)) {
++                String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++                clientId_ = s;
++                return s;
++              } else {
++                return (String) ref;
++              }
+             }
+-            public Builder setClientId(java.lang.String value) {
++            public Builder setClientId(String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasClientId = true;
+-              result.clientId_ = value;
++  bitField0_ |= 0x00000001;
++              clientId_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearClientId() {
+-              result.hasClientId = false;
+-              result.clientId_ = getDefaultInstance().getClientId();
++              bitField0_ = (bitField0_ & ~0x00000001);
++              clientId_ = getDefaultInstance().getClientId();
++              onChanged();
+               return this;
+             }
++            void setClientId(com.google.protobuf.ByteString value) {
++              bitField0_ |= 0x00000001;
++              clientId_ = value;
++              onChanged();
++            }
+             
+             // repeated string startupURLs = 2;
+-            public java.util.List<java.lang.String> getStartupURLsList() {
+-              return java.util.Collections.unmodifiableList(result.startupURLs_);
++            private com.google.protobuf.LazyStringList startupURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
++            private void ensureStartupURLsIsMutable() {
++              if (!((bitField0_ & 0x00000002) == 0x00000002)) {
++                startupURLs_ = new com.google.protobuf.LazyStringArrayList(startupURLs_);
++                bitField0_ |= 0x00000002;
++               }
++            }
++            public java.util.List<String>
++                getStartupURLsList() {
++              return java.util.Collections.unmodifiableList(startupURLs_);
+             }
+             public int getStartupURLsCount() {
+-              return result.getStartupURLsCount();
++              return startupURLs_.size();
+             }
+-            public java.lang.String getStartupURLs(int index) {
+-              return result.getStartupURLs(index);
++            public String getStartupURLs(int index) {
++              return startupURLs_.get(index);
+             }
+-            public Builder setStartupURLs(int index, java.lang.String value) {
++            public Builder setStartupURLs(
++                int index, String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.startupURLs_.set(index, value);
++  ensureStartupURLsIsMutable();
++              startupURLs_.set(index, value);
++              onChanged();
+               return this;
+             }
+-            public Builder addStartupURLs(java.lang.String value) {
++            public Builder addStartupURLs(String value) {
+               if (value == null) {
+     throw new NullPointerException();
+   }
+-  if (result.startupURLs_.isEmpty()) {
+-                result.startupURLs_ = new java.util.ArrayList<java.lang.String>();
+-              }
+-              result.startupURLs_.add(value);
++  ensureStartupURLsIsMutable();
++              startupURLs_.add(value);
++              onChanged();
+               return this;
+             }
+             public Builder addAllStartupURLs(
+-                java.lang.Iterable<? extends java.lang.String> values) {
+-              if (result.startupURLs_.isEmpty()) {
+-                result.startupURLs_ = new java.util.ArrayList<java.lang.String>();
+-              }
+-              super.addAll(values, result.startupURLs_);
++                java.lang.Iterable<String> values) {
++              ensureStartupURLsIsMutable();
++              super.addAll(values, startupURLs_);
++              onChanged();
+               return this;
+             }
+             public Builder clearStartupURLs() {
+-              result.startupURLs_ = java.util.Collections.emptyList();
++              startupURLs_ = com.google.protobuf.LazyStringArrayList.EMPTY;
++              bitField0_ = (bitField0_ & ~0x00000002);
++              onChanged();
+               return this;
+             }
++            void addStartupURLs(com.google.protobuf.ByteString value) {
++              ensureStartupURLsIsMutable();
++              startupURLs_.add(value);
++              onChanged();
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.Initialize)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new Initialize(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.Initialize)
+         }
+         
++        private int bitField0_;
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType requestType = 1;
+         public static final int REQUESTTYPE_FIELD_NUMBER = 1;
+-        private boolean hasRequestType;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
+-        public boolean hasRequestType() { return hasRequestType; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getRequestType() { return requestType_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType requestType_;
++        public boolean hasRequestType() {
++          return ((bitField0_ & 0x00000001) == 0x00000001);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getRequestType() {
++          return requestType_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange = 2;
+         public static final int CAPABILITYEXCHANGE_FIELD_NUMBER = 2;
+-        private boolean hasCapabilityExchange;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
+-        public boolean hasCapabilityExchange() { return hasCapabilityExchange; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange getCapabilityExchange() { return capabilityExchange_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange_;
++        public boolean hasCapabilityExchange() {
++          return ((bitField0_ & 0x00000002) == 0x00000002);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange getCapabilityExchange() {
++          return capabilityExchange_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++          return capabilityExchange_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog addLog = 3;
+         public static final int ADDLOG_FIELD_NUMBER = 3;
+-        private boolean hasAddLog;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
+-        public boolean hasAddLog() { return hasAddLog; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog getAddLog() { return addLog_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog addLog_;
++        public boolean hasAddLog() {
++          return ((bitField0_ & 0x00000004) == 0x00000004);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog getAddLog() {
++          return addLog_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder getAddLogOrBuilder() {
++          return addLog_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogBranch addLogBranch = 4;
+         public static final int ADDLOGBRANCH_FIELD_NUMBER = 4;
+-        private boolean hasAddLogBranch;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
+-        public boolean hasAddLogBranch() { return hasAddLogBranch; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch getAddLogBranch() { return addLogBranch_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch addLogBranch_;
++        public boolean hasAddLogBranch() {
++          return ((bitField0_ & 0x00000008) == 0x00000008);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch getAddLogBranch() {
++          return addLogBranch_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder getAddLogBranchOrBuilder() {
++          return addLogBranch_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogEntry addLogEntry = 5;
+         public static final int ADDLOGENTRY_FIELD_NUMBER = 5;
+-        private boolean hasAddLogEntry;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
+-        public boolean hasAddLogEntry() { return hasAddLogEntry; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry getAddLogEntry() { return addLogEntry_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry addLogEntry_;
++        public boolean hasAddLogEntry() {
++          return ((bitField0_ & 0x00000010) == 0x00000010);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry getAddLogEntry() {
++          return addLogEntry_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder getAddLogEntryOrBuilder() {
++          return addLogEntry_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.DisconnectLog disconnectLog = 6;
+         public static final int DISCONNECTLOG_FIELD_NUMBER = 6;
+-        private boolean hasDisconnectLog;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
+-        public boolean hasDisconnectLog() { return hasDisconnectLog; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog getDisconnectLog() { return disconnectLog_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog disconnectLog_;
++        public boolean hasDisconnectLog() {
++          return ((bitField0_ & 0x00000020) == 0x00000020);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog getDisconnectLog() {
++          return disconnectLog_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder getDisconnectLogOrBuilder() {
++          return disconnectLog_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.Initialize initialize = 7;
+         public static final int INITIALIZE_FIELD_NUMBER = 7;
+-        private boolean hasInitialize;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
+-        public boolean hasInitialize() { return hasInitialize; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize getInitialize() { return initialize_; }
+-        
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize initialize_;
++        public boolean hasInitialize() {
++          return ((bitField0_ & 0x00000040) == 0x00000040);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize getInitialize() {
++          return initialize_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder getInitializeOrBuilder() {
++          return initialize_;
++        }
++        
++        private void initFields() {
++          requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++          capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
++          addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
++          addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
++          addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
++          disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
++          initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
++        }
++        private byte memoizedIsInitialized = -1;
+         public final boolean isInitialized() {
++          byte isInitialized = memoizedIsInitialized;
++          if (isInitialized != -1) return isInitialized == 1;
++          
+           if (hasAddLog()) {
+-            if (!getAddLog().isInitialized()) return false;
++            if (!getAddLog().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
+           if (hasAddLogBranch()) {
+-            if (!getAddLogBranch().isInitialized()) return false;
++            if (!getAddLogBranch().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
+           if (hasAddLogEntry()) {
+-            if (!getAddLogEntry().isInitialized()) return false;
++            if (!getAddLogEntry().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
+           if (hasDisconnectLog()) {
+-            if (!getDisconnectLog().isInitialized()) return false;
++            if (!getDisconnectLog().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
++          memoizedIsInitialized = 1;
+           return true;
+         }
+         
+-        public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++        public void writeTo(com.google.protobuf.CodedOutputStream output)
+                             throws java.io.IOException {
+-          if (hasRequestType()) {
+-            output.writeEnum(1, getRequestType().getNumber());
++          getSerializedSize();
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            output.writeEnum(1, requestType_.getNumber());
+           }
+-          if (hasCapabilityExchange()) {
+-            output.writeMessage(2, getCapabilityExchange());
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            output.writeMessage(2, capabilityExchange_);
+           }
+-          if (hasAddLog()) {
+-            output.writeMessage(3, getAddLog());
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            output.writeMessage(3, addLog_);
+           }
+-          if (hasAddLogBranch()) {
+-            output.writeMessage(4, getAddLogBranch());
++          if (((bitField0_ & 0x00000008) == 0x00000008)) {
++            output.writeMessage(4, addLogBranch_);
+           }
+-          if (hasAddLogEntry()) {
+-            output.writeMessage(5, getAddLogEntry());
++          if (((bitField0_ & 0x00000010) == 0x00000010)) {
++            output.writeMessage(5, addLogEntry_);
+           }
+-          if (hasDisconnectLog()) {
+-            output.writeMessage(6, getDisconnectLog());
++          if (((bitField0_ & 0x00000020) == 0x00000020)) {
++            output.writeMessage(6, disconnectLog_);
+           }
+-          if (hasInitialize()) {
+-            output.writeMessage(7, getInitialize());
++          if (((bitField0_ & 0x00000040) == 0x00000040)) {
++            output.writeMessage(7, initialize_);
+           }
+           getUnknownFields().writeTo(output);
+         }
+@@ -4342,59 +6554,66 @@ public final class RemoteMessageProto {
+           if (size != -1) return size;
+         
+           size = 0;
+-          if (hasRequestType()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeEnumSize(1, getRequestType().getNumber());
+-          }
+-          if (hasCapabilityExchange()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(2, getCapabilityExchange());
+-          }
+-          if (hasAddLog()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(3, getAddLog());
+-          }
+-          if (hasAddLogBranch()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(4, getAddLogBranch());
+-          }
+-          if (hasAddLogEntry()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(5, getAddLogEntry());
+-          }
+-          if (hasDisconnectLog()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(6, getDisconnectLog());
+-          }
+-          if (hasInitialize()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(7, getInitialize());
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeEnumSize(1, requestType_.getNumber());
++          }
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(2, capabilityExchange_);
++          }
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(3, addLog_);
++          }
++          if (((bitField0_ & 0x00000008) == 0x00000008)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(4, addLogBranch_);
++          }
++          if (((bitField0_ & 0x00000010) == 0x00000010)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(5, addLogEntry_);
++          }
++          if (((bitField0_ & 0x00000020) == 0x00000020)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(6, disconnectLog_);
++          }
++          if (((bitField0_ & 0x00000040) == 0x00000040)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(7, initialize_);
+           }
+           size += getUnknownFields().getSerializedSize();
+           memoizedSerializedSize = size;
+           return size;
+         }
+         
++        private static final long serialVersionUID = 0L;
++        @java.lang.Override
++        protected java.lang.Object writeReplace()
++            throws java.io.ObjectStreamException {
++          return super.writeReplace();
++        }
++        
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(byte[] data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+             byte[] data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+@@ -4404,30 +6623,39 @@ public final class RemoteMessageProto {
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseDelimitedFrom(java.io.InputStream input)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input).buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseDelimitedFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                   .buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input)
++            com.google.protobuf.CodedInputStream input)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+@@ -4440,37 +6668,96 @@ public final class RemoteMessageProto {
+         }
+         public Builder toBuilder() { return newBuilder(this); }
+         
++        @java.lang.Override
++        protected Builder newBuilderForType(
++            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++          Builder builder = new Builder(parent);
++          return builder;
++        }
+         public static final class Builder extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest result;
++            com.google.protobuf.GeneratedMessage.Builder<Builder>
++           implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder {
++          public static final com.google.protobuf.Descriptors.Descriptor
++              getDescriptor() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor;
++          }
+           
+-          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.newBuilder()
+-          private Builder() {}
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++              internalGetFieldAccessorTable() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_fieldAccessorTable;
++          }
+           
+-          private static Builder create() {
+-            Builder builder = new Builder();
+-            builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest();
+-            return builder;
++          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.newBuilder()
++          private Builder() {
++            maybeForceBuilderInitialization();
+           }
+           
+-          protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest internalGetResult() {
+-            return result;
++          private Builder(BuilderParent parent) {
++            super(parent);
++            maybeForceBuilderInitialization();
++          }
++          private void maybeForceBuilderInitialization() {
++            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              getCapabilityExchangeFieldBuilder();
++              getAddLogFieldBuilder();
++              getAddLogBranchFieldBuilder();
++              getAddLogEntryFieldBuilder();
++              getDisconnectLogFieldBuilder();
++              getInitializeFieldBuilder();
++            }
++          }
++          private static Builder create() {
++            return new Builder();
+           }
+           
+           public Builder clear() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "Cannot call clear() after build().");
++            super.clear();
++            requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
++            if (addLogBuilder_ == null) {
++              addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
++            } else {
++              addLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
++            } else {
++              addLogBranchBuilder_.clear();
+             }
+-            result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest();
++            bitField0_ = (bitField0_ & ~0x00000008);
++            if (addLogEntryBuilder_ == null) {
++              addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
++            } else {
++              addLogEntryBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000010);
++            if (disconnectLogBuilder_ == null) {
++              disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
++            } else {
++              disconnectLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000020);
++            if (initializeBuilder_ == null) {
++              initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
++            } else {
++              initializeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000040);
+             return this;
+           }
+           
+           public Builder clone() {
+-            return create().mergeFrom(result);
++            return create().mergeFrom(buildPartial());
+           }
+           
+-          public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public com.google.protobuf.Descriptors.Descriptor
+               getDescriptorForType() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDescriptor();
+           }
+@@ -4479,36 +6766,86 @@ public final class RemoteMessageProto {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
+           }
+           
+-          public boolean isInitialized() {
+-            return result.isInitialized();
+-          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest build() {
+-            if (result != null && !isInitialized()) {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(result);
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest buildParsed()
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-            if (!isInitialized()) {
++              throws com.google.protobuf.InvalidProtocolBufferException {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(
+                 result).asInvalidProtocolBufferException();
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest buildPartial() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "build() has already been called on this Builder.");
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest(this);
++            int from_bitField0_ = bitField0_;
++            int to_bitField0_ = 0;
++            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++              to_bitField0_ |= 0x00000001;
++            }
++            result.requestType_ = requestType_;
++            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++              to_bitField0_ |= 0x00000002;
++            }
++            if (capabilityExchangeBuilder_ == null) {
++              result.capabilityExchange_ = capabilityExchange_;
++            } else {
++              result.capabilityExchange_ = capabilityExchangeBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++              to_bitField0_ |= 0x00000004;
++            }
++            if (addLogBuilder_ == null) {
++              result.addLog_ = addLog_;
++            } else {
++              result.addLog_ = addLogBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++              to_bitField0_ |= 0x00000008;
++            }
++            if (addLogBranchBuilder_ == null) {
++              result.addLogBranch_ = addLogBranch_;
++            } else {
++              result.addLogBranch_ = addLogBranchBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
++              to_bitField0_ |= 0x00000010;
++            }
++            if (addLogEntryBuilder_ == null) {
++              result.addLogEntry_ = addLogEntry_;
++            } else {
++              result.addLogEntry_ = addLogEntryBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
++              to_bitField0_ |= 0x00000020;
++            }
++            if (disconnectLogBuilder_ == null) {
++              result.disconnectLog_ = disconnectLog_;
++            } else {
++              result.disconnectLog_ = disconnectLogBuilder_.build();
+             }
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest returnMe = result;
+-            result = null;
+-            return returnMe;
++            if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
++              to_bitField0_ |= 0x00000040;
++            }
++            if (initializeBuilder_ == null) {
++              result.initialize_ = initialize_;
++            } else {
++              result.initialize_ = initializeBuilder_.build();
++            }
++            result.bitField0_ = to_bitField0_;
++            onBuilt();
++            return result;
+           }
+           
+-          public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++          public Builder mergeFrom(com.google.protobuf.Message other) {
+             if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest) {
+               return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest)other);
+             } else {
+@@ -4544,23 +6881,53 @@ public final class RemoteMessageProto {
+             return this;
+           }
+           
++          public final boolean isInitialized() {
++            if (hasAddLog()) {
++              if (!getAddLog().isInitialized()) {
++                
++                return false;
++              }
++            }
++            if (hasAddLogBranch()) {
++              if (!getAddLogBranch().isInitialized()) {
++                
++                return false;
++              }
++            }
++            if (hasAddLogEntry()) {
++              if (!getAddLogEntry().isInitialized()) {
++                
++                return false;
++              }
++            }
++            if (hasDisconnectLog()) {
++              if (!getDisconnectLog().isInitialized()) {
++                
++                return false;
++              }
++            }
++            return true;
++          }
++          
+           public Builder mergeFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++              com.google.protobuf.UnknownFieldSet.newBuilder(
+                 this.getUnknownFields());
+             while (true) {
+               int tag = input.readTag();
+               switch (tag) {
+                 case 0:
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 default: {
+                   if (!parseUnknownField(input, unknownFields,
+                                          extensionRegistry, tag)) {
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   }
+                   break;
+@@ -4571,7 +6938,8 @@ public final class RemoteMessageProto {
+                   if (value == null) {
+                     unknownFields.mergeVarintField(1, rawValue);
+                   } else {
+-                    setRequestType(value);
++                    bitField0_ |= 0x00000001;
++                    requestType_ = value;
+                   }
+                   break;
+                 }
+@@ -4633,266 +7001,610 @@ public final class RemoteMessageProto {
+             }
+           }
+           
++          private int bitField0_;
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType requestType = 1;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
+           public boolean hasRequestType() {
+-            return result.hasRequestType();
++            return ((bitField0_ & 0x00000001) == 0x00000001);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getRequestType() {
+-            return result.getRequestType();
++            return requestType_;
+           }
+           public Builder setRequestType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType value) {
+             if (value == null) {
+               throw new NullPointerException();
+             }
+-            result.hasRequestType = true;
+-            result.requestType_ = value;
++            bitField0_ |= 0x00000001;
++            requestType_ = value;
++            onChanged();
+             return this;
+           }
+           public Builder clearRequestType() {
+-            result.hasRequestType = false;
+-            result.requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++            onChanged();
+             return this;
+           }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange = 2;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder> capabilityExchangeBuilder_;
+           public boolean hasCapabilityExchange() {
+-            return result.hasCapabilityExchange();
++            return ((bitField0_ & 0x00000002) == 0x00000002);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange getCapabilityExchange() {
+-            return result.getCapabilityExchange();
++            if (capabilityExchangeBuilder_ == null) {
++              return capabilityExchange_;
++            } else {
++              return capabilityExchangeBuilder_.getMessage();
++            }
+           }
+           public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (capabilityExchangeBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              capabilityExchange_ = value;
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(value);
+             }
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = value;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+-          public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder builderForValue) {
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = builderForValue.build();
++          public Builder setCapabilityExchange(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder builderForValue) {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = builderForValue.build();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder mergeCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange value) {
+-            if (result.hasCapabilityExchange() &&
+-                result.capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance()) {
+-              result.capabilityExchange_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.newBuilder(result.capabilityExchange_).mergeFrom(value).buildPartial();
++            if (capabilityExchangeBuilder_ == null) {
++              if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                  capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance()) {
++                capabilityExchange_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.newBuilder(capabilityExchange_).mergeFrom(value).buildPartial();
++              } else {
++                capabilityExchange_ = value;
++              }
++              onChanged();
+             } else {
+-              result.capabilityExchange_ = value;
++              capabilityExchangeBuilder_.mergeFrom(value);
+             }
+-            result.hasCapabilityExchange = true;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder clearCapabilityExchange() {
+-            result.hasCapabilityExchange = false;
+-            result.capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.getDefaultInstance();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder getCapabilityExchangeBuilder() {
++            bitField0_ |= 0x00000002;
++            onChanged();
++            return getCapabilityExchangeFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++            if (capabilityExchangeBuilder_ != null) {
++              return capabilityExchangeBuilder_.getMessageOrBuilder();
++            } else {
++              return capabilityExchange_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder> 
++              getCapabilityExchangeFieldBuilder() {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchangeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchangeOrBuilder>(
++                      capabilityExchange_,
++                      getParentForChildren(),
++                      isClean());
++              capabilityExchange_ = null;
++            }
++            return capabilityExchangeBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLog addLog = 3;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder> addLogBuilder_;
+           public boolean hasAddLog() {
+-            return result.hasAddLog();
++            return ((bitField0_ & 0x00000004) == 0x00000004);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog getAddLog() {
+-            return result.getAddLog();
++            if (addLogBuilder_ == null) {
++              return addLog_;
++            } else {
++              return addLogBuilder_.getMessage();
++            }
+           }
+           public Builder setAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (addLogBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              addLog_ = value;
++              onChanged();
++            } else {
++              addLogBuilder_.setMessage(value);
+             }
+-            result.hasAddLog = true;
+-            result.addLog_ = value;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+-          public Builder setAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder builderForValue) {
+-            result.hasAddLog = true;
+-            result.addLog_ = builderForValue.build();
++          public Builder setAddLog(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder builderForValue) {
++            if (addLogBuilder_ == null) {
++              addLog_ = builderForValue.build();
++              onChanged();
++            } else {
++              addLogBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder mergeAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog value) {
+-            if (result.hasAddLog() &&
+-                result.addLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance()) {
+-              result.addLog_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.newBuilder(result.addLog_).mergeFrom(value).buildPartial();
++            if (addLogBuilder_ == null) {
++              if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                  addLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance()) {
++                addLog_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.newBuilder(addLog_).mergeFrom(value).buildPartial();
++              } else {
++                addLog_ = value;
++              }
++              onChanged();
+             } else {
+-              result.addLog_ = value;
++              addLogBuilder_.mergeFrom(value);
+             }
+-            result.hasAddLog = true;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder clearAddLog() {
+-            result.hasAddLog = false;
+-            result.addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
++            if (addLogBuilder_ == null) {
++              addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.getDefaultInstance();
++              onChanged();
++            } else {
++              addLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder getAddLogBuilder() {
++            bitField0_ |= 0x00000004;
++            onChanged();
++            return getAddLogFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder getAddLogOrBuilder() {
++            if (addLogBuilder_ != null) {
++              return addLogBuilder_.getMessageOrBuilder();
++            } else {
++              return addLog_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder> 
++              getAddLogFieldBuilder() {
++            if (addLogBuilder_ == null) {
++              addLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogOrBuilder>(
++                      addLog_,
++                      getParentForChildren(),
++                      isClean());
++              addLog_ = null;
++            }
++            return addLogBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogBranch addLogBranch = 4;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder> addLogBranchBuilder_;
+           public boolean hasAddLogBranch() {
+-            return result.hasAddLogBranch();
++            return ((bitField0_ & 0x00000008) == 0x00000008);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch getAddLogBranch() {
+-            return result.getAddLogBranch();
++            if (addLogBranchBuilder_ == null) {
++              return addLogBranch_;
++            } else {
++              return addLogBranchBuilder_.getMessage();
++            }
+           }
+           public Builder setAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (addLogBranchBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              addLogBranch_ = value;
++              onChanged();
++            } else {
++              addLogBranchBuilder_.setMessage(value);
+             }
+-            result.hasAddLogBranch = true;
+-            result.addLogBranch_ = value;
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+-          public Builder setAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder builderForValue) {
+-            result.hasAddLogBranch = true;
+-            result.addLogBranch_ = builderForValue.build();
++          public Builder setAddLogBranch(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder builderForValue) {
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = builderForValue.build();
++              onChanged();
++            } else {
++              addLogBranchBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+           public Builder mergeAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch value) {
+-            if (result.hasAddLogBranch() &&
+-                result.addLogBranch_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance()) {
+-              result.addLogBranch_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.newBuilder(result.addLogBranch_).mergeFrom(value).buildPartial();
++            if (addLogBranchBuilder_ == null) {
++              if (((bitField0_ & 0x00000008) == 0x00000008) &&
++                  addLogBranch_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance()) {
++                addLogBranch_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.newBuilder(addLogBranch_).mergeFrom(value).buildPartial();
++              } else {
++                addLogBranch_ = value;
++              }
++              onChanged();
+             } else {
+-              result.addLogBranch_ = value;
++              addLogBranchBuilder_.mergeFrom(value);
+             }
+-            result.hasAddLogBranch = true;
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+           public Builder clearAddLogBranch() {
+-            result.hasAddLogBranch = false;
+-            result.addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.getDefaultInstance();
++              onChanged();
++            } else {
++              addLogBranchBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000008);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder getAddLogBranchBuilder() {
++            bitField0_ |= 0x00000008;
++            onChanged();
++            return getAddLogBranchFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder getAddLogBranchOrBuilder() {
++            if (addLogBranchBuilder_ != null) {
++              return addLogBranchBuilder_.getMessageOrBuilder();
++            } else {
++              return addLogBranch_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder> 
++              getAddLogBranchFieldBuilder() {
++            if (addLogBranchBuilder_ == null) {
++              addLogBranchBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranchOrBuilder>(
++                      addLogBranch_,
++                      getParentForChildren(),
++                      isClean());
++              addLogBranch_ = null;
++            }
++            return addLogBranchBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.AddLogEntry addLogEntry = 5;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder> addLogEntryBuilder_;
+           public boolean hasAddLogEntry() {
+-            return result.hasAddLogEntry();
++            return ((bitField0_ & 0x00000010) == 0x00000010);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry getAddLogEntry() {
+-            return result.getAddLogEntry();
++            if (addLogEntryBuilder_ == null) {
++              return addLogEntry_;
++            } else {
++              return addLogEntryBuilder_.getMessage();
++            }
+           }
+           public Builder setAddLogEntry(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (addLogEntryBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              addLogEntry_ = value;
++              onChanged();
++            } else {
++              addLogEntryBuilder_.setMessage(value);
+             }
+-            result.hasAddLogEntry = true;
+-            result.addLogEntry_ = value;
++            bitField0_ |= 0x00000010;
+             return this;
+           }
+-          public Builder setAddLogEntry(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder builderForValue) {
+-            result.hasAddLogEntry = true;
+-            result.addLogEntry_ = builderForValue.build();
++          public Builder setAddLogEntry(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder builderForValue) {
++            if (addLogEntryBuilder_ == null) {
++              addLogEntry_ = builderForValue.build();
++              onChanged();
++            } else {
++              addLogEntryBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000010;
+             return this;
+           }
+           public Builder mergeAddLogEntry(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry value) {
+-            if (result.hasAddLogEntry() &&
+-                result.addLogEntry_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance()) {
+-              result.addLogEntry_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.newBuilder(result.addLogEntry_).mergeFrom(value).buildPartial();
++            if (addLogEntryBuilder_ == null) {
++              if (((bitField0_ & 0x00000010) == 0x00000010) &&
++                  addLogEntry_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance()) {
++                addLogEntry_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.newBuilder(addLogEntry_).mergeFrom(value).buildPartial();
++              } else {
++                addLogEntry_ = value;
++              }
++              onChanged();
+             } else {
+-              result.addLogEntry_ = value;
++              addLogEntryBuilder_.mergeFrom(value);
+             }
+-            result.hasAddLogEntry = true;
++            bitField0_ |= 0x00000010;
+             return this;
+           }
+           public Builder clearAddLogEntry() {
+-            result.hasAddLogEntry = false;
+-            result.addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
++            if (addLogEntryBuilder_ == null) {
++              addLogEntry_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.getDefaultInstance();
++              onChanged();
++            } else {
++              addLogEntryBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000010);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder getAddLogEntryBuilder() {
++            bitField0_ |= 0x00000010;
++            onChanged();
++            return getAddLogEntryFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder getAddLogEntryOrBuilder() {
++            if (addLogEntryBuilder_ != null) {
++              return addLogEntryBuilder_.getMessageOrBuilder();
++            } else {
++              return addLogEntry_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder> 
++              getAddLogEntryFieldBuilder() {
++            if (addLogEntryBuilder_ == null) {
++              addLogEntryBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntryOrBuilder>(
++                      addLogEntry_,
++                      getParentForChildren(),
++                      isClean());
++              addLogEntry_ = null;
++            }
++            return addLogEntryBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.DisconnectLog disconnectLog = 6;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder> disconnectLogBuilder_;
+           public boolean hasDisconnectLog() {
+-            return result.hasDisconnectLog();
++            return ((bitField0_ & 0x00000020) == 0x00000020);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog getDisconnectLog() {
+-            return result.getDisconnectLog();
++            if (disconnectLogBuilder_ == null) {
++              return disconnectLog_;
++            } else {
++              return disconnectLogBuilder_.getMessage();
++            }
+           }
+           public Builder setDisconnectLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (disconnectLogBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              disconnectLog_ = value;
++              onChanged();
++            } else {
++              disconnectLogBuilder_.setMessage(value);
+             }
+-            result.hasDisconnectLog = true;
+-            result.disconnectLog_ = value;
++            bitField0_ |= 0x00000020;
+             return this;
+           }
+-          public Builder setDisconnectLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder builderForValue) {
+-            result.hasDisconnectLog = true;
+-            result.disconnectLog_ = builderForValue.build();
++          public Builder setDisconnectLog(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder builderForValue) {
++            if (disconnectLogBuilder_ == null) {
++              disconnectLog_ = builderForValue.build();
++              onChanged();
++            } else {
++              disconnectLogBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000020;
+             return this;
+           }
+           public Builder mergeDisconnectLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog value) {
+-            if (result.hasDisconnectLog() &&
+-                result.disconnectLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance()) {
+-              result.disconnectLog_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.newBuilder(result.disconnectLog_).mergeFrom(value).buildPartial();
++            if (disconnectLogBuilder_ == null) {
++              if (((bitField0_ & 0x00000020) == 0x00000020) &&
++                  disconnectLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance()) {
++                disconnectLog_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.newBuilder(disconnectLog_).mergeFrom(value).buildPartial();
++              } else {
++                disconnectLog_ = value;
++              }
++              onChanged();
+             } else {
+-              result.disconnectLog_ = value;
++              disconnectLogBuilder_.mergeFrom(value);
+             }
+-            result.hasDisconnectLog = true;
++            bitField0_ |= 0x00000020;
+             return this;
+           }
+           public Builder clearDisconnectLog() {
+-            result.hasDisconnectLog = false;
+-            result.disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
++            if (disconnectLogBuilder_ == null) {
++              disconnectLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.getDefaultInstance();
++              onChanged();
++            } else {
++              disconnectLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000020);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder getDisconnectLogBuilder() {
++            bitField0_ |= 0x00000020;
++            onChanged();
++            return getDisconnectLogFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder getDisconnectLogOrBuilder() {
++            if (disconnectLogBuilder_ != null) {
++              return disconnectLogBuilder_.getMessageOrBuilder();
++            } else {
++              return disconnectLog_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder> 
++              getDisconnectLogFieldBuilder() {
++            if (disconnectLogBuilder_ == null) {
++              disconnectLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLogOrBuilder>(
++                      disconnectLog_,
++                      getParentForChildren(),
++                      isClean());
++              disconnectLog_ = null;
++            }
++            return disconnectLogBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.Initialize initialize = 7;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder> initializeBuilder_;
+           public boolean hasInitialize() {
+-            return result.hasInitialize();
++            return ((bitField0_ & 0x00000040) == 0x00000040);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize getInitialize() {
+-            return result.getInitialize();
++            if (initializeBuilder_ == null) {
++              return initialize_;
++            } else {
++              return initializeBuilder_.getMessage();
++            }
+           }
+           public Builder setInitialize(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (initializeBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              initialize_ = value;
++              onChanged();
++            } else {
++              initializeBuilder_.setMessage(value);
+             }
+-            result.hasInitialize = true;
+-            result.initialize_ = value;
++            bitField0_ |= 0x00000040;
+             return this;
+           }
+-          public Builder setInitialize(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder builderForValue) {
+-            result.hasInitialize = true;
+-            result.initialize_ = builderForValue.build();
++          public Builder setInitialize(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder builderForValue) {
++            if (initializeBuilder_ == null) {
++              initialize_ = builderForValue.build();
++              onChanged();
++            } else {
++              initializeBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000040;
+             return this;
+           }
+           public Builder mergeInitialize(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize value) {
+-            if (result.hasInitialize() &&
+-                result.initialize_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance()) {
+-              result.initialize_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.newBuilder(result.initialize_).mergeFrom(value).buildPartial();
++            if (initializeBuilder_ == null) {
++              if (((bitField0_ & 0x00000040) == 0x00000040) &&
++                  initialize_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance()) {
++                initialize_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.newBuilder(initialize_).mergeFrom(value).buildPartial();
++              } else {
++                initialize_ = value;
++              }
++              onChanged();
+             } else {
+-              result.initialize_ = value;
++              initializeBuilder_.mergeFrom(value);
+             }
+-            result.hasInitialize = true;
++            bitField0_ |= 0x00000040;
+             return this;
+           }
+           public Builder clearInitialize() {
+-            result.hasInitialize = false;
+-            result.initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
++            if (initializeBuilder_ == null) {
++              initialize_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.getDefaultInstance();
++              onChanged();
++            } else {
++              initializeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000040);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder getInitializeBuilder() {
++            bitField0_ |= 0x00000040;
++            onChanged();
++            return getInitializeFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder getInitializeOrBuilder() {
++            if (initializeBuilder_ != null) {
++              return initializeBuilder_.getMessageOrBuilder();
++            } else {
++              return initialize_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder> 
++              getInitializeFieldBuilder() {
++            if (initializeBuilder_ == null) {
++              initializeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.InitializeOrBuilder>(
++                      initialize_,
++                      getParentForChildren(),
++                      isClean());
++              initialize_ = null;
++            }
++            return initializeBuilder_;
++          }
++          
++          // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest)
+         }
+         
+         static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++          defaultInstance = new ViewerRequest(true);
++          defaultInstance.initFields();
+         }
+         
+-        static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-        }
++        // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest)
+       }
+       
++      public interface DevModeRequestOrBuilder
++          extends com.google.protobuf.MessageOrBuilder {
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType requestType = 1;
++        boolean hasRequestType();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getRequestType();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange = 2;
++        boolean hasCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange getCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RestartWebServer restartWebServer = 3;
++        boolean hasRestartWebServer();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer getRestartWebServer();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder getRestartWebServerOrBuilder();
++      }
+       public static final class DevModeRequest extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage {
++          com.google.protobuf.GeneratedMessage
++          implements DevModeRequestOrBuilder {
+         // Use DevModeRequest.newBuilder() to construct.
+-        private DevModeRequest() {}
++        private DevModeRequest(Builder builder) {
++          super(builder);
++        }
++        private DevModeRequest(boolean noInit) {}
+         
+-        private static final DevModeRequest defaultInstance = new DevModeRequest();
++        private static final DevModeRequest defaultInstance;
+         public static DevModeRequest getDefaultInstance() {
+           return defaultInstance;
+         }
+@@ -4901,22 +7613,25 @@ public final class RemoteMessageProto {
+           return defaultInstance;
+         }
+         
+-        public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public static final com.google.protobuf.Descriptors.Descriptor
+             getDescriptor() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor;
+         }
+         
+-        protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+             internalGetFieldAccessorTable() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_fieldAccessorTable;
+         }
+         
+         public enum RequestType
+-            implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++            implements com.google.protobuf.ProtocolMessageEnum {
+           CAPABILITY_EXCHANGE(0, 0),
+           RESTART_WEB_SERVER(1, 1),
+           ;
+           
++          public static final int CAPABILITY_EXCHANGE_VALUE = 0;
++          public static final int RESTART_WEB_SERVER_VALUE = 1;
++          
+           
+           public final int getNumber() { return value; }
+           
+@@ -4928,27 +7643,27 @@ public final class RemoteMessageProto {
+             }
+           }
+           
+-          public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>
++          public static com.google.protobuf.Internal.EnumLiteMap<RequestType>
+               internalGetValueMap() {
+             return internalValueMap;
+           }
+-          private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>
++          private static com.google.protobuf.Internal.EnumLiteMap<RequestType>
+               internalValueMap =
+-                new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<RequestType>() {
++                new com.google.protobuf.Internal.EnumLiteMap<RequestType>() {
+                   public RequestType findValueByNumber(int number) {
+-                    return RequestType.valueOf(number)
+-          ;        }
++                    return RequestType.valueOf(number);
++                  }
+                 };
+           
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++          public final com.google.protobuf.Descriptors.EnumValueDescriptor
+               getValueDescriptor() {
+             return getDescriptor().getValues().get(index);
+           }
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptorForType() {
+             return getDescriptor();
+           }
+-          public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public static final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDescriptor().getEnumTypes().get(0);
+           }
+@@ -4956,32 +7671,40 @@ public final class RemoteMessageProto {
+           private static final RequestType[] VALUES = {
+             CAPABILITY_EXCHANGE, RESTART_WEB_SERVER, 
+           };
++          
+           public static RequestType valueOf(
+-              com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++              com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+             if (desc.getType() != getDescriptor()) {
+               throw new java.lang.IllegalArgumentException(
+                 "EnumValueDescriptor is not for this type.");
+             }
+             return VALUES[desc.getIndex()];
+           }
++          
+           private final int index;
+           private final int value;
++          
+           private RequestType(int index, int value) {
+             this.index = index;
+             this.value = value;
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-          }
++          // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType)
+         }
+         
++        public interface CapabilityExchangeOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++        }
+         public static final class CapabilityExchange extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements CapabilityExchangeOrBuilder {
+           // Use CapabilityExchange.newBuilder() to construct.
+-          private CapabilityExchange() {}
++          private CapabilityExchange(Builder builder) {
++            super(builder);
++          }
++          private CapabilityExchange(boolean noInit) {}
+           
+-          private static final CapabilityExchange defaultInstance = new CapabilityExchange();
++          private static final CapabilityExchange defaultInstance;
+           public static CapabilityExchange getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -4990,22 +7713,30 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_fieldAccessorTable;
+           }
+           
++          private void initFields() {
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
++            getSerializedSize();
+             getUnknownFields().writeTo(output);
+           }
+           
+@@ -5020,26 +7751,33 @@ public final class RemoteMessageProto {
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -5049,30 +7787,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -5085,37 +7832,52 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange();
++              super.clear();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDescriptor();
+             }
+@@ -5124,36 +7886,31 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange(this);
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange)other);
+               } else {
+@@ -5168,23 +7925,29 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -5193,23 +7956,31 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.CapabilityExchange)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new CapabilityExchange(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.CapabilityExchange)
+         }
+         
++        public interface RestartWebServerOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++        }
+         public static final class RestartWebServer extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements RestartWebServerOrBuilder {
+           // Use RestartWebServer.newBuilder() to construct.
+-          private RestartWebServer() {}
++          private RestartWebServer(Builder builder) {
++            super(builder);
++          }
++          private RestartWebServer(boolean noInit) {}
+           
+-          private static final RestartWebServer defaultInstance = new RestartWebServer();
++          private static final RestartWebServer defaultInstance;
+           public static RestartWebServer getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -5218,22 +7989,30 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_fieldAccessorTable;
+           }
+           
++          private void initFields() {
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
++            getSerializedSize();
+             getUnknownFields().writeTo(output);
+           }
+           
+@@ -5248,26 +8027,33 @@ public final class RemoteMessageProto {
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -5277,30 +8063,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -5313,37 +8108,52 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer();
++              super.clear();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDescriptor();
+             }
+@@ -5352,36 +8162,31 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer(this);
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer)other);
+               } else {
+@@ -5396,23 +8201,29 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -5421,52 +8232,80 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RestartWebServer)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new RestartWebServer(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RestartWebServer)
+         }
+         
++        private int bitField0_;
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType requestType = 1;
+         public static final int REQUESTTYPE_FIELD_NUMBER = 1;
+-        private boolean hasRequestType;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
+-        public boolean hasRequestType() { return hasRequestType; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getRequestType() { return requestType_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType requestType_;
++        public boolean hasRequestType() {
++          return ((bitField0_ & 0x00000001) == 0x00000001);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getRequestType() {
++          return requestType_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange = 2;
+         public static final int CAPABILITYEXCHANGE_FIELD_NUMBER = 2;
+-        private boolean hasCapabilityExchange;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
+-        public boolean hasCapabilityExchange() { return hasCapabilityExchange; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange getCapabilityExchange() { return capabilityExchange_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange_;
++        public boolean hasCapabilityExchange() {
++          return ((bitField0_ & 0x00000002) == 0x00000002);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange getCapabilityExchange() {
++          return capabilityExchange_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++          return capabilityExchange_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RestartWebServer restartWebServer = 3;
+         public static final int RESTARTWEBSERVER_FIELD_NUMBER = 3;
+-        private boolean hasRestartWebServer;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
+-        public boolean hasRestartWebServer() { return hasRestartWebServer; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer getRestartWebServer() { return restartWebServer_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer restartWebServer_;
++        public boolean hasRestartWebServer() {
++          return ((bitField0_ & 0x00000004) == 0x00000004);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer getRestartWebServer() {
++          return restartWebServer_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder getRestartWebServerOrBuilder() {
++          return restartWebServer_;
++        }
+         
++        private void initFields() {
++          requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++          capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
++          restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
++        }
++        private byte memoizedIsInitialized = -1;
+         public final boolean isInitialized() {
++          byte isInitialized = memoizedIsInitialized;
++          if (isInitialized != -1) return isInitialized == 1;
++          
++          memoizedIsInitialized = 1;
+           return true;
+         }
+         
+-        public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++        public void writeTo(com.google.protobuf.CodedOutputStream output)
+                             throws java.io.IOException {
+-          if (hasRequestType()) {
+-            output.writeEnum(1, getRequestType().getNumber());
++          getSerializedSize();
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            output.writeEnum(1, requestType_.getNumber());
+           }
+-          if (hasCapabilityExchange()) {
+-            output.writeMessage(2, getCapabilityExchange());
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            output.writeMessage(2, capabilityExchange_);
+           }
+-          if (hasRestartWebServer()) {
+-            output.writeMessage(3, getRestartWebServer());
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            output.writeMessage(3, restartWebServer_);
+           }
+           getUnknownFields().writeTo(output);
+         }
+@@ -5477,43 +8316,50 @@ public final class RemoteMessageProto {
+           if (size != -1) return size;
+         
+           size = 0;
+-          if (hasRequestType()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeEnumSize(1, getRequestType().getNumber());
+-          }
+-          if (hasCapabilityExchange()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(2, getCapabilityExchange());
+-          }
+-          if (hasRestartWebServer()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(3, getRestartWebServer());
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeEnumSize(1, requestType_.getNumber());
++          }
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(2, capabilityExchange_);
++          }
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(3, restartWebServer_);
+           }
+           size += getUnknownFields().getSerializedSize();
+           memoizedSerializedSize = size;
+           return size;
+         }
+         
++        private static final long serialVersionUID = 0L;
++        @java.lang.Override
++        protected java.lang.Object writeReplace()
++            throws java.io.ObjectStreamException {
++          return super.writeReplace();
++        }
++        
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(byte[] data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+             byte[] data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+@@ -5523,30 +8369,39 @@ public final class RemoteMessageProto {
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseDelimitedFrom(java.io.InputStream input)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input).buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseDelimitedFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                   .buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input)
++            com.google.protobuf.CodedInputStream input)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+@@ -5559,37 +8414,68 @@ public final class RemoteMessageProto {
+         }
+         public Builder toBuilder() { return newBuilder(this); }
+         
++        @java.lang.Override
++        protected Builder newBuilderForType(
++            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++          Builder builder = new Builder(parent);
++          return builder;
++        }
+         public static final class Builder extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest result;
++            com.google.protobuf.GeneratedMessage.Builder<Builder>
++           implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder {
++          public static final com.google.protobuf.Descriptors.Descriptor
++              getDescriptor() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor;
++          }
+           
+-          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.newBuilder()
+-          private Builder() {}
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++              internalGetFieldAccessorTable() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_fieldAccessorTable;
++          }
+           
+-          private static Builder create() {
+-            Builder builder = new Builder();
+-            builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest();
+-            return builder;
++          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.newBuilder()
++          private Builder() {
++            maybeForceBuilderInitialization();
+           }
+           
+-          protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest internalGetResult() {
+-            return result;
++          private Builder(BuilderParent parent) {
++            super(parent);
++            maybeForceBuilderInitialization();
++          }
++          private void maybeForceBuilderInitialization() {
++            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              getCapabilityExchangeFieldBuilder();
++              getRestartWebServerFieldBuilder();
++            }
++          }
++          private static Builder create() {
++            return new Builder();
+           }
+           
+           public Builder clear() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "Cannot call clear() after build().");
++            super.clear();
++            requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
++            } else {
++              restartWebServerBuilder_.clear();
+             }
+-            result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest();
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
+           
+           public Builder clone() {
+-            return create().mergeFrom(result);
++            return create().mergeFrom(buildPartial());
+           }
+           
+-          public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public com.google.protobuf.Descriptors.Descriptor
+               getDescriptorForType() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDescriptor();
+           }
+@@ -5598,36 +8484,54 @@ public final class RemoteMessageProto {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
+           }
+           
+-          public boolean isInitialized() {
+-            return result.isInitialized();
+-          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest build() {
+-            if (result != null && !isInitialized()) {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(result);
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest buildParsed()
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-            if (!isInitialized()) {
++              throws com.google.protobuf.InvalidProtocolBufferException {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(
+                 result).asInvalidProtocolBufferException();
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest buildPartial() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "build() has already been called on this Builder.");
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest(this);
++            int from_bitField0_ = bitField0_;
++            int to_bitField0_ = 0;
++            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++              to_bitField0_ |= 0x00000001;
++            }
++            result.requestType_ = requestType_;
++            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++              to_bitField0_ |= 0x00000002;
++            }
++            if (capabilityExchangeBuilder_ == null) {
++              result.capabilityExchange_ = capabilityExchange_;
++            } else {
++              result.capabilityExchange_ = capabilityExchangeBuilder_.build();
+             }
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest returnMe = result;
+-            result = null;
+-            return returnMe;
++            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++              to_bitField0_ |= 0x00000004;
++            }
++            if (restartWebServerBuilder_ == null) {
++              result.restartWebServer_ = restartWebServer_;
++            } else {
++              result.restartWebServer_ = restartWebServerBuilder_.build();
++            }
++            result.bitField0_ = to_bitField0_;
++            onBuilt();
++            return result;
+           }
+           
+-          public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++          public Builder mergeFrom(com.google.protobuf.Message other) {
+             if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest) {
+               return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest)other);
+             } else {
+@@ -5651,23 +8555,29 @@ public final class RemoteMessageProto {
+             return this;
+           }
+           
++          public final boolean isInitialized() {
++            return true;
++          }
++          
+           public Builder mergeFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++              com.google.protobuf.UnknownFieldSet.newBuilder(
+                 this.getUnknownFields());
+             while (true) {
+               int tag = input.readTag();
+               switch (tag) {
+                 case 0:
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 default: {
+                   if (!parseUnknownField(input, unknownFields,
+                                          extensionRegistry, tag)) {
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   }
+                   break;
+@@ -5678,7 +8588,8 @@ public final class RemoteMessageProto {
+                   if (value == null) {
+                     unknownFields.mergeVarintField(1, rawValue);
+                   } else {
+-                    setRequestType(value);
++                    bitField0_ |= 0x00000001;
++                    requestType_ = value;
+                   }
+                   break;
+                 }
+@@ -5704,150 +8615,291 @@ public final class RemoteMessageProto {
+             }
+           }
+           
++          private int bitField0_;
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType requestType = 1;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
+           public boolean hasRequestType() {
+-            return result.hasRequestType();
++            return ((bitField0_ & 0x00000001) == 0x00000001);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getRequestType() {
+-            return result.getRequestType();
++            return requestType_;
+           }
+           public Builder setRequestType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType value) {
+             if (value == null) {
+               throw new NullPointerException();
+             }
+-            result.hasRequestType = true;
+-            result.requestType_ = value;
++            bitField0_ |= 0x00000001;
++            requestType_ = value;
++            onChanged();
+             return this;
+           }
+           public Builder clearRequestType() {
+-            result.hasRequestType = false;
+-            result.requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            requestType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++            onChanged();
+             return this;
+           }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange = 2;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder> capabilityExchangeBuilder_;
+           public boolean hasCapabilityExchange() {
+-            return result.hasCapabilityExchange();
++            return ((bitField0_ & 0x00000002) == 0x00000002);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange getCapabilityExchange() {
+-            return result.getCapabilityExchange();
++            if (capabilityExchangeBuilder_ == null) {
++              return capabilityExchange_;
++            } else {
++              return capabilityExchangeBuilder_.getMessage();
++            }
+           }
+           public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (capabilityExchangeBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              capabilityExchange_ = value;
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(value);
+             }
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = value;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+-          public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder builderForValue) {
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = builderForValue.build();
++          public Builder setCapabilityExchange(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder builderForValue) {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = builderForValue.build();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder mergeCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange value) {
+-            if (result.hasCapabilityExchange() &&
+-                result.capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance()) {
+-              result.capabilityExchange_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.newBuilder(result.capabilityExchange_).mergeFrom(value).buildPartial();
++            if (capabilityExchangeBuilder_ == null) {
++              if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                  capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance()) {
++                capabilityExchange_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.newBuilder(capabilityExchange_).mergeFrom(value).buildPartial();
++              } else {
++                capabilityExchange_ = value;
++              }
++              onChanged();
+             } else {
+-              result.capabilityExchange_ = value;
++              capabilityExchangeBuilder_.mergeFrom(value);
+             }
+-            result.hasCapabilityExchange = true;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder clearCapabilityExchange() {
+-            result.hasCapabilityExchange = false;
+-            result.capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.getDefaultInstance();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder getCapabilityExchangeBuilder() {
++            bitField0_ |= 0x00000002;
++            onChanged();
++            return getCapabilityExchangeFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++            if (capabilityExchangeBuilder_ != null) {
++              return capabilityExchangeBuilder_.getMessageOrBuilder();
++            } else {
++              return capabilityExchange_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder> 
++              getCapabilityExchangeFieldBuilder() {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchangeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchangeOrBuilder>(
++                      capabilityExchange_,
++                      getParentForChildren(),
++                      isClean());
++              capabilityExchange_ = null;
++            }
++            return capabilityExchangeBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RestartWebServer restartWebServer = 3;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder> restartWebServerBuilder_;
+           public boolean hasRestartWebServer() {
+-            return result.hasRestartWebServer();
++            return ((bitField0_ & 0x00000004) == 0x00000004);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer getRestartWebServer() {
+-            return result.getRestartWebServer();
++            if (restartWebServerBuilder_ == null) {
++              return restartWebServer_;
++            } else {
++              return restartWebServerBuilder_.getMessage();
++            }
+           }
+           public Builder setRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (restartWebServerBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              restartWebServer_ = value;
++              onChanged();
++            } else {
++              restartWebServerBuilder_.setMessage(value);
+             }
+-            result.hasRestartWebServer = true;
+-            result.restartWebServer_ = value;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+-          public Builder setRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder builderForValue) {
+-            result.hasRestartWebServer = true;
+-            result.restartWebServer_ = builderForValue.build();
++          public Builder setRestartWebServer(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder builderForValue) {
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = builderForValue.build();
++              onChanged();
++            } else {
++              restartWebServerBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder mergeRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer value) {
+-            if (result.hasRestartWebServer() &&
+-                result.restartWebServer_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance()) {
+-              result.restartWebServer_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.newBuilder(result.restartWebServer_).mergeFrom(value).buildPartial();
++            if (restartWebServerBuilder_ == null) {
++              if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                  restartWebServer_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance()) {
++                restartWebServer_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.newBuilder(restartWebServer_).mergeFrom(value).buildPartial();
++              } else {
++                restartWebServer_ = value;
++              }
++              onChanged();
+             } else {
+-              result.restartWebServer_ = value;
++              restartWebServerBuilder_.mergeFrom(value);
+             }
+-            result.hasRestartWebServer = true;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder clearRestartWebServer() {
+-            result.hasRestartWebServer = false;
+-            result.restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.getDefaultInstance();
++              onChanged();
++            } else {
++              restartWebServerBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder getRestartWebServerBuilder() {
++            bitField0_ |= 0x00000004;
++            onChanged();
++            return getRestartWebServerFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder getRestartWebServerOrBuilder() {
++            if (restartWebServerBuilder_ != null) {
++              return restartWebServerBuilder_.getMessageOrBuilder();
++            } else {
++              return restartWebServer_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder> 
++              getRestartWebServerFieldBuilder() {
++            if (restartWebServerBuilder_ == null) {
++              restartWebServerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServerOrBuilder>(
++                      restartWebServer_,
++                      getParentForChildren(),
++                      isClean());
++              restartWebServer_ = null;
++            }
++            return restartWebServerBuilder_;
++          }
++          
++          // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest)
+         }
+         
+         static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++          defaultInstance = new DevModeRequest(true);
++          defaultInstance.initFields();
+         }
+         
+-        static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-        }
++        // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest)
+       }
+       
++      private int bitField0_;
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ServiceType serviceType = 1;
+       public static final int SERVICETYPE_FIELD_NUMBER = 1;
+-      private boolean hasServiceType;
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
+-      public boolean hasServiceType() { return hasServiceType; }
+-      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType getServiceType() { return serviceType_; }
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType serviceType_;
++      public boolean hasServiceType() {
++        return ((bitField0_ & 0x00000001) == 0x00000001);
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType getServiceType() {
++        return serviceType_;
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest viewerRequest = 2;
+       public static final int VIEWERREQUEST_FIELD_NUMBER = 2;
+-      private boolean hasViewerRequest;
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
+-      public boolean hasViewerRequest() { return hasViewerRequest; }
+-      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest getViewerRequest() { return viewerRequest_; }
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest viewerRequest_;
++      public boolean hasViewerRequest() {
++        return ((bitField0_ & 0x00000002) == 0x00000002);
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest getViewerRequest() {
++        return viewerRequest_;
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder getViewerRequestOrBuilder() {
++        return viewerRequest_;
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest devModeRequest = 3;
+       public static final int DEVMODEREQUEST_FIELD_NUMBER = 3;
+-      private boolean hasDevModeRequest;
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
+-      public boolean hasDevModeRequest() { return hasDevModeRequest; }
+-      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest getDevModeRequest() { return devModeRequest_; }
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest devModeRequest_;
++      public boolean hasDevModeRequest() {
++        return ((bitField0_ & 0x00000004) == 0x00000004);
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest getDevModeRequest() {
++        return devModeRequest_;
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder getDevModeRequestOrBuilder() {
++        return devModeRequest_;
++      }
+       
++      private void initFields() {
++        serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
++        viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
++        devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
++      }
++      private byte memoizedIsInitialized = -1;
+       public final boolean isInitialized() {
++        byte isInitialized = memoizedIsInitialized;
++        if (isInitialized != -1) return isInitialized == 1;
++        
+         if (hasViewerRequest()) {
+-          if (!getViewerRequest().isInitialized()) return false;
++          if (!getViewerRequest().isInitialized()) {
++            memoizedIsInitialized = 0;
++            return false;
++          }
+         }
++        memoizedIsInitialized = 1;
+         return true;
+       }
+       
+-      public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                           throws java.io.IOException {
+-        if (hasServiceType()) {
+-          output.writeEnum(1, getServiceType().getNumber());
++        getSerializedSize();
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          output.writeEnum(1, serviceType_.getNumber());
+         }
+-        if (hasViewerRequest()) {
+-          output.writeMessage(2, getViewerRequest());
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          output.writeMessage(2, viewerRequest_);
+         }
+-        if (hasDevModeRequest()) {
+-          output.writeMessage(3, getDevModeRequest());
++        if (((bitField0_ & 0x00000004) == 0x00000004)) {
++          output.writeMessage(3, devModeRequest_);
+         }
+         getUnknownFields().writeTo(output);
+       }
+@@ -5858,43 +8910,50 @@ public final class RemoteMessageProto {
+         if (size != -1) return size;
+       
+         size = 0;
+-        if (hasServiceType()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeEnumSize(1, getServiceType().getNumber());
+-        }
+-        if (hasViewerRequest()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeMessageSize(2, getViewerRequest());
+-        }
+-        if (hasDevModeRequest()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeMessageSize(3, getDevModeRequest());
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeEnumSize(1, serviceType_.getNumber());
++        }
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeMessageSize(2, viewerRequest_);
++        }
++        if (((bitField0_ & 0x00000004) == 0x00000004)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeMessageSize(3, devModeRequest_);
+         }
+         size += getUnknownFields().getSerializedSize();
+         memoizedSerializedSize = size;
+         return size;
+       }
+       
++      private static final long serialVersionUID = 0L;
++      @java.lang.Override
++      protected java.lang.Object writeReplace()
++          throws java.io.ObjectStreamException {
++        return super.writeReplace();
++      }
++      
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(byte[] data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+           byte[] data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+@@ -5904,30 +8963,39 @@ public final class RemoteMessageProto {
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseDelimitedFrom(java.io.InputStream input)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input).buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseDelimitedFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                 .buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input)
++          com.google.protobuf.CodedInputStream input)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.CodedInputStream input,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+@@ -5940,37 +9008,68 @@ public final class RemoteMessageProto {
+       }
+       public Builder toBuilder() { return newBuilder(this); }
+       
++      @java.lang.Override
++      protected Builder newBuilderForType(
++          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++        Builder builder = new Builder(parent);
++        return builder;
++      }
+       public static final class Builder extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request result;
++          com.google.protobuf.GeneratedMessage.Builder<Builder>
++         implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder {
++        public static final com.google.protobuf.Descriptors.Descriptor
++            getDescriptor() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor;
++        }
+         
+-        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.newBuilder()
+-        private Builder() {}
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++            internalGetFieldAccessorTable() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_fieldAccessorTable;
++        }
+         
+-        private static Builder create() {
+-          Builder builder = new Builder();
+-          builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request();
+-          return builder;
++        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.newBuilder()
++        private Builder() {
++          maybeForceBuilderInitialization();
+         }
+         
+-        protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request internalGetResult() {
+-          return result;
++        private Builder(BuilderParent parent) {
++          super(parent);
++          maybeForceBuilderInitialization();
++        }
++        private void maybeForceBuilderInitialization() {
++          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++            getViewerRequestFieldBuilder();
++            getDevModeRequestFieldBuilder();
++          }
++        }
++        private static Builder create() {
++          return new Builder();
+         }
+         
+         public Builder clear() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "Cannot call clear() after build().");
++          super.clear();
++          serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
++          bitField0_ = (bitField0_ & ~0x00000001);
++          if (viewerRequestBuilder_ == null) {
++            viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
++          } else {
++            viewerRequestBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000002);
++          if (devModeRequestBuilder_ == null) {
++            devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
++          } else {
++            devModeRequestBuilder_.clear();
+           }
+-          result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request();
++          bitField0_ = (bitField0_ & ~0x00000004);
+           return this;
+         }
+         
+         public Builder clone() {
+-          return create().mergeFrom(result);
++          return create().mergeFrom(buildPartial());
+         }
+         
+-        public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public com.google.protobuf.Descriptors.Descriptor
+             getDescriptorForType() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDescriptor();
+         }
+@@ -5979,36 +9078,54 @@ public final class RemoteMessageProto {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
+         }
+         
+-        public boolean isInitialized() {
+-          return result.isInitialized();
+-        }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request build() {
+-          if (result != null && !isInitialized()) {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(result);
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request buildParsed()
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-          if (!isInitialized()) {
++            throws com.google.protobuf.InvalidProtocolBufferException {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(
+               result).asInvalidProtocolBufferException();
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request buildPartial() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "build() has already been called on this Builder.");
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request(this);
++          int from_bitField0_ = bitField0_;
++          int to_bitField0_ = 0;
++          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++            to_bitField0_ |= 0x00000001;
++          }
++          result.serviceType_ = serviceType_;
++          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++            to_bitField0_ |= 0x00000002;
++          }
++          if (viewerRequestBuilder_ == null) {
++            result.viewerRequest_ = viewerRequest_;
++          } else {
++            result.viewerRequest_ = viewerRequestBuilder_.build();
+           }
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request returnMe = result;
+-          result = null;
+-          return returnMe;
++          if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++            to_bitField0_ |= 0x00000004;
++          }
++          if (devModeRequestBuilder_ == null) {
++            result.devModeRequest_ = devModeRequest_;
++          } else {
++            result.devModeRequest_ = devModeRequestBuilder_.build();
++          }
++          result.bitField0_ = to_bitField0_;
++          onBuilt();
++          return result;
+         }
+         
+-        public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++        public Builder mergeFrom(com.google.protobuf.Message other) {
+           if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request) {
+             return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request)other);
+           } else {
+@@ -6032,23 +9149,35 @@ public final class RemoteMessageProto {
+           return this;
+         }
+         
++        public final boolean isInitialized() {
++          if (hasViewerRequest()) {
++            if (!getViewerRequest().isInitialized()) {
++              
++              return false;
++            }
++          }
++          return true;
++        }
++        
+         public Builder mergeFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++            com.google.protobuf.UnknownFieldSet.newBuilder(
+               this.getUnknownFields());
+           while (true) {
+             int tag = input.readTag();
+             switch (tag) {
+               case 0:
+                 this.setUnknownFields(unknownFields.build());
++                onChanged();
+                 return this;
+               default: {
+                 if (!parseUnknownField(input, unknownFields,
+                                        extensionRegistry, tag)) {
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 }
+                 break;
+@@ -6059,7 +9188,8 @@ public final class RemoteMessageProto {
+                 if (value == null) {
+                   unknownFields.mergeVarintField(1, rawValue);
+                 } else {
+-                  setServiceType(value);
++                  bitField0_ |= 0x00000001;
++                  serviceType_ = value;
+                 }
+                 break;
+               }
+@@ -6085,118 +9215,246 @@ public final class RemoteMessageProto {
+           }
+         }
+         
++        private int bitField0_;
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ServiceType serviceType = 1;
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
+         public boolean hasServiceType() {
+-          return result.hasServiceType();
++          return ((bitField0_ & 0x00000001) == 0x00000001);
+         }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType getServiceType() {
+-          return result.getServiceType();
++          return serviceType_;
+         }
+         public Builder setServiceType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType value) {
+           if (value == null) {
+             throw new NullPointerException();
+           }
+-          result.hasServiceType = true;
+-          result.serviceType_ = value;
++          bitField0_ |= 0x00000001;
++          serviceType_ = value;
++          onChanged();
+           return this;
+         }
+         public Builder clearServiceType() {
+-          result.hasServiceType = false;
+-          result.serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
++          bitField0_ = (bitField0_ & ~0x00000001);
++          serviceType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ServiceType.VIEWER;
++          onChanged();
+           return this;
+         }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest viewerRequest = 2;
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder> viewerRequestBuilder_;
+         public boolean hasViewerRequest() {
+-          return result.hasViewerRequest();
++          return ((bitField0_ & 0x00000002) == 0x00000002);
+         }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest getViewerRequest() {
+-          return result.getViewerRequest();
++          if (viewerRequestBuilder_ == null) {
++            return viewerRequest_;
++          } else {
++            return viewerRequestBuilder_.getMessage();
++          }
+         }
+         public Builder setViewerRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest value) {
+-          if (value == null) {
+-            throw new NullPointerException();
++          if (viewerRequestBuilder_ == null) {
++            if (value == null) {
++              throw new NullPointerException();
++            }
++            viewerRequest_ = value;
++            onChanged();
++          } else {
++            viewerRequestBuilder_.setMessage(value);
+           }
+-          result.hasViewerRequest = true;
+-          result.viewerRequest_ = value;
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+-        public Builder setViewerRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder builderForValue) {
+-          result.hasViewerRequest = true;
+-          result.viewerRequest_ = builderForValue.build();
++        public Builder setViewerRequest(
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder builderForValue) {
++          if (viewerRequestBuilder_ == null) {
++            viewerRequest_ = builderForValue.build();
++            onChanged();
++          } else {
++            viewerRequestBuilder_.setMessage(builderForValue.build());
++          }
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+         public Builder mergeViewerRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest value) {
+-          if (result.hasViewerRequest() &&
+-              result.viewerRequest_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance()) {
+-            result.viewerRequest_ =
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.newBuilder(result.viewerRequest_).mergeFrom(value).buildPartial();
++          if (viewerRequestBuilder_ == null) {
++            if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                viewerRequest_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance()) {
++              viewerRequest_ =
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.newBuilder(viewerRequest_).mergeFrom(value).buildPartial();
++            } else {
++              viewerRequest_ = value;
++            }
++            onChanged();
+           } else {
+-            result.viewerRequest_ = value;
++            viewerRequestBuilder_.mergeFrom(value);
+           }
+-          result.hasViewerRequest = true;
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+         public Builder clearViewerRequest() {
+-          result.hasViewerRequest = false;
+-          result.viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
++          if (viewerRequestBuilder_ == null) {
++            viewerRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.getDefaultInstance();
++            onChanged();
++          } else {
++            viewerRequestBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000002);
+           return this;
+         }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder getViewerRequestBuilder() {
++          bitField0_ |= 0x00000002;
++          onChanged();
++          return getViewerRequestFieldBuilder().getBuilder();
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder getViewerRequestOrBuilder() {
++          if (viewerRequestBuilder_ != null) {
++            return viewerRequestBuilder_.getMessageOrBuilder();
++          } else {
++            return viewerRequest_;
++          }
++        }
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder> 
++            getViewerRequestFieldBuilder() {
++          if (viewerRequestBuilder_ == null) {
++            viewerRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequestOrBuilder>(
++                    viewerRequest_,
++                    getParentForChildren(),
++                    isClean());
++            viewerRequest_ = null;
++          }
++          return viewerRequestBuilder_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest devModeRequest = 3;
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder> devModeRequestBuilder_;
+         public boolean hasDevModeRequest() {
+-          return result.hasDevModeRequest();
++          return ((bitField0_ & 0x00000004) == 0x00000004);
+         }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest getDevModeRequest() {
+-          return result.getDevModeRequest();
++          if (devModeRequestBuilder_ == null) {
++            return devModeRequest_;
++          } else {
++            return devModeRequestBuilder_.getMessage();
++          }
+         }
+         public Builder setDevModeRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest value) {
+-          if (value == null) {
+-            throw new NullPointerException();
++          if (devModeRequestBuilder_ == null) {
++            if (value == null) {
++              throw new NullPointerException();
++            }
++            devModeRequest_ = value;
++            onChanged();
++          } else {
++            devModeRequestBuilder_.setMessage(value);
+           }
+-          result.hasDevModeRequest = true;
+-          result.devModeRequest_ = value;
++          bitField0_ |= 0x00000004;
+           return this;
+         }
+-        public Builder setDevModeRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder builderForValue) {
+-          result.hasDevModeRequest = true;
+-          result.devModeRequest_ = builderForValue.build();
++        public Builder setDevModeRequest(
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder builderForValue) {
++          if (devModeRequestBuilder_ == null) {
++            devModeRequest_ = builderForValue.build();
++            onChanged();
++          } else {
++            devModeRequestBuilder_.setMessage(builderForValue.build());
++          }
++          bitField0_ |= 0x00000004;
+           return this;
+         }
+         public Builder mergeDevModeRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest value) {
+-          if (result.hasDevModeRequest() &&
+-              result.devModeRequest_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance()) {
+-            result.devModeRequest_ =
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.newBuilder(result.devModeRequest_).mergeFrom(value).buildPartial();
++          if (devModeRequestBuilder_ == null) {
++            if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                devModeRequest_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance()) {
++              devModeRequest_ =
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.newBuilder(devModeRequest_).mergeFrom(value).buildPartial();
++            } else {
++              devModeRequest_ = value;
++            }
++            onChanged();
+           } else {
+-            result.devModeRequest_ = value;
++            devModeRequestBuilder_.mergeFrom(value);
+           }
+-          result.hasDevModeRequest = true;
++          bitField0_ |= 0x00000004;
+           return this;
+         }
+         public Builder clearDevModeRequest() {
+-          result.hasDevModeRequest = false;
+-          result.devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
++          if (devModeRequestBuilder_ == null) {
++            devModeRequest_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.getDefaultInstance();
++            onChanged();
++          } else {
++            devModeRequestBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000004);
+           return this;
+         }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder getDevModeRequestBuilder() {
++          bitField0_ |= 0x00000004;
++          onChanged();
++          return getDevModeRequestFieldBuilder().getBuilder();
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder getDevModeRequestOrBuilder() {
++          if (devModeRequestBuilder_ != null) {
++            return devModeRequestBuilder_.getMessageOrBuilder();
++          } else {
++            return devModeRequest_;
++          }
++        }
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder> 
++            getDevModeRequestFieldBuilder() {
++          if (devModeRequestBuilder_ == null) {
++            devModeRequestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequestOrBuilder>(
++                    devModeRequest_,
++                    getParentForChildren(),
++                    isClean());
++            devModeRequest_ = null;
++          }
++          return devModeRequestBuilder_;
++        }
++        
++        // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Request)
+       }
+       
+       static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++        defaultInstance = new Request(true);
++        defaultInstance.initFields();
+       }
+       
+-      static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-      }
++      // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Request)
+     }
+     
++    public interface ResponseOrBuilder
++        extends com.google.protobuf.MessageOrBuilder {
++      
++      // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse viewerResponse = 1;
++      boolean hasViewerResponse();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse getViewerResponse();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder getViewerResponseOrBuilder();
++      
++      // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse devModeResponse = 2;
++      boolean hasDevModeResponse();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse getDevModeResponse();
++      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder getDevModeResponseOrBuilder();
++    }
+     public static final class Response extends
+-        com.google.gwt.dev.protobuf.GeneratedMessage {
++        com.google.protobuf.GeneratedMessage
++        implements ResponseOrBuilder {
+       // Use Response.newBuilder() to construct.
+-      private Response() {}
++      private Response(Builder builder) {
++        super(builder);
++      }
++      private Response(boolean noInit) {}
+       
+-      private static final Response defaultInstance = new Response();
++      private static final Response defaultInstance;
+       public static Response getDefaultInstance() {
+         return defaultInstance;
+       }
+@@ -6205,22 +9463,48 @@ public final class RemoteMessageProto {
+         return defaultInstance;
+       }
+       
+-      public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++      public static final com.google.protobuf.Descriptors.Descriptor
+           getDescriptor() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor;
+       }
+       
+-      protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+           internalGetFieldAccessorTable() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_fieldAccessorTable;
+       }
+       
++      public interface ViewerResponseOrBuilder
++          extends com.google.protobuf.MessageOrBuilder {
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.ResponseType responseType = 1;
++        boolean hasResponseType();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType getResponseType();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange = 2;
++        boolean hasCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange getCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLog addLog = 3;
++        boolean hasAddLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog getAddLog();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder getAddLogOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLogBranch addLogBranch = 4;
++        boolean hasAddLogBranch();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch getAddLogBranch();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder getAddLogBranchOrBuilder();
++      }
+       public static final class ViewerResponse extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage {
++          com.google.protobuf.GeneratedMessage
++          implements ViewerResponseOrBuilder {
+         // Use ViewerResponse.newBuilder() to construct.
+-        private ViewerResponse() {}
++        private ViewerResponse(Builder builder) {
++          super(builder);
++        }
++        private ViewerResponse(boolean noInit) {}
+         
+-        private static final ViewerResponse defaultInstance = new ViewerResponse();
++        private static final ViewerResponse defaultInstance;
+         public static ViewerResponse getDefaultInstance() {
+           return defaultInstance;
+         }
+@@ -6229,23 +9513,27 @@ public final class RemoteMessageProto {
+           return defaultInstance;
+         }
+         
+-        public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public static final com.google.protobuf.Descriptors.Descriptor
+             getDescriptor() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor;
+         }
+         
+-        protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+             internalGetFieldAccessorTable() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_fieldAccessorTable;
+         }
+         
+         public enum ResponseType
+-            implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++            implements com.google.protobuf.ProtocolMessageEnum {
+           CAPABILITY_EXCHANGE(0, 0),
+           ADD_LOG(1, 1),
+           ADD_LOG_BRANCH(2, 2),
+           ;
+           
++          public static final int CAPABILITY_EXCHANGE_VALUE = 0;
++          public static final int ADD_LOG_VALUE = 1;
++          public static final int ADD_LOG_BRANCH_VALUE = 2;
++          
+           
+           public final int getNumber() { return value; }
+           
+@@ -6258,27 +9546,27 @@ public final class RemoteMessageProto {
+             }
+           }
+           
+-          public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>
++          public static com.google.protobuf.Internal.EnumLiteMap<ResponseType>
+               internalGetValueMap() {
+             return internalValueMap;
+           }
+-          private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>
++          private static com.google.protobuf.Internal.EnumLiteMap<ResponseType>
+               internalValueMap =
+-                new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>() {
++                new com.google.protobuf.Internal.EnumLiteMap<ResponseType>() {
+                   public ResponseType findValueByNumber(int number) {
+-                    return ResponseType.valueOf(number)
+-          ;        }
++                    return ResponseType.valueOf(number);
++                  }
+                 };
+           
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++          public final com.google.protobuf.Descriptors.EnumValueDescriptor
+               getValueDescriptor() {
+             return getDescriptor().getValues().get(index);
+           }
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptorForType() {
+             return getDescriptor();
+           }
+-          public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public static final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDescriptor().getEnumTypes().get(0);
+           }
+@@ -6286,32 +9574,50 @@ public final class RemoteMessageProto {
+           private static final ResponseType[] VALUES = {
+             CAPABILITY_EXCHANGE, ADD_LOG, ADD_LOG_BRANCH, 
+           };
++          
+           public static ResponseType valueOf(
+-              com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++              com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+             if (desc.getType() != getDescriptor()) {
+               throw new java.lang.IllegalArgumentException(
+                 "EnumValueDescriptor is not for this type.");
+             }
+             return VALUES[desc.getIndex()];
+           }
++          
+           private final int index;
+           private final int value;
++          
+           private ResponseType(int index, int value) {
+             this.index = index;
+             this.value = value;
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-          }
++          // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.ResponseType)
+         }
+         
++        public interface CapabilityExchangeOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange.Capability capabilities = 2;
++          java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> 
++              getCapabilitiesList();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability getCapabilities(int index);
++          int getCapabilitiesCount();
++          java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder> 
++              getCapabilitiesOrBuilderList();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++              int index);
++        }
+         public static final class CapabilityExchange extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements CapabilityExchangeOrBuilder {
+           // Use CapabilityExchange.newBuilder() to construct.
+-          private CapabilityExchange() {}
++          private CapabilityExchange(Builder builder) {
++            super(builder);
++          }
++          private CapabilityExchange(boolean noInit) {}
+           
+-          private static final CapabilityExchange defaultInstance = new CapabilityExchange();
++          private static final CapabilityExchange defaultInstance;
+           public static CapabilityExchange getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -6320,22 +9626,33 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_fieldAccessorTable;
+           }
+           
++          public interface CapabilityOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++            
++            // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType capability = 1;
++            boolean hasCapability();
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getCapability();
++          }
+           public static final class Capability extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements CapabilityOrBuilder {
+             // Use Capability.newBuilder() to construct.
+-            private Capability() {}
++            private Capability(Builder builder) {
++              super(builder);
++            }
++            private Capability(boolean noInit) {}
+             
+-            private static final Capability defaultInstance = new Capability();
++            private static final Capability defaultInstance;
+             public static Capability getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -6344,31 +9661,44 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_fieldAccessorTable;
+             }
+             
++            private int bitField0_;
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType capability = 1;
+             public static final int CAPABILITY_FIELD_NUMBER = 1;
+-            private boolean hasCapability;
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
+-            public boolean hasCapability() { return hasCapability; }
+-            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getCapability() { return capability_; }
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType capability_;
++            public boolean hasCapability() {
++              return ((bitField0_ & 0x00000001) == 0x00000001);
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getCapability() {
++              return capability_;
++            }
+             
++            private void initFields() {
++              capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
+-              if (hasCapability()) {
+-                output.writeEnum(1, getCapability().getNumber());
++              getSerializedSize();
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                output.writeEnum(1, capability_.getNumber());
+               }
+               getUnknownFields().writeTo(output);
+             }
+@@ -6379,35 +9709,42 @@ public final class RemoteMessageProto {
+               if (size != -1) return size;
+             
+               size = 0;
+-              if (hasCapability()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeEnumSize(1, getCapability().getNumber());
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeEnumSize(1, capability_.getNumber());
+               }
+               size += getUnknownFields().getSerializedSize();
+               memoizedSerializedSize = size;
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -6417,30 +9754,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -6453,37 +9799,54 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability();
++                super.clear();
++                capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++                bitField0_ = (bitField0_ & ~0x00000001);
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.getDescriptor();
+               }
+@@ -6492,36 +9855,38 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability(this);
++                int from_bitField0_ = bitField0_;
++                int to_bitField0_ = 0;
++                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                  to_bitField0_ |= 0x00000001;
++                }
++                result.capability_ = capability_;
++                result.bitField0_ = to_bitField0_;
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability)other);
+                 } else {
+@@ -6539,23 +9904,29 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+@@ -6566,7 +9937,8 @@ public final class RemoteMessageProto {
+                       if (value == null) {
+                         unknownFields.mergeVarintField(1, rawValue);
+                       } else {
+-                        setCapability(value);
++                        bitField0_ |= 0x00000001;
++                        capability_ = value;
+                       }
+                       break;
+                     }
+@@ -6574,58 +9946,81 @@ public final class RemoteMessageProto {
+                 }
+               }
+               
++              private int bitField0_;
+               
+               // optional .com.google.gwt.dev.shell.remoteui.Message.Request.ViewerRequest.RequestType capability = 1;
++              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
+               public boolean hasCapability() {
+-                return result.hasCapability();
++                return ((bitField0_ & 0x00000001) == 0x00000001);
+               }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType getCapability() {
+-                return result.getCapability();
++                return capability_;
+               }
+               public Builder setCapability(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType value) {
+                 if (value == null) {
+                   throw new NullPointerException();
+                 }
+-                result.hasCapability = true;
+-                result.capability_ = value;
++                bitField0_ |= 0x00000001;
++                capability_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearCapability() {
+-                result.hasCapability = false;
+-                result.capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++                bitField0_ = (bitField0_ & ~0x00000001);
++                capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.RequestType.CAPABILITY_EXCHANGE;
++                onChanged();
+                 return this;
+               }
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange.Capability)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new Capability(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange.Capability)
+           }
+           
+           // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange.Capability capabilities = 2;
+           public static final int CAPABILITIES_FIELD_NUMBER = 2;
+-          private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> capabilities_ =
+-            java.util.Collections.emptyList();
++          private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> capabilities_;
+           public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> getCapabilitiesList() {
+             return capabilities_;
+           }
+-          public int getCapabilitiesCount() { return capabilities_.size(); }
++          public java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder> 
++              getCapabilitiesOrBuilderList() {
++            return capabilities_;
++          }
++          public int getCapabilitiesCount() {
++            return capabilities_.size();
++          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability getCapabilities(int index) {
+             return capabilities_.get(index);
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++              int index) {
++            return capabilities_.get(index);
++          }
+           
++          private void initFields() {
++            capabilities_ = java.util.Collections.emptyList();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            for (com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability element : getCapabilitiesList()) {
+-              output.writeMessage(2, element);
++            getSerializedSize();
++            for (int i = 0; i < capabilities_.size(); i++) {
++              output.writeMessage(2, capabilities_.get(i));
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -6636,35 +10031,42 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            for (com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability element : getCapabilitiesList()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(2, element);
++            for (int i = 0; i < capabilities_.size(); i++) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(2, capabilities_.get(i));
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -6674,30 +10076,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -6710,37 +10121,59 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getCapabilitiesFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              if (capabilitiesBuilder_ == null) {
++                capabilities_ = java.util.Collections.emptyList();
++                bitField0_ = (bitField0_ & ~0x00000001);
++              } else {
++                capabilitiesBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDescriptor();
+             }
+@@ -6749,40 +10182,41 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              if (result.capabilities_ != java.util.Collections.EMPTY_LIST) {
+-                result.capabilities_ =
+-                  java.util.Collections.unmodifiableList(result.capabilities_);
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange(this);
++              int from_bitField0_ = bitField0_;
++              if (capabilitiesBuilder_ == null) {
++                if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                  capabilities_ = java.util.Collections.unmodifiableList(capabilities_);
++                  bitField0_ = (bitField0_ & ~0x00000001);
++                }
++                result.capabilities_ = capabilities_;
++              } else {
++                result.capabilities_ = capabilitiesBuilder_.build();
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange returnMe = result;
+-              result = null;
+-              return returnMe;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange)other);
+               } else {
+@@ -6793,33 +10227,59 @@ public final class RemoteMessageProto {
+             
+             public Builder mergeFrom(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange other) {
+               if (other == com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance()) return this;
+-              if (!other.capabilities_.isEmpty()) {
+-                if (result.capabilities_.isEmpty()) {
+-                  result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability>();
++              if (capabilitiesBuilder_ == null) {
++                if (!other.capabilities_.isEmpty()) {
++                  if (capabilities_.isEmpty()) {
++                    capabilities_ = other.capabilities_;
++                    bitField0_ = (bitField0_ & ~0x00000001);
++                  } else {
++                    ensureCapabilitiesIsMutable();
++                    capabilities_.addAll(other.capabilities_);
++                  }
++                  onChanged();
++                }
++              } else {
++                if (!other.capabilities_.isEmpty()) {
++                  if (capabilitiesBuilder_.isEmpty()) {
++                    capabilitiesBuilder_.dispose();
++                    capabilitiesBuilder_ = null;
++                    capabilities_ = other.capabilities_;
++                    bitField0_ = (bitField0_ & ~0x00000001);
++                    capabilitiesBuilder_ = 
++                      com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
++                         getCapabilitiesFieldBuilder() : null;
++                  } else {
++                    capabilitiesBuilder_.addAllMessages(other.capabilities_);
++                  }
+                 }
+-                result.capabilities_.addAll(other.capabilities_);
+               }
+               this.mergeUnknownFields(other.getUnknownFields());
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -6834,74 +10294,222 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange.Capability capabilities = 2;
++            private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> capabilities_ =
++              java.util.Collections.emptyList();
++            private void ensureCapabilitiesIsMutable() {
++              if (!((bitField0_ & 0x00000001) == 0x00000001)) {
++                capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability>(capabilities_);
++                bitField0_ |= 0x00000001;
++               }
++            }
++            
++            private com.google.protobuf.RepeatedFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder> capabilitiesBuilder_;
++            
+             public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> getCapabilitiesList() {
+-              return java.util.Collections.unmodifiableList(result.capabilities_);
++              if (capabilitiesBuilder_ == null) {
++                return java.util.Collections.unmodifiableList(capabilities_);
++              } else {
++                return capabilitiesBuilder_.getMessageList();
++              }
+             }
+             public int getCapabilitiesCount() {
+-              return result.getCapabilitiesCount();
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.size();
++              } else {
++                return capabilitiesBuilder_.getCount();
++              }
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability getCapabilities(int index) {
+-              return result.getCapabilities(index);
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.get(index);
++              } else {
++                return capabilitiesBuilder_.getMessage(index);
++              }
+             }
+-            public Builder setCapabilities(int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++            public Builder setCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability value) {
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.set(index, value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.setMessage(index, value);
+               }
+-              result.capabilities_.set(index, value);
+               return this;
+             }
+-            public Builder setCapabilities(int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder builderForValue) {
+-              result.capabilities_.set(index, builderForValue.build());
++            public Builder setCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.set(index, builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.setMessage(index, builderForValue.build());
++              }
+               return this;
+             }
+             public Builder addCapabilities(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(value);
++              }
++              return this;
++            }
++            public Builder addCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability value) {
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(index, value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(index, value);
+               }
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability>();
++              return this;
++            }
++            public Builder addCapabilities(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(builderForValue.build());
+               }
+-              result.capabilities_.add(value);
+               return this;
+             }
+-            public Builder addCapabilities(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder builderForValue) {
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability>();
++            public Builder addCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(index, builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(index, builderForValue.build());
+               }
+-              result.capabilities_.add(builderForValue.build());
+               return this;
+             }
+             public Builder addAllCapabilities(
+                 java.lang.Iterable<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability> values) {
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability>();
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                super.addAll(values, capabilities_);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addAllMessages(values);
+               }
+-              super.addAll(values, result.capabilities_);
+               return this;
+             }
+             public Builder clearCapabilities() {
+-              result.capabilities_ = java.util.Collections.emptyList();
++              if (capabilitiesBuilder_ == null) {
++                capabilities_ = java.util.Collections.emptyList();
++                bitField0_ = (bitField0_ & ~0x00000001);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.clear();
++              }
++              return this;
++            }
++            public Builder removeCapabilities(int index) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.remove(index);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.remove(index);
++              }
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder getCapabilitiesBuilder(
++                int index) {
++              return getCapabilitiesFieldBuilder().getBuilder(index);
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++                int index) {
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.get(index);  } else {
++                return capabilitiesBuilder_.getMessageOrBuilder(index);
++              }
++            }
++            public java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder> 
++                 getCapabilitiesOrBuilderList() {
++              if (capabilitiesBuilder_ != null) {
++                return capabilitiesBuilder_.getMessageOrBuilderList();
++              } else {
++                return java.util.Collections.unmodifiableList(capabilities_);
++              }
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder addCapabilitiesBuilder() {
++              return getCapabilitiesFieldBuilder().addBuilder(
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.getDefaultInstance());
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder addCapabilitiesBuilder(
++                int index) {
++              return getCapabilitiesFieldBuilder().addBuilder(
++                  index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.getDefaultInstance());
++            }
++            public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder> 
++                 getCapabilitiesBuilderList() {
++              return getCapabilitiesFieldBuilder().getBuilderList();
++            }
++            private com.google.protobuf.RepeatedFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder> 
++                getCapabilitiesFieldBuilder() {
++              if (capabilitiesBuilder_ == null) {
++                capabilitiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.CapabilityOrBuilder>(
++                        capabilities_,
++                        ((bitField0_ & 0x00000001) == 0x00000001),
++                        getParentForChildren(),
++                        isClean());
++                capabilities_ = null;
++              }
++              return capabilitiesBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new CapabilityExchange(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange)
+         }
+         
++        public interface AddLogOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required uint32 logHandle = 1;
++          boolean hasLogHandle();
++          int getLogHandle();
++        }
+         public static final class AddLog extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements AddLogOrBuilder {
+           // Use AddLog.newBuilder() to construct.
+-          private AddLog() {}
++          private AddLog(Builder builder) {
++            super(builder);
++          }
++          private AddLog(boolean noInit) {}
+           
+-          private static final AddLog defaultInstance = new AddLog();
++          private static final AddLog defaultInstance;
+           public static AddLog getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -6910,32 +10518,48 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // required uint32 logHandle = 1;
+           public static final int LOGHANDLE_FIELD_NUMBER = 1;
+-          private boolean hasLogHandle;
+-          private int logHandle_ = 0;
+-          public boolean hasLogHandle() { return hasLogHandle; }
+-          public int getLogHandle() { return logHandle_; }
++          private int logHandle_;
++          public boolean hasLogHandle() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public int getLogHandle() {
++            return logHandle_;
++          }
+           
++          private void initFields() {
++            logHandle_ = 0;
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasLogHandle) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasLogHandle()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasLogHandle()) {
+-              output.writeUInt32(1, getLogHandle());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeUInt32(1, logHandle_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -6946,35 +10570,42 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasLogHandle()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(1, getLogHandle());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(1, logHandle_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -6984,30 +10615,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -7020,37 +10660,54 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog();
++              super.clear();
++              logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDescriptor();
+             }
+@@ -7059,36 +10716,38 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.logHandle_ = logHandle_;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog)other);
+               } else {
+@@ -7106,70 +10765,97 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasLogHandle()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 8: {
+-                    setLogHandle(input.readUInt32());
++                    bitField0_ |= 0x00000001;
++                    logHandle_ = input.readUInt32();
+                     break;
+                   }
+                 }
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required uint32 logHandle = 1;
++            private int logHandle_ ;
+             public boolean hasLogHandle() {
+-              return result.hasLogHandle();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public int getLogHandle() {
+-              return result.getLogHandle();
++              return logHandle_;
+             }
+             public Builder setLogHandle(int value) {
+-              result.hasLogHandle = true;
+-              result.logHandle_ = value;
++              bitField0_ |= 0x00000001;
++              logHandle_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearLogHandle() {
+-              result.hasLogHandle = false;
+-              result.logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              logHandle_ = 0;
++              onChanged();
+               return this;
+             }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLog)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new AddLog(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLog)
+         }
+         
++        public interface AddLogBranchOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // required uint32 logHandle = 1;
++          boolean hasLogHandle();
++          int getLogHandle();
++        }
+         public static final class AddLogBranch extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements AddLogBranchOrBuilder {
+           // Use AddLogBranch.newBuilder() to construct.
+-          private AddLogBranch() {}
++          private AddLogBranch(Builder builder) {
++            super(builder);
++          }
++          private AddLogBranch(boolean noInit) {}
+           
+-          private static final AddLogBranch defaultInstance = new AddLogBranch();
++          private static final AddLogBranch defaultInstance;
+           public static AddLogBranch getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -7178,32 +10864,48 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_fieldAccessorTable;
+           }
+           
++          private int bitField0_;
+           // required uint32 logHandle = 1;
+           public static final int LOGHANDLE_FIELD_NUMBER = 1;
+-          private boolean hasLogHandle;
+-          private int logHandle_ = 0;
+-          public boolean hasLogHandle() { return hasLogHandle; }
+-          public int getLogHandle() { return logHandle_; }
++          private int logHandle_;
++          public boolean hasLogHandle() {
++            return ((bitField0_ & 0x00000001) == 0x00000001);
++          }
++          public int getLogHandle() {
++            return logHandle_;
++          }
+           
++          private void initFields() {
++            logHandle_ = 0;
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
+-            if (!hasLogHandle) return false;
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            if (!hasLogHandle()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            if (hasLogHandle()) {
+-              output.writeUInt32(1, getLogHandle());
++            getSerializedSize();
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              output.writeUInt32(1, logHandle_);
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -7214,35 +10916,42 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            if (hasLogHandle()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeUInt32Size(1, getLogHandle());
++            if (((bitField0_ & 0x00000001) == 0x00000001)) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeUInt32Size(1, logHandle_);
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -7252,30 +10961,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -7288,37 +11006,54 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch();
++              super.clear();
++              logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDescriptor();
+             }
+@@ -7327,36 +11062,38 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch(this);
++              int from_bitField0_ = bitField0_;
++              int to_bitField0_ = 0;
++              if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                to_bitField0_ |= 0x00000001;
++              }
++              result.logHandle_ = logHandle_;
++              result.bitField0_ = to_bitField0_;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch)other);
+               } else {
+@@ -7374,115 +11111,171 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              if (!hasLogHandle()) {
++                
++                return false;
++              }
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+                   }
+                   case 8: {
+-                    setLogHandle(input.readUInt32());
++                    bitField0_ |= 0x00000001;
++                    logHandle_ = input.readUInt32();
+                     break;
+                   }
+                 }
+               }
+             }
+             
++            private int bitField0_;
+             
+             // required uint32 logHandle = 1;
++            private int logHandle_ ;
+             public boolean hasLogHandle() {
+-              return result.hasLogHandle();
++              return ((bitField0_ & 0x00000001) == 0x00000001);
+             }
+             public int getLogHandle() {
+-              return result.getLogHandle();
++              return logHandle_;
+             }
+             public Builder setLogHandle(int value) {
+-              result.hasLogHandle = true;
+-              result.logHandle_ = value;
++              bitField0_ |= 0x00000001;
++              logHandle_ = value;
++              onChanged();
+               return this;
+             }
+             public Builder clearLogHandle() {
+-              result.hasLogHandle = false;
+-              result.logHandle_ = 0;
++              bitField0_ = (bitField0_ & ~0x00000001);
++              logHandle_ = 0;
++              onChanged();
+               return this;
+             }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLogBranch)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new AddLogBranch(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLogBranch)
+         }
+         
++        private int bitField0_;
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.ResponseType responseType = 1;
+         public static final int RESPONSETYPE_FIELD_NUMBER = 1;
+-        private boolean hasResponseType;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
+-        public boolean hasResponseType() { return hasResponseType; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType getResponseType() { return responseType_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType responseType_;
++        public boolean hasResponseType() {
++          return ((bitField0_ & 0x00000001) == 0x00000001);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType getResponseType() {
++          return responseType_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange = 2;
+         public static final int CAPABILITYEXCHANGE_FIELD_NUMBER = 2;
+-        private boolean hasCapabilityExchange;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
+-        public boolean hasCapabilityExchange() { return hasCapabilityExchange; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange getCapabilityExchange() { return capabilityExchange_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange_;
++        public boolean hasCapabilityExchange() {
++          return ((bitField0_ & 0x00000002) == 0x00000002);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange getCapabilityExchange() {
++          return capabilityExchange_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++          return capabilityExchange_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLog addLog = 3;
+         public static final int ADDLOG_FIELD_NUMBER = 3;
+-        private boolean hasAddLog;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
+-        public boolean hasAddLog() { return hasAddLog; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog getAddLog() { return addLog_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog addLog_;
++        public boolean hasAddLog() {
++          return ((bitField0_ & 0x00000004) == 0x00000004);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog getAddLog() {
++          return addLog_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder getAddLogOrBuilder() {
++          return addLog_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLogBranch addLogBranch = 4;
+         public static final int ADDLOGBRANCH_FIELD_NUMBER = 4;
+-        private boolean hasAddLogBranch;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
+-        public boolean hasAddLogBranch() { return hasAddLogBranch; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch getAddLogBranch() { return addLogBranch_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch addLogBranch_;
++        public boolean hasAddLogBranch() {
++          return ((bitField0_ & 0x00000008) == 0x00000008);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch getAddLogBranch() {
++          return addLogBranch_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder getAddLogBranchOrBuilder() {
++          return addLogBranch_;
++        }
+         
++        private void initFields() {
++          responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
++          capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
++          addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
++          addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
++        }
++        private byte memoizedIsInitialized = -1;
+         public final boolean isInitialized() {
++          byte isInitialized = memoizedIsInitialized;
++          if (isInitialized != -1) return isInitialized == 1;
++          
+           if (hasAddLog()) {
+-            if (!getAddLog().isInitialized()) return false;
++            if (!getAddLog().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
+           if (hasAddLogBranch()) {
+-            if (!getAddLogBranch().isInitialized()) return false;
++            if (!getAddLogBranch().isInitialized()) {
++              memoizedIsInitialized = 0;
++              return false;
++            }
+           }
++          memoizedIsInitialized = 1;
+           return true;
+         }
+         
+-        public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++        public void writeTo(com.google.protobuf.CodedOutputStream output)
+                             throws java.io.IOException {
+-          if (hasResponseType()) {
+-            output.writeEnum(1, getResponseType().getNumber());
++          getSerializedSize();
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            output.writeEnum(1, responseType_.getNumber());
+           }
+-          if (hasCapabilityExchange()) {
+-            output.writeMessage(2, getCapabilityExchange());
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            output.writeMessage(2, capabilityExchange_);
+           }
+-          if (hasAddLog()) {
+-            output.writeMessage(3, getAddLog());
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            output.writeMessage(3, addLog_);
+           }
+-          if (hasAddLogBranch()) {
+-            output.writeMessage(4, getAddLogBranch());
++          if (((bitField0_ & 0x00000008) == 0x00000008)) {
++            output.writeMessage(4, addLogBranch_);
+           }
+           getUnknownFields().writeTo(output);
+         }
+@@ -7493,47 +11286,54 @@ public final class RemoteMessageProto {
+           if (size != -1) return size;
+         
+           size = 0;
+-          if (hasResponseType()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeEnumSize(1, getResponseType().getNumber());
+-          }
+-          if (hasCapabilityExchange()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(2, getCapabilityExchange());
+-          }
+-          if (hasAddLog()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(3, getAddLog());
+-          }
+-          if (hasAddLogBranch()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(4, getAddLogBranch());
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeEnumSize(1, responseType_.getNumber());
++          }
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(2, capabilityExchange_);
++          }
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(3, addLog_);
++          }
++          if (((bitField0_ & 0x00000008) == 0x00000008)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(4, addLogBranch_);
+           }
+           size += getUnknownFields().getSerializedSize();
+           memoizedSerializedSize = size;
+           return size;
+         }
+         
++        private static final long serialVersionUID = 0L;
++        @java.lang.Override
++        protected java.lang.Object writeReplace()
++            throws java.io.ObjectStreamException {
++          return super.writeReplace();
++        }
++        
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(byte[] data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+             byte[] data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+@@ -7543,30 +11343,39 @@ public final class RemoteMessageProto {
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseDelimitedFrom(java.io.InputStream input)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input).buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseDelimitedFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                   .buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input)
++            com.google.protobuf.CodedInputStream input)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+@@ -7579,37 +11388,75 @@ public final class RemoteMessageProto {
+         }
+         public Builder toBuilder() { return newBuilder(this); }
+         
++        @java.lang.Override
++        protected Builder newBuilderForType(
++            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++          Builder builder = new Builder(parent);
++          return builder;
++        }
+         public static final class Builder extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse result;
++            com.google.protobuf.GeneratedMessage.Builder<Builder>
++           implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder {
++          public static final com.google.protobuf.Descriptors.Descriptor
++              getDescriptor() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor;
++          }
+           
+-          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.newBuilder()
+-          private Builder() {}
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++              internalGetFieldAccessorTable() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_fieldAccessorTable;
++          }
+           
+-          private static Builder create() {
+-            Builder builder = new Builder();
+-            builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse();
+-            return builder;
++          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.newBuilder()
++          private Builder() {
++            maybeForceBuilderInitialization();
+           }
+           
+-          protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse internalGetResult() {
+-            return result;
++          private Builder(BuilderParent parent) {
++            super(parent);
++            maybeForceBuilderInitialization();
++          }
++          private void maybeForceBuilderInitialization() {
++            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              getCapabilityExchangeFieldBuilder();
++              getAddLogFieldBuilder();
++              getAddLogBranchFieldBuilder();
++            }
++          }
++          private static Builder create() {
++            return new Builder();
+           }
+           
+           public Builder clear() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "Cannot call clear() after build().");
++            super.clear();
++            responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
++            if (addLogBuilder_ == null) {
++              addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
++            } else {
++              addLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
++            } else {
++              addLogBranchBuilder_.clear();
+             }
+-            result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse();
++            bitField0_ = (bitField0_ & ~0x00000008);
+             return this;
+           }
+           
+           public Builder clone() {
+-            return create().mergeFrom(result);
++            return create().mergeFrom(buildPartial());
+           }
+           
+-          public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public com.google.protobuf.Descriptors.Descriptor
+               getDescriptorForType() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDescriptor();
+           }
+@@ -7618,36 +11465,62 @@ public final class RemoteMessageProto {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
+           }
+           
+-          public boolean isInitialized() {
+-            return result.isInitialized();
+-          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse build() {
+-            if (result != null && !isInitialized()) {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(result);
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse buildParsed()
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-            if (!isInitialized()) {
++              throws com.google.protobuf.InvalidProtocolBufferException {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(
+                 result).asInvalidProtocolBufferException();
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse buildPartial() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "build() has already been called on this Builder.");
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse(this);
++            int from_bitField0_ = bitField0_;
++            int to_bitField0_ = 0;
++            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++              to_bitField0_ |= 0x00000001;
++            }
++            result.responseType_ = responseType_;
++            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++              to_bitField0_ |= 0x00000002;
++            }
++            if (capabilityExchangeBuilder_ == null) {
++              result.capabilityExchange_ = capabilityExchange_;
++            } else {
++              result.capabilityExchange_ = capabilityExchangeBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++              to_bitField0_ |= 0x00000004;
++            }
++            if (addLogBuilder_ == null) {
++              result.addLog_ = addLog_;
++            } else {
++              result.addLog_ = addLogBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++              to_bitField0_ |= 0x00000008;
++            }
++            if (addLogBranchBuilder_ == null) {
++              result.addLogBranch_ = addLogBranch_;
++            } else {
++              result.addLogBranch_ = addLogBranchBuilder_.build();
+             }
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse returnMe = result;
+-            result = null;
+-            return returnMe;
++            result.bitField0_ = to_bitField0_;
++            onBuilt();
++            return result;
+           }
+           
+-          public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++          public Builder mergeFrom(com.google.protobuf.Message other) {
+             if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse) {
+               return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse)other);
+             } else {
+@@ -7674,23 +11547,41 @@ public final class RemoteMessageProto {
+             return this;
+           }
+           
++          public final boolean isInitialized() {
++            if (hasAddLog()) {
++              if (!getAddLog().isInitialized()) {
++                
++                return false;
++              }
++            }
++            if (hasAddLogBranch()) {
++              if (!getAddLogBranch().isInitialized()) {
++                
++                return false;
++              }
++            }
++            return true;
++          }
++          
+           public Builder mergeFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++              com.google.protobuf.UnknownFieldSet.newBuilder(
+                 this.getUnknownFields());
+             while (true) {
+               int tag = input.readTag();
+               switch (tag) {
+                 case 0:
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 default: {
+                   if (!parseUnknownField(input, unknownFields,
+                                          extensionRegistry, tag)) {
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   }
+                   break;
+@@ -7701,7 +11592,8 @@ public final class RemoteMessageProto {
+                   if (value == null) {
+                     unknownFields.mergeVarintField(1, rawValue);
+                   } else {
+-                    setResponseType(value);
++                    bitField0_ |= 0x00000001;
++                    responseType_ = value;
+                   }
+                   break;
+                 }
+@@ -7736,155 +11628,340 @@ public final class RemoteMessageProto {
+             }
+           }
+           
++          private int bitField0_;
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.ResponseType responseType = 1;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
+           public boolean hasResponseType() {
+-            return result.hasResponseType();
++            return ((bitField0_ & 0x00000001) == 0x00000001);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType getResponseType() {
+-            return result.getResponseType();
++            return responseType_;
+           }
+           public Builder setResponseType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType value) {
+             if (value == null) {
+               throw new NullPointerException();
+             }
+-            result.hasResponseType = true;
+-            result.responseType_ = value;
++            bitField0_ |= 0x00000001;
++            responseType_ = value;
++            onChanged();
+             return this;
+           }
+           public Builder clearResponseType() {
+-            result.hasResponseType = false;
+-            result.responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.ResponseType.CAPABILITY_EXCHANGE;
++            onChanged();
+             return this;
+           }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange = 2;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder> capabilityExchangeBuilder_;
+           public boolean hasCapabilityExchange() {
+-            return result.hasCapabilityExchange();
++            return ((bitField0_ & 0x00000002) == 0x00000002);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange getCapabilityExchange() {
+-            return result.getCapabilityExchange();
++            if (capabilityExchangeBuilder_ == null) {
++              return capabilityExchange_;
++            } else {
++              return capabilityExchangeBuilder_.getMessage();
++            }
+           }
+           public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (capabilityExchangeBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              capabilityExchange_ = value;
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(value);
+             }
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = value;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+-          public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder builderForValue) {
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = builderForValue.build();
++          public Builder setCapabilityExchange(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder builderForValue) {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = builderForValue.build();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder mergeCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange value) {
+-            if (result.hasCapabilityExchange() &&
+-                result.capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance()) {
+-              result.capabilityExchange_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.newBuilder(result.capabilityExchange_).mergeFrom(value).buildPartial();
++            if (capabilityExchangeBuilder_ == null) {
++              if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                  capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance()) {
++                capabilityExchange_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.newBuilder(capabilityExchange_).mergeFrom(value).buildPartial();
++              } else {
++                capabilityExchange_ = value;
++              }
++              onChanged();
+             } else {
+-              result.capabilityExchange_ = value;
++              capabilityExchangeBuilder_.mergeFrom(value);
+             }
+-            result.hasCapabilityExchange = true;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder clearCapabilityExchange() {
+-            result.hasCapabilityExchange = false;
+-            result.capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.getDefaultInstance();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder getCapabilityExchangeBuilder() {
++            bitField0_ |= 0x00000002;
++            onChanged();
++            return getCapabilityExchangeFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++            if (capabilityExchangeBuilder_ != null) {
++              return capabilityExchangeBuilder_.getMessageOrBuilder();
++            } else {
++              return capabilityExchange_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder> 
++              getCapabilityExchangeFieldBuilder() {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchangeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchangeOrBuilder>(
++                      capabilityExchange_,
++                      getParentForChildren(),
++                      isClean());
++              capabilityExchange_ = null;
++            }
++            return capabilityExchangeBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLog addLog = 3;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder> addLogBuilder_;
+           public boolean hasAddLog() {
+-            return result.hasAddLog();
++            return ((bitField0_ & 0x00000004) == 0x00000004);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog getAddLog() {
+-            return result.getAddLog();
++            if (addLogBuilder_ == null) {
++              return addLog_;
++            } else {
++              return addLogBuilder_.getMessage();
++            }
+           }
+           public Builder setAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (addLogBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              addLog_ = value;
++              onChanged();
++            } else {
++              addLogBuilder_.setMessage(value);
+             }
+-            result.hasAddLog = true;
+-            result.addLog_ = value;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+-          public Builder setAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder builderForValue) {
+-            result.hasAddLog = true;
+-            result.addLog_ = builderForValue.build();
++          public Builder setAddLog(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder builderForValue) {
++            if (addLogBuilder_ == null) {
++              addLog_ = builderForValue.build();
++              onChanged();
++            } else {
++              addLogBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder mergeAddLog(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog value) {
+-            if (result.hasAddLog() &&
+-                result.addLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance()) {
+-              result.addLog_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.newBuilder(result.addLog_).mergeFrom(value).buildPartial();
++            if (addLogBuilder_ == null) {
++              if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                  addLog_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance()) {
++                addLog_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.newBuilder(addLog_).mergeFrom(value).buildPartial();
++              } else {
++                addLog_ = value;
++              }
++              onChanged();
+             } else {
+-              result.addLog_ = value;
++              addLogBuilder_.mergeFrom(value);
+             }
+-            result.hasAddLog = true;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder clearAddLog() {
+-            result.hasAddLog = false;
+-            result.addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
++            if (addLogBuilder_ == null) {
++              addLog_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.getDefaultInstance();
++              onChanged();
++            } else {
++              addLogBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder getAddLogBuilder() {
++            bitField0_ |= 0x00000004;
++            onChanged();
++            return getAddLogFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder getAddLogOrBuilder() {
++            if (addLogBuilder_ != null) {
++              return addLogBuilder_.getMessageOrBuilder();
++            } else {
++              return addLog_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder> 
++              getAddLogFieldBuilder() {
++            if (addLogBuilder_ == null) {
++              addLogBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogOrBuilder>(
++                      addLog_,
++                      getParentForChildren(),
++                      isClean());
++              addLog_ = null;
++            }
++            return addLogBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse.AddLogBranch addLogBranch = 4;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder> addLogBranchBuilder_;
+           public boolean hasAddLogBranch() {
+-            return result.hasAddLogBranch();
++            return ((bitField0_ & 0x00000008) == 0x00000008);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch getAddLogBranch() {
+-            return result.getAddLogBranch();
++            if (addLogBranchBuilder_ == null) {
++              return addLogBranch_;
++            } else {
++              return addLogBranchBuilder_.getMessage();
++            }
+           }
+           public Builder setAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (addLogBranchBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              addLogBranch_ = value;
++              onChanged();
++            } else {
++              addLogBranchBuilder_.setMessage(value);
+             }
+-            result.hasAddLogBranch = true;
+-            result.addLogBranch_ = value;
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+-          public Builder setAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder builderForValue) {
+-            result.hasAddLogBranch = true;
+-            result.addLogBranch_ = builderForValue.build();
++          public Builder setAddLogBranch(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder builderForValue) {
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = builderForValue.build();
++              onChanged();
++            } else {
++              addLogBranchBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+           public Builder mergeAddLogBranch(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch value) {
+-            if (result.hasAddLogBranch() &&
+-                result.addLogBranch_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance()) {
+-              result.addLogBranch_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.newBuilder(result.addLogBranch_).mergeFrom(value).buildPartial();
++            if (addLogBranchBuilder_ == null) {
++              if (((bitField0_ & 0x00000008) == 0x00000008) &&
++                  addLogBranch_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance()) {
++                addLogBranch_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.newBuilder(addLogBranch_).mergeFrom(value).buildPartial();
++              } else {
++                addLogBranch_ = value;
++              }
++              onChanged();
+             } else {
+-              result.addLogBranch_ = value;
++              addLogBranchBuilder_.mergeFrom(value);
+             }
+-            result.hasAddLogBranch = true;
++            bitField0_ |= 0x00000008;
+             return this;
+           }
+           public Builder clearAddLogBranch() {
+-            result.hasAddLogBranch = false;
+-            result.addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
++            if (addLogBranchBuilder_ == null) {
++              addLogBranch_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.getDefaultInstance();
++              onChanged();
++            } else {
++              addLogBranchBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000008);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder getAddLogBranchBuilder() {
++            bitField0_ |= 0x00000008;
++            onChanged();
++            return getAddLogBranchFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder getAddLogBranchOrBuilder() {
++            if (addLogBranchBuilder_ != null) {
++              return addLogBranchBuilder_.getMessageOrBuilder();
++            } else {
++              return addLogBranch_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder> 
++              getAddLogBranchFieldBuilder() {
++            if (addLogBranchBuilder_ == null) {
++              addLogBranchBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranchOrBuilder>(
++                      addLogBranch_,
++                      getParentForChildren(),
++                      isClean());
++              addLogBranch_ = null;
++            }
++            return addLogBranchBuilder_;
++          }
++          
++          // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse)
+         }
+         
+         static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++          defaultInstance = new ViewerResponse(true);
++          defaultInstance.initFields();
+         }
+         
+-        static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-        }
++        // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse)
+       }
+       
++      public interface DevModeResponseOrBuilder
++          extends com.google.protobuf.MessageOrBuilder {
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.ResponseType responseType = 1;
++        boolean hasResponseType();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType getResponseType();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange = 2;
++        boolean hasCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange getCapabilityExchange();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder();
++        
++        // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.RestartWebServer restartWebServer = 3;
++        boolean hasRestartWebServer();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer getRestartWebServer();
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder getRestartWebServerOrBuilder();
++      }
+       public static final class DevModeResponse extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage {
++          com.google.protobuf.GeneratedMessage
++          implements DevModeResponseOrBuilder {
+         // Use DevModeResponse.newBuilder() to construct.
+-        private DevModeResponse() {}
++        private DevModeResponse(Builder builder) {
++          super(builder);
++        }
++        private DevModeResponse(boolean noInit) {}
+         
+-        private static final DevModeResponse defaultInstance = new DevModeResponse();
++        private static final DevModeResponse defaultInstance;
+         public static DevModeResponse getDefaultInstance() {
+           return defaultInstance;
+         }
+@@ -7893,22 +11970,25 @@ public final class RemoteMessageProto {
+           return defaultInstance;
+         }
+         
+-        public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public static final com.google.protobuf.Descriptors.Descriptor
+             getDescriptor() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor;
+         }
+         
+-        protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+             internalGetFieldAccessorTable() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_fieldAccessorTable;
+         }
+         
+         public enum ResponseType
+-            implements com.google.gwt.dev.protobuf.ProtocolMessageEnum {
++            implements com.google.protobuf.ProtocolMessageEnum {
+           CAPABILITY_EXCHANGE(0, 0),
+           RESTART_WEB_SERVER(1, 1),
+           ;
+           
++          public static final int CAPABILITY_EXCHANGE_VALUE = 0;
++          public static final int RESTART_WEB_SERVER_VALUE = 1;
++          
+           
+           public final int getNumber() { return value; }
+           
+@@ -7920,27 +12000,27 @@ public final class RemoteMessageProto {
+             }
+           }
+           
+-          public static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>
++          public static com.google.protobuf.Internal.EnumLiteMap<ResponseType>
+               internalGetValueMap() {
+             return internalValueMap;
+           }
+-          private static com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>
++          private static com.google.protobuf.Internal.EnumLiteMap<ResponseType>
+               internalValueMap =
+-                new com.google.gwt.dev.protobuf.Internal.EnumLiteMap<ResponseType>() {
++                new com.google.protobuf.Internal.EnumLiteMap<ResponseType>() {
+                   public ResponseType findValueByNumber(int number) {
+-                    return ResponseType.valueOf(number)
+-          ;        }
++                    return ResponseType.valueOf(number);
++                  }
+                 };
+           
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor
++          public final com.google.protobuf.Descriptors.EnumValueDescriptor
+               getValueDescriptor() {
+             return getDescriptor().getValues().get(index);
+           }
+-          public final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptorForType() {
+             return getDescriptor();
+           }
+-          public static final com.google.gwt.dev.protobuf.Descriptors.EnumDescriptor
++          public static final com.google.protobuf.Descriptors.EnumDescriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDescriptor().getEnumTypes().get(0);
+           }
+@@ -7948,32 +12028,50 @@ public final class RemoteMessageProto {
+           private static final ResponseType[] VALUES = {
+             CAPABILITY_EXCHANGE, RESTART_WEB_SERVER, 
+           };
++          
+           public static ResponseType valueOf(
+-              com.google.gwt.dev.protobuf.Descriptors.EnumValueDescriptor desc) {
++              com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+             if (desc.getType() != getDescriptor()) {
+               throw new java.lang.IllegalArgumentException(
+                 "EnumValueDescriptor is not for this type.");
+             }
+             return VALUES[desc.getIndex()];
+           }
++          
+           private final int index;
+           private final int value;
++          
+           private ResponseType(int index, int value) {
+             this.index = index;
+             this.value = value;
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
+-          }
++          // @@protoc_insertion_point(enum_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.ResponseType)
+         }
+         
++        public interface CapabilityExchangeOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++          
++          // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange.Capability capabilities = 2;
++          java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> 
++              getCapabilitiesList();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability getCapabilities(int index);
++          int getCapabilitiesCount();
++          java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder> 
++              getCapabilitiesOrBuilderList();
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++              int index);
++        }
+         public static final class CapabilityExchange extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements CapabilityExchangeOrBuilder {
+           // Use CapabilityExchange.newBuilder() to construct.
+-          private CapabilityExchange() {}
++          private CapabilityExchange(Builder builder) {
++            super(builder);
++          }
++          private CapabilityExchange(boolean noInit) {}
+           
+-          private static final CapabilityExchange defaultInstance = new CapabilityExchange();
++          private static final CapabilityExchange defaultInstance;
+           public static CapabilityExchange getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -7982,22 +12080,33 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_fieldAccessorTable;
+           }
+           
++          public interface CapabilityOrBuilder
++              extends com.google.protobuf.MessageOrBuilder {
++            
++            // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType capability = 1;
++            boolean hasCapability();
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getCapability();
++          }
+           public static final class Capability extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage {
++              com.google.protobuf.GeneratedMessage
++              implements CapabilityOrBuilder {
+             // Use Capability.newBuilder() to construct.
+-            private Capability() {}
++            private Capability(Builder builder) {
++              super(builder);
++            }
++            private Capability(boolean noInit) {}
+             
+-            private static final Capability defaultInstance = new Capability();
++            private static final Capability defaultInstance;
+             public static Capability getDefaultInstance() {
+               return defaultInstance;
+             }
+@@ -8006,31 +12115,44 @@ public final class RemoteMessageProto {
+               return defaultInstance;
+             }
+             
+-            public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public static final com.google.protobuf.Descriptors.Descriptor
+                 getDescriptor() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_descriptor;
+             }
+             
+-            protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+                 internalGetFieldAccessorTable() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_fieldAccessorTable;
+             }
+             
++            private int bitField0_;
+             // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType capability = 1;
+             public static final int CAPABILITY_FIELD_NUMBER = 1;
+-            private boolean hasCapability;
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
+-            public boolean hasCapability() { return hasCapability; }
+-            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getCapability() { return capability_; }
++            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType capability_;
++            public boolean hasCapability() {
++              return ((bitField0_ & 0x00000001) == 0x00000001);
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getCapability() {
++              return capability_;
++            }
+             
++            private void initFields() {
++              capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++            }
++            private byte memoizedIsInitialized = -1;
+             public final boolean isInitialized() {
++              byte isInitialized = memoizedIsInitialized;
++              if (isInitialized != -1) return isInitialized == 1;
++              
++              memoizedIsInitialized = 1;
+               return true;
+             }
+             
+-            public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++            public void writeTo(com.google.protobuf.CodedOutputStream output)
+                                 throws java.io.IOException {
+-              if (hasCapability()) {
+-                output.writeEnum(1, getCapability().getNumber());
++              getSerializedSize();
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                output.writeEnum(1, capability_.getNumber());
+               }
+               getUnknownFields().writeTo(output);
+             }
+@@ -8041,35 +12163,42 @@ public final class RemoteMessageProto {
+               if (size != -1) return size;
+             
+               size = 0;
+-              if (hasCapability()) {
+-                size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                  .computeEnumSize(1, getCapability().getNumber());
++              if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                size += com.google.protobuf.CodedOutputStream
++                  .computeEnumSize(1, capability_.getNumber());
+               }
+               size += getUnknownFields().getSerializedSize();
+               memoizedSerializedSize = size;
+               return size;
+             }
+             
++            private static final long serialVersionUID = 0L;
++            @java.lang.Override
++            protected java.lang.Object writeReplace()
++                throws java.io.ObjectStreamException {
++              return super.writeReplace();
++            }
++            
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.ByteString data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ByteString data,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(byte[] data)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+                 byte[] data,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++                throws com.google.protobuf.InvalidProtocolBufferException {
+               return newBuilder().mergeFrom(data, extensionRegistry)
+                        .buildParsed();
+             }
+@@ -8079,30 +12208,39 @@ public final class RemoteMessageProto {
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseDelimitedFrom(java.io.InputStream input)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input).buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseDelimitedFrom(
+                 java.io.InputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                       .buildParsed();
++              Builder builder = newBuilder();
++              if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++                return builder.buildParsed();
++              } else {
++                return null;
++              }
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input)
++                com.google.protobuf.CodedInputStream input)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input).buildParsed();
+             }
+             public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability parseFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+               return newBuilder().mergeFrom(input, extensionRegistry)
+                        .buildParsed();
+@@ -8115,37 +12253,54 @@ public final class RemoteMessageProto {
+             }
+             public Builder toBuilder() { return newBuilder(this); }
+             
++            @java.lang.Override
++            protected Builder newBuilderForType(
++                com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++              Builder builder = new Builder(parent);
++              return builder;
++            }
+             public static final class Builder extends
+-                com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability result;
++                com.google.protobuf.GeneratedMessage.Builder<Builder>
++               implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder {
++              public static final com.google.protobuf.Descriptors.Descriptor
++                  getDescriptor() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_descriptor;
++              }
+               
+-              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.newBuilder()
+-              private Builder() {}
++              protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                  internalGetFieldAccessorTable() {
++                return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_fieldAccessorTable;
++              }
+               
+-              private static Builder create() {
+-                Builder builder = new Builder();
+-                builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability();
+-                return builder;
++              // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.newBuilder()
++              private Builder() {
++                maybeForceBuilderInitialization();
+               }
+               
+-              protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability internalGetResult() {
+-                return result;
++              private Builder(BuilderParent parent) {
++                super(parent);
++                maybeForceBuilderInitialization();
++              }
++              private void maybeForceBuilderInitialization() {
++                if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                }
++              }
++              private static Builder create() {
++                return new Builder();
+               }
+               
+               public Builder clear() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "Cannot call clear() after build().");
+-                }
+-                result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability();
++                super.clear();
++                capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++                bitField0_ = (bitField0_ & ~0x00000001);
+                 return this;
+               }
+               
+               public Builder clone() {
+-                return create().mergeFrom(result);
++                return create().mergeFrom(buildPartial());
+               }
+               
+-              public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++              public com.google.protobuf.Descriptors.Descriptor
+                   getDescriptorForType() {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.getDescriptor();
+               }
+@@ -8154,36 +12309,38 @@ public final class RemoteMessageProto {
+                 return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.getDefaultInstance();
+               }
+               
+-              public boolean isInitialized() {
+-                return result.isInitialized();
+-              }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability build() {
+-                if (result != null && !isInitialized()) {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(result);
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability buildParsed()
+-                  throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-                if (!isInitialized()) {
++                  throws com.google.protobuf.InvalidProtocolBufferException {
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability result = buildPartial();
++                if (!result.isInitialized()) {
+                   throw newUninitializedMessageException(
+                     result).asInvalidProtocolBufferException();
+                 }
+-                return buildPartial();
++                return result;
+               }
+               
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability buildPartial() {
+-                if (result == null) {
+-                  throw new IllegalStateException(
+-                    "build() has already been called on this Builder.");
+-                }
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability returnMe = result;
+-                result = null;
+-                return returnMe;
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability(this);
++                int from_bitField0_ = bitField0_;
++                int to_bitField0_ = 0;
++                if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++                  to_bitField0_ |= 0x00000001;
++                }
++                result.capability_ = capability_;
++                result.bitField0_ = to_bitField0_;
++                onBuilt();
++                return result;
+               }
+               
+-              public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++              public Builder mergeFrom(com.google.protobuf.Message other) {
+                 if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability) {
+                   return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability)other);
+                 } else {
+@@ -8201,23 +12358,29 @@ public final class RemoteMessageProto {
+                 return this;
+               }
+               
++              public final boolean isInitialized() {
++                return true;
++              }
++              
+               public Builder mergeFrom(
+-                  com.google.gwt.dev.protobuf.CodedInputStream input,
+-                  com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                  com.google.protobuf.CodedInputStream input,
++                  com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                   throws java.io.IOException {
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                  com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++                com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                  com.google.protobuf.UnknownFieldSet.newBuilder(
+                     this.getUnknownFields());
+                 while (true) {
+                   int tag = input.readTag();
+                   switch (tag) {
+                     case 0:
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     default: {
+                       if (!parseUnknownField(input, unknownFields,
+                                              extensionRegistry, tag)) {
+                         this.setUnknownFields(unknownFields.build());
++                        onChanged();
+                         return this;
+                       }
+                       break;
+@@ -8228,7 +12391,8 @@ public final class RemoteMessageProto {
+                       if (value == null) {
+                         unknownFields.mergeVarintField(1, rawValue);
+                       } else {
+-                        setCapability(value);
++                        bitField0_ |= 0x00000001;
++                        capability_ = value;
+                       }
+                       break;
+                     }
+@@ -8236,58 +12400,81 @@ public final class RemoteMessageProto {
+                 }
+               }
+               
++              private int bitField0_;
+               
+               // optional .com.google.gwt.dev.shell.remoteui.Message.Request.DevModeRequest.RequestType capability = 1;
++              private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
+               public boolean hasCapability() {
+-                return result.hasCapability();
++                return ((bitField0_ & 0x00000001) == 0x00000001);
+               }
+               public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType getCapability() {
+-                return result.getCapability();
++                return capability_;
+               }
+               public Builder setCapability(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType value) {
+                 if (value == null) {
+                   throw new NullPointerException();
+                 }
+-                result.hasCapability = true;
+-                result.capability_ = value;
++                bitField0_ |= 0x00000001;
++                capability_ = value;
++                onChanged();
+                 return this;
+               }
+               public Builder clearCapability() {
+-                result.hasCapability = false;
+-                result.capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++                bitField0_ = (bitField0_ & ~0x00000001);
++                capability_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RequestType.CAPABILITY_EXCHANGE;
++                onChanged();
+                 return this;
+               }
++              
++              // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange.Capability)
+             }
+             
+             static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++              defaultInstance = new Capability(true);
++              defaultInstance.initFields();
+             }
+             
+-            static {
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-            }
++            // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange.Capability)
+           }
+           
+           // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange.Capability capabilities = 2;
+           public static final int CAPABILITIES_FIELD_NUMBER = 2;
+-          private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> capabilities_ =
+-            java.util.Collections.emptyList();
++          private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> capabilities_;
+           public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> getCapabilitiesList() {
+             return capabilities_;
+           }
+-          public int getCapabilitiesCount() { return capabilities_.size(); }
++          public java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder> 
++              getCapabilitiesOrBuilderList() {
++            return capabilities_;
++          }
++          public int getCapabilitiesCount() {
++            return capabilities_.size();
++          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability getCapabilities(int index) {
+             return capabilities_.get(index);
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++              int index) {
++            return capabilities_.get(index);
++          }
+           
++          private void initFields() {
++            capabilities_ = java.util.Collections.emptyList();
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
+-            for (com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability element : getCapabilitiesList()) {
+-              output.writeMessage(2, element);
++            getSerializedSize();
++            for (int i = 0; i < capabilities_.size(); i++) {
++              output.writeMessage(2, capabilities_.get(i));
+             }
+             getUnknownFields().writeTo(output);
+           }
+@@ -8298,35 +12485,42 @@ public final class RemoteMessageProto {
+             if (size != -1) return size;
+           
+             size = 0;
+-            for (com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability element : getCapabilitiesList()) {
+-              size += com.google.gwt.dev.protobuf.CodedOutputStream
+-                .computeMessageSize(2, element);
++            for (int i = 0; i < capabilities_.size(); i++) {
++              size += com.google.protobuf.CodedOutputStream
++                .computeMessageSize(2, capabilities_.get(i));
+             }
+             size += getUnknownFields().getSerializedSize();
+             memoizedSerializedSize = size;
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -8336,30 +12530,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -8372,37 +12575,59 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++                getCapabilitiesFieldBuilder();
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
++              super.clear();
++              if (capabilitiesBuilder_ == null) {
++                capabilities_ = java.util.Collections.emptyList();
++                bitField0_ = (bitField0_ & ~0x00000001);
++              } else {
++                capabilitiesBuilder_.clear();
+               }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDescriptor();
+             }
+@@ -8411,40 +12636,41 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              if (result.capabilities_ != java.util.Collections.EMPTY_LIST) {
+-                result.capabilities_ =
+-                  java.util.Collections.unmodifiableList(result.capabilities_);
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange(this);
++              int from_bitField0_ = bitField0_;
++              if (capabilitiesBuilder_ == null) {
++                if (((bitField0_ & 0x00000001) == 0x00000001)) {
++                  capabilities_ = java.util.Collections.unmodifiableList(capabilities_);
++                  bitField0_ = (bitField0_ & ~0x00000001);
++                }
++                result.capabilities_ = capabilities_;
++              } else {
++                result.capabilities_ = capabilitiesBuilder_.build();
+               }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange returnMe = result;
+-              result = null;
+-              return returnMe;
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange)other);
+               } else {
+@@ -8455,33 +12681,59 @@ public final class RemoteMessageProto {
+             
+             public Builder mergeFrom(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange other) {
+               if (other == com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance()) return this;
+-              if (!other.capabilities_.isEmpty()) {
+-                if (result.capabilities_.isEmpty()) {
+-                  result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability>();
++              if (capabilitiesBuilder_ == null) {
++                if (!other.capabilities_.isEmpty()) {
++                  if (capabilities_.isEmpty()) {
++                    capabilities_ = other.capabilities_;
++                    bitField0_ = (bitField0_ & ~0x00000001);
++                  } else {
++                    ensureCapabilitiesIsMutable();
++                    capabilities_.addAll(other.capabilities_);
++                  }
++                  onChanged();
++                }
++              } else {
++                if (!other.capabilities_.isEmpty()) {
++                  if (capabilitiesBuilder_.isEmpty()) {
++                    capabilitiesBuilder_.dispose();
++                    capabilitiesBuilder_ = null;
++                    capabilities_ = other.capabilities_;
++                    bitField0_ = (bitField0_ & ~0x00000001);
++                    capabilitiesBuilder_ = 
++                      com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
++                         getCapabilitiesFieldBuilder() : null;
++                  } else {
++                    capabilitiesBuilder_.addAllMessages(other.capabilities_);
++                  }
+                 }
+-                result.capabilities_.addAll(other.capabilities_);
+               }
+               this.mergeUnknownFields(other.getUnknownFields());
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -8496,74 +12748,218 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            private int bitField0_;
+             
+             // repeated .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange.Capability capabilities = 2;
++            private java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> capabilities_ =
++              java.util.Collections.emptyList();
++            private void ensureCapabilitiesIsMutable() {
++              if (!((bitField0_ & 0x00000001) == 0x00000001)) {
++                capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability>(capabilities_);
++                bitField0_ |= 0x00000001;
++               }
++            }
++            
++            private com.google.protobuf.RepeatedFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder> capabilitiesBuilder_;
++            
+             public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> getCapabilitiesList() {
+-              return java.util.Collections.unmodifiableList(result.capabilities_);
++              if (capabilitiesBuilder_ == null) {
++                return java.util.Collections.unmodifiableList(capabilities_);
++              } else {
++                return capabilitiesBuilder_.getMessageList();
++              }
+             }
+             public int getCapabilitiesCount() {
+-              return result.getCapabilitiesCount();
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.size();
++              } else {
++                return capabilitiesBuilder_.getCount();
++              }
+             }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability getCapabilities(int index) {
+-              return result.getCapabilities(index);
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.get(index);
++              } else {
++                return capabilitiesBuilder_.getMessage(index);
++              }
+             }
+-            public Builder setCapabilities(int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++            public Builder setCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability value) {
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.set(index, value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.setMessage(index, value);
+               }
+-              result.capabilities_.set(index, value);
+               return this;
+             }
+-            public Builder setCapabilities(int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder builderForValue) {
+-              result.capabilities_.set(index, builderForValue.build());
++            public Builder setCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.set(index, builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.setMessage(index, builderForValue.build());
++              }
+               return this;
+             }
+             public Builder addCapabilities(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability value) {
+-              if (value == null) {
+-                throw new NullPointerException();
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(value);
++              }
++              return this;
++            }
++            public Builder addCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability value) {
++              if (capabilitiesBuilder_ == null) {
++                if (value == null) {
++                  throw new NullPointerException();
++                }
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(index, value);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(index, value);
+               }
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability>();
++              return this;
++            }
++            public Builder addCapabilities(
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(builderForValue.build());
+               }
+-              result.capabilities_.add(value);
+               return this;
+             }
+-            public Builder addCapabilities(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder builderForValue) {
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability>();
++            public Builder addCapabilities(
++                int index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder builderForValue) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.add(index, builderForValue.build());
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addMessage(index, builderForValue.build());
+               }
+-              result.capabilities_.add(builderForValue.build());
+               return this;
+             }
+             public Builder addAllCapabilities(
+                 java.lang.Iterable<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability> values) {
+-              if (result.capabilities_.isEmpty()) {
+-                result.capabilities_ = new java.util.ArrayList<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability>();
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                super.addAll(values, capabilities_);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.addAllMessages(values);
+               }
+-              super.addAll(values, result.capabilities_);
+               return this;
+             }
+             public Builder clearCapabilities() {
+-              result.capabilities_ = java.util.Collections.emptyList();
++              if (capabilitiesBuilder_ == null) {
++                capabilities_ = java.util.Collections.emptyList();
++                bitField0_ = (bitField0_ & ~0x00000001);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.clear();
++              }
++              return this;
++            }
++            public Builder removeCapabilities(int index) {
++              if (capabilitiesBuilder_ == null) {
++                ensureCapabilitiesIsMutable();
++                capabilities_.remove(index);
++                onChanged();
++              } else {
++                capabilitiesBuilder_.remove(index);
++              }
+               return this;
+             }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder getCapabilitiesBuilder(
++                int index) {
++              return getCapabilitiesFieldBuilder().getBuilder(index);
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder getCapabilitiesOrBuilder(
++                int index) {
++              if (capabilitiesBuilder_ == null) {
++                return capabilities_.get(index);  } else {
++                return capabilitiesBuilder_.getMessageOrBuilder(index);
++              }
++            }
++            public java.util.List<? extends com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder> 
++                 getCapabilitiesOrBuilderList() {
++              if (capabilitiesBuilder_ != null) {
++                return capabilitiesBuilder_.getMessageOrBuilderList();
++              } else {
++                return java.util.Collections.unmodifiableList(capabilities_);
++              }
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder addCapabilitiesBuilder() {
++              return getCapabilitiesFieldBuilder().addBuilder(
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.getDefaultInstance());
++            }
++            public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder addCapabilitiesBuilder(
++                int index) {
++              return getCapabilitiesFieldBuilder().addBuilder(
++                  index, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.getDefaultInstance());
++            }
++            public java.util.List<com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder> 
++                 getCapabilitiesBuilderList() {
++              return getCapabilitiesFieldBuilder().getBuilderList();
++            }
++            private com.google.protobuf.RepeatedFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder> 
++                getCapabilitiesFieldBuilder() {
++              if (capabilitiesBuilder_ == null) {
++                capabilitiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
++                    com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.CapabilityOrBuilder>(
++                        capabilities_,
++                        ((bitField0_ & 0x00000001) == 0x00000001),
++                        getParentForChildren(),
++                        isClean());
++                capabilities_ = null;
++              }
++              return capabilitiesBuilder_;
++            }
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new CapabilityExchange(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange)
+         }
+         
++        public interface RestartWebServerOrBuilder
++            extends com.google.protobuf.MessageOrBuilder {
++        }
+         public static final class RestartWebServer extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage {
++            com.google.protobuf.GeneratedMessage
++            implements RestartWebServerOrBuilder {
+           // Use RestartWebServer.newBuilder() to construct.
+-          private RestartWebServer() {}
++          private RestartWebServer(Builder builder) {
++            super(builder);
++          }
++          private RestartWebServer(boolean noInit) {}
+           
+-          private static final RestartWebServer defaultInstance = new RestartWebServer();
++          private static final RestartWebServer defaultInstance;
+           public static RestartWebServer getDefaultInstance() {
+             return defaultInstance;
+           }
+@@ -8572,22 +12968,30 @@ public final class RemoteMessageProto {
+             return defaultInstance;
+           }
+           
+-          public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public static final com.google.protobuf.Descriptors.Descriptor
+               getDescriptor() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_descriptor;
+           }
+           
+-          protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+               internalGetFieldAccessorTable() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_fieldAccessorTable;
+           }
+           
++          private void initFields() {
++          }
++          private byte memoizedIsInitialized = -1;
+           public final boolean isInitialized() {
++            byte isInitialized = memoizedIsInitialized;
++            if (isInitialized != -1) return isInitialized == 1;
++            
++            memoizedIsInitialized = 1;
+             return true;
+           }
+           
+-          public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++          public void writeTo(com.google.protobuf.CodedOutputStream output)
+                               throws java.io.IOException {
++            getSerializedSize();
+             getUnknownFields().writeTo(output);
+           }
+           
+@@ -8602,26 +13006,33 @@ public final class RemoteMessageProto {
+             return size;
+           }
+           
++          private static final long serialVersionUID = 0L;
++          @java.lang.Override
++          protected java.lang.Object writeReplace()
++              throws java.io.ObjectStreamException {
++            return super.writeReplace();
++          }
++          
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.ByteString data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ByteString data,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(byte[] data)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+               byte[] data,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++              throws com.google.protobuf.InvalidProtocolBufferException {
+             return newBuilder().mergeFrom(data, extensionRegistry)
+                      .buildParsed();
+           }
+@@ -8631,30 +13042,39 @@ public final class RemoteMessageProto {
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseDelimitedFrom(java.io.InputStream input)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input).buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseDelimitedFrom(
+               java.io.InputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                     .buildParsed();
++            Builder builder = newBuilder();
++            if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++              return builder.buildParsed();
++            } else {
++              return null;
++            }
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input)
++              com.google.protobuf.CodedInputStream input)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input).buildParsed();
+           }
+           public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer parseFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+             return newBuilder().mergeFrom(input, extensionRegistry)
+                      .buildParsed();
+@@ -8667,37 +13087,52 @@ public final class RemoteMessageProto {
+           }
+           public Builder toBuilder() { return newBuilder(this); }
+           
++          @java.lang.Override
++          protected Builder newBuilderForType(
++              com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++            Builder builder = new Builder(parent);
++            return builder;
++          }
+           public static final class Builder extends
+-              com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-            private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer result;
++              com.google.protobuf.GeneratedMessage.Builder<Builder>
++             implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder {
++            public static final com.google.protobuf.Descriptors.Descriptor
++                getDescriptor() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_descriptor;
++            }
+             
+-            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.newBuilder()
+-            private Builder() {}
++            protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++                internalGetFieldAccessorTable() {
++              return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_fieldAccessorTable;
++            }
+             
+-            private static Builder create() {
+-              Builder builder = new Builder();
+-              builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer();
+-              return builder;
++            // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.newBuilder()
++            private Builder() {
++              maybeForceBuilderInitialization();
+             }
+             
+-            protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer internalGetResult() {
+-              return result;
++            private Builder(BuilderParent parent) {
++              super(parent);
++              maybeForceBuilderInitialization();
++            }
++            private void maybeForceBuilderInitialization() {
++              if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              }
++            }
++            private static Builder create() {
++              return new Builder();
+             }
+             
+             public Builder clear() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "Cannot call clear() after build().");
+-              }
+-              result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer();
++              super.clear();
+               return this;
+             }
+             
+             public Builder clone() {
+-              return create().mergeFrom(result);
++              return create().mergeFrom(buildPartial());
+             }
+             
+-            public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++            public com.google.protobuf.Descriptors.Descriptor
+                 getDescriptorForType() {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDescriptor();
+             }
+@@ -8706,36 +13141,31 @@ public final class RemoteMessageProto {
+               return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
+             }
+             
+-            public boolean isInitialized() {
+-              return result.isInitialized();
+-            }
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer build() {
+-              if (result != null && !isInitialized()) {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(result);
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer buildParsed()
+-                throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-              if (!isInitialized()) {
++                throws com.google.protobuf.InvalidProtocolBufferException {
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer result = buildPartial();
++              if (!result.isInitialized()) {
+                 throw newUninitializedMessageException(
+                   result).asInvalidProtocolBufferException();
+               }
+-              return buildPartial();
++              return result;
+             }
+             
+             public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer buildPartial() {
+-              if (result == null) {
+-                throw new IllegalStateException(
+-                  "build() has already been called on this Builder.");
+-              }
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer returnMe = result;
+-              result = null;
+-              return returnMe;
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer(this);
++              onBuilt();
++              return result;
+             }
+             
+-            public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++            public Builder mergeFrom(com.google.protobuf.Message other) {
+               if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer) {
+                 return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer)other);
+               } else {
+@@ -8750,23 +13180,29 @@ public final class RemoteMessageProto {
+               return this;
+             }
+             
++            public final boolean isInitialized() {
++              return true;
++            }
++            
+             public Builder mergeFrom(
+-                com.google.gwt.dev.protobuf.CodedInputStream input,
+-                com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++                com.google.protobuf.CodedInputStream input,
++                com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+                 throws java.io.IOException {
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-                com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++              com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++                com.google.protobuf.UnknownFieldSet.newBuilder(
+                   this.getUnknownFields());
+               while (true) {
+                 int tag = input.readTag();
+                 switch (tag) {
+                   case 0:
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   default: {
+                     if (!parseUnknownField(input, unknownFields,
+                                            extensionRegistry, tag)) {
+                       this.setUnknownFields(unknownFields.build());
++                      onChanged();
+                       return this;
+                     }
+                     break;
+@@ -8775,52 +13211,80 @@ public final class RemoteMessageProto {
+               }
+             }
+             
++            
++            // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.RestartWebServer)
+           }
+           
+           static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++            defaultInstance = new RestartWebServer(true);
++            defaultInstance.initFields();
+           }
+           
+-          static {
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-          }
++          // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.RestartWebServer)
+         }
+         
++        private int bitField0_;
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.ResponseType responseType = 1;
+         public static final int RESPONSETYPE_FIELD_NUMBER = 1;
+-        private boolean hasResponseType;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
+-        public boolean hasResponseType() { return hasResponseType; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType getResponseType() { return responseType_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType responseType_;
++        public boolean hasResponseType() {
++          return ((bitField0_ & 0x00000001) == 0x00000001);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType getResponseType() {
++          return responseType_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange = 2;
+         public static final int CAPABILITYEXCHANGE_FIELD_NUMBER = 2;
+-        private boolean hasCapabilityExchange;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
+-        public boolean hasCapabilityExchange() { return hasCapabilityExchange; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange getCapabilityExchange() { return capabilityExchange_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange_;
++        public boolean hasCapabilityExchange() {
++          return ((bitField0_ & 0x00000002) == 0x00000002);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange getCapabilityExchange() {
++          return capabilityExchange_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++          return capabilityExchange_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.RestartWebServer restartWebServer = 3;
+         public static final int RESTARTWEBSERVER_FIELD_NUMBER = 3;
+-        private boolean hasRestartWebServer;
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
+-        public boolean hasRestartWebServer() { return hasRestartWebServer; }
+-        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer getRestartWebServer() { return restartWebServer_; }
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer restartWebServer_;
++        public boolean hasRestartWebServer() {
++          return ((bitField0_ & 0x00000004) == 0x00000004);
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer getRestartWebServer() {
++          return restartWebServer_;
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder getRestartWebServerOrBuilder() {
++          return restartWebServer_;
++        }
+         
++        private void initFields() {
++          responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
++          capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
++          restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
++        }
++        private byte memoizedIsInitialized = -1;
+         public final boolean isInitialized() {
++          byte isInitialized = memoizedIsInitialized;
++          if (isInitialized != -1) return isInitialized == 1;
++          
++          memoizedIsInitialized = 1;
+           return true;
+         }
+         
+-        public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++        public void writeTo(com.google.protobuf.CodedOutputStream output)
+                             throws java.io.IOException {
+-          if (hasResponseType()) {
+-            output.writeEnum(1, getResponseType().getNumber());
++          getSerializedSize();
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            output.writeEnum(1, responseType_.getNumber());
+           }
+-          if (hasCapabilityExchange()) {
+-            output.writeMessage(2, getCapabilityExchange());
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            output.writeMessage(2, capabilityExchange_);
+           }
+-          if (hasRestartWebServer()) {
+-            output.writeMessage(3, getRestartWebServer());
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            output.writeMessage(3, restartWebServer_);
+           }
+           getUnknownFields().writeTo(output);
+         }
+@@ -8831,43 +13295,50 @@ public final class RemoteMessageProto {
+           if (size != -1) return size;
+         
+           size = 0;
+-          if (hasResponseType()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeEnumSize(1, getResponseType().getNumber());
+-          }
+-          if (hasCapabilityExchange()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(2, getCapabilityExchange());
+-          }
+-          if (hasRestartWebServer()) {
+-            size += com.google.gwt.dev.protobuf.CodedOutputStream
+-              .computeMessageSize(3, getRestartWebServer());
++          if (((bitField0_ & 0x00000001) == 0x00000001)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeEnumSize(1, responseType_.getNumber());
++          }
++          if (((bitField0_ & 0x00000002) == 0x00000002)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(2, capabilityExchange_);
++          }
++          if (((bitField0_ & 0x00000004) == 0x00000004)) {
++            size += com.google.protobuf.CodedOutputStream
++              .computeMessageSize(3, restartWebServer_);
+           }
+           size += getUnknownFields().getSerializedSize();
+           memoizedSerializedSize = size;
+           return size;
+         }
+         
++        private static final long serialVersionUID = 0L;
++        @java.lang.Override
++        protected java.lang.Object writeReplace()
++            throws java.io.ObjectStreamException {
++          return super.writeReplace();
++        }
++        
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+-            com.google.gwt.dev.protobuf.ByteString data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ByteString data,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(byte[] data)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+             byte[] data,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++            throws com.google.protobuf.InvalidProtocolBufferException {
+           return newBuilder().mergeFrom(data, extensionRegistry)
+                    .buildParsed();
+         }
+@@ -8877,30 +13348,39 @@ public final class RemoteMessageProto {
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseDelimitedFrom(java.io.InputStream input)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input).buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseDelimitedFrom(
+             java.io.InputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                   .buildParsed();
++          Builder builder = newBuilder();
++          if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++            return builder.buildParsed();
++          } else {
++            return null;
++          }
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input)
++            com.google.protobuf.CodedInputStream input)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input).buildParsed();
+         }
+         public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse parseFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+           return newBuilder().mergeFrom(input, extensionRegistry)
+                    .buildParsed();
+@@ -8913,37 +13393,68 @@ public final class RemoteMessageProto {
+         }
+         public Builder toBuilder() { return newBuilder(this); }
+         
++        @java.lang.Override
++        protected Builder newBuilderForType(
++            com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++          Builder builder = new Builder(parent);
++          return builder;
++        }
+         public static final class Builder extends
+-            com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse result;
++            com.google.protobuf.GeneratedMessage.Builder<Builder>
++           implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder {
++          public static final com.google.protobuf.Descriptors.Descriptor
++              getDescriptor() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor;
++          }
+           
+-          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.newBuilder()
+-          private Builder() {}
++          protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++              internalGetFieldAccessorTable() {
++            return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_fieldAccessorTable;
++          }
+           
+-          private static Builder create() {
+-            Builder builder = new Builder();
+-            builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse();
+-            return builder;
++          // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.newBuilder()
++          private Builder() {
++            maybeForceBuilderInitialization();
+           }
+           
+-          protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse internalGetResult() {
+-            return result;
++          private Builder(BuilderParent parent) {
++            super(parent);
++            maybeForceBuilderInitialization();
++          }
++          private void maybeForceBuilderInitialization() {
++            if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++              getCapabilityExchangeFieldBuilder();
++              getRestartWebServerFieldBuilder();
++            }
++          }
++          private static Builder create() {
++            return new Builder();
+           }
+           
+           public Builder clear() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "Cannot call clear() after build().");
++            super.clear();
++            responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
++            } else {
++              restartWebServerBuilder_.clear();
+             }
+-            result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse();
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
+           
+           public Builder clone() {
+-            return create().mergeFrom(result);
++            return create().mergeFrom(buildPartial());
+           }
+           
+-          public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++          public com.google.protobuf.Descriptors.Descriptor
+               getDescriptorForType() {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDescriptor();
+           }
+@@ -8952,36 +13463,54 @@ public final class RemoteMessageProto {
+             return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
+           }
+           
+-          public boolean isInitialized() {
+-            return result.isInitialized();
+-          }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse build() {
+-            if (result != null && !isInitialized()) {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(result);
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse buildParsed()
+-              throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-            if (!isInitialized()) {
++              throws com.google.protobuf.InvalidProtocolBufferException {
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse result = buildPartial();
++            if (!result.isInitialized()) {
+               throw newUninitializedMessageException(
+                 result).asInvalidProtocolBufferException();
+             }
+-            return buildPartial();
++            return result;
+           }
+           
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse buildPartial() {
+-            if (result == null) {
+-              throw new IllegalStateException(
+-                "build() has already been called on this Builder.");
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse(this);
++            int from_bitField0_ = bitField0_;
++            int to_bitField0_ = 0;
++            if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++              to_bitField0_ |= 0x00000001;
++            }
++            result.responseType_ = responseType_;
++            if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++              to_bitField0_ |= 0x00000002;
++            }
++            if (capabilityExchangeBuilder_ == null) {
++              result.capabilityExchange_ = capabilityExchange_;
++            } else {
++              result.capabilityExchange_ = capabilityExchangeBuilder_.build();
++            }
++            if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++              to_bitField0_ |= 0x00000004;
++            }
++            if (restartWebServerBuilder_ == null) {
++              result.restartWebServer_ = restartWebServer_;
++            } else {
++              result.restartWebServer_ = restartWebServerBuilder_.build();
+             }
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse returnMe = result;
+-            result = null;
+-            return returnMe;
++            result.bitField0_ = to_bitField0_;
++            onBuilt();
++            return result;
+           }
+           
+-          public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++          public Builder mergeFrom(com.google.protobuf.Message other) {
+             if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse) {
+               return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse)other);
+             } else {
+@@ -9005,23 +13534,29 @@ public final class RemoteMessageProto {
+             return this;
+           }
+           
++          public final boolean isInitialized() {
++            return true;
++          }
++          
+           public Builder mergeFrom(
+-              com.google.gwt.dev.protobuf.CodedInputStream input,
+-              com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++              com.google.protobuf.CodedInputStream input,
++              com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+               throws java.io.IOException {
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-              com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++            com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++              com.google.protobuf.UnknownFieldSet.newBuilder(
+                 this.getUnknownFields());
+             while (true) {
+               int tag = input.readTag();
+               switch (tag) {
+                 case 0:
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 default: {
+                   if (!parseUnknownField(input, unknownFields,
+                                          extensionRegistry, tag)) {
+                     this.setUnknownFields(unknownFields.build());
++                    onChanged();
+                     return this;
+                   }
+                   break;
+@@ -9032,7 +13567,8 @@ public final class RemoteMessageProto {
+                   if (value == null) {
+                     unknownFields.mergeVarintField(1, rawValue);
+                   } else {
+-                    setResponseType(value);
++                    bitField0_ |= 0x00000001;
++                    responseType_ = value;
+                   }
+                   break;
+                 }
+@@ -9058,140 +13594,277 @@ public final class RemoteMessageProto {
+             }
+           }
+           
++          private int bitField0_;
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.ResponseType responseType = 1;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
+           public boolean hasResponseType() {
+-            return result.hasResponseType();
++            return ((bitField0_ & 0x00000001) == 0x00000001);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType getResponseType() {
+-            return result.getResponseType();
++            return responseType_;
+           }
+           public Builder setResponseType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType value) {
+             if (value == null) {
+               throw new NullPointerException();
+             }
+-            result.hasResponseType = true;
+-            result.responseType_ = value;
++            bitField0_ |= 0x00000001;
++            responseType_ = value;
++            onChanged();
+             return this;
+           }
+           public Builder clearResponseType() {
+-            result.hasResponseType = false;
+-            result.responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
++            bitField0_ = (bitField0_ & ~0x00000001);
++            responseType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.ResponseType.CAPABILITY_EXCHANGE;
++            onChanged();
+             return this;
+           }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange = 2;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder> capabilityExchangeBuilder_;
+           public boolean hasCapabilityExchange() {
+-            return result.hasCapabilityExchange();
++            return ((bitField0_ & 0x00000002) == 0x00000002);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange getCapabilityExchange() {
+-            return result.getCapabilityExchange();
++            if (capabilityExchangeBuilder_ == null) {
++              return capabilityExchange_;
++            } else {
++              return capabilityExchangeBuilder_.getMessage();
++            }
+           }
+           public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (capabilityExchangeBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              capabilityExchange_ = value;
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(value);
+             }
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = value;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+-          public Builder setCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder builderForValue) {
+-            result.hasCapabilityExchange = true;
+-            result.capabilityExchange_ = builderForValue.build();
++          public Builder setCapabilityExchange(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder builderForValue) {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = builderForValue.build();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder mergeCapabilityExchange(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange value) {
+-            if (result.hasCapabilityExchange() &&
+-                result.capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance()) {
+-              result.capabilityExchange_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.newBuilder(result.capabilityExchange_).mergeFrom(value).buildPartial();
++            if (capabilityExchangeBuilder_ == null) {
++              if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                  capabilityExchange_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance()) {
++                capabilityExchange_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.newBuilder(capabilityExchange_).mergeFrom(value).buildPartial();
++              } else {
++                capabilityExchange_ = value;
++              }
++              onChanged();
+             } else {
+-              result.capabilityExchange_ = value;
++              capabilityExchangeBuilder_.mergeFrom(value);
+             }
+-            result.hasCapabilityExchange = true;
++            bitField0_ |= 0x00000002;
+             return this;
+           }
+           public Builder clearCapabilityExchange() {
+-            result.hasCapabilityExchange = false;
+-            result.capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchange_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.getDefaultInstance();
++              onChanged();
++            } else {
++              capabilityExchangeBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000002);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder getCapabilityExchangeBuilder() {
++            bitField0_ |= 0x00000002;
++            onChanged();
++            return getCapabilityExchangeFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder getCapabilityExchangeOrBuilder() {
++            if (capabilityExchangeBuilder_ != null) {
++              return capabilityExchangeBuilder_.getMessageOrBuilder();
++            } else {
++              return capabilityExchange_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder> 
++              getCapabilityExchangeFieldBuilder() {
++            if (capabilityExchangeBuilder_ == null) {
++              capabilityExchangeBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchangeOrBuilder>(
++                      capabilityExchange_,
++                      getParentForChildren(),
++                      isClean());
++              capabilityExchange_ = null;
++            }
++            return capabilityExchangeBuilder_;
++          }
+           
+           // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse.RestartWebServer restartWebServer = 3;
++          private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder> restartWebServerBuilder_;
+           public boolean hasRestartWebServer() {
+-            return result.hasRestartWebServer();
++            return ((bitField0_ & 0x00000004) == 0x00000004);
+           }
+           public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer getRestartWebServer() {
+-            return result.getRestartWebServer();
++            if (restartWebServerBuilder_ == null) {
++              return restartWebServer_;
++            } else {
++              return restartWebServerBuilder_.getMessage();
++            }
+           }
+           public Builder setRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer value) {
+-            if (value == null) {
+-              throw new NullPointerException();
++            if (restartWebServerBuilder_ == null) {
++              if (value == null) {
++                throw new NullPointerException();
++              }
++              restartWebServer_ = value;
++              onChanged();
++            } else {
++              restartWebServerBuilder_.setMessage(value);
+             }
+-            result.hasRestartWebServer = true;
+-            result.restartWebServer_ = value;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+-          public Builder setRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder builderForValue) {
+-            result.hasRestartWebServer = true;
+-            result.restartWebServer_ = builderForValue.build();
++          public Builder setRestartWebServer(
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder builderForValue) {
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = builderForValue.build();
++              onChanged();
++            } else {
++              restartWebServerBuilder_.setMessage(builderForValue.build());
++            }
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder mergeRestartWebServer(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer value) {
+-            if (result.hasRestartWebServer() &&
+-                result.restartWebServer_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance()) {
+-              result.restartWebServer_ =
+-                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.newBuilder(result.restartWebServer_).mergeFrom(value).buildPartial();
++            if (restartWebServerBuilder_ == null) {
++              if (((bitField0_ & 0x00000004) == 0x00000004) &&
++                  restartWebServer_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance()) {
++                restartWebServer_ =
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.newBuilder(restartWebServer_).mergeFrom(value).buildPartial();
++              } else {
++                restartWebServer_ = value;
++              }
++              onChanged();
+             } else {
+-              result.restartWebServer_ = value;
++              restartWebServerBuilder_.mergeFrom(value);
+             }
+-            result.hasRestartWebServer = true;
++            bitField0_ |= 0x00000004;
+             return this;
+           }
+           public Builder clearRestartWebServer() {
+-            result.hasRestartWebServer = false;
+-            result.restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
++            if (restartWebServerBuilder_ == null) {
++              restartWebServer_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.getDefaultInstance();
++              onChanged();
++            } else {
++              restartWebServerBuilder_.clear();
++            }
++            bitField0_ = (bitField0_ & ~0x00000004);
+             return this;
+           }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder getRestartWebServerBuilder() {
++            bitField0_ |= 0x00000004;
++            onChanged();
++            return getRestartWebServerFieldBuilder().getBuilder();
++          }
++          public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder getRestartWebServerOrBuilder() {
++            if (restartWebServerBuilder_ != null) {
++              return restartWebServerBuilder_.getMessageOrBuilder();
++            } else {
++              return restartWebServer_;
++            }
++          }
++          private com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder> 
++              getRestartWebServerFieldBuilder() {
++            if (restartWebServerBuilder_ == null) {
++              restartWebServerBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                  com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServerOrBuilder>(
++                      restartWebServer_,
++                      getParentForChildren(),
++                      isClean());
++              restartWebServer_ = null;
++            }
++            return restartWebServerBuilder_;
++          }
++          
++          // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse)
+         }
+         
+         static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++          defaultInstance = new DevModeResponse(true);
++          defaultInstance.initFields();
+         }
+         
+-        static {
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-        }
++        // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse)
+       }
+       
++      private int bitField0_;
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse viewerResponse = 1;
+       public static final int VIEWERRESPONSE_FIELD_NUMBER = 1;
+-      private boolean hasViewerResponse;
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
+-      public boolean hasViewerResponse() { return hasViewerResponse; }
+-      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse getViewerResponse() { return viewerResponse_; }
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse viewerResponse_;
++      public boolean hasViewerResponse() {
++        return ((bitField0_ & 0x00000001) == 0x00000001);
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse getViewerResponse() {
++        return viewerResponse_;
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder getViewerResponseOrBuilder() {
++        return viewerResponse_;
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse devModeResponse = 2;
+       public static final int DEVMODERESPONSE_FIELD_NUMBER = 2;
+-      private boolean hasDevModeResponse;
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
+-      public boolean hasDevModeResponse() { return hasDevModeResponse; }
+-      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse getDevModeResponse() { return devModeResponse_; }
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse devModeResponse_;
++      public boolean hasDevModeResponse() {
++        return ((bitField0_ & 0x00000002) == 0x00000002);
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse getDevModeResponse() {
++        return devModeResponse_;
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder getDevModeResponseOrBuilder() {
++        return devModeResponse_;
++      }
+       
++      private void initFields() {
++        viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
++        devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
++      }
++      private byte memoizedIsInitialized = -1;
+       public final boolean isInitialized() {
++        byte isInitialized = memoizedIsInitialized;
++        if (isInitialized != -1) return isInitialized == 1;
++        
+         if (hasViewerResponse()) {
+-          if (!getViewerResponse().isInitialized()) return false;
++          if (!getViewerResponse().isInitialized()) {
++            memoizedIsInitialized = 0;
++            return false;
++          }
+         }
++        memoizedIsInitialized = 1;
+         return true;
+       }
+       
+-      public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                           throws java.io.IOException {
+-        if (hasViewerResponse()) {
+-          output.writeMessage(1, getViewerResponse());
++        getSerializedSize();
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          output.writeMessage(1, viewerResponse_);
+         }
+-        if (hasDevModeResponse()) {
+-          output.writeMessage(2, getDevModeResponse());
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          output.writeMessage(2, devModeResponse_);
+         }
+         getUnknownFields().writeTo(output);
+       }
+@@ -9202,39 +13875,46 @@ public final class RemoteMessageProto {
+         if (size != -1) return size;
+       
+         size = 0;
+-        if (hasViewerResponse()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeMessageSize(1, getViewerResponse());
+-        }
+-        if (hasDevModeResponse()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeMessageSize(2, getDevModeResponse());
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeMessageSize(1, viewerResponse_);
++        }
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeMessageSize(2, devModeResponse_);
+         }
+         size += getUnknownFields().getSerializedSize();
+         memoizedSerializedSize = size;
+         return size;
+       }
+       
++      private static final long serialVersionUID = 0L;
++      @java.lang.Override
++      protected java.lang.Object writeReplace()
++          throws java.io.ObjectStreamException {
++        return super.writeReplace();
++      }
++      
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(byte[] data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+           byte[] data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+@@ -9244,30 +13924,39 @@ public final class RemoteMessageProto {
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseDelimitedFrom(java.io.InputStream input)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input).buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseDelimitedFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                 .buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input)
++          com.google.protobuf.CodedInputStream input)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.CodedInputStream input,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+@@ -9280,37 +13969,66 @@ public final class RemoteMessageProto {
+       }
+       public Builder toBuilder() { return newBuilder(this); }
+       
++      @java.lang.Override
++      protected Builder newBuilderForType(
++          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++        Builder builder = new Builder(parent);
++        return builder;
++      }
+       public static final class Builder extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response result;
++          com.google.protobuf.GeneratedMessage.Builder<Builder>
++         implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder {
++        public static final com.google.protobuf.Descriptors.Descriptor
++            getDescriptor() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor;
++        }
+         
+-        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.newBuilder()
+-        private Builder() {}
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++            internalGetFieldAccessorTable() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_fieldAccessorTable;
++        }
+         
+-        private static Builder create() {
+-          Builder builder = new Builder();
+-          builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response();
+-          return builder;
++        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.newBuilder()
++        private Builder() {
++          maybeForceBuilderInitialization();
+         }
+         
+-        protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response internalGetResult() {
+-          return result;
++        private Builder(BuilderParent parent) {
++          super(parent);
++          maybeForceBuilderInitialization();
++        }
++        private void maybeForceBuilderInitialization() {
++          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++            getViewerResponseFieldBuilder();
++            getDevModeResponseFieldBuilder();
++          }
++        }
++        private static Builder create() {
++          return new Builder();
+         }
+         
+         public Builder clear() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "Cannot call clear() after build().");
++          super.clear();
++          if (viewerResponseBuilder_ == null) {
++            viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
++          } else {
++            viewerResponseBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000001);
++          if (devModeResponseBuilder_ == null) {
++            devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
++          } else {
++            devModeResponseBuilder_.clear();
+           }
+-          result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response();
++          bitField0_ = (bitField0_ & ~0x00000002);
+           return this;
+         }
+         
+         public Builder clone() {
+-          return create().mergeFrom(result);
++          return create().mergeFrom(buildPartial());
+         }
+         
+-        public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public com.google.protobuf.Descriptors.Descriptor
+             getDescriptorForType() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDescriptor();
+         }
+@@ -9319,36 +14037,50 @@ public final class RemoteMessageProto {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
+         }
+         
+-        public boolean isInitialized() {
+-          return result.isInitialized();
+-        }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response build() {
+-          if (result != null && !isInitialized()) {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(result);
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response buildParsed()
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-          if (!isInitialized()) {
++            throws com.google.protobuf.InvalidProtocolBufferException {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(
+               result).asInvalidProtocolBufferException();
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response buildPartial() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "build() has already been called on this Builder.");
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response(this);
++          int from_bitField0_ = bitField0_;
++          int to_bitField0_ = 0;
++          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++            to_bitField0_ |= 0x00000001;
++          }
++          if (viewerResponseBuilder_ == null) {
++            result.viewerResponse_ = viewerResponse_;
++          } else {
++            result.viewerResponse_ = viewerResponseBuilder_.build();
+           }
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response returnMe = result;
+-          result = null;
+-          return returnMe;
++          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++            to_bitField0_ |= 0x00000002;
++          }
++          if (devModeResponseBuilder_ == null) {
++            result.devModeResponse_ = devModeResponse_;
++          } else {
++            result.devModeResponse_ = devModeResponseBuilder_.build();
++          }
++          result.bitField0_ = to_bitField0_;
++          onBuilt();
++          return result;
+         }
+         
+-        public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++        public Builder mergeFrom(com.google.protobuf.Message other) {
+           if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response) {
+             return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response)other);
+           } else {
+@@ -9369,23 +14101,35 @@ public final class RemoteMessageProto {
+           return this;
+         }
+         
++        public final boolean isInitialized() {
++          if (hasViewerResponse()) {
++            if (!getViewerResponse().isInitialized()) {
++              
++              return false;
++            }
++          }
++          return true;
++        }
++        
+         public Builder mergeFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++            com.google.protobuf.UnknownFieldSet.newBuilder(
+               this.getUnknownFields());
+           while (true) {
+             int tag = input.readTag();
+             switch (tag) {
+               case 0:
+                 this.setUnknownFields(unknownFields.build());
++                onChanged();
+                 return this;
+               default: {
+                 if (!parseUnknownField(input, unknownFields,
+                                        extensionRegistry, tag)) {
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 }
+                 break;
+@@ -9412,97 +14156,220 @@ public final class RemoteMessageProto {
+           }
+         }
+         
++        private int bitField0_;
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.ViewerResponse viewerResponse = 1;
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder> viewerResponseBuilder_;
+         public boolean hasViewerResponse() {
+-          return result.hasViewerResponse();
++          return ((bitField0_ & 0x00000001) == 0x00000001);
+         }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse getViewerResponse() {
+-          return result.getViewerResponse();
++          if (viewerResponseBuilder_ == null) {
++            return viewerResponse_;
++          } else {
++            return viewerResponseBuilder_.getMessage();
++          }
+         }
+         public Builder setViewerResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse value) {
+-          if (value == null) {
+-            throw new NullPointerException();
++          if (viewerResponseBuilder_ == null) {
++            if (value == null) {
++              throw new NullPointerException();
++            }
++            viewerResponse_ = value;
++            onChanged();
++          } else {
++            viewerResponseBuilder_.setMessage(value);
+           }
+-          result.hasViewerResponse = true;
+-          result.viewerResponse_ = value;
++          bitField0_ |= 0x00000001;
+           return this;
+         }
+-        public Builder setViewerResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder builderForValue) {
+-          result.hasViewerResponse = true;
+-          result.viewerResponse_ = builderForValue.build();
++        public Builder setViewerResponse(
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder builderForValue) {
++          if (viewerResponseBuilder_ == null) {
++            viewerResponse_ = builderForValue.build();
++            onChanged();
++          } else {
++            viewerResponseBuilder_.setMessage(builderForValue.build());
++          }
++          bitField0_ |= 0x00000001;
+           return this;
+         }
+         public Builder mergeViewerResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse value) {
+-          if (result.hasViewerResponse() &&
+-              result.viewerResponse_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance()) {
+-            result.viewerResponse_ =
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.newBuilder(result.viewerResponse_).mergeFrom(value).buildPartial();
++          if (viewerResponseBuilder_ == null) {
++            if (((bitField0_ & 0x00000001) == 0x00000001) &&
++                viewerResponse_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance()) {
++              viewerResponse_ =
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.newBuilder(viewerResponse_).mergeFrom(value).buildPartial();
++            } else {
++              viewerResponse_ = value;
++            }
++            onChanged();
+           } else {
+-            result.viewerResponse_ = value;
++            viewerResponseBuilder_.mergeFrom(value);
+           }
+-          result.hasViewerResponse = true;
++          bitField0_ |= 0x00000001;
+           return this;
+         }
+         public Builder clearViewerResponse() {
+-          result.hasViewerResponse = false;
+-          result.viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
++          if (viewerResponseBuilder_ == null) {
++            viewerResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.getDefaultInstance();
++            onChanged();
++          } else {
++            viewerResponseBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000001);
+           return this;
+         }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder getViewerResponseBuilder() {
++          bitField0_ |= 0x00000001;
++          onChanged();
++          return getViewerResponseFieldBuilder().getBuilder();
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder getViewerResponseOrBuilder() {
++          if (viewerResponseBuilder_ != null) {
++            return viewerResponseBuilder_.getMessageOrBuilder();
++          } else {
++            return viewerResponse_;
++          }
++        }
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder> 
++            getViewerResponseFieldBuilder() {
++          if (viewerResponseBuilder_ == null) {
++            viewerResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponseOrBuilder>(
++                    viewerResponse_,
++                    getParentForChildren(),
++                    isClean());
++            viewerResponse_ = null;
++          }
++          return viewerResponseBuilder_;
++        }
+         
+         // optional .com.google.gwt.dev.shell.remoteui.Message.Response.DevModeResponse devModeResponse = 2;
++        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder> devModeResponseBuilder_;
+         public boolean hasDevModeResponse() {
+-          return result.hasDevModeResponse();
++          return ((bitField0_ & 0x00000002) == 0x00000002);
+         }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse getDevModeResponse() {
+-          return result.getDevModeResponse();
++          if (devModeResponseBuilder_ == null) {
++            return devModeResponse_;
++          } else {
++            return devModeResponseBuilder_.getMessage();
++          }
+         }
+         public Builder setDevModeResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse value) {
+-          if (value == null) {
+-            throw new NullPointerException();
++          if (devModeResponseBuilder_ == null) {
++            if (value == null) {
++              throw new NullPointerException();
++            }
++            devModeResponse_ = value;
++            onChanged();
++          } else {
++            devModeResponseBuilder_.setMessage(value);
+           }
+-          result.hasDevModeResponse = true;
+-          result.devModeResponse_ = value;
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+-        public Builder setDevModeResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder builderForValue) {
+-          result.hasDevModeResponse = true;
+-          result.devModeResponse_ = builderForValue.build();
++        public Builder setDevModeResponse(
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder builderForValue) {
++          if (devModeResponseBuilder_ == null) {
++            devModeResponse_ = builderForValue.build();
++            onChanged();
++          } else {
++            devModeResponseBuilder_.setMessage(builderForValue.build());
++          }
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+         public Builder mergeDevModeResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse value) {
+-          if (result.hasDevModeResponse() &&
+-              result.devModeResponse_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance()) {
+-            result.devModeResponse_ =
+-              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.newBuilder(result.devModeResponse_).mergeFrom(value).buildPartial();
++          if (devModeResponseBuilder_ == null) {
++            if (((bitField0_ & 0x00000002) == 0x00000002) &&
++                devModeResponse_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance()) {
++              devModeResponse_ =
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.newBuilder(devModeResponse_).mergeFrom(value).buildPartial();
++            } else {
++              devModeResponse_ = value;
++            }
++            onChanged();
+           } else {
+-            result.devModeResponse_ = value;
++            devModeResponseBuilder_.mergeFrom(value);
+           }
+-          result.hasDevModeResponse = true;
++          bitField0_ |= 0x00000002;
+           return this;
+         }
+         public Builder clearDevModeResponse() {
+-          result.hasDevModeResponse = false;
+-          result.devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
++          if (devModeResponseBuilder_ == null) {
++            devModeResponse_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.getDefaultInstance();
++            onChanged();
++          } else {
++            devModeResponseBuilder_.clear();
++          }
++          bitField0_ = (bitField0_ & ~0x00000002);
+           return this;
+         }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder getDevModeResponseBuilder() {
++          bitField0_ |= 0x00000002;
++          onChanged();
++          return getDevModeResponseFieldBuilder().getBuilder();
++        }
++        public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder getDevModeResponseOrBuilder() {
++          if (devModeResponseBuilder_ != null) {
++            return devModeResponseBuilder_.getMessageOrBuilder();
++          } else {
++            return devModeResponse_;
++          }
++        }
++        private com.google.protobuf.SingleFieldBuilder<
++            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder> 
++            getDevModeResponseFieldBuilder() {
++          if (devModeResponseBuilder_ == null) {
++            devModeResponseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++                com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponseOrBuilder>(
++                    devModeResponse_,
++                    getParentForChildren(),
++                    isClean());
++            devModeResponse_ = null;
++          }
++          return devModeResponseBuilder_;
++        }
++        
++        // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Response)
+       }
+       
+       static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++        defaultInstance = new Response(true);
++        defaultInstance.initFields();
+       }
+       
+-      static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-      }
++      // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Response)
+     }
+     
++    public interface FailureOrBuilder
++        extends com.google.protobuf.MessageOrBuilder {
++      
++      // optional string message = 1;
++      boolean hasMessage();
++      String getMessage();
++      
++      // optional string stackTrace = 2;
++      boolean hasStackTrace();
++      String getStackTrace();
++    }
+     public static final class Failure extends
+-        com.google.gwt.dev.protobuf.GeneratedMessage {
++        com.google.protobuf.GeneratedMessage
++        implements FailureOrBuilder {
+       // Use Failure.newBuilder() to construct.
+-      private Failure() {}
++      private Failure(Builder builder) {
++        super(builder);
++      }
++      private Failure(boolean noInit) {}
+       
+-      private static final Failure defaultInstance = new Failure();
++      private static final Failure defaultInstance;
+       public static Failure getDefaultInstance() {
+         return defaultInstance;
+       }
+@@ -9511,41 +14378,102 @@ public final class RemoteMessageProto {
+         return defaultInstance;
+       }
+       
+-      public static final com.google.gwt.dev.protobuf.Descriptors.Descriptor
++      public static final com.google.protobuf.Descriptors.Descriptor
+           getDescriptor() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_descriptor;
+       }
+       
+-      protected com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
+           internalGetFieldAccessorTable() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_fieldAccessorTable;
+       }
+       
++      private int bitField0_;
+       // optional string message = 1;
+       public static final int MESSAGE_FIELD_NUMBER = 1;
+-      private boolean hasMessage;
+-      private java.lang.String message_ = "";
+-      public boolean hasMessage() { return hasMessage; }
+-      public java.lang.String getMessage() { return message_; }
++      private java.lang.Object message_;
++      public boolean hasMessage() {
++        return ((bitField0_ & 0x00000001) == 0x00000001);
++      }
++      public String getMessage() {
++        java.lang.Object ref = message_;
++        if (ref instanceof String) {
++          return (String) ref;
++        } else {
++          com.google.protobuf.ByteString bs = 
++              (com.google.protobuf.ByteString) ref;
++          String s = bs.toStringUtf8();
++          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++            message_ = s;
++          }
++          return s;
++        }
++      }
++      private com.google.protobuf.ByteString getMessageBytes() {
++        java.lang.Object ref = message_;
++        if (ref instanceof String) {
++          com.google.protobuf.ByteString b = 
++              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++          message_ = b;
++          return b;
++        } else {
++          return (com.google.protobuf.ByteString) ref;
++        }
++      }
+       
+       // optional string stackTrace = 2;
+       public static final int STACKTRACE_FIELD_NUMBER = 2;
+-      private boolean hasStackTrace;
+-      private java.lang.String stackTrace_ = "";
+-      public boolean hasStackTrace() { return hasStackTrace; }
+-      public java.lang.String getStackTrace() { return stackTrace_; }
++      private java.lang.Object stackTrace_;
++      public boolean hasStackTrace() {
++        return ((bitField0_ & 0x00000002) == 0x00000002);
++      }
++      public String getStackTrace() {
++        java.lang.Object ref = stackTrace_;
++        if (ref instanceof String) {
++          return (String) ref;
++        } else {
++          com.google.protobuf.ByteString bs = 
++              (com.google.protobuf.ByteString) ref;
++          String s = bs.toStringUtf8();
++          if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++            stackTrace_ = s;
++          }
++          return s;
++        }
++      }
++      private com.google.protobuf.ByteString getStackTraceBytes() {
++        java.lang.Object ref = stackTrace_;
++        if (ref instanceof String) {
++          com.google.protobuf.ByteString b = 
++              com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++          stackTrace_ = b;
++          return b;
++        } else {
++          return (com.google.protobuf.ByteString) ref;
++        }
++      }
+       
++      private void initFields() {
++        message_ = "";
++        stackTrace_ = "";
++      }
++      private byte memoizedIsInitialized = -1;
+       public final boolean isInitialized() {
++        byte isInitialized = memoizedIsInitialized;
++        if (isInitialized != -1) return isInitialized == 1;
++        
++        memoizedIsInitialized = 1;
+         return true;
+       }
+       
+-      public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++      public void writeTo(com.google.protobuf.CodedOutputStream output)
+                           throws java.io.IOException {
+-        if (hasMessage()) {
+-          output.writeString(1, getMessage());
++        getSerializedSize();
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          output.writeBytes(1, getMessageBytes());
+         }
+-        if (hasStackTrace()) {
+-          output.writeString(2, getStackTrace());
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          output.writeBytes(2, getStackTraceBytes());
+         }
+         getUnknownFields().writeTo(output);
+       }
+@@ -9556,39 +14484,46 @@ public final class RemoteMessageProto {
+         if (size != -1) return size;
+       
+         size = 0;
+-        if (hasMessage()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeStringSize(1, getMessage());
+-        }
+-        if (hasStackTrace()) {
+-          size += com.google.gwt.dev.protobuf.CodedOutputStream
+-            .computeStringSize(2, getStackTrace());
++        if (((bitField0_ & 0x00000001) == 0x00000001)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeBytesSize(1, getMessageBytes());
++        }
++        if (((bitField0_ & 0x00000002) == 0x00000002)) {
++          size += com.google.protobuf.CodedOutputStream
++            .computeBytesSize(2, getStackTraceBytes());
+         }
+         size += getUnknownFields().getSerializedSize();
+         memoizedSerializedSize = size;
+         return size;
+       }
+       
++      private static final long serialVersionUID = 0L;
++      @java.lang.Override
++      protected java.lang.Object writeReplace()
++          throws java.io.ObjectStreamException {
++        return super.writeReplace();
++      }
++      
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+-          com.google.gwt.dev.protobuf.ByteString data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ByteString data,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(byte[] data)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+           byte[] data,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++          throws com.google.protobuf.InvalidProtocolBufferException {
+         return newBuilder().mergeFrom(data, extensionRegistry)
+                  .buildParsed();
+       }
+@@ -9598,30 +14533,39 @@ public final class RemoteMessageProto {
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseDelimitedFrom(java.io.InputStream input)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input).buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseDelimitedFrom(
+           java.io.InputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+-        return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-                 .buildParsed();
++        Builder builder = newBuilder();
++        if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++          return builder.buildParsed();
++        } else {
++          return null;
++        }
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input)
++          com.google.protobuf.CodedInputStream input)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input).buildParsed();
+       }
+       public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure parseFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.CodedInputStream input,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+         return newBuilder().mergeFrom(input, extensionRegistry)
+                  .buildParsed();
+@@ -9634,37 +14578,56 @@ public final class RemoteMessageProto {
+       }
+       public Builder toBuilder() { return newBuilder(this); }
+       
++      @java.lang.Override
++      protected Builder newBuilderForType(
++          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++        Builder builder = new Builder(parent);
++        return builder;
++      }
+       public static final class Builder extends
+-          com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-        private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure result;
++          com.google.protobuf.GeneratedMessage.Builder<Builder>
++         implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder {
++        public static final com.google.protobuf.Descriptors.Descriptor
++            getDescriptor() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_descriptor;
++        }
+         
+-        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.newBuilder()
+-        private Builder() {}
++        protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++            internalGetFieldAccessorTable() {
++          return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_fieldAccessorTable;
++        }
+         
+-        private static Builder create() {
+-          Builder builder = new Builder();
+-          builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure();
+-          return builder;
++        // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.newBuilder()
++        private Builder() {
++          maybeForceBuilderInitialization();
+         }
+         
+-        protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure internalGetResult() {
+-          return result;
++        private Builder(BuilderParent parent) {
++          super(parent);
++          maybeForceBuilderInitialization();
++        }
++        private void maybeForceBuilderInitialization() {
++          if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++          }
++        }
++        private static Builder create() {
++          return new Builder();
+         }
+         
+         public Builder clear() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "Cannot call clear() after build().");
+-          }
+-          result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure();
++          super.clear();
++          message_ = "";
++          bitField0_ = (bitField0_ & ~0x00000001);
++          stackTrace_ = "";
++          bitField0_ = (bitField0_ & ~0x00000002);
+           return this;
+         }
+         
+         public Builder clone() {
+-          return create().mergeFrom(result);
++          return create().mergeFrom(buildPartial());
+         }
+         
+-        public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++        public com.google.protobuf.Descriptors.Descriptor
+             getDescriptorForType() {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDescriptor();
+         }
+@@ -9673,36 +14636,42 @@ public final class RemoteMessageProto {
+           return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
+         }
+         
+-        public boolean isInitialized() {
+-          return result.isInitialized();
+-        }
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure build() {
+-          if (result != null && !isInitialized()) {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(result);
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure buildParsed()
+-            throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-          if (!isInitialized()) {
++            throws com.google.protobuf.InvalidProtocolBufferException {
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure result = buildPartial();
++          if (!result.isInitialized()) {
+             throw newUninitializedMessageException(
+               result).asInvalidProtocolBufferException();
+           }
+-          return buildPartial();
++          return result;
+         }
+         
+         public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure buildPartial() {
+-          if (result == null) {
+-            throw new IllegalStateException(
+-              "build() has already been called on this Builder.");
+-          }
+-          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure returnMe = result;
+-          result = null;
+-          return returnMe;
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure(this);
++          int from_bitField0_ = bitField0_;
++          int to_bitField0_ = 0;
++          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++            to_bitField0_ |= 0x00000001;
++          }
++          result.message_ = message_;
++          if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++            to_bitField0_ |= 0x00000002;
++          }
++          result.stackTrace_ = stackTrace_;
++          result.bitField0_ = to_bitField0_;
++          onBuilt();
++          return result;
+         }
+         
+-        public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++        public Builder mergeFrom(com.google.protobuf.Message other) {
+           if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure) {
+             return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure)other);
+           } else {
+@@ -9723,164 +14692,277 @@ public final class RemoteMessageProto {
+           return this;
+         }
+         
++        public final boolean isInitialized() {
++          return true;
++        }
++        
+         public Builder mergeFrom(
+-            com.google.gwt.dev.protobuf.CodedInputStream input,
+-            com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++            com.google.protobuf.CodedInputStream input,
++            com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+             throws java.io.IOException {
+-          com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-            com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++          com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++            com.google.protobuf.UnknownFieldSet.newBuilder(
+               this.getUnknownFields());
+           while (true) {
+             int tag = input.readTag();
+             switch (tag) {
+               case 0:
+                 this.setUnknownFields(unknownFields.build());
++                onChanged();
+                 return this;
+               default: {
+                 if (!parseUnknownField(input, unknownFields,
+                                        extensionRegistry, tag)) {
+                   this.setUnknownFields(unknownFields.build());
++                  onChanged();
+                   return this;
+                 }
+                 break;
+               }
+               case 10: {
+-                setMessage(input.readString());
++                bitField0_ |= 0x00000001;
++                message_ = input.readBytes();
+                 break;
+               }
+               case 18: {
+-                setStackTrace(input.readString());
++                bitField0_ |= 0x00000002;
++                stackTrace_ = input.readBytes();
+                 break;
+               }
+             }
+           }
+         }
+         
++        private int bitField0_;
+         
+         // optional string message = 1;
++        private java.lang.Object message_ = "";
+         public boolean hasMessage() {
+-          return result.hasMessage();
++          return ((bitField0_ & 0x00000001) == 0x00000001);
+         }
+-        public java.lang.String getMessage() {
+-          return result.getMessage();
++        public String getMessage() {
++          java.lang.Object ref = message_;
++          if (!(ref instanceof String)) {
++            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++            message_ = s;
++            return s;
++          } else {
++            return (String) ref;
++          }
+         }
+-        public Builder setMessage(java.lang.String value) {
++        public Builder setMessage(String value) {
+           if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasMessage = true;
+-          result.message_ = value;
++  bitField0_ |= 0x00000001;
++          message_ = value;
++          onChanged();
+           return this;
+         }
+         public Builder clearMessage() {
+-          result.hasMessage = false;
+-          result.message_ = getDefaultInstance().getMessage();
++          bitField0_ = (bitField0_ & ~0x00000001);
++          message_ = getDefaultInstance().getMessage();
++          onChanged();
+           return this;
+         }
++        void setMessage(com.google.protobuf.ByteString value) {
++          bitField0_ |= 0x00000001;
++          message_ = value;
++          onChanged();
++        }
+         
+         // optional string stackTrace = 2;
++        private java.lang.Object stackTrace_ = "";
+         public boolean hasStackTrace() {
+-          return result.hasStackTrace();
++          return ((bitField0_ & 0x00000002) == 0x00000002);
+         }
+-        public java.lang.String getStackTrace() {
+-          return result.getStackTrace();
++        public String getStackTrace() {
++          java.lang.Object ref = stackTrace_;
++          if (!(ref instanceof String)) {
++            String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++            stackTrace_ = s;
++            return s;
++          } else {
++            return (String) ref;
++          }
+         }
+-        public Builder setStackTrace(java.lang.String value) {
++        public Builder setStackTrace(String value) {
+           if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasStackTrace = true;
+-          result.stackTrace_ = value;
++  bitField0_ |= 0x00000002;
++          stackTrace_ = value;
++          onChanged();
+           return this;
+         }
+         public Builder clearStackTrace() {
+-          result.hasStackTrace = false;
+-          result.stackTrace_ = getDefaultInstance().getStackTrace();
++          bitField0_ = (bitField0_ & ~0x00000002);
++          stackTrace_ = getDefaultInstance().getStackTrace();
++          onChanged();
+           return this;
+         }
++        void setStackTrace(com.google.protobuf.ByteString value) {
++          bitField0_ |= 0x00000002;
++          stackTrace_ = value;
++          onChanged();
++        }
++        
++        // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message.Failure)
+       }
+       
+       static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++        defaultInstance = new Failure(true);
++        defaultInstance.initFields();
+       }
+       
+-      static {
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-      }
++      // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message.Failure)
+     }
+     
++    private int bitField0_;
+     // optional string protocolVersion = 1;
+     public static final int PROTOCOLVERSION_FIELD_NUMBER = 1;
+-    private boolean hasProtocolVersion;
+-    private java.lang.String protocolVersion_ = "";
+-    public boolean hasProtocolVersion() { return hasProtocolVersion; }
+-    public java.lang.String getProtocolVersion() { return protocolVersion_; }
++    private java.lang.Object protocolVersion_;
++    public boolean hasProtocolVersion() {
++      return ((bitField0_ & 0x00000001) == 0x00000001);
++    }
++    public String getProtocolVersion() {
++      java.lang.Object ref = protocolVersion_;
++      if (ref instanceof String) {
++        return (String) ref;
++      } else {
++        com.google.protobuf.ByteString bs = 
++            (com.google.protobuf.ByteString) ref;
++        String s = bs.toStringUtf8();
++        if (com.google.protobuf.Internal.isValidUtf8(bs)) {
++          protocolVersion_ = s;
++        }
++        return s;
++      }
++    }
++    private com.google.protobuf.ByteString getProtocolVersionBytes() {
++      java.lang.Object ref = protocolVersion_;
++      if (ref instanceof String) {
++        com.google.protobuf.ByteString b = 
++            com.google.protobuf.ByteString.copyFromUtf8((String) ref);
++        protocolVersion_ = b;
++        return b;
++      } else {
++        return (com.google.protobuf.ByteString) ref;
++      }
++    }
+     
+     // optional .com.google.gwt.dev.shell.remoteui.Message.MessageType messageType = 2;
+     public static final int MESSAGETYPE_FIELD_NUMBER = 2;
+-    private boolean hasMessageType;
+-    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
+-    public boolean hasMessageType() { return hasMessageType; }
+-    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType getMessageType() { return messageType_; }
++    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType messageType_;
++    public boolean hasMessageType() {
++      return ((bitField0_ & 0x00000002) == 0x00000002);
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType getMessageType() {
++      return messageType_;
++    }
+     
+     // required uint32 messageId = 3;
+     public static final int MESSAGEID_FIELD_NUMBER = 3;
+-    private boolean hasMessageId;
+-    private int messageId_ = 0;
+-    public boolean hasMessageId() { return hasMessageId; }
+-    public int getMessageId() { return messageId_; }
++    private int messageId_;
++    public boolean hasMessageId() {
++      return ((bitField0_ & 0x00000004) == 0x00000004);
++    }
++    public int getMessageId() {
++      return messageId_;
++    }
+     
+     // optional .com.google.gwt.dev.shell.remoteui.Message.Request request = 4;
+     public static final int REQUEST_FIELD_NUMBER = 4;
+-    private boolean hasRequest;
+-    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
+-    public boolean hasRequest() { return hasRequest; }
+-    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request getRequest() { return request_; }
++    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request request_;
++    public boolean hasRequest() {
++      return ((bitField0_ & 0x00000008) == 0x00000008);
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request getRequest() {
++      return request_;
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder getRequestOrBuilder() {
++      return request_;
++    }
+     
+     // optional .com.google.gwt.dev.shell.remoteui.Message.Response response = 5;
+     public static final int RESPONSE_FIELD_NUMBER = 5;
+-    private boolean hasResponse;
+-    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
+-    public boolean hasResponse() { return hasResponse; }
+-    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response getResponse() { return response_; }
++    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response response_;
++    public boolean hasResponse() {
++      return ((bitField0_ & 0x00000010) == 0x00000010);
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response getResponse() {
++      return response_;
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder getResponseOrBuilder() {
++      return response_;
++    }
+     
+     // optional .com.google.gwt.dev.shell.remoteui.Message.Failure failure = 6;
+     public static final int FAILURE_FIELD_NUMBER = 6;
+-    private boolean hasFailure;
+-    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
+-    public boolean hasFailure() { return hasFailure; }
+-    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure getFailure() { return failure_; }
++    private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure failure_;
++    public boolean hasFailure() {
++      return ((bitField0_ & 0x00000020) == 0x00000020);
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure getFailure() {
++      return failure_;
++    }
++    public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder getFailureOrBuilder() {
++      return failure_;
++    }
+     
++    private void initFields() {
++      protocolVersion_ = "";
++      messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
++      messageId_ = 0;
++      request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
++      response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
++      failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
++    }
++    private byte memoizedIsInitialized = -1;
+     public final boolean isInitialized() {
+-      if (!hasMessageId) return false;
++      byte isInitialized = memoizedIsInitialized;
++      if (isInitialized != -1) return isInitialized == 1;
++      
++      if (!hasMessageId()) {
++        memoizedIsInitialized = 0;
++        return false;
++      }
+       if (hasRequest()) {
+-        if (!getRequest().isInitialized()) return false;
++        if (!getRequest().isInitialized()) {
++          memoizedIsInitialized = 0;
++          return false;
++        }
+       }
+       if (hasResponse()) {
+-        if (!getResponse().isInitialized()) return false;
++        if (!getResponse().isInitialized()) {
++          memoizedIsInitialized = 0;
++          return false;
++        }
+       }
++      memoizedIsInitialized = 1;
+       return true;
+     }
+     
+-    public void writeTo(com.google.gwt.dev.protobuf.CodedOutputStream output)
++    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                         throws java.io.IOException {
+-      if (hasProtocolVersion()) {
+-        output.writeString(1, getProtocolVersion());
++      getSerializedSize();
++      if (((bitField0_ & 0x00000001) == 0x00000001)) {
++        output.writeBytes(1, getProtocolVersionBytes());
+       }
+-      if (hasMessageType()) {
+-        output.writeEnum(2, getMessageType().getNumber());
++      if (((bitField0_ & 0x00000002) == 0x00000002)) {
++        output.writeEnum(2, messageType_.getNumber());
+       }
+-      if (hasMessageId()) {
+-        output.writeUInt32(3, getMessageId());
++      if (((bitField0_ & 0x00000004) == 0x00000004)) {
++        output.writeUInt32(3, messageId_);
+       }
+-      if (hasRequest()) {
+-        output.writeMessage(4, getRequest());
++      if (((bitField0_ & 0x00000008) == 0x00000008)) {
++        output.writeMessage(4, request_);
+       }
+-      if (hasResponse()) {
+-        output.writeMessage(5, getResponse());
++      if (((bitField0_ & 0x00000010) == 0x00000010)) {
++        output.writeMessage(5, response_);
+       }
+-      if (hasFailure()) {
+-        output.writeMessage(6, getFailure());
++      if (((bitField0_ & 0x00000020) == 0x00000020)) {
++        output.writeMessage(6, failure_);
+       }
+       getUnknownFields().writeTo(output);
+     }
+@@ -9891,55 +14973,62 @@ public final class RemoteMessageProto {
+       if (size != -1) return size;
+     
+       size = 0;
+-      if (hasProtocolVersion()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeStringSize(1, getProtocolVersion());
+-      }
+-      if (hasMessageType()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeEnumSize(2, getMessageType().getNumber());
+-      }
+-      if (hasMessageId()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeUInt32Size(3, getMessageId());
+-      }
+-      if (hasRequest()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeMessageSize(4, getRequest());
+-      }
+-      if (hasResponse()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeMessageSize(5, getResponse());
+-      }
+-      if (hasFailure()) {
+-        size += com.google.gwt.dev.protobuf.CodedOutputStream
+-          .computeMessageSize(6, getFailure());
++      if (((bitField0_ & 0x00000001) == 0x00000001)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeBytesSize(1, getProtocolVersionBytes());
++      }
++      if (((bitField0_ & 0x00000002) == 0x00000002)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeEnumSize(2, messageType_.getNumber());
++      }
++      if (((bitField0_ & 0x00000004) == 0x00000004)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeUInt32Size(3, messageId_);
++      }
++      if (((bitField0_ & 0x00000008) == 0x00000008)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeMessageSize(4, request_);
++      }
++      if (((bitField0_ & 0x00000010) == 0x00000010)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeMessageSize(5, response_);
++      }
++      if (((bitField0_ & 0x00000020) == 0x00000020)) {
++        size += com.google.protobuf.CodedOutputStream
++          .computeMessageSize(6, failure_);
+       }
+       size += getUnknownFields().getSerializedSize();
+       memoizedSerializedSize = size;
+       return size;
+     }
+     
++    private static final long serialVersionUID = 0L;
++    @java.lang.Override
++    protected java.lang.Object writeReplace()
++        throws java.io.ObjectStreamException {
++      return super.writeReplace();
++    }
++    
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+-        com.google.gwt.dev.protobuf.ByteString data)
+-        throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++        com.google.protobuf.ByteString data)
++        throws com.google.protobuf.InvalidProtocolBufferException {
+       return newBuilder().mergeFrom(data).buildParsed();
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+-        com.google.gwt.dev.protobuf.ByteString data,
+-        com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-        throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++        com.google.protobuf.ByteString data,
++        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++        throws com.google.protobuf.InvalidProtocolBufferException {
+       return newBuilder().mergeFrom(data, extensionRegistry)
+                .buildParsed();
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(byte[] data)
+-        throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++        throws com.google.protobuf.InvalidProtocolBufferException {
+       return newBuilder().mergeFrom(data).buildParsed();
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+         byte[] data,
+-        com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
+-        throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
++        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
++        throws com.google.protobuf.InvalidProtocolBufferException {
+       return newBuilder().mergeFrom(data, extensionRegistry)
+                .buildParsed();
+     }
+@@ -9949,30 +15038,39 @@ public final class RemoteMessageProto {
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+         java.io.InputStream input,
+-        com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+         throws java.io.IOException {
+       return newBuilder().mergeFrom(input, extensionRegistry)
+                .buildParsed();
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseDelimitedFrom(java.io.InputStream input)
+         throws java.io.IOException {
+-      return newBuilder().mergeDelimitedFrom(input).buildParsed();
++      Builder builder = newBuilder();
++      if (builder.mergeDelimitedFrom(input)) {
++        return builder.buildParsed();
++      } else {
++        return null;
++      }
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseDelimitedFrom(
+         java.io.InputStream input,
+-        com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+         throws java.io.IOException {
+-      return newBuilder().mergeDelimitedFrom(input, extensionRegistry)
+-               .buildParsed();
++      Builder builder = newBuilder();
++      if (builder.mergeDelimitedFrom(input, extensionRegistry)) {
++        return builder.buildParsed();
++      } else {
++        return null;
++      }
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+-        com.google.gwt.dev.protobuf.CodedInputStream input)
++        com.google.protobuf.CodedInputStream input)
+         throws java.io.IOException {
+       return newBuilder().mergeFrom(input).buildParsed();
+     }
+     public static com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message parseFrom(
+-        com.google.gwt.dev.protobuf.CodedInputStream input,
+-        com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++        com.google.protobuf.CodedInputStream input,
++        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+         throws java.io.IOException {
+       return newBuilder().mergeFrom(input, extensionRegistry)
+                .buildParsed();
+@@ -9985,37 +15083,79 @@ public final class RemoteMessageProto {
+     }
+     public Builder toBuilder() { return newBuilder(this); }
+     
++    @java.lang.Override
++    protected Builder newBuilderForType(
++        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
++      Builder builder = new Builder(parent);
++      return builder;
++    }
+     public static final class Builder extends
+-        com.google.gwt.dev.protobuf.GeneratedMessage.Builder<Builder> {
+-      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message result;
++        com.google.protobuf.GeneratedMessage.Builder<Builder>
++       implements com.google.gwt.dev.shell.remoteui.RemoteMessageProto.MessageOrBuilder {
++      public static final com.google.protobuf.Descriptors.Descriptor
++          getDescriptor() {
++        return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor;
++      }
+       
+-      // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.newBuilder()
+-      private Builder() {}
++      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
++          internalGetFieldAccessorTable() {
++        return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internal_static_com_google_gwt_dev_shell_remoteui_Message_fieldAccessorTable;
++      }
+       
+-      private static Builder create() {
+-        Builder builder = new Builder();
+-        builder.result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message();
+-        return builder;
++      // Construct using com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.newBuilder()
++      private Builder() {
++        maybeForceBuilderInitialization();
+       }
+       
+-      protected com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message internalGetResult() {
+-        return result;
++      private Builder(BuilderParent parent) {
++        super(parent);
++        maybeForceBuilderInitialization();
++      }
++      private void maybeForceBuilderInitialization() {
++        if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) {
++          getRequestFieldBuilder();
++          getResponseFieldBuilder();
++          getFailureFieldBuilder();
++        }
++      }
++      private static Builder create() {
++        return new Builder();
+       }
+       
+       public Builder clear() {
+-        if (result == null) {
+-          throw new IllegalStateException(
+-            "Cannot call clear() after build().");
++        super.clear();
++        protocolVersion_ = "";
++        bitField0_ = (bitField0_ & ~0x00000001);
++        messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
++        bitField0_ = (bitField0_ & ~0x00000002);
++        messageId_ = 0;
++        bitField0_ = (bitField0_ & ~0x00000004);
++        if (requestBuilder_ == null) {
++          request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
++        } else {
++          requestBuilder_.clear();
++        }
++        bitField0_ = (bitField0_ & ~0x00000008);
++        if (responseBuilder_ == null) {
++          response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
++        } else {
++          responseBuilder_.clear();
++        }
++        bitField0_ = (bitField0_ & ~0x00000010);
++        if (failureBuilder_ == null) {
++          failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
++        } else {
++          failureBuilder_.clear();
+         }
+-        result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message();
++        bitField0_ = (bitField0_ & ~0x00000020);
+         return this;
+       }
+       
+       public Builder clone() {
+-        return create().mergeFrom(result);
++        return create().mergeFrom(buildPartial());
+       }
+       
+-      public com.google.gwt.dev.protobuf.Descriptors.Descriptor
++      public com.google.protobuf.Descriptors.Descriptor
+           getDescriptorForType() {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.getDescriptor();
+       }
+@@ -10024,36 +15164,70 @@ public final class RemoteMessageProto {
+         return com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.getDefaultInstance();
+       }
+       
+-      public boolean isInitialized() {
+-        return result.isInitialized();
+-      }
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message build() {
+-        if (result != null && !isInitialized()) {
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message result = buildPartial();
++        if (!result.isInitialized()) {
+           throw newUninitializedMessageException(result);
+         }
+-        return buildPartial();
++        return result;
+       }
+       
+       private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message buildParsed()
+-          throws com.google.gwt.dev.protobuf.InvalidProtocolBufferException {
+-        if (!isInitialized()) {
++          throws com.google.protobuf.InvalidProtocolBufferException {
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message result = buildPartial();
++        if (!result.isInitialized()) {
+           throw newUninitializedMessageException(
+             result).asInvalidProtocolBufferException();
+         }
+-        return buildPartial();
++        return result;
+       }
+       
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message buildPartial() {
+-        if (result == null) {
+-          throw new IllegalStateException(
+-            "build() has already been called on this Builder.");
++        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message result = new com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message(this);
++        int from_bitField0_ = bitField0_;
++        int to_bitField0_ = 0;
++        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
++          to_bitField0_ |= 0x00000001;
++        }
++        result.protocolVersion_ = protocolVersion_;
++        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
++          to_bitField0_ |= 0x00000002;
++        }
++        result.messageType_ = messageType_;
++        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
++          to_bitField0_ |= 0x00000004;
++        }
++        result.messageId_ = messageId_;
++        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
++          to_bitField0_ |= 0x00000008;
++        }
++        if (requestBuilder_ == null) {
++          result.request_ = request_;
++        } else {
++          result.request_ = requestBuilder_.build();
++        }
++        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
++          to_bitField0_ |= 0x00000010;
++        }
++        if (responseBuilder_ == null) {
++          result.response_ = response_;
++        } else {
++          result.response_ = responseBuilder_.build();
++        }
++        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
++          to_bitField0_ |= 0x00000020;
++        }
++        if (failureBuilder_ == null) {
++          result.failure_ = failure_;
++        } else {
++          result.failure_ = failureBuilder_.build();
+         }
+-        com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message returnMe = result;
+-        result = null;
+-        return returnMe;
++        result.bitField0_ = to_bitField0_;
++        onBuilt();
++        return result;
+       }
+       
+-      public Builder mergeFrom(com.google.gwt.dev.protobuf.Message other) {
++      public Builder mergeFrom(com.google.protobuf.Message other) {
+         if (other instanceof com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message) {
+           return mergeFrom((com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message)other);
+         } else {
+@@ -10086,29 +15260,52 @@ public final class RemoteMessageProto {
+         return this;
+       }
+       
++      public final boolean isInitialized() {
++        if (!hasMessageId()) {
++          
++          return false;
++        }
++        if (hasRequest()) {
++          if (!getRequest().isInitialized()) {
++            
++            return false;
++          }
++        }
++        if (hasResponse()) {
++          if (!getResponse().isInitialized()) {
++            
++            return false;
++          }
++        }
++        return true;
++      }
++      
+       public Builder mergeFrom(
+-          com.google.gwt.dev.protobuf.CodedInputStream input,
+-          com.google.gwt.dev.protobuf.ExtensionRegistryLite extensionRegistry)
++          com.google.protobuf.CodedInputStream input,
++          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+           throws java.io.IOException {
+-        com.google.gwt.dev.protobuf.UnknownFieldSet.Builder unknownFields =
+-          com.google.gwt.dev.protobuf.UnknownFieldSet.newBuilder(
++        com.google.protobuf.UnknownFieldSet.Builder unknownFields =
++          com.google.protobuf.UnknownFieldSet.newBuilder(
+             this.getUnknownFields());
+         while (true) {
+           int tag = input.readTag();
+           switch (tag) {
+             case 0:
+               this.setUnknownFields(unknownFields.build());
++              onChanged();
+               return this;
+             default: {
+               if (!parseUnknownField(input, unknownFields,
+                                      extensionRegistry, tag)) {
+                 this.setUnknownFields(unknownFields.build());
++                onChanged();
+                 return this;
+               }
+               break;
+             }
+             case 10: {
+-              setProtocolVersion(input.readString());
++              bitField0_ |= 0x00000001;
++              protocolVersion_ = input.readBytes();
+               break;
+             }
+             case 16: {
+@@ -10117,12 +15314,14 @@ public final class RemoteMessageProto {
+               if (value == null) {
+                 unknownFields.mergeVarintField(2, rawValue);
+               } else {
+-                setMessageType(value);
++                bitField0_ |= 0x00000002;
++                messageType_ = value;
+               }
+               break;
+             }
+             case 24: {
+-              setMessageId(input.readUInt32());
++              bitField0_ |= 0x00000004;
++              messageId_ = input.readUInt32();
+               break;
+             }
+             case 34: {
+@@ -10156,334 +15355,516 @@ public final class RemoteMessageProto {
+         }
+       }
+       
++      private int bitField0_;
+       
+       // optional string protocolVersion = 1;
++      private java.lang.Object protocolVersion_ = "";
+       public boolean hasProtocolVersion() {
+-        return result.hasProtocolVersion();
++        return ((bitField0_ & 0x00000001) == 0x00000001);
+       }
+-      public java.lang.String getProtocolVersion() {
+-        return result.getProtocolVersion();
++      public String getProtocolVersion() {
++        java.lang.Object ref = protocolVersion_;
++        if (!(ref instanceof String)) {
++          String s = ((com.google.protobuf.ByteString) ref).toStringUtf8();
++          protocolVersion_ = s;
++          return s;
++        } else {
++          return (String) ref;
++        }
+       }
+-      public Builder setProtocolVersion(java.lang.String value) {
++      public Builder setProtocolVersion(String value) {
+         if (value == null) {
+     throw new NullPointerException();
+   }
+-  result.hasProtocolVersion = true;
+-        result.protocolVersion_ = value;
++  bitField0_ |= 0x00000001;
++        protocolVersion_ = value;
++        onChanged();
+         return this;
+       }
+       public Builder clearProtocolVersion() {
+-        result.hasProtocolVersion = false;
+-        result.protocolVersion_ = getDefaultInstance().getProtocolVersion();
++        bitField0_ = (bitField0_ & ~0x00000001);
++        protocolVersion_ = getDefaultInstance().getProtocolVersion();
++        onChanged();
+         return this;
+       }
++      void setProtocolVersion(com.google.protobuf.ByteString value) {
++        bitField0_ |= 0x00000001;
++        protocolVersion_ = value;
++        onChanged();
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.MessageType messageType = 2;
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
+       public boolean hasMessageType() {
+-        return result.hasMessageType();
++        return ((bitField0_ & 0x00000002) == 0x00000002);
+       }
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType getMessageType() {
+-        return result.getMessageType();
++        return messageType_;
+       }
+       public Builder setMessageType(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType value) {
+         if (value == null) {
+           throw new NullPointerException();
+         }
+-        result.hasMessageType = true;
+-        result.messageType_ = value;
++        bitField0_ |= 0x00000002;
++        messageType_ = value;
++        onChanged();
+         return this;
+       }
+       public Builder clearMessageType() {
+-        result.hasMessageType = false;
+-        result.messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
++        bitField0_ = (bitField0_ & ~0x00000002);
++        messageType_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.MessageType.REQUEST;
++        onChanged();
+         return this;
+       }
+       
+       // required uint32 messageId = 3;
++      private int messageId_ ;
+       public boolean hasMessageId() {
+-        return result.hasMessageId();
++        return ((bitField0_ & 0x00000004) == 0x00000004);
+       }
+       public int getMessageId() {
+-        return result.getMessageId();
++        return messageId_;
+       }
+       public Builder setMessageId(int value) {
+-        result.hasMessageId = true;
+-        result.messageId_ = value;
++        bitField0_ |= 0x00000004;
++        messageId_ = value;
++        onChanged();
+         return this;
+       }
+       public Builder clearMessageId() {
+-        result.hasMessageId = false;
+-        result.messageId_ = 0;
++        bitField0_ = (bitField0_ & ~0x00000004);
++        messageId_ = 0;
++        onChanged();
+         return this;
+       }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Request request = 4;
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder> requestBuilder_;
+       public boolean hasRequest() {
+-        return result.hasRequest();
++        return ((bitField0_ & 0x00000008) == 0x00000008);
+       }
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request getRequest() {
+-        return result.getRequest();
++        if (requestBuilder_ == null) {
++          return request_;
++        } else {
++          return requestBuilder_.getMessage();
++        }
+       }
+       public Builder setRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request value) {
+-        if (value == null) {
+-          throw new NullPointerException();
++        if (requestBuilder_ == null) {
++          if (value == null) {
++            throw new NullPointerException();
++          }
++          request_ = value;
++          onChanged();
++        } else {
++          requestBuilder_.setMessage(value);
+         }
+-        result.hasRequest = true;
+-        result.request_ = value;
++        bitField0_ |= 0x00000008;
+         return this;
+       }
+-      public Builder setRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder builderForValue) {
+-        result.hasRequest = true;
+-        result.request_ = builderForValue.build();
++      public Builder setRequest(
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder builderForValue) {
++        if (requestBuilder_ == null) {
++          request_ = builderForValue.build();
++          onChanged();
++        } else {
++          requestBuilder_.setMessage(builderForValue.build());
++        }
++        bitField0_ |= 0x00000008;
+         return this;
+       }
+       public Builder mergeRequest(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request value) {
+-        if (result.hasRequest() &&
+-            result.request_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance()) {
+-          result.request_ =
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.newBuilder(result.request_).mergeFrom(value).buildPartial();
++        if (requestBuilder_ == null) {
++          if (((bitField0_ & 0x00000008) == 0x00000008) &&
++              request_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance()) {
++            request_ =
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.newBuilder(request_).mergeFrom(value).buildPartial();
++          } else {
++            request_ = value;
++          }
++          onChanged();
+         } else {
+-          result.request_ = value;
++          requestBuilder_.mergeFrom(value);
+         }
+-        result.hasRequest = true;
++        bitField0_ |= 0x00000008;
+         return this;
+       }
+       public Builder clearRequest() {
+-        result.hasRequest = false;
+-        result.request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
++        if (requestBuilder_ == null) {
++          request_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.getDefaultInstance();
++          onChanged();
++        } else {
++          requestBuilder_.clear();
++        }
++        bitField0_ = (bitField0_ & ~0x00000008);
+         return this;
+       }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder getRequestBuilder() {
++        bitField0_ |= 0x00000008;
++        onChanged();
++        return getRequestFieldBuilder().getBuilder();
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder getRequestOrBuilder() {
++        if (requestBuilder_ != null) {
++          return requestBuilder_.getMessageOrBuilder();
++        } else {
++          return request_;
++        }
++      }
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder> 
++          getRequestFieldBuilder() {
++        if (requestBuilder_ == null) {
++          requestBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.RequestOrBuilder>(
++                  request_,
++                  getParentForChildren(),
++                  isClean());
++          request_ = null;
++        }
++        return requestBuilder_;
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Response response = 5;
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder> responseBuilder_;
+       public boolean hasResponse() {
+-        return result.hasResponse();
++        return ((bitField0_ & 0x00000010) == 0x00000010);
+       }
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response getResponse() {
+-        return result.getResponse();
++        if (responseBuilder_ == null) {
++          return response_;
++        } else {
++          return responseBuilder_.getMessage();
++        }
+       }
+       public Builder setResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response value) {
+-        if (value == null) {
+-          throw new NullPointerException();
++        if (responseBuilder_ == null) {
++          if (value == null) {
++            throw new NullPointerException();
++          }
++          response_ = value;
++          onChanged();
++        } else {
++          responseBuilder_.setMessage(value);
+         }
+-        result.hasResponse = true;
+-        result.response_ = value;
++        bitField0_ |= 0x00000010;
+         return this;
+       }
+-      public Builder setResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder builderForValue) {
+-        result.hasResponse = true;
+-        result.response_ = builderForValue.build();
++      public Builder setResponse(
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder builderForValue) {
++        if (responseBuilder_ == null) {
++          response_ = builderForValue.build();
++          onChanged();
++        } else {
++          responseBuilder_.setMessage(builderForValue.build());
++        }
++        bitField0_ |= 0x00000010;
+         return this;
+       }
+       public Builder mergeResponse(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response value) {
+-        if (result.hasResponse() &&
+-            result.response_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance()) {
+-          result.response_ =
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.newBuilder(result.response_).mergeFrom(value).buildPartial();
++        if (responseBuilder_ == null) {
++          if (((bitField0_ & 0x00000010) == 0x00000010) &&
++              response_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance()) {
++            response_ =
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.newBuilder(response_).mergeFrom(value).buildPartial();
++          } else {
++            response_ = value;
++          }
++          onChanged();
+         } else {
+-          result.response_ = value;
++          responseBuilder_.mergeFrom(value);
+         }
+-        result.hasResponse = true;
++        bitField0_ |= 0x00000010;
+         return this;
+       }
+       public Builder clearResponse() {
+-        result.hasResponse = false;
+-        result.response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
++        if (responseBuilder_ == null) {
++          response_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.getDefaultInstance();
++          onChanged();
++        } else {
++          responseBuilder_.clear();
++        }
++        bitField0_ = (bitField0_ & ~0x00000010);
+         return this;
+       }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder getResponseBuilder() {
++        bitField0_ |= 0x00000010;
++        onChanged();
++        return getResponseFieldBuilder().getBuilder();
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder getResponseOrBuilder() {
++        if (responseBuilder_ != null) {
++          return responseBuilder_.getMessageOrBuilder();
++        } else {
++          return response_;
++        }
++      }
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder> 
++          getResponseFieldBuilder() {
++        if (responseBuilder_ == null) {
++          responseBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.ResponseOrBuilder>(
++                  response_,
++                  getParentForChildren(),
++                  isClean());
++          response_ = null;
++        }
++        return responseBuilder_;
++      }
+       
+       // optional .com.google.gwt.dev.shell.remoteui.Message.Failure failure = 6;
++      private com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder> failureBuilder_;
+       public boolean hasFailure() {
+-        return result.hasFailure();
++        return ((bitField0_ & 0x00000020) == 0x00000020);
+       }
+       public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure getFailure() {
+-        return result.getFailure();
++        if (failureBuilder_ == null) {
++          return failure_;
++        } else {
++          return failureBuilder_.getMessage();
++        }
+       }
+       public Builder setFailure(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure value) {
+-        if (value == null) {
+-          throw new NullPointerException();
++        if (failureBuilder_ == null) {
++          if (value == null) {
++            throw new NullPointerException();
++          }
++          failure_ = value;
++          onChanged();
++        } else {
++          failureBuilder_.setMessage(value);
+         }
+-        result.hasFailure = true;
+-        result.failure_ = value;
++        bitField0_ |= 0x00000020;
+         return this;
+       }
+-      public Builder setFailure(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder builderForValue) {
+-        result.hasFailure = true;
+-        result.failure_ = builderForValue.build();
++      public Builder setFailure(
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder builderForValue) {
++        if (failureBuilder_ == null) {
++          failure_ = builderForValue.build();
++          onChanged();
++        } else {
++          failureBuilder_.setMessage(builderForValue.build());
++        }
++        bitField0_ |= 0x00000020;
+         return this;
+       }
+       public Builder mergeFailure(com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure value) {
+-        if (result.hasFailure() &&
+-            result.failure_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance()) {
+-          result.failure_ =
+-            com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.newBuilder(result.failure_).mergeFrom(value).buildPartial();
++        if (failureBuilder_ == null) {
++          if (((bitField0_ & 0x00000020) == 0x00000020) &&
++              failure_ != com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance()) {
++            failure_ =
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.newBuilder(failure_).mergeFrom(value).buildPartial();
++          } else {
++            failure_ = value;
++          }
++          onChanged();
+         } else {
+-          result.failure_ = value;
++          failureBuilder_.mergeFrom(value);
+         }
+-        result.hasFailure = true;
++        bitField0_ |= 0x00000020;
+         return this;
+       }
+       public Builder clearFailure() {
+-        result.hasFailure = false;
+-        result.failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
++        if (failureBuilder_ == null) {
++          failure_ = com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.getDefaultInstance();
++          onChanged();
++        } else {
++          failureBuilder_.clear();
++        }
++        bitField0_ = (bitField0_ & ~0x00000020);
+         return this;
+       }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder getFailureBuilder() {
++        bitField0_ |= 0x00000020;
++        onChanged();
++        return getFailureFieldBuilder().getBuilder();
++      }
++      public com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder getFailureOrBuilder() {
++        if (failureBuilder_ != null) {
++          return failureBuilder_.getMessageOrBuilder();
++        } else {
++          return failure_;
++        }
++      }
++      private com.google.protobuf.SingleFieldBuilder<
++          com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder> 
++          getFailureFieldBuilder() {
++        if (failureBuilder_ == null) {
++          failureBuilder_ = new com.google.protobuf.SingleFieldBuilder<
++              com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.Builder, com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.FailureOrBuilder>(
++                  failure_,
++                  getParentForChildren(),
++                  isClean());
++          failure_ = null;
++        }
++        return failureBuilder_;
++      }
++      
++      // @@protoc_insertion_point(builder_scope:com.google.gwt.dev.shell.remoteui.Message)
+     }
+     
+     static {
+-      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.getDescriptor();
++      defaultInstance = new Message(true);
++      defaultInstance.initFields();
+     }
+     
+-    static {
+-      com.google.gwt.dev.shell.remoteui.RemoteMessageProto.internalForceInit();
+-    }
++    // @@protoc_insertion_point(class_scope:com.google.gwt.dev.shell.remoteui.Message)
+   }
+   
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_fieldAccessorTable;
+-  private static com.google.gwt.dev.protobuf.Descriptors.Descriptor
++  private static com.google.protobuf.Descriptors.Descriptor
+     internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_descriptor;
+   private static
+-    com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable
++    com.google.protobuf.GeneratedMessage.FieldAccessorTable
+       internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_fieldAccessorTable;
+   
+-  public static com.google.gwt.dev.protobuf.Descriptors.FileDescriptor
++  public static com.google.protobuf.Descriptors.FileDescriptor
+       getDescriptor() {
+     return descriptor;
+   }
+-  private static com.google.gwt.dev.protobuf.Descriptors.FileDescriptor
++  private static com.google.protobuf.Descriptors.FileDescriptor
+       descriptor;
+   static {
+     java.lang.String[] descriptorData = {
+@@ -10618,15 +15999,15 @@ public final class RemoteMessageProto {
+       "ST\020\000\022\014\n\010RESPONSE\020\001\022\013\n\007FAILURE\020\002B\024B\022Remot" +
+       "eMessageProto"
+     };
+-    com.google.gwt.dev.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
+-      new com.google.gwt.dev.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
+-        public com.google.gwt.dev.protobuf.ExtensionRegistry assignDescriptors(
+-            com.google.gwt.dev.protobuf.Descriptors.FileDescriptor root) {
++    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
++      new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() {
++        public com.google.protobuf.ExtensionRegistry assignDescriptors(
++            com.google.protobuf.Descriptors.FileDescriptor root) {
+           descriptor = root;
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor =
+             getDescriptor().getMessageTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor,
+               new java.lang.String[] { "ProtocolVersion", "MessageType", "MessageId", "Request", "Response", "Failure", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.class,
+@@ -10634,7 +16015,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor,
+               new java.lang.String[] { "ServiceType", "ViewerRequest", "DevModeRequest", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.class,
+@@ -10642,7 +16023,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor,
+               new java.lang.String[] { "RequestType", "CapabilityExchange", "AddLog", "AddLogBranch", "AddLogEntry", "DisconnectLog", "Initialize", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.class,
+@@ -10650,7 +16031,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_CapabilityExchange_descriptor,
+               new java.lang.String[] { },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.CapabilityExchange.class,
+@@ -10658,7 +16039,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor,
+               new java.lang.String[] { "Type", "ModuleLog", "ServerLog", "MainLog", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.class,
+@@ -10666,7 +16047,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ModuleLog_descriptor,
+               new java.lang.String[] { "Name", "Icon", "SessionKey", "UserAgent", "Url", "TabKey", "RemoteHost", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ModuleLog.class,
+@@ -10674,7 +16055,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_ServerLog_descriptor,
+               new java.lang.String[] { "Name", "Icon", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.ServerLog.class,
+@@ -10682,7 +16063,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_descriptor.getNestedTypes().get(2);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLog_MainLog_descriptor,
+               new java.lang.String[] { },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLog.MainLog.class,
+@@ -10690,7 +16071,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(2);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor,
+               new java.lang.String[] { "Summary", "Level", "NeedsAttention", "Details", "HelpInfo", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.class,
+@@ -10698,7 +16079,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_LogData_HelpInfo_descriptor,
+               new java.lang.String[] { "Url", "Text", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.LogData.HelpInfo.class,
+@@ -10706,7 +16087,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(3);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogBranch_descriptor,
+               new java.lang.String[] { "ParentLogHandle", "IndexInParent", "LogData", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogBranch.class,
+@@ -10714,7 +16095,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(4);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_AddLogEntry_descriptor,
+               new java.lang.String[] { "LogHandle", "IndexInLog", "LogData", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.AddLogEntry.class,
+@@ -10722,7 +16103,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(5);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_DisconnectLog_descriptor,
+               new java.lang.String[] { "LogHandle", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.DisconnectLog.class,
+@@ -10730,7 +16111,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_descriptor.getNestedTypes().get(6);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_ViewerRequest_Initialize_descriptor,
+               new java.lang.String[] { "ClientId", "StartupURLs", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.ViewerRequest.Initialize.class,
+@@ -10738,7 +16119,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor,
+               new java.lang.String[] { "RequestType", "CapabilityExchange", "RestartWebServer", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.class,
+@@ -10746,7 +16127,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_CapabilityExchange_descriptor,
+               new java.lang.String[] { },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.CapabilityExchange.class,
+@@ -10754,7 +16135,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Request_DevModeRequest_RestartWebServer_descriptor,
+               new java.lang.String[] { },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Request.DevModeRequest.RestartWebServer.class,
+@@ -10762,7 +16143,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor,
+               new java.lang.String[] { "ViewerResponse", "DevModeResponse", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.class,
+@@ -10770,7 +16151,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor,
+               new java.lang.String[] { "ResponseType", "CapabilityExchange", "AddLog", "AddLogBranch", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.class,
+@@ -10778,7 +16159,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor,
+               new java.lang.String[] { "Capabilities", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.class,
+@@ -10786,7 +16167,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_CapabilityExchange_Capability_descriptor,
+               new java.lang.String[] { "Capability", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.CapabilityExchange.Capability.class,
+@@ -10794,7 +16175,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLog_descriptor,
+               new java.lang.String[] { "LogHandle", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLog.class,
+@@ -10802,7 +16183,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_descriptor.getNestedTypes().get(2);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_ViewerResponse_AddLogBranch_descriptor,
+               new java.lang.String[] { "LogHandle", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.ViewerResponse.AddLogBranch.class,
+@@ -10810,7 +16191,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor,
+               new java.lang.String[] { "ResponseType", "CapabilityExchange", "RestartWebServer", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.class,
+@@ -10818,7 +16199,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor,
+               new java.lang.String[] { "Capabilities", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.class,
+@@ -10826,7 +16207,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_descriptor.getNestedTypes().get(0);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_CapabilityExchange_Capability_descriptor,
+               new java.lang.String[] { "Capability", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.CapabilityExchange.Capability.class,
+@@ -10834,7 +16215,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_descriptor.getNestedTypes().get(1);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Response_DevModeResponse_RestartWebServer_descriptor,
+               new java.lang.String[] { },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Response.DevModeResponse.RestartWebServer.class,
+@@ -10842,7 +16223,7 @@ public final class RemoteMessageProto {
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_descriptor =
+             internal_static_com_google_gwt_dev_shell_remoteui_Message_descriptor.getNestedTypes().get(2);
+           internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_fieldAccessorTable = new
+-            com.google.gwt.dev.protobuf.GeneratedMessage.FieldAccessorTable(
++            com.google.protobuf.GeneratedMessage.FieldAccessorTable(
+               internal_static_com_google_gwt_dev_shell_remoteui_Message_Failure_descriptor,
+               new java.lang.String[] { "Message", "StackTrace", },
+               com.google.gwt.dev.shell.remoteui.RemoteMessageProto.Message.Failure.class,
+@@ -10850,11 +16231,11 @@ public final class RemoteMessageProto {
+           return null;
+         }
+       };
+-    com.google.gwt.dev.protobuf.Descriptors.FileDescriptor
++    com.google.protobuf.Descriptors.FileDescriptor
+       .internalBuildGeneratedFileFrom(descriptorData,
+-        new com.google.gwt.dev.protobuf.Descriptors.FileDescriptor[] {
++        new com.google.protobuf.Descriptors.FileDescriptor[] {
+         }, assigner);
+   }
+   
+-  public static void internalForceInit() {}
++  // @@protoc_insertion_point(outer_class_scope)
+ }

Modified: gwt/trunk/debian/patches/series
===================================================================
--- gwt/trunk/debian/patches/series	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/patches/series	2012-07-04 12:08:23 UTC (rev 219)
@@ -6,4 +6,6 @@
 fix-streamhtmlparser-pkg-path
 use-json-simple
 build-tests
+build-with-jdt35
+generated-protobuf-class
 build-with-jdt37

Modified: gwt/trunk/debian/rules
===================================================================
--- gwt/trunk/debian/rules	2012-07-04 12:08:19 UTC (rev 218)
+++ gwt/trunk/debian/rules	2012-07-04 12:08:23 UTC (rev 219)
@@ -6,15 +6,23 @@
 JAVA_HOME          := /usr/lib/jvm/default-java
 DEB_ANT_BUILDFILE  := ./debian/build.xml
 DEB_JARS           := commons-collections3 jetty jetty-sslengine jetty-util ecj \
-                      /usr/share/java/swt.jar servlet-api-2.5 junit
+                      /usr/share/java/swt.jar servlet-api-2.5 junit sac hibernate-core \
+                      hibernate-validator jsilver
 DEB_ANT_ARGS       := -DartifactVersion=$(DEB_UPSTREAM_VERSION)
 
+clean::
+	rm -rf build target
+
 binary-post-install/libgwt-user-java::
 	for jar in user servlet; do \
 		dh_install -plibgwt-user-java target/gwt-$$jar-$(DEB_UPSTREAM_VERSION).jar usr/share/java; \
 		dh_link -plibgwt-user-java usr/share/java/gwt-$$jar-$(DEB_UPSTREAM_VERSION).jar usr/share/java/gwt-$$jar.jar; \
 	done
 
+configure/libgwt-dev-java::
+	mkdir -p $(CURDIR)/build/out/dev/bin/com/google/gwt/dev
+	echo gwt.version=$(DEB_UPSTREAM_VERSION) >> $(CURDIR)/build/out/dev/bin/com/google/gwt/dev/About.properties
+
 binary-post-install/libgwt-dev-java::
 	dh_install -plibgwt-dev-java target/gwt-dev-$(DEB_UPSTREAM_VERSION).jar usr/share/java
 	dh_link -plibgwt-dev-java usr/share/java/gwt-dev-$(DEB_UPSTREAM_VERSION).jar usr/share/java/gwt-dev.jar




More information about the pkg-eucalyptus-commits mailing list