diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/Internals.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/Internals.java
index 452ca2d..8bc43a8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/Internals.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/Internals.java
@@ -15,7 +15,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class Internals {
-
   private static final String LANGUAGE_NAME = "com.google.eclipse.protobuf.Protobuf";
 
   public static Injector injector() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
index 9b8d95f..51e8274 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -53,7 +53,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufUiModule extends AbstractProtobufUiModule {
-
   public static final String PLUGIN_ID = "com.google.eclipse.protobuf.ui";
 
   public ProtobufUiModule(AbstractUIPlugin plugin) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
index d3464a8..4fcea5c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/nature/AutoAddNatureEditorCallback.java
@@ -22,7 +22,6 @@
  */
 @SuppressWarnings("restriction")
 public class AutoAddNatureEditorCallback extends AbstractDirtyStateAwareEditorCallback {
-
   @Inject private ToggleXtextNatureAction xtext;
 
   @Override public void afterCreatePartControl(XtextEditor editor) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CodeGenerationErrorParser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CodeGenerationErrorParser.java
index a2a381c..b10eca6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CodeGenerationErrorParser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CodeGenerationErrorParser.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class CodeGenerationErrorParser implements ProtocOutputParser {
-
   /*
    * (.*):\\s*(--.*)
    * --1- -*- --2-
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CompoundParser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CompoundParser.java
index 0d076dd..133b251 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CompoundParser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/CompoundParser.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class CompoundParser implements ProtocOutputParser {
-
   private static final List<ProtocOutputParser> PARSERS =
       asList(new LineSpecificErrorParser(), new CodeGenerationErrorParser());
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/LineSpecificErrorParser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/LineSpecificErrorParser.java
index 0f73849..1974f14 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/LineSpecificErrorParser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/LineSpecificErrorParser.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class LineSpecificErrorParser implements ProtocOutputParser {
-
   /*
    * (.*):(\\d+):(\\d+):\\s*(.*)
    * --1- ---2-- ---3-- -*- --4-
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/OutputDirectories.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/OutputDirectories.java
index 5956e75..c42cec6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/OutputDirectories.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/OutputDirectories.java
@@ -17,7 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class OutputDirectories {
-
   private final OutputDirectory java;
   private final OutputDirectory cpp;
   private final OutputDirectory python;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtoDescriptorPathFinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtoDescriptorPathFinder.java
index 00805cf..3287651 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtoDescriptorPathFinder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtoDescriptorPathFinder.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton class ProtoDescriptorPathFinder {
-
   private final String descriptorFqn;
 
   ProtoDescriptorPathFinder() {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
index 5b4a7c2..9843e2f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtobufBuildParticipant.java
@@ -36,7 +36,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufBuildParticipant implements IXtextBuilderParticipant {
-
   @Inject private ProtocCommandFactory commandFactory;
   @Inject private ProtocOutputParser outputParser;
   @Inject private ProtoDescriptorPathFinder protoDescriptorPathFinder;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocCommandFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocCommandFactory.java
index 6ec52d2..fa53cb4 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocCommandFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocCommandFactory.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ProtocCommandFactory {
-
   String protocCommand(IFile protoFile, String protocPath, List<String> importRoots, String descriptorPath,
       OutputDirectories outputDirectories) {
     StringBuilder command = new StringBuilder();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocMarkerFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocMarkerFactory.java
index 4739f4b..eafd14c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocMarkerFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocMarkerFactory.java
@@ -21,7 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ProtocMarkerFactory {
-
   private static final String PROTOC_CHECK = "com.google.eclipse.protobuf.ui.protocMarker";
 
   private final IFile file;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocOutputParser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocOutputParser.java
index 8b6c6b0..58e7aa4 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocOutputParser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/builder/protoc/ProtocOutputParser.java
@@ -17,7 +17,5 @@
  */
 @ImplementedBy(CompoundParser.class)
 interface ProtocOutputParser {
-
   boolean parseAndAddMarkerIfNecessary(String line, ProtocMarkerFactory markerFactory) throws CoreException;
-
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
index 1c30176..5541f16 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/CommentNodesFinder.java
@@ -28,7 +28,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton class CommentNodesFinder {
-
   private static final String MATCH_ANYTHING = ".*";
 
   @Inject private INodes nodes;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartInsertHandler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartInsertHandler.java
index 2ba35b2..4ad6640 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartInsertHandler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartInsertHandler.java
@@ -21,7 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public abstract class SmartInsertHandler extends AbstractHandler {
-
   /** {@inheritDoc} */
   @Override public final Object execute(ExecutionEvent event) {
     XtextEditor activeEditor = getActiveXtextEditor();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
index 2c81292..548c46e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/commands/SmartSemicolonHandler.java
@@ -43,7 +43,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class SmartSemicolonHandler extends SmartInsertHandler {
-
   private static final Pattern NUMBERS_PATTERN = compile("[\\d]+");
 
   private static Logger logger = Logger.getLogger(SmartSemicolonHandler.class);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/IEObjectDescriptionChooser.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/IEObjectDescriptionChooser.java
index e88afea..e2adf8d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/IEObjectDescriptionChooser.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/IEObjectDescriptionChooser.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class IEObjectDescriptionChooser {
-
   Collection<IEObjectDescription> shortestQualifiedNamesIn(Collection<IEObjectDescription> descriptions) {
     if (descriptions.isEmpty()) {
       return emptySet();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 7fff679..d818d01 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -46,7 +46,6 @@
  * @see <a href="http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist">Xtext Content Assist</a>
  */
 public class ProtobufProposalProvider extends AbstractProtobufProposalProvider {
-
   @Inject private IEObjectDescriptionChooser descriptionChooser;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private ModelFinder finder;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
index 3b24ca8..d03dd7e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/MLCommentDocumentationProvider.java
@@ -28,7 +28,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class MLCommentDocumentationProvider implements IEObjectDocumentationProvider {
-
   private static final Pattern COMMENT = compile("(?s)/\\*\\*?.*");
   private static final Patterns CLEAN_UP = compileAll("\\A/\\*\\*?", "\\*/\\z", "(?m)^( |\\t)*\\** ?",
       "(?m)( |\\t)*\\**( |\\t)*$");
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/Patterns.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/Patterns.java
index 14c7075..edc776e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/Patterns.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/Patterns.java
@@ -15,7 +15,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class Patterns implements Iterable<Pattern> {
-
   static Patterns compileAll(String...patterns) {
     return new Patterns(patterns);
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/ProtobufDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/ProtobufDocumentationProvider.java
index ef6eda8..b6a13da 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/ProtobufDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/ProtobufDocumentationProvider.java
@@ -24,7 +24,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class ProtobufDocumentationProvider implements IEObjectDocumentationProvider {
-
   private final List<IEObjectDocumentationProvider> delegates = new ArrayList<IEObjectDocumentationProvider>();
 
   @Inject public ProtobufDocumentationProvider(SLCommentDocumentationProvider p1, MLCommentDocumentationProvider p2) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
index c77083b..578453b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/documentation/SLCommentDocumentationProvider.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class SLCommentDocumentationProvider implements IEObjectDocumentationProvider {
-
   private static final Pattern COMMENT_START = compile("//\\s*"); // "//" plus whitespace
   private static final Patterns NEW_LINE = compileAll("\\r\\n", "\\n");
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
index 1b27863..813894f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOpener.java
@@ -25,7 +25,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class FileOpener {
-
   @Inject private Resources resources;
 
   public IEditorPart openProtoFileInWorkspace(URI uri) throws PartInitException {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java
index a529ac1..8bec058 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/FileOutsideWorkspaceIconUpdater.java
@@ -27,7 +27,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class FileOutsideWorkspaceIconUpdater extends NullImpl {
-
   private static final ISchedulingRule SEQUENCE_RULE = SchedulingRuleFactory.INSTANCE.newSequence();
 
   @Inject
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufUriEditorOpener.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufUriEditorOpener.java
index db27f3e..030478a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufUriEditorOpener.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/ProtobufUriEditorOpener.java
@@ -22,7 +22,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufUriEditorOpener extends LanguageSpecificURIEditorOpener {
-
   private static Logger logger = Logger.getLogger(ProtobufUriEditorOpener.class);
 
   @Inject private FileOpener fileOpener;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
index 638e17b..4fd19b7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class UriEditorInput implements IEditorInput {
-
   private final URI fileUri;
   private final String name;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
index 9fabec3..77d7f2c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ImportHyperlink.java
@@ -22,7 +22,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ImportHyperlink implements IHyperlink {
-
   private static Logger logger = Logger.getLogger(ImportHyperlink.class);
 
   private final URI importUri;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
index 255023d..2df6944 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/hyperlinking/ProtobufHyperlinkDetector.java
@@ -34,7 +34,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufHyperlinkDetector extends DefaultHyperlinkDetector {
-
   private static final IHyperlink[] NO_HYPERLINKS = null;
 
   @Inject private EObjectAtOffsetHelper eObjectAtOffsetHelper;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ContentReader.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ContentReader.java
index 3fe4b89..74e62d2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ContentReader.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ContentReader.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton class ContentReader {
-
   private static final int DEFAULT_FILE_SIZE = 15 * 1024;
 
   String contentsOf(InputStream inputStream) throws IOException {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactory.java
index c8eb09b..feba2eb 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactory.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 interface DocumentContentsFactory {
-
   void createContents(XtextDocument document, Object element) throws CoreException;
 
   boolean supportsEditorInputType(IEditorInput input);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactoryRegistry.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactoryRegistry.java
index 6915b11..88856e3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactoryRegistry.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/DocumentContentsFactoryRegistry.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class DocumentContentsFactoryRegistry {
-
   private final List<DocumentContentsFactory> factories = new ArrayList<DocumentContentsFactory>();
 
   @Inject
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
index f6bb366..d53d6a7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
@@ -26,7 +26,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class FileStoreDocumentContentsFactory implements DocumentContentsFactory {
-
   @Inject private ContentReader contentReader;
   @Inject private UriEditorInputs files;
   @Inject private XtextResourceFactory resourceFactory;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
index 75a1bd1..6ef56c9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/ProtobufDocumentProvider.java
@@ -33,7 +33,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufDocumentProvider extends XtextDocumentProvider {
-
   private static final IRegion[] NO_CHANGE = new IRegion[0];
 
   @Inject private Editors editors;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/SaveActions.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/SaveActions.java
index 1305350..16ea991 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/SaveActions.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/SaveActions.java
@@ -23,7 +23,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton class SaveActions {
-
   private static Logger logger = Logger.getLogger(SaveActions.class);
 
   TextEdit createSaveAction(IDocument document, IRegion[] changedRegions) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
index a34d84f..555d2f4 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
@@ -28,7 +28,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class UriDocumentContentsFactory implements DocumentContentsFactory {
-
   @Inject private ContentReader contentReader;
   @Inject private XtextResourceFactory resourceFactory;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
index 82a2c70..5adf27f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
@@ -21,7 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton class UriEditorInputs {
-
   File fileFrom(IURIEditorInput input) {
     URI uri = input.getURI();
     String scheme = uri.getScheme();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
index 670c4fe..949f840 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconcileStrategy.java
@@ -22,7 +22,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufReconcileStrategy extends XtextDocumentReconcileStrategy {
-
   private ProtobufSpelling spellingStrategy;
 
   @Inject private INodes nodes;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java
index 86f91f1..0b4a145 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufReconciler.java
@@ -21,7 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufReconciler extends XtextReconciler {
-
   private boolean installed;
 
   @Inject public ProtobufReconciler(ProtobufReconcileStrategy strategy) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
index fc5b6aa..286d51e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
@@ -28,7 +28,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class ProtobufSpelling extends SpellingReconcileStrategy {
-
   private final INodes nodes;
 
   ProtobufSpelling(ISourceViewer viewer, SpellingService spellingService, INodes nodes) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/HighlightingConfiguration.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/HighlightingConfiguration.java
index ccae5aa..95ec021 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/HighlightingConfiguration.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/HighlightingConfiguration.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class HighlightingConfiguration extends DefaultHighlightingConfiguration {
-
   public static final String ENUM_DEFINITION_ID = "enumDefinition";
   public static final String ENUM_ID = "enum";
   public static final String ENUM_LITERAL_DEFINITION = "enumLiteralDefinition";
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/Messages.java
index 8ceacc4..bb0fe6b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/Messages.java
@@ -14,7 +14,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String comments;
   public static String defaults;
   public static String enumDefinitions;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
index 41a418e..301e62e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/syntaxcoloring/ProtobufSemanticHighlightingCalculator.java
@@ -28,7 +28,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufSemanticHighlightingCalculator implements ISemanticHighlightingCalculator {
-
   @Inject private IndexedElements indexedElements;
   @Inject private INodes nodes;
   @Inject private Options options;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/exception/CoreExceptions.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/exception/CoreExceptions.java
index 111e795..2279609 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/exception/CoreExceptions.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/exception/CoreExceptions.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class CoreExceptions {
-
   public static CoreException error(Throwable cause) {
     String message = cause.getMessage();
     if (message == null) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
index a36d844..71017ba 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/grammar/CompoundElement.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public enum CompoundElement {
-
   DEFAULT_EQUAL(joinWithWhitespace(DEFAULT, EQUAL, "")),
   DEFAULT_EQUAL_IN_BRACKETS(inBrackets(DEFAULT_EQUAL)),
   QUOTE("\""),
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
index 00edca0..ce2ad49 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Images.java
@@ -26,7 +26,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class Images {
-
   private static final String GIF_EXTENSION = ".gif";
   private static final String DEFAULT_IMAGE = "empty.gif";
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
index 104ba58..cca5f28 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/Labels.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class Labels {
-
   @Inject private NameResolver nameResolver;
   @Inject private MessageFields messageFields;
   @Inject private INodes nodes;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/ProtobufLabelProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/ProtobufLabelProvider.java
index 12ab3a0..e15d762 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/ProtobufLabelProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/labeling/ProtobufLabelProvider.java
@@ -21,7 +21,6 @@
  * @see <a href="http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider">Xtext Label Provider</a>
  */
 public class ProtobufLabelProvider extends DefaultEObjectLabelProvider {
-
   @Inject private Labels labels;
   @Inject private Images images;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/LinkWithEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/LinkWithEditor.java
index d8fdfd2..e5ac50d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/LinkWithEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/LinkWithEditor.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class LinkWithEditor extends LinkWithEditorOutlineContribution {
-
   @Inject private Provider<OutlineWithEditorLinker> outlineWithEditorLinkerProvider;
 
   private final Map<OutlinePage, OutlineWithEditorLinker> page2linker = Maps.newHashMap();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/Messages.java
index 2996518..1b6a678 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/Messages.java
@@ -14,12 +14,11 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String importDeclarations;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/OutlineViewModel.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/OutlineViewModel.java
index 9deb271..3833a4a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/OutlineViewModel.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/OutlineViewModel.java
@@ -23,7 +23,6 @@
  */
 @SuppressWarnings("restriction")
 class OutlineViewModel {
-
   private static final Class<?>[] GROUP_TYPES = { Package.class, Import.class, ProtobufElement.class };
 
   private final Map<Class<?>, List<EObject>> elements = newLinkedHashMap();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlinePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlinePage.java
index be7aec6..a82f06c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlinePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlinePage.java
@@ -25,7 +25,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufOutlinePage extends OutlinePage {
-
   @Override protected List<IOutlineNode> getInitiallyExpandedNodes() {
     IOutlineNode rootNode = getTreeProvider().createRoot(getXtextDocument());
     List<IOutlineNode> nodes = newArrayList(rootNode);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
index e9122d3..1ceec4b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/ProtobufOutlineTreeProvider.java
@@ -25,7 +25,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufOutlineTreeProvider extends DefaultOutlineTreeProvider {
-
   private static final List<Class<? extends EObject>> IGNORED_ELEMENT_TYPES = new ArrayList<Class<? extends EObject>>();
 
   static {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java
index 745ee8e..43de7d9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/outline/SimpleOutlineNode.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class SimpleOutlineNode extends AbstractOutlineNode {
-
   private final URI ownerUri;
 
   SimpleOutlineNode(IOutlineNode parent, EObject owner, Image image, Object text, boolean isLeaf) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java
index fe44f94..28510d9 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/BooleanPreference.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class BooleanPreference extends Preference<Boolean> {
-
   /**
    * Creates a new </code>{@link BooleanPreference}</code>.
    * @param name the name of this preference.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
index 18b52f2..b184e9d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/Preference.java
@@ -17,7 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public abstract class Preference<T> {
-
   private final String name;
   private IPreferenceStore store;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceStoreAccess.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceStoreAccess.java
index 768e1f6..c256cda 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceStoreAccess.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/PreferenceStoreAccess.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class PreferenceStoreAccess implements IPreferenceStoreAccess {
-
   private boolean initialized = false;
 
   @Inject private IPreferenceStoreInitializer.CompositeImpl initializer;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java
index c409b9f..5db8aac 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringListPreference.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class StringListPreference extends Preference<List<String>> {
-
   private final String delimiter;
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java
index 741feb5..3d5c45f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/StringPreference.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class StringPreference extends Preference<String> {
-
   /**
    * Creates a new </code>{@link StringPreference}</code>.
    * @param name the name of this preference.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferenceStoreInitializer.java
index a56fc2d..631de1c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferenceStoreInitializer.java
@@ -17,10 +17,8 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class CompilerPreferenceStoreInitializer implements IPreferenceStoreInitializer {
-
   private static final String DEFAULT_OUTPUT_DIRECTORY = "src-gen";
 
-  /** {@inheritDoc} */
   @Override public void initialize(IPreferenceStoreAccess access) {
     IPreferenceStore store = access.getWritablePreferenceStore();
     CompilerPreferences preferences = new CompilerPreferences(store);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferences.java
index bf80188..ad9aab2 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/core/CompilerPreferences.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class CompilerPreferences {
-
   public static final String ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME = "compiler.enableProjectSettings";
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/page/Messages.java
index 74a1f7b..4ad7e33 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/compiler/page/Messages.java
@@ -14,7 +14,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String browseCustomPath;
   public static String codeGeneration;
   public static String compileOnSave;
@@ -42,8 +41,8 @@
   public static String targetLanguage;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/EditorPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/EditorPreferencePage.java
index a88554d..3d886fa 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/EditorPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/EditorPreferencePage.java
@@ -24,7 +24,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class EditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-
   @Override protected Control createContents(Composite parent) {
     Composite contents = new Composite(parent, NONE);
     contents.setLayout(new GridLayout(1, false));
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/Messages.java
index 95e091a..2a8be64 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/general/page/Messages.java
@@ -15,13 +15,12 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String header;
 
   static {
     // initialize resource bundle
-    Class<Messages> clazz = Messages.class;
-    NLS.initializeMessages(clazz.getName(), clazz);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferenceStoreInitializer.java
index 0f19478..21cc3b0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferenceStoreInitializer.java
@@ -18,8 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class NumericTagPreferenceStoreInitializer implements IPreferenceStoreInitializer {
-
-  /** {@inheritDoc} */
   @Override public void initialize(IPreferenceStoreAccess storeAccess) {
     NumericTagPreferences preferences = new NumericTagPreferences(storeAccess);
     preferences.patterns().setDefaultValue(singletonList("Next[\\s]+Id:[\\s]+[\\d]+"));
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferences.java
index 997d08e..7f3ff27 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/core/NumericTagPreferences.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class NumericTagPreferences {
-
   private final StringListPreference patterns;
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/AddOrEditPatternDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/AddOrEditPatternDialog.java
index 205652e..e64780f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/AddOrEditPatternDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/AddOrEditPatternDialog.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class AddOrEditPatternDialog extends InputDialog {
-
   private Text txtPattern;
   private Text txtTest;
   private Text txtPatternError;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/Messages.java
index 5ed74dc..91e6f8c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/Messages.java
@@ -14,7 +14,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String add;
   public static String addNewPattern;
   public static String edit;
@@ -27,8 +26,8 @@
   public static String testPattern;
 
   static {
-    Class<Messages> clazz = Messages.class;
-    NLS.initializeMessages(clazz.getName(), clazz);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/NumericTagPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/NumericTagPreferencePage.java
index cef0657..2b1d38d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/NumericTagPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/numerictag/page/NumericTagPreferencePage.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class NumericTagPreferencePage extends PreferenceAndPropertyPage {
-
   private static final String PREFERENCE_PAGE_ID = NumericTagPreferencePage.class.getName();
 
   private List lstPaths;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferenceStoreInitializer.java
index a9b9538..99f15b3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferenceStoreInitializer.java
@@ -16,8 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class SaveActionsPreferenceStoreInitializer implements IPreferenceStoreInitializer {
-
-  /** {@inheritDoc} */
   @Override public void initialize(IPreferenceStoreAccess storeAccess) {
     SaveActionsPreferences preferences = new SaveActionsPreferences(storeAccess);
     preferences.removeTrailingWhitespace().setDefaultValue(true);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferences.java
index 2c5206a..35af812 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/core/SaveActionsPreferences.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class SaveActionsPreferences {
-
   private final BooleanPreference removeTrailingWhitespace;
   private final BooleanPreference inAllLines;
   private final BooleanPreference inEditedLines;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/Messages.java
index a3c84aa..91509a6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/Messages.java
@@ -14,12 +14,11 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String removeTrailingWhitespace;
 
   static {
-    Class<Messages> clazz = Messages.class;
-    NLS.initializeMessages(clazz.getName(), clazz);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/SaveActionsPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/SaveActionsPreferencePage.java
index fd94950..220b39a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/SaveActionsPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/save/page/SaveActionsPreferencePage.java
@@ -30,7 +30,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class SaveActionsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-
   @Inject private IPreferenceStoreAccess preferenceStoreAccess;
 
   private final PreferenceBinder preferenceBinder = new PreferenceBinder();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferenceStoreInitializer.java
index 51e26e0..364b26b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferenceStoreInitializer.java
@@ -17,8 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class GeneralPreferenceStoreInitializer implements IPreferenceStoreInitializer {
-
-  /** {@inheritDoc} */
   @Override public void initialize(IPreferenceStoreAccess storeAccess) {
     IPreferenceStore store = storeAccess.getWritablePreferenceStore();
     GeneralPreferences preferences = new GeneralPreferences(store);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferences.java
index bb08303..23488a0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferences.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/core/GeneralPreferences.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class GeneralPreferences {
-
   public static final String ENABLE_PROJECT_SETTINGS_PREFERENCE_NAME = "general.enableProjectSettings";
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/GeneralPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/GeneralPreferencePage.java
index 0e9aecd..c44796f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/GeneralPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/GeneralPreferencePage.java
@@ -24,7 +24,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class GeneralPreferencePage extends PreferenceAndPropertyPage {
-
   private static final String PREFERENCE_PAGE_ID = "com.google.eclipse.protobuf.Protobuf";
 
   private Group grpValidation;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/Messages.java
index 74d9b38..5fa0043 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/general/page/Messages.java
@@ -14,13 +14,12 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String contentValidation;
   public static String validateFilesOnActivation;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/ButtonGroup.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/ButtonGroup.java
index bfe5f0b..2c3b69a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/ButtonGroup.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/ButtonGroup.java
@@ -17,7 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ButtonGroup {
-
   /**
    * Creates a new <code>{@link ButtonGroup}</code>.
    * @param buttons the buttons to group.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/DataChangedListener.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/DataChangedListener.java
index d10af2c..e46364e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/DataChangedListener.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/DataChangedListener.java
@@ -14,6 +14,5 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public interface DataChangedListener {
-
   void dataChanged();
 }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/InputDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/InputDialog.java
index 6313139..84ff3b0 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/InputDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/InputDialog.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class InputDialog extends Dialog {
-
   private final String title;
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/LabelWidgets.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/LabelWidgets.java
index 37b8777..bed3938 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/LabelWidgets.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/LabelWidgets.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class LabelWidgets {
-
   /**
    * Enables the given label widget if the given "enabled" state is {@code true}, and disables it otherwise. This method
    * also sets the foreground of the widget to the system color with id <code>{@link SWT#COLOR_WIDGET_FOREGROUND}</code>
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/Messages.java
index 86d2e38..c9b97d8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/Messages.java
@@ -14,13 +14,12 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String configureWorkspaceSettings;
   public static String enableProjectSettings;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/SystemColors.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/SystemColors.java
index 58fce42..c80999b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/SystemColors.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/SystemColors.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class SystemColors {
-
   /**
    * Returns the system color with id <code>{@link SWT#COLOR_WIDGET_BACKGROUND}</code>.
    * @return the system color with id {@code COLOR_WIDGET_BACKGROUND}.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/TextWidgets.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/TextWidgets.java
index aeabb3b..1777a4f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/TextWidgets.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/TextWidgets.java
@@ -19,7 +19,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class TextWidgets {
-
   /**
    * Sets the "editable" state of the given text widget. This method also sets the background of the widget to
    * the system color with id <code>{@link SWT#COLOR_LIST_BACKGROUND}</code> if the given "editable" state is
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/Binding.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/Binding.java
index ed7e68a..5b835e3 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/Binding.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/Binding.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public interface Binding {
-
   /**
    * Reads a preference value and applies it to the target object.
    */
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToButtonSelection.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToButtonSelection.java
index 39153e6..1627341 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToButtonSelection.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToButtonSelection.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class BindingToButtonSelection implements Binding {
-
   private final Button button;
   private final BooleanPreference preference;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToListItems.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToListItems.java
index 6289f2d..be3f187 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToListItems.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToListItems.java
@@ -24,7 +24,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class BindingToListItems implements Binding {
-
   private final List list;
   private final StringListPreference preference;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToTextValue.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToTextValue.java
index 64143d9..aa0538e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToTextValue.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/BindingToTextValue.java
@@ -20,7 +20,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class BindingToTextValue implements Binding {
-
   private final Text text;
   private final StringPreference preference;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/PreferenceBinder.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/PreferenceBinder.java
index 2b7d548..5fcab9b 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/PreferenceBinder.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/binding/PreferenceBinder.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class PreferenceBinder {
-
   private final List<Binding> allBindings = new ArrayList<Binding>();
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/PathsPreferenceStoreInitializer.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/PathsPreferenceStoreInitializer.java
index 8474eda..bcfc596 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/PathsPreferenceStoreInitializer.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/PathsPreferenceStoreInitializer.java
@@ -17,8 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class PathsPreferenceStoreInitializer implements IPreferenceStoreInitializer {
-
-  /** {@inheritDoc} */
   @Override public void initialize(IPreferenceStoreAccess access) {
     IPreferenceStore store = access.getWritablePreferenceStore();
     PathsPreferences preferences = new PathsPreferences(store);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable.java
index db922d9..d23de01 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/core/ProjectVariable.java
@@ -17,7 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProjectVariable {
-
   private static final String VARIABLE_VALUE = "${project}";
 
   public static IPath replaceProjectNameWithProjectVariable(IPath path, IProject project) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectoryPathsEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectoryPathsEditor.java
index 8b4ad84..b633509 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectoryPathsEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectoryPathsEditor.java
@@ -33,7 +33,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class DirectoryPathsEditor extends Composite {
-
   private final IProject project;
 
   private final Table tblDirectoryPaths;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectorySelectionDialogs.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectorySelectionDialogs.java
index d9ec921..8969934 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectorySelectionDialogs.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/DirectorySelectionDialogs.java
@@ -31,7 +31,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class DirectorySelectionDialogs {
-
   static IPath showWorkspaceDirectorySelectionDialog(Shell shell, String initialPath) {
     return showWorkspaceDirectorySelectionDialog(shell, initialPath, null);
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/Messages.java
index f316483..beba9e5 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/page/Messages.java
@@ -14,7 +14,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String add;
   public static String addDirectoryPath;
   public static String browseFileSystem;
@@ -40,8 +39,8 @@
   public static String up;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java
index 6a1d456..1453472 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/Messages.java
@@ -15,7 +15,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String changeValueDescription;
   public static String changeValueLabel;
   public static String regenerateTagNumberLabel;
@@ -23,8 +22,8 @@
   public static String removeDuplicatePackageLabel;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
index 8c1d168..4968f34 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickAssistProcessor.java
@@ -25,7 +25,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufQuickAssistProcessor extends XtextQuickAssistProcessor {
-
   @Inject private SpellingCorrectionProcessor spellingCorrectionProcessor;
 
   @Override public ICompletionProposal[] computeQuickAssistProposals(IQuickAssistInvocationContext context) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
index 629d3f6..bcf166c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/quickfix/ProtobufQuickfixProvider.java
@@ -37,7 +37,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufQuickfixProvider extends DefaultQuickfixProvider {
-
   private static final String ICON_FOR_CHANGE = "change.gif";
 
   @Inject private IndexedElements indexedElements;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java
index 3469297..100d857 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java
@@ -33,7 +33,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class XtextResourceFactory {
-
   @Inject private IResourceSetProvider resourceSetProvider;
   @Inject private Resources resources;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategies.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategies.java
index 32c088a..271e830 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategies.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategies.java
@@ -15,7 +15,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class FileResolverStrategies {
-
   private final FileResolverStrategy singleDirectory;
   private final FileResolverStrategy multipleDirectories;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
index b639d3e..3e0b105 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileResolverStrategy.java
@@ -17,7 +17,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 interface FileResolverStrategy {
-
   String PLATFORM_RESOURCE_PREFIX = "platform:/resource";
   char SEPARATOR = IPath.SEPARATOR;
 
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
index 2e0e03d..d85b28c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/FileUriResolver.java
@@ -26,7 +26,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class FileUriResolver implements IFileUriResolver {
-
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private Resources resources;
   @Inject private IPreferenceStoreAccess storeAccess;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/PathMapping.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/PathMapping.java
index 57bf5c6..04e093d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/PathMapping.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/PathMapping.java
@@ -18,7 +18,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class PathMapping {
-
   private final SimpleCache<String, String> folderPathMapping = new SimpleCache<String, String>(new FolderPathMapper());
 
   String folderLocation(String workspacePath) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
index 5967b1f..a40386a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/scoping/SingleDirectoryFileResolver.java
@@ -21,7 +21,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class SingleDirectoryFileResolver implements FileResolverStrategy {
-
   private final Resources resources;
 
   SingleDirectoryFileResolver(Resources resources) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Literals.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Literals.java
index 876f417..0dcf2ea 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Literals.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Literals.java
@@ -22,7 +22,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class Literals {
-
   /**
    * Calculates the index value for the given literal. The calculated index
    * value is the maximum of all the index values of the given literal's
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Paths.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Paths.java
index 4ea2ae9..85ca663 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Paths.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Paths.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public final class Paths {
-
   /**
    * Returns the segments of the given path.
    * @param path the given path.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
index 96a5e3e..feec96c 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
@@ -24,7 +24,6 @@
  */
 @SuppressWarnings("deprecation")
 @Singleton public class Resources {
-
   private static final IViewReference[] NO_VIEW_REFERENCES = new IViewReference[0];
 
   public static final String URI_SCHEME_FOR_FILES = "file";
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/SimpleReference.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/SimpleReference.java
index 8f5dd84..1cbcb95 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/SimpleReference.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/SimpleReference.java
@@ -16,7 +16,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class SimpleReference<T> {
-
   private T value;
 
   /**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Editors.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Editors.java
index 95b939b..5c52f1f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Editors.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Editors.java
@@ -36,7 +36,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class Editors {
-
   private static Logger logger = Logger.getLogger(Editors.class);
 
   public IRegion[] calculateChangedLineRegions(final ITextFileBuffer buffer, final IDocument current,
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/LineComparator.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/LineComparator.java
index aad9211..0a8532a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/LineComparator.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/LineComparator.java
@@ -22,7 +22,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 class LineComparator implements IRangeComparator {
-
   private static final long UNKNOWN_HASH = Long.MIN_VALUE;
 
   private static Logger logger = Logger.getLogger(LineComparator.class);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Messages.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Messages.java
index f17dac0..973acb7 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Messages.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/editor/Messages.java
@@ -15,13 +15,12 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class Messages extends NLS {
-
   public static String calculatingChangedRegions;
   public static String errorCalculatingChangedRegions;
 
   static {
-    Class<Messages> targetType = Messages.class;
-    NLS.initializeMessages(targetType.getName(), targetType);
+    Class<Messages> type = Messages.class;
+    NLS.initializeMessages(type.getName(), type);
   }
 
   private Messages() {}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java
index 8375894..621d9a6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufResourceUIValidatorExtension.java
@@ -27,7 +27,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufResourceUIValidatorExtension extends DefaultResourceUIValidatorExtension {
-
   public static final String EDITOR_CHECK = "com.google.eclipse.protobuf.ui.editorMarker";
 
   @VisibleForTesting @Inject MarkerCreator markerCreator;
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
index 1acbff0..4f8543e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidateOnActivation.java
@@ -26,7 +26,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ValidateOnActivation implements IPartListener2 {
-
   /**
    * Validates the active active editor in the given part that contains a .proto file in the Workspace.
    * @param partRef the part that was activated.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
index 0e21e76..84d9f2a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/Validation.java
@@ -32,7 +32,6 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 final class Validation {
-
   static void validate(IEditorPart editor) {
     XtextEditor protoEditor = asProtoEditor(editor);
     if (protoEditor == null) {
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidationTrigger.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidationTrigger.java
index a5599f7..4fff51d 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidationTrigger.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ValidationTrigger.java
@@ -25,17 +25,13 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton public class ValidationTrigger {
-
   private final String PROTO_EDITOR_ID = "com.google.eclipse.protobuf.Protobuf";
 
   @Inject private Resources resources;
 
   /**
-   * Triggers validation of all open .proto files belonging to the given
-   * project.
-   *
-   * @param project
-   *          the given project.
+   * Triggers validation of all open .proto files belonging to the given project.
+   * @param project the given project.
    */
   public void validateOpenEditors(IProject project) {
     for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
