|
From: <caw...@us...> - 2007-03-26 01:47:19
|
Revision: 2221
http://svn.sourceforge.net/rubyeclipse/?rev=2221&view=rev
Author: cawilliams
Date: 2007-03-25 18:47:16 -0700 (Sun, 25 Mar 2007)
Log Message:
-----------
add new extension point which allows other plugins to contribute categroies and error/warnings to be shown in the Error/Warning preference page.
Modified Paths:
--------------
trunk/org.rubypeople.rdt.core/plugin.xml
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.java
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.properties
trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java
Added Paths:
-----------
trunk/org.rubypeople.rdt.core/schema/errorProvider.exsd
Modified: trunk/org.rubypeople.rdt.core/plugin.xml
===================================================================
--- trunk/org.rubypeople.rdt.core/plugin.xml 2007-03-26 01:38:59 UTC (rev 2220)
+++ trunk/org.rubypeople.rdt.core/plugin.xml 2007-03-26 01:47:16 UTC (rev 2221)
@@ -4,6 +4,7 @@
<extension-point id="loadpathVariableInitializer" name="%loadpathVariableInitializersName" schema="schema/loadpathVariableInitializer.exsd"/>
<extension-point id="loadpathContainerInitializer" name="%loadpathContainerInitializersName" schema="schema/loadpathContainerInitializer.exsd"/>
<extension-point id="compilationParticipant" name="%compilationParticipantsName" schema="schema/compilationParticipant.exsd"/>
+ <extension-point id="errorProvider" name="%errorProvidersName" schema="schema/errorProvider.exsd"/>
<extension
id="rubynature"
@@ -111,4 +112,12 @@
<initializer class="org.rubypeople.rdt.internal.core.RubyCorePreferenceInitializer"/>
</extension>
+
+ <extension
+ point="org.rubypeople.rdt.core.errorProvider">
+ <category id="org.rubypeople.rdt.errors.codeComplexity" name="Code Complexity" />
+ <category id="org.rubypeople.rdt.errors.potentialProblems" name="Potential programming problems" />
+ <category id="org.rubypeople.rdt.errors.unneccesaryCode" name="Unnecessary code" />
+ </extension>
+
</plugin>
Added: trunk/org.rubypeople.rdt.core/schema/errorProvider.exsd
===================================================================
--- trunk/org.rubypeople.rdt.core/schema/errorProvider.exsd (rev 0)
+++ trunk/org.rubypeople.rdt.core/schema/errorProvider.exsd 2007-03-26 01:47:16 UTC (rev 2221)
@@ -0,0 +1,183 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.rubypeople.rdt.core">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.rubypeople.rdt.core" id="errorProvider" name="%errorProviderName"/>
+ </appInfo>
+ <documentation>
+ This extension point allows plugins to participate in surfacing their error/warning markers through the preference page. Use this point to add new categories (or groups) of errors/warnings, and to add hooks to set teh severity and argumnets for your new/custom error/warning markers. This point is likely to be used in conjucntion with the compilationParticipants (which would do the actual parsing/AST analysis).
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <choice>
+ <element ref="category"/>
+ <element ref="error"/>
+ </choice>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="category">
+ <annotation>
+ <documentation>
+ Categories group togetehr a set of Errors/Warnings in the preference page.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+ A unique identifier for this category. Errors references this with their categoryId to be placed within this category.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string" use="required">
+ <annotation>
+ <documentation>
+ The text used in the preference page to group the errors.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="error">
+ <annotation>
+ <documentation>
+ An error is a type of Error/Warning that can be configured by the user.
+ </documentation>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="1">
+ <element ref="argument"/>
+ </sequence>
+ <attribute name="prefKey" type="string" use="required">
+ <annotation>
+ <documentation>
+ the preference key used to store the severity of the error/warning (which will be RubyCore.IGNORE, RubyCore.WARNING, or RubyCore.ERROR).
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="label" type="string" use="required">
+ <annotation>
+ <documentation>
+ The text used on the preference page to describe the error/warning.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="categoryId" type="string" use="required">
+ <annotation>
+ <documentation>
+ the id of the category under which this error/warning resides.
+ </documentation>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="argument">
+ <annotation>
+ <documentation>
+ If this preference has a particular value or argument associated with it, this element is used.
+ </documentation>
+ </annotation>
+ <complexType>
+ <attribute name="prefKey" type="string" use="required">
+ <annotation>
+ <documentation>
+ The preference key to store the value.
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="type" use="default" value="int">
+ <annotation>
+ <documentation>
+ The type of value. Defaults to int.
+ </documentation>
+ </annotation>
+ <simpleType>
+ <restriction base="string">
+ <enumeration value="int">
+ </enumeration>
+ <enumeration value="string">
+ </enumeration>
+ </restriction>
+ </simpleType>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ 0.9.0
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+ (C) 2007 Big Day Coming
+ </documentation>
+ </annotation>
+
+</schema>
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.java 2007-03-26 01:38:59 UTC (rev 2220)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.java 2007-03-26 01:47:16 UTC (rev 2221)
@@ -165,6 +165,9 @@
public static String NewJavaProjectPreferencePage_error_decode;
public static String NewJavaProjectPreferencePage_jre_variable_description;
public static String NewJavaProjectPreferencePage_jre_container_description;
+
+ public static String RubyBuildConfigurationBlock_empty_input;
+ public static String RubyBuildConfigurationBlock_invalid_input;
static {
NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class);
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.properties
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.properties 2007-03-26 01:38:59 UTC (rev 2220)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/PreferencesMessages.properties 2007-03-26 01:47:16 UTC (rev 2221)
@@ -184,4 +184,7 @@
ProjectSelectionDialog_filter=&Filter projects with no project specific settings
FoldingConfigurationBlock_enable= Enable f&olding
-FoldingConfigurationBlock_combo_caption= Select folding to &use:
\ No newline at end of file
+FoldingConfigurationBlock_combo_caption= Select folding to &use:
+
+RubyBuildConfigurationBlock_empty_input=Number cannot be empty.
+RubyBuildConfigurationBlock_invalid_input={0} is not a valid number for ''{1}''.
\ No newline at end of file
Modified: trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java
===================================================================
--- trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java 2007-03-26 01:38:59 UTC (rev 2220)
+++ trunk/org.rubypeople.rdt.ui/src/org/rubypeople/rdt/internal/ui/preferences/ProblemSeveritiesConfigurationBlock.java 2007-03-26 01:47:16 UTC (rev 2221)
@@ -10,7 +10,17 @@
*******************************************************************************/
package org.rubypeople.rdt.internal.ui.preferences;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
@@ -18,11 +28,14 @@
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import org.rubypeople.rdt.core.RubyCore;
+import org.rubypeople.rdt.internal.corext.util.Messages;
import org.rubypeople.rdt.internal.ui.RubyPlugin;
import org.rubypeople.rdt.internal.ui.dialogs.StatusInfo;
+import org.rubypeople.rdt.internal.ui.dialogs.StatusUtil;
import org.rubypeople.rdt.internal.ui.util.PixelConverter;
import org.rubypeople.rdt.internal.ui.wizards.IStatusChangeListener;
@@ -30,19 +43,8 @@
*/
public class ProblemSeveritiesConfigurationBlock extends OptionsConfigurationBlock {
- private static final String SETTINGS_SECTION_NAME= null; //"ProblemSeveritiesConfigurationBlock";
+ private static final String SETTINGS_SECTION_NAME= null; //"ProblemSeveritiesConfigurationBlock";
- // Preference store keys, see RubyCore.getOptions
- // TODO Actually implement checking for these things in the builders!
- private static final Key PREF_PB_ENSURE_BLOCK_NOT_COMPLETING = getRDTCoreKey(RubyCore.COMPILER_PB_ENSURE_BLOCK_NOT_COMPLETING);
- private static final Key PREF_PB_EMPTY_STATEMENT = getRDTCoreKey(RubyCore.COMPILER_PB_EMPTY_STATEMENT);
- private static final Key PREF_PB_HIDDEN_RESCUE_BLOCK = getRDTCoreKey(RubyCore.COMPILER_PB_HIDDEN_RESCUE_BLOCK);
- private static final Key PREF_PB_FALLTHROUGH_CASE = getRDTCoreKey(RubyCore.COMPILER_PB_FALLTHROUGH_CASE);
- private static final Key PREF_PB_NULL_REFERENCE = getRDTCoreKey(RubyCore.COMPILER_PB_NULL_REFERENCE);
- private static final Key PREF_PB_UNUSED_LOCAL = getRDTCoreKey(RubyCore.COMPILER_PB_UNUSED_LOCAL);
- private static final Key PREF_PB_UNUSED_PARAMETER = getRDTCoreKey(RubyCore.COMPILER_PB_UNUSED_PARAMETER);
- private static final Key PREF_PB_UNUSED_PRIVATE = getRDTCoreKey(RubyCore.COMPILER_PB_UNUSED_PRIVATE_MEMBER);
- private static final Key PREF_PB_UNNECESSARY_ELSE = getRDTCoreKey(RubyCore.COMPILER_PB_UNNECESSARY_ELSE);
// values
private static final String ERROR= RubyCore.ERROR;
private static final String WARNING= RubyCore.WARNING;
@@ -51,22 +53,98 @@
private static final String ENABLED= RubyCore.ENABLED;
private static final String DISABLED= RubyCore.DISABLED;
+ private static Key[] fgKeys;
+ private static Map<String, String> fgCategories;
+ private static HashMap<String, List<Error>> fgErrors;
-
private PixelConverter fPixelConverter;
+ private IStatus fStatus;
public ProblemSeveritiesConfigurationBlock(IStatusChangeListener context, IProject project, IWorkbenchPreferenceContainer container) {
super(context, project, getKeys(), container);
+ fStatus= new StatusInfo();
}
+ private static List<IConfigurationElement> getErrorProviderElements() {
+ List<IConfigurationElement> elements = new ArrayList<IConfigurationElement>();
+ IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(RubyCore.PLUGIN_ID, "errorProvider");
+ if (extension == null)
+ return elements;
+ IExtension[] extensions = extension.getExtensions();
+ for(int i = 0; i < extensions.length; i++) {
+ IConfigurationElement[] configElements = extensions[i].getConfigurationElements();
+ for (int j = 0; j < configElements.length; j++) elements.add(configElements[j]);
+ }
+ return elements;
+ }
+
+ private static Map<String, String> getErrorCategories() {
+ if (fgCategories != null) return fgCategories;
+ Map<String, String> categories = new HashMap<String, String>();
+ List<IConfigurationElement> configElements = getErrorProviderElements();
+ for (IConfigurationElement configElement : configElements) {
+ String name = configElement.getName();
+ String contributorName = configElement.getContributor().getName();
+ if (name.equals("category")) { // Grab the categories
+ categories.put(configElement.getAttribute("id"), configElement.getAttribute("name"));
+ }
+ }
+ fgCategories = categories;
+ return fgCategories;
+ }
+
+ private static class Error {
+ private String id;
+ private String label;
+ private String contributor;
+ private String argument;
+ private String type;
+
+ Error(IConfigurationElement element) {
+ this.id = element.getAttribute("prefKey");
+ this.label = element.getAttribute("label");
+ this.contributor = element.getContributor().getName();
+ IConfigurationElement[] elements = element.getChildren("argument");
+ if (elements != null && elements.length > 0) {
+ this.argument = elements[0].getAttribute("prefKey");
+ this.type = elements[0].getAttribute("type");
+ if (type == null) {
+ type = "int";
+ }
+ }
+ }
+ public boolean hasArgument() {
+ return argument != null;
+ }
+ public String getContributor() {
+ return contributor;
+ }
+ public String getId() {
+ return id;
+ }
+ public String getLabel() {
+ return label;
+ }
+ public String getArgument() {
+ return argument;
+ }
+ public boolean argumentIsInt() {
+ return hasArgument() && type.equals("int");
+ }
+ }
+
private static Key[] getKeys() {
- return new Key[] {
-// PREF_PB_ENSURE_BLOCK_NOT_COMPLETING,
- PREF_PB_EMPTY_STATEMENT,
-// PREF_PB_HIDDEN_RESCUE_BLOCK,
-// PREF_PB_FALLTHROUGH_CASE, PREF_PB_NULL_REFERENCE, PREF_PB_UNUSED_LOCAL,
-// PREF_PB_UNUSED_PARAMETER, PREF_PB_UNUSED_PRIVATE, PREF_PB_UNNECESSARY_ELSE
- };
+ if (fgKeys != null) return fgKeys;
+ List<Key> keys = new ArrayList<Key>();
+ Map<String, String> categories = getErrorCategories();
+ for (String categoryId : categories.keySet()) {
+ List<Error> errors = getErrors(categoryId);
+ for (Error error : errors) {
+ keys.add(getKey(error.getContributor(), error.getId()));
+ }
+ }
+ fgKeys = keys.toArray(new Key[keys.size()]);
+ return fgKeys;
}
/*
@@ -127,59 +205,50 @@
ExpandableComposite excomposite;
Composite inner;
- // --- potential_programming_problems
-
- label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_potential_programming_problems;
- excomposite= createStyleSection(composite, label, nColumns);
-
- inner= new Composite(excomposite, SWT.NONE);
- inner.setFont(composite.getFont());
- inner.setLayout(new GridLayout(nColumns, false));
- excomposite.setClient(inner);
+ Map<String, String> categories = getErrorCategories();
+ for (String categoryId : categories.keySet()) {
+ excomposite= createStyleSection(composite, categories.get(categoryId), nColumns);
+ inner= new Composite(excomposite, SWT.NONE);
+ inner.setFont(composite.getFont());
+ inner.setLayout(new GridLayout(nColumns, false));
+ excomposite.setClient(inner);
+
+ List<Error> errors = getErrors(categoryId);
+ for (Error error : errors) {
+ addComboBox(inner, error.label + ':', getKey(error.getContributor(), error.getId()), errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
+ if (error.hasArgument()) {
+ Text text= addTextField(inner, "", getKey(error.getContributor(), error.getArgument()), 0, 0);
+ GridData gd= (GridData) text.getLayoutData();
+ gd.widthHint= fPixelConverter.convertWidthInCharsToPixels(8);
+ gd.horizontalAlignment= GridData.END;
+ text.setTextLimit(6);
+ }
+ }
+ }
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_ensure_block_not_completing_label;
-// addComboBox(inner, label, PREF_PB_ENSURE_BLOCK_NOT_COMPLETING, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-
- label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_empty_statement_label;
- addComboBox(inner, label, PREF_PB_EMPTY_STATEMENT, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_hidden_rescueblock_label;
-// addComboBox(inner, label, PREF_PB_HIDDEN_RESCUE_BLOCK, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-//
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_fall_through_case;
-// addComboBox(inner, label, PREF_PB_FALLTHROUGH_CASE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-//
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_null_reference;
-// addComboBox(inner, label, PREF_PB_NULL_REFERENCE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-
- // --- unnecessary_code
-
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_section_unnecessary_code;
-// excomposite= createStyleSection(composite, label, nColumns);
-//
-// inner= new Composite(excomposite, SWT.NONE);
-// inner.setFont(composite.getFont());
-// inner.setLayout(new GridLayout(nColumns, false));
-// excomposite.setClient(inner);
-
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_local_label;
-// addComboBox(inner, label, PREF_PB_UNUSED_LOCAL, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-//
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_parameter_label;
-// addComboBox(inner, label, PREF_PB_UNUSED_PARAMETER, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-//
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unused_private_label;
-// addComboBox(inner, label, PREF_PB_UNUSED_PRIVATE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-//
-// label= PreferencesMessages.ProblemSeveritiesConfigurationBlock_pb_unnecessary_else_label;
-// addComboBox(inner, label, PREF_PB_UNNECESSARY_ELSE, errorWarningIgnore, errorWarningIgnoreLabels, defaultIndent);
-
IDialogSettings section= RubyPlugin.getDefault().getDialogSettings().getSection(SETTINGS_SECTION_NAME);
restoreSectionExpansionStates(section);
return sc1;
}
+ private static List<Error> getErrors(String categoryId) {
+ if (fgErrors == null) {
+ fgErrors = new HashMap<String, List<Error>>();
+ }
+ if (fgErrors.get(categoryId) != null) return fgErrors.get(categoryId);
+ List<Error> categories = new ArrayList<Error>();
+ List<IConfigurationElement> configElements = getErrorProviderElements();
+ for (IConfigurationElement configElement : configElements) {
+ String name = configElement.getName();
+ if (name.equals("error") && configElement.getAttribute("categoryId").equals(categoryId)) { // Grab the errors for this category
+ categories.add(new Error(configElement));
+ }
+ }
+ fgErrors.put(categoryId, categories);
+ return categories;
+ }
+
/* (non-javadoc)
* Update fields and validate.
* @param changedKey Key that changed, or null, if all changed.
@@ -187,18 +256,53 @@
protected void validateSettings(Key changedKey, String oldValue, String newValue) {
if (!areSettingsEnabled()) {
return;
- }
-
+ }
if (changedKey != null) {
- return;
+ List<Error> errors = getErrors();
+ for (Error error : errors) {
+ if (error.hasArgument() && error.argumentIsInt() && changedKey.getName().equals(error.getArgument())) {
+ fStatus = validateMaxNumber(changedKey, error.getLabel());
+ fContext.statusChanged(fStatus);
+ return;
+ }
+ }
} else {
updateEnableStates();
}
- fContext.statusChanged(new StatusInfo());
+ IStatus status= StatusUtil.getMostSevere(new IStatus[] { fStatus });
+ fContext.statusChanged(status);
}
+ private static List<Error> getErrors() {
+ List<Error> errors = new ArrayList<Error>();
+ Map<String, String> categories = getErrorCategories();
+ for (String categoryId : categories.keySet()) {
+ errors.addAll(getErrors(categoryId));
+ }
+ return errors;
+ }
+
+ private IStatus validateMaxNumber(Key key, String label) {
+ String number= getValue(key);
+ StatusInfo status= new StatusInfo();
+ if (number.length() == 0) {
+ status.setError(PreferencesMessages.RubyBuildConfigurationBlock_empty_input);
+ } else {
+ try {
+ int value= Integer.parseInt(number);
+ if (value <= 0) {
+ status.setError(Messages.format(PreferencesMessages.RubyBuildConfigurationBlock_invalid_input, new Object[] {number, label}));
+ }
+ } catch (NumberFormatException e) {
+ status.setError(Messages.format(PreferencesMessages.RubyBuildConfigurationBlock_invalid_input, new Object[] {number, label}));
+ }
+ }
+ return status;
+ }
+
private void updateEnableStates() {
// TODO Handle enabling/disabling checkboxes as prefs change
+ // FIXME Iterate through errors which have "arguments", if error is set to ignore, disable value textbox!
}
protected String[] getFullBuildDialogStrings(boolean workspaceSettings) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|