Skip to main content
summaryrefslogtreecommitdiffstats
path: root/codan
diff options
context:
space:
mode:
Diffstat (limited to 'codan')
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/Messages.java1
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/messages.properties1
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/AbstractProblemPreference.java27
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/BasicProblemPreference.java34
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/FileScopeProblemPreference.java78
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreference.java8
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeDescriptor.java2
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeValue.java17
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceDescriptor.java22
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceValue.java3
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/ListProblemPreference.java85
-rw-r--r--codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/MapProblemPreference.java63
12 files changed, 211 insertions, 130 deletions
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/Messages.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/Messages.java
index 443dc876f56..312c5c2050c 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/Messages.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/Messages.java
@@ -25,6 +25,7 @@ public class Messages extends NLS {
public static String CodanApplication_Usage;
public static String CodanApplication_verbose_option;
public static String CodanBuilder_Code_Analysis_On;
+ public static String FileScopeProblemPreference_Label;
static {
// initialize resource bundle
NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/messages.properties b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/messages.properties
index 41fe85c855c..a542639d51c 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/messages.properties
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/messages.properties
@@ -6,3 +6,4 @@ CodanApplication_Options=Options:
CodanApplication_all_option= -all - run on all projects in workspace
CodanApplication_verbose_option= -verbose - print verbose build information
CodanBuilder_Code_Analysis_On=Code analysis on
+FileScopeProblemPreference_Label=Exclusion and Inclusion
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/AbstractProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/AbstractProblemPreference.java
index a5b6520b020..0236c721524 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/AbstractProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/AbstractProblemPreference.java
@@ -17,22 +17,17 @@ import java.io.StreamTokenizer;
/**
* Default implementation of problem preference. It keeps preference metadata
- * together with preference itself.
+ * together with preference value. Some implementations may separate them.
*
*/
public abstract class AbstractProblemPreference implements IProblemPreference {
public static final String PARAM = "param"; //$NON-NLS-1$
- protected String key;
- protected String label;
- protected String toolTip = null;
- protected PreferenceType type;
- protected String uiInfo;
+ private String key = PARAM;
+ private String label = ""; //$NON-NLS-1$
+ private String toolTip = null;
+ private String uiInfo;
private IProblemPreference parent;
- public PreferenceType getType() {
- return type;
- }
-
public String getLabel() {
return label;
}
@@ -50,11 +45,13 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
}
public void setKey(String key) {
+ if (key == null)
+ throw new NullPointerException("key"); //$NON-NLS-1$
if (isValidIdentifier(key))
this.key = key;
else
throw new IllegalArgumentException(
- "Key must have java identifier syntax or number, i.e no dots and other funky stuff"); //$NON-NLS-1$
+ "Key must have java identifier syntax or number, i.e no dots and other funky stuff: " + key); //$NON-NLS-1$
}
protected boolean isValidIdentifier(String id) {
@@ -81,12 +78,6 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
this.toolTip = tooltip;
}
- public void setType(PreferenceType type) {
- if (type == null)
- throw new NullPointerException("Type cannot be null"); //$NON-NLS-1$
- this.type = type;
- }
-
public void setUiInfo(String uiinfo) {
this.uiInfo = uiinfo;
}
@@ -136,7 +127,7 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
/**
* @param parent
- * the parent to set
+ * the parent to set
*/
public void setParent(IProblemPreference parent) {
this.parent = parent;
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/BasicProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/BasicProblemPreference.java
index a6a0a7f14f8..08a20248363 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/BasicProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/BasicProblemPreference.java
@@ -22,30 +22,32 @@ import java.util.regex.Pattern;
*
*/
public class BasicProblemPreference extends AbstractProblemPreference {
- Object value;
- {
- key = PARAM;
- type = PreferenceType.TYPE_STRING;
+ protected Object value;
+ private PreferenceType type = PreferenceType.TYPE_STRING;
+
+ public PreferenceType getType() {
+ return type;
+ }
+
+ public void setType(PreferenceType type) {
+ if (type == null)
+ throw new NullPointerException("Type cannot be null"); //$NON-NLS-1$
+ this.type = type;
}
/**
* Generate an info with given key and label
*
* @param key
- * - property id (use in actual property hash of a checker)
+ * - property id (use in actual property hash of a checker)
* @param label
- * - label to be shown to user
+ * - label to be shown to user
* @param type
- * - parameter type
+ * - parameter type
* @return
*/
public BasicProblemPreference(String key, String label, PreferenceType type) {
- if (key == null)
- throw new NullPointerException("key"); //$NON-NLS-1$
- if (type == null)
- throw new NullPointerException("type"); //$NON-NLS-1$
- setKey(key);
- setLabel(label);
+ this(key, label);
setType(type);
}
@@ -53,9 +55,9 @@ public class BasicProblemPreference extends AbstractProblemPreference {
* Generate an info with given key and label
*
* @param key
- * - property id (use in actual property hash of a checker)
+ * - property id (use in actual property hash of a checker)
* @param label
- * - label to be shown to user
+ * - label to be shown to user
* @return
*/
public BasicProblemPreference(String key, String label) {
@@ -113,7 +115,7 @@ public class BasicProblemPreference extends AbstractProblemPreference {
@Override
public String toString() {
- return "(" + type + ")" + key + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
+ return "(" + type + ")" + getKey() + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
}
@Override
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/FileScopeProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/FileScopeProblemPreference.java
index a75ebee4af9..c10d9a5e61c 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/FileScopeProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/FileScopeProblemPreference.java
@@ -16,6 +16,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import org.eclipse.cdt.codan.core.Messages;
import org.eclipse.cdt.codan.internal.core.CharOperation;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -26,7 +27,9 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
/**
- * TODO: add description
+ * Custom preference for resource scope
+ *
+ * @noextend This class is not intended to be extended by clients.
*/
public class FileScopeProblemPreference extends AbstractProblemPreference {
public static final String KEY = "fileScope"; //$NON-NLS-1$
@@ -38,13 +41,18 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
public FileScopeProblemPreference() {
setKey(KEY);
- setLabel("File Exclusion and Inclusion");
- setType(PreferenceType.TYPE_CUSTOM);
+ setLabel(Messages.FileScopeProblemPreference_Label);
+ }
+
+ public PreferenceType getType() {
+ return PreferenceType.TYPE_CUSTOM;
}
/**
+ * Get attribute. Possible keys are EXCUSION and INCLUSION
+ *
* @param key
- * @return
+ * @return class attribute for given key
*/
public IPath[] getAttribute(String key) {
if (key == EXCLUSION)
@@ -54,6 +62,11 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
return null;
}
+ /**
+ * Set attribute to a value. Possible keys are EXCUSION and INCLUSION
+ *
+ * @param key
+ */
public void setAttribute(String key, IPath[] value) {
if (key == EXCLUSION)
exclusion = value.clone();
@@ -62,7 +75,8 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
}
/**
- * @return
+ * @return null for workspace, or project of the resource it is applicable
+ * for
*/
public IProject getProject() {
if (resource != null)
@@ -71,7 +85,7 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
}
/**
- * @return
+ * @return path of the resource it is applicable to
*/
public IPath getPath() {
if (resource != null)
@@ -83,14 +97,14 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
/**
* @param resource
- * the resource to set
+ * the resource to set
*/
public void setResource(IResource resource) {
this.resource = resource;
}
/**
- * @return the resource
+ * @return the resource for which scope is define. Null if workspace.
*/
public IResource getResource() {
return resource;
@@ -101,12 +115,7 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
+ exportPathList(EXCLUSION, exclusion);
}
- /**
- * @param inclusion2
- * @param inclusion3
- * @return
- */
- private String exportPathList(String key, IPath[] arr) {
+ protected String exportPathList(String key, IPath[] arr) {
String res = key + "=>("; //$NON-NLS-1$
for (int i = 0; i < arr.length; i++) {
if (i != 0)
@@ -116,13 +125,6 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
return res + ")"; //$NON-NLS-1$
}
- /*
- * (non-Javadoc)
- *
- * @see
- * org.eclipse.cdt.codan.core.param.AbstractProblemPreference#importValue
- * (java.io.StreamTokenizer)
- */
@Override
public void importValue(StreamTokenizer tokenizer) throws IOException {
List<IPath> inc = importPathList(tokenizer, INCLUSION);
@@ -132,11 +134,6 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
exclusion = exc.toArray(new IPath[exc.size()]);
}
- /**
- * @param tokenizer
- * @param c
- * @throws IOException
- */
private void checkChar(StreamTokenizer tokenizer, char c)
throws IOException {
tokenizer.nextToken();
@@ -144,12 +141,6 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
throw new IllegalArgumentException("Expected " + c); //$NON-NLS-1$
}
- /**
- * @param tokenizer
- * @param inclusion2
- * @throws IOException
- * @throws IllegalAccessException
- */
private void checkKeyword(StreamTokenizer tokenizer, String keyword)
throws IOException {
tokenizer.nextToken();
@@ -219,28 +210,29 @@ public class FileScopeProblemPreference extends AbstractProblemPreference {
}
/**
- * @param file
- * @return
+ * Checks that resource denotated by the given path is in scope (defined by
+ * exclusion/inclusion settings of this class). In inclusion list is defined
+ * check first if it belongs to it, returns false if not.
+ * Then checks if it belongs to exclusion list and return false if it is.
+ *
+ * @param path
+ * - resource path
+ * @return true is given path is in scope
*/
- public boolean isInScope(IPath file) {
+ public boolean isInScope(IPath path) {
//System.err.println("test " + file + " " + exportValue());
if (inclusion.length > 0) {
- if (!matchesFilter(file, inclusion))
+ if (!matchesFilter(path, inclusion))
return false;
}
if (exclusion.length > 0) {
- if (matchesFilter(file, exclusion))
+ if (matchesFilter(path, exclusion))
return false;
}
return true;
}
- /**
- * @param resourcePath
- * @param inclusion2
- * @return
- */
- private boolean matchesFilter(IPath resourcePath, IPath[] paths) {
+ public boolean matchesFilter(IPath resourcePath, IPath[] paths) {
char[] path = resourcePath.toString().toCharArray();
for (int i = 0, length = paths.length; i < length; i++) {
char[] pattern = paths[i].toString().toCharArray();
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreference.java
index 25a02c48346..6b0c3168190 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreference.java
@@ -11,10 +11,14 @@
package org.eclipse.cdt.codan.core.param;
/**
- * Value of the problem preference. If more than one it can be composite, i.e.
- * map. Instead of implementing this interface use
+ * Problem preference. If problem has more than one it can be composite, i.e.
+ * map. Instead of implementing this interface clients must extend
* {@link AbstractProblemPreference} class.
*
+ * Problem Preference constist of preference metadata
+ * (IProblemPreferenceDescriptor)
+ * and value of preference (IProblemPreferenceValue).
+ *
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeDescriptor.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeDescriptor.java
index e16c377e3be..fd792bd08f1 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeDescriptor.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeDescriptor.java
@@ -28,7 +28,7 @@ public interface IProblemPreferenceCompositeDescriptor {
IProblemPreference getChildDescriptor(String key);
/**
- * Available if type is list or map. Returns array of children.
+ * Available for composite types. Returns array of children.
*
* @return
*/
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeValue.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeValue.java
index 89ce7d88625..f894c24846c 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeValue.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceCompositeValue.java
@@ -17,9 +17,26 @@ package org.eclipse.cdt.codan.core.param;
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IProblemPreferenceCompositeValue {
+ /**
+ * Returns value of the child element of a given key
+ *
+ * @param key
+ * @return
+ */
Object getChildValue(String key);
+ /**
+ * Sets the value of the child element of a given key
+ *
+ * @param key
+ * @param value
+ */
void setChildValue(String key, Object value);
+ /**
+ * Removes child element matching the given key
+ *
+ * @param key
+ */
void removeChildValue(String key);
}
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceDescriptor.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceDescriptor.java
index 53f1440ec4c..3b2c8b7a190 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceDescriptor.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceDescriptor.java
@@ -15,7 +15,7 @@ import java.util.List;
import java.util.Map;
/**
- * Problem parameter usually key=value settings that allow to alter checker
+ * Problem parameter usually key=value settings that allows to alter checker
* behaviour for given problem. For example if checker finds violation of naming
* conventions for function, parameter would be the pattern of allowed names.
*
@@ -84,17 +84,18 @@ public interface IProblemPreferenceDescriptor extends Cloneable {
/**
* type of the parameter, supports boolean, integer, string, file, list and
- * hash. If list is the value - it is an array - subparameter can be
- * accessed by number, if hash is the value - it is a hash - subparameter
- * can be accesses by name
+ * map. For list type child preference can be
+ * accessed by number (index), if map is the type child preference can be
+ * accessed by a key (string)
*
- * @return string value of the type
+ * @return type of the preference
*/
PreferenceType getType();
/**
* Additional info on how it is represented in the ui, for example boolean
- * can be represented as checkbox, drop-down and so on, Values TBD
+ * can be represented as checkbox, drop-down and so on, Values TBD.
+ * Not supported at the moment.
*
* @return ui info or null if not set
*/
@@ -108,7 +109,7 @@ public interface IProblemPreferenceDescriptor extends Cloneable {
String getLabel();
/**
- * Detailed explanation of parameter
+ * Detailed explanation of parameter. Not supported at the moment.
*
* @return the toolTip text
*/
@@ -118,7 +119,10 @@ public interface IProblemPreferenceDescriptor extends Cloneable {
IProblemPreference getParent();
- public void setParent(IProblemPreference parent);
-
+ /**
+ * Combined key of values from parents plus itself separated by dot
+ *
+ * @return
+ */
String getQualifiedKey();
}
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceValue.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceValue.java
index ddb8e233f34..25033d75e03 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceValue.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/IProblemPreferenceValue.java
@@ -12,7 +12,8 @@ package org.eclipse.cdt.codan.core.param;
/**
* Value of the problem preference. If more than one it can be composite, i.e.
- * map
+ * map.Extend {@link AbstractProblemPreference} class
+ * to implement this interface.
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/ListProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/ListProblemPreference.java
index e9ccf74a618..4621ad9a810 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/ListProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/ListProblemPreference.java
@@ -29,36 +29,34 @@ public class ListProblemPreference extends AbstractProblemPreference implements
/**
* @param key
+ * - key to access this preference
* @param label
+ * - label to be shown in UI
*/
public ListProblemPreference(String key, String label) {
setKey(key);
setLabel(label);
}
- @Override
public PreferenceType getType() {
return PreferenceType.TYPE_LIST;
}
- @Override
- public void setType(PreferenceType type) {
- throw new UnsupportedOperationException();
- }
-
/**
- * Set child descriptor (all elements have the same)
+ * Set child descriptor (all elements have the same). Value and key
+ * of the it would be ignored and reset.
*
- * @param i
- * @param info
+ * @param desc
* @return
*/
- public IProblemPreference setChildDescriptor(IProblemPreference info) {
- childDescriptor = info;
- childDescriptor.setValue(null);
- ((AbstractProblemPreference) childDescriptor)
- .setKey(COMMON_DESCRIPTOR_KEY);
- return info;
+ public IProblemPreference setChildDescriptor(IProblemPreference desc) {
+ childDescriptor = desc;
+ if (desc != null) {
+ childDescriptor.setValue(null);
+ ((AbstractProblemPreference) childDescriptor)
+ .setKey(COMMON_DESCRIPTOR_KEY);
+ }
+ return desc;
}
/**
@@ -76,10 +74,22 @@ public class ListProblemPreference extends AbstractProblemPreference implements
return getChildDescriptor(key);
}
+ /**
+ * Returns descriptor of the child elements
+ *
+ * @return
+ */
public IProblemPreference getChildDescriptor() {
return childDescriptor;
}
+ /**
+ * Returns cloned descriptor of the i'th child. Modifying return value would
+ * not affect internal state of the list element.
+ *
+ * @param i
+ * @return
+ */
public IProblemPreference getChildDescriptor(int i) {
Object value = list.get(i);
AbstractProblemPreference desc = (AbstractProblemPreference) childDescriptor
@@ -94,7 +104,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
* If key is null or # return generic descriptor with null value.
*
* @throws NumberFormatException
- * if key is not number
+ * if key is not number
*/
public IProblemPreference getChildDescriptor(String key)
throws NumberFormatException {
@@ -113,6 +123,9 @@ public class ListProblemPreference extends AbstractProblemPreference implements
return getChildDescriptor(iv.intValue());
}
+ /**
+ * Return array of clones values of child preferences.
+ */
public IProblemPreference[] getChildDescriptors() {
IProblemPreference[] res = new IProblemPreference[list.size()];
for (int i = 0; i < res.length; i++) {
@@ -122,8 +135,12 @@ public class ListProblemPreference extends AbstractProblemPreference implements
}
public Object getChildValue(String key) {
- IProblemPreference childInfo = getChildDescriptor(key);
- return childInfo.getValue();
+ int index = Integer.parseInt(key);
+ return getChildValue(index);
+ }
+
+ public Object getChildValue(int index) {
+ return list.get(index);
}
public void setChildValue(String key, Object value) {
@@ -131,11 +148,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
setChildValue(i, value);
}
- /**
- * @param i
- * @param value
- */
- protected void setChildValue(int i, Object value) {
+ public void setChildValue(int i, Object value) {
if (value != null) {
while (i >= list.size()) {
list.add(null);
@@ -229,23 +242,44 @@ public class ListProblemPreference extends AbstractProblemPreference implements
}
}
+ /**
+ * If info key is '#' resets common descritors to null, otherwise removes
+ * value
+ */
public void removeChildDescriptor(IProblemPreference info) {
- throw new UnsupportedOperationException();
+ if (info.getKey().equals(COMMON_DESCRIPTOR_KEY))
+ setChildDescriptor(null);
+ else
+ removeChildValue(info.getKey());
}
+ /**
+ * @return children size
+ */
public int size() {
return list.size();
}
+ /**
+ * Removes all values from the list
+ */
public void clear() {
list.clear();
}
+ /**
+ * Return array of values of children elements.
+ */
@Override
public Object getValue() {
return getValues();
}
+ /**
+ * Sets list value to values of array given as argument.
+ *
+ * @param value - must be Object[]
+ */
@Override
public void setValue(Object value) {
Object[] values = (Object[]) value;
@@ -264,6 +298,9 @@ public class ListProblemPreference extends AbstractProblemPreference implements
return childDescriptor + ":" + list.toString(); //$NON-NLS-1$
}
+ /**
+ * Return array of values of children elements.
+ */
public Object[] getValues() {
return list.toArray(new Object[list.size()]);
}
diff --git a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/MapProblemPreference.java b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/MapProblemPreference.java
index acf474e6f19..c737ba65723 100644
--- a/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/MapProblemPreference.java
+++ b/codan/org.eclipse.cdt.codan.core/src/org/eclipse/cdt/codan/core/param/MapProblemPreference.java
@@ -40,27 +40,21 @@ public class MapProblemPreference extends AbstractProblemPreference implements
/**
* @param key
- * - key for itself
+ * - key for itself
* @param label
- * - label for this group of parameters
+ * - label for this group of parameters
*/
public MapProblemPreference(String key, String label) {
setKey(key);
setLabel(label);
}
- @Override
public PreferenceType getType() {
return PreferenceType.TYPE_MAP;
}
- @Override
- public void setType(PreferenceType type) {
- throw new UnsupportedOperationException();
- }
-
/**
- * Get parameter into for element by key
+ * Get parameter preference for element by key
*
*/
public IProblemPreference getChildDescriptor(String key) {
@@ -68,32 +62,52 @@ public class MapProblemPreference extends AbstractProblemPreference implements
}
/**
- * Put parameter info into the map for element with the key equals to
- * info.getKey()
+ * Adds or replaces child descriptor and value for the element with the key
+ * equals to desc.getKey(). The desc object would be put in the map, some of
+ * its field may be modified.
*
- * @param i
- * @param info
+ * @param desc
*/
public IProblemPreference addChildDescriptor(IProblemPreference desc) {
- desc.setParent(this);
+ ((AbstractProblemPreference) desc).setParent(this);
hash.put(desc.getKey(), desc);
return desc;
}
+ /**
+ * Return list of child descriptors. Client should threat returned value as
+ * read only,
+ * and not assume that modifying its elements would modify actual child
+ * values.
+ */
public IProblemPreference[] getChildDescriptors() {
return hash.values().toArray(
new IProblemPreference[hash.values().size()]);
}
+ /**
+ * Returns value of the child element by its key
+ */
public Object getChildValue(String key) {
IProblemPreference childInfo = getChildDescriptor(key);
return childInfo.getValue();
}
+ /**
+ * Set child value by its key
+ */
public void setChildValue(String key, Object value) {
- getChildDescriptor(key).setValue(value);
+ IProblemPreference pref = getChildDescriptor(key);
+ if (pref == null)
+ throw new IllegalArgumentException("Preference for " + key //$NON-NLS-1$
+ + " must exists before setting its value"); //$NON-NLS-1$
+ pref.setValue(value);
+ hash.put(key, pref); // cannot assume getChildDescriptor returns shared value
}
+ /**
+ * Removes child value and descriptor by key
+ */
public void removeChildValue(String key) {
hash.remove(key);
}
@@ -170,8 +184,11 @@ public class MapProblemPreference extends AbstractProblemPreference implements
}
}
+ /**
+ * Removes child descriptor by its key
+ */
public void removeChildDescriptor(IProblemPreference info) {
- hash.remove(info);
+ hash.remove(info.getKey());
}
public int size() {
@@ -187,6 +204,11 @@ public class MapProblemPreference extends AbstractProblemPreference implements
return hash.values().toString();
}
+ /**
+ * Value of this preference is a map key=>value of child preferences.
+ * Modifying this returned map would not change internal state of this
+ * object.
+ */
@Override
public Object getValue() {
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
@@ -198,6 +220,14 @@ public class MapProblemPreference extends AbstractProblemPreference implements
return map;
}
+ /**
+ * Set values for this object child elements. Elements are not present in
+ * this map would be removed.
+ * Preference descriptors for the keys must be set before calling this
+ * method, unless value if instanceof IProblemPreference.
+ *
+ * @param value - must be Map<String,Object>
+ */
@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
@@ -212,6 +242,7 @@ public class MapProblemPreference extends AbstractProblemPreference implements
if (value2 instanceof IProblemPreference) {
hash.put(key, (IProblemPreference) value2);
} else {
+ setChildValue(key, value2);
IProblemPreference pref = hash2.get(key);
pref.setValue(value2);
hash.put(key, pref);

Back to the top