Fixed: [ Issue 70 ] Validation doesn't start until editing
https://code.google.com/p/protobuf-dt/issues/detail?id=70
Working on preference page for validation options.
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 cd3fec5..2a8cbed 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
@@ -32,6 +32,14 @@
}
/**
+ * Returns the name of this preference.
+ * @return the name of this preference.
+ */
+ public final String name() {
+ return name;
+ }
+
+ /**
* Returns the value of this preference.
* @return the value of this preference.
*/
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
index cb22c3a..e5966fd 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/PreferenceAndPropertyPage.java
@@ -49,7 +49,7 @@
@Override protected final Control createContents(Composite parent) {
Composite contents = contentParent(parent);
doCreateContents(contents);
- setupBtnEnabledProjectSettingsBinding();
+ if (isPropertyPage()) setupBtnEnabledProjectSettingsBinding();
setupBinding(preferenceBinder);
preferenceBinder.applyValues();
updateContents();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
index 0f22af1..00d99d6 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/pages/general/GeneralPreferencePage.java
@@ -28,17 +28,18 @@
private static final String PREFERENCE_PAGE_ID = "com.google.eclipse.protobuf.Protobuf";
+ private Group grpValidation;
private Button btnValidateOnActivation;
- @Override protected void doCreateContents(Composite contents) {
- // generated by WindowBuilder
- Group grpValidation = new Group(contents, SWT.NONE);
+ @Override protected void doCreateContents(Composite parent) {
+ grpValidation = new Group(parent, SWT.NONE);
grpValidation.setLayout(new GridLayout(1, false));
grpValidation.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
grpValidation.setText(contentValidation);
btnValidateOnActivation = new Button(grpValidation, SWT.CHECK);
btnValidateOnActivation.setText(validateFilesOnActivation);
+ new Label(parent, SWT.NONE);
}
@Override protected BooleanPreference enableProjectSettingsPreference(IPreferenceStore store) {
@@ -52,7 +53,22 @@
);
}
- @Override protected void onProjectSettingsActivation(boolean active) {}
+ @Override protected void updateContents() {
+ if (isPropertyPage()) {
+ boolean useProjectSettings = areProjectSettingsActive();
+ activateProjectSettings(useProjectSettings);
+ enableProjectSpecificOptions(useProjectSettings);
+ }
+ }
+
+ @Override protected void onProjectSettingsActivation(boolean active) {
+ enableProjectSpecificOptions(active);
+ }
+
+ private void enableProjectSpecificOptions(boolean isEnabled) {
+ grpValidation.setEnabled(isEnabled);
+ btnValidateOnActivation.setEnabled(isEnabled);
+ }
@Override protected String preferencePageId() {
return PREFERENCE_PAGE_ID;
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 f949ea3..3593840 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
@@ -1,10 +1,10 @@
/*
* Copyright (c) 2011 Google Inc.
- *
+ *
* 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
- *
+ *
* http://www.eclipse.org/legal/epl-v10.html
*/
package com.google.eclipse.protobuf.ui.validation;
@@ -12,9 +12,9 @@
import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.IMPORT__IMPORT_URI;
import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
-import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.util.ModelNodes;
+import java.util.List;
+import org.eclipse.core.resources.IProject;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.ui.*;
import org.eclipse.ui.part.FileEditorInput;
@@ -25,31 +25,46 @@
import org.eclipse.xtext.ui.editor.model.*;
import org.eclipse.xtext.util.concurrent.IUnitOfWork;
-import java.util.List;
+import com.google.eclipse.protobuf.protobuf.Import;
+import com.google.eclipse.protobuf.ui.internal.ProtobufActivator;
+import com.google.eclipse.protobuf.ui.preferences.pages.general.*;
+import com.google.eclipse.protobuf.util.ModelNodes;
+import com.google.inject.Injector;
/**
* Validates a .proto file when it is opened or activated.
- *
+ *
* @author alruiz@google.com (Alex Ruiz)
*/
public class ValidateOnActivation implements IPartListener2 {
+ private static final String LANGUAGE_NAME = "com.google.eclipse.protobuf.Protobuf";
+
private final ModelNodes nodes = new ModelNodes();
-
+
public void partActivated(IWorkbenchPartReference partRef) {
final XtextEditor editor = protoEditorFrom(partRef);
if (editor == null) return;
+ if (!shouldValidateEditor(editor.getResource().getProject())) return;
validate(editor);
}
-
+
+ private boolean shouldValidateEditor(IProject project) {
+ Injector injector = ProtobufActivator.getInstance().getInjector(LANGUAGE_NAME);
+ GeneralPreferencesFactory factory = injector.getInstance(GeneralPreferencesFactory.class);
+ if (factory == null) return false;
+ GeneralPreferences preferences = factory.preferences(project);
+ return preferences.validateFilesOnActivation();
+ }
+
private XtextEditor protoEditorFrom(IWorkbenchPartReference partRef) {
XtextEditor editor = xtextEditorFrom(partRef);
if (editor == null) return null;
- if (!"com.google.eclipse.protobuf.Protobuf".equals(editor.getLanguageName())) return null;
+ if (!LANGUAGE_NAME.equals(editor.getLanguageName())) return null;
if (!(editor.getEditorInput() instanceof FileEditorInput)) return null;
return editor;
}
-
+
private XtextEditor xtextEditorFrom(IWorkbenchPartReference partRef) {
IWorkbenchPage page = partRef.getPage();
if (page == null) return null;
@@ -81,7 +96,7 @@
if (uri == null) return;
anImport.setImportURI(uri);
}
-
+
private String uriAsEnteredInEditor(Import anImport) {
INode node = nodes.firstNodeForFeature(anImport, IMPORT__IMPORT_URI);
if (node == null) return null;