mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-30 20:35:38 +02:00
Fixed preferences of type List
This commit is contained in:
parent
6debae007d
commit
644fefb8c5
11 changed files with 367 additions and 92 deletions
|
@ -10,6 +10,8 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.codan.core.param;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
|
||||
|
@ -37,7 +39,7 @@ public class ListProblemPreferenceTest extends TestCase {
|
|||
protected BasicProblemPreference addPar(String key, Object parval) {
|
||||
BasicProblemPreference str = makePar(key, parval);
|
||||
list.addChildDescriptor(str);
|
||||
return str;
|
||||
return (BasicProblemPreference) list.getChildDescriptor(key);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -100,4 +102,31 @@ public class ListProblemPreferenceTest extends TestCase {
|
|||
assertEquals("a=b", list.getChildValue(PAR1)); //$NON-NLS-1$
|
||||
assertEquals(p2.getValue(), list.getChildValue(PAR2));
|
||||
}
|
||||
|
||||
public void testGetValue() {
|
||||
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
|
||||
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
list.addChildValue(x[0]);
|
||||
list.addChildValue(x[1]);
|
||||
Object[] values = list.getValues();
|
||||
assertTrue(Arrays.deepEquals(x, values));
|
||||
}
|
||||
|
||||
public void testSetValue() {
|
||||
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
|
||||
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
list.setValue(x);
|
||||
Object[] values = list.getValues();
|
||||
assertTrue(Arrays.deepEquals(x, values));
|
||||
}
|
||||
|
||||
public void testSetValueImport() {
|
||||
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
|
||||
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
|
||||
list.setValue(x);
|
||||
list.importValue("(x)"); //$NON-NLS-1$
|
||||
Object[] values = list.getValues();
|
||||
assertEquals(1, values.length);
|
||||
assertEquals("x", values[0]); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.codan.core.model;
|
|||
import org.eclipse.cdt.codan.core.param.BasicProblemPreference;
|
||||
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
||||
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
|
||||
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
||||
import org.eclipse.cdt.codan.core.param.MapProblemPreference;
|
||||
|
||||
/**
|
||||
|
@ -53,6 +54,30 @@ public abstract class AbstractCheckerWithProblemPreferences extends
|
|||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add preference of type list with default string type, list is empty by
|
||||
* default
|
||||
*
|
||||
* @param problem
|
||||
* - problem
|
||||
* @param key
|
||||
* - preference key
|
||||
* @param label
|
||||
* - preference label
|
||||
* @return preference instance of of the list, can be used to add default
|
||||
* values or set different element type
|
||||
*
|
||||
*/
|
||||
public ListProblemPreference addListPreference(IProblemWorkingCopy problem,
|
||||
String key, String label, String itemLabel) {
|
||||
MapProblemPreference map = getTopLevelPreferenceMap(problem);
|
||||
ListProblemPreference list = new ListProblemPreference(key, label);
|
||||
list.setChildDescriptor(new BasicProblemPreference(
|
||||
ListProblemPreference.COMMON_DESCRIPTOR_KEY, itemLabel,
|
||||
PreferenceType.TYPE_STRING));
|
||||
return (ListProblemPreference) map.addChildDescriptor(list);
|
||||
}
|
||||
|
||||
public IProblemPreference addPreference(IProblemWorkingCopy problem,
|
||||
IProblemPreference info, Object defaultValue) {
|
||||
MapProblemPreference map = getTopLevelPreferenceMap(problem);
|
||||
|
@ -70,7 +95,7 @@ public abstract class AbstractCheckerWithProblemPreferences extends
|
|||
String key, Object defaultValue) {
|
||||
MapProblemPreference map = getTopLevelPreferenceMap(problem);
|
||||
if (map.getChildValue(key) == null)
|
||||
map.addChildValue(key, defaultValue);
|
||||
map.setChildValue(key, defaultValue);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -62,6 +62,8 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
|
|||
int n = id.length();
|
||||
if (n == 0)
|
||||
return false;
|
||||
if (id.equals("#")) //$NON-NLS-1$
|
||||
return true;
|
||||
for (int i = 0; i < n; i++)
|
||||
if (!Character.isJavaIdentifierPart(id.charAt(i)))
|
||||
return false;
|
||||
|
@ -144,4 +146,10 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
|
|||
return getKey();
|
||||
return parent.getQualifiedKey() + "." + getKey(); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/**
|
||||
* @param tokenizer
|
||||
* @return
|
||||
*/
|
||||
public abstract void importValue(StreamTokenizer tokenizer);
|
||||
}
|
||||
|
|
|
@ -129,4 +129,20 @@ public class BasicProblemPreference extends AbstractProblemPreference {
|
|||
String sval = tokenizer.sval;
|
||||
return sval;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "(" + type + ")" + key + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
|
||||
}
|
||||
|
||||
@Override
|
||||
public void importValue(StreamTokenizer tokenizer) {
|
||||
try {
|
||||
tokenizer.nextToken();
|
||||
String val = tokenizer.sval;
|
||||
importValue(val);
|
||||
} catch (IOException e) {
|
||||
new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ public interface IProblemPreferenceCompositeDescriptor {
|
|||
*/
|
||||
IProblemPreference[] getChildDescriptors();
|
||||
|
||||
void addChildDescriptor(IProblemPreference info);
|
||||
IProblemPreference addChildDescriptor(IProblemPreference info);
|
||||
|
||||
void removeChildDescriptor(IProblemPreference info);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ package org.eclipse.cdt.codan.core.param;
|
|||
public interface IProblemPreferenceCompositeValue {
|
||||
Object getChildValue(String key);
|
||||
|
||||
void addChildValue(String key, Object value);
|
||||
void setChildValue(String key, Object value);
|
||||
|
||||
void removeChildValue(String key);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@ package org.eclipse.cdt.codan.core.param;
|
|||
import java.io.IOException;
|
||||
import java.io.StreamTokenizer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
|
@ -22,8 +23,9 @@ import java.util.Iterator;
|
|||
*/
|
||||
public class ListProblemPreference extends AbstractProblemPreference implements
|
||||
IProblemPreferenceCompositeValue, IProblemPreferenceCompositeDescriptor {
|
||||
protected ArrayList<IProblemPreference> list = new ArrayList<IProblemPreference>(
|
||||
1);
|
||||
public static final String COMMON_DESCRIPTOR_KEY = "#"; //$NON-NLS-1$
|
||||
protected ArrayList<Object> list = new ArrayList<Object>();
|
||||
protected IProblemPreference childDescriptor;
|
||||
|
||||
/**
|
||||
* @param key
|
||||
|
@ -45,66 +47,78 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
|||
}
|
||||
|
||||
/**
|
||||
* Get parameter into for element equal to key's int value.
|
||||
* Set child descriptor (all elements have the same)
|
||||
*
|
||||
* @param i
|
||||
* @param info
|
||||
* @return
|
||||
*/
|
||||
public IProblemPreference setChildDescriptor(IProblemPreference info) {
|
||||
childDescriptor = info;
|
||||
childDescriptor.setValue(null);
|
||||
((AbstractProblemPreference) childDescriptor)
|
||||
.setKey(COMMON_DESCRIPTOR_KEY);
|
||||
return info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets common descriptor for all elements, if value if not null sets the
|
||||
* value for its key also. Do not make assumptions of values of desc after
|
||||
* you pass it to this function.
|
||||
*
|
||||
* @return read only preference matching the key
|
||||
*/
|
||||
public IProblemPreference addChildDescriptor(IProblemPreference desc) {
|
||||
Object value = desc.getValue();
|
||||
String key = desc.getKey();
|
||||
setChildDescriptor(desc);
|
||||
setChildValue(key, value);
|
||||
return getChildDescriptor(key);
|
||||
}
|
||||
|
||||
public IProblemPreference getChildDescriptor() {
|
||||
return childDescriptor;
|
||||
}
|
||||
|
||||
public IProblemPreference getChildDescriptor(int i) {
|
||||
Object value = list.get(i);
|
||||
AbstractProblemPreference desc = (AbstractProblemPreference) childDescriptor
|
||||
.clone();
|
||||
desc.setKey(String.valueOf(i));
|
||||
desc.setValue(value);
|
||||
return desc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get read only problem preference for element equal to key's int value.
|
||||
* If key is null or # return generic descriptor with null value.
|
||||
*
|
||||
* @throws NumberFormatException
|
||||
* if key is not number
|
||||
* @throws ArrayIndexOutOfBoundsException
|
||||
* is index is out of bound
|
||||
*/
|
||||
public IProblemPreference getChildDescriptor(String key)
|
||||
throws NumberFormatException {
|
||||
if (key == null) {
|
||||
// special case if all element are the same return first, if key is
|
||||
// null
|
||||
return (IProblemPreference) getChildDescriptor(0).clone();
|
||||
if (key == null || key.equals(COMMON_DESCRIPTOR_KEY)) {
|
||||
// return common descriptor
|
||||
return getChildDescriptor();
|
||||
}
|
||||
Integer iv = Integer.valueOf(key);
|
||||
if (iv.intValue() >= list.size()) {
|
||||
// special case if all element are the same return first clone
|
||||
IProblemPreference childInfo = (IProblemPreference) getChildDescriptor(
|
||||
0).clone();
|
||||
return childInfo;
|
||||
// create one
|
||||
AbstractProblemPreference clone = (AbstractProblemPreference) childDescriptor
|
||||
.clone();
|
||||
clone.setKey(key);
|
||||
return clone;
|
||||
}
|
||||
return getChildDescriptor(iv.intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set i'th element of parameter info, if all are the same i is 0
|
||||
*
|
||||
* @param i
|
||||
* @param info
|
||||
*/
|
||||
public void setChildDescriptor(int i, IProblemPreference info) {
|
||||
if (info != null) {
|
||||
while (i >= list.size()) {
|
||||
list.add(null);
|
||||
}
|
||||
list.set(i, info);
|
||||
} else {
|
||||
while (i == list.size() - 1) {
|
||||
list.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* If all list elements have same info it is enough to set only first one
|
||||
* (index 0). When value is set for the other it will be replicated.
|
||||
*/
|
||||
public void addChildDescriptor(IProblemPreference info) {
|
||||
Integer iv = Integer.valueOf(info.getKey());
|
||||
IProblemPreference desc = (IProblemPreference) info.clone();
|
||||
desc.setParent(this);
|
||||
setChildDescriptor(iv, desc);
|
||||
}
|
||||
|
||||
public IProblemPreference getChildDescriptor(int i) {
|
||||
return list.get(i);
|
||||
}
|
||||
|
||||
public IProblemPreference[] getChildDescriptors() {
|
||||
return list.toArray(new IProblemPreference[list.size()]);
|
||||
IProblemPreference[] res = new IProblemPreference[list.size()];
|
||||
for (int i = 0; i < res.length; i++) {
|
||||
res[i] = getChildDescriptor(i);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public Object getChildValue(String key) {
|
||||
|
@ -112,11 +126,30 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
|||
return childInfo.getValue();
|
||||
}
|
||||
|
||||
public void addChildValue(String key, Object value) {
|
||||
IProblemPreference pref = getChildDescriptor(key);
|
||||
pref.setValue(value);
|
||||
// because descriptor can be phantom we have to set preference forcefully
|
||||
setChildDescriptor(Integer.parseInt(key), pref);
|
||||
public void setChildValue(String key, Object value) {
|
||||
int i = Integer.valueOf(key).intValue();
|
||||
setChildValue(i, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param i
|
||||
* @param value
|
||||
*/
|
||||
protected void setChildValue(int i, Object value) {
|
||||
if (value != null) {
|
||||
while (i >= list.size()) {
|
||||
list.add(null);
|
||||
}
|
||||
list.set(i, value);
|
||||
} else {
|
||||
while (i == list.size() - 1) {
|
||||
list.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addChildValue(Object value) {
|
||||
list.add(value);
|
||||
}
|
||||
|
||||
public void removeChildValue(String key) {
|
||||
|
@ -128,15 +161,15 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
|||
@Override
|
||||
public Object clone() {
|
||||
ListProblemPreference list1 = (ListProblemPreference) super.clone();
|
||||
list1.list = (ArrayList<IProblemPreference>) list.clone();
|
||||
list1.list = (ArrayList<Object>) list.clone();
|
||||
return list1;
|
||||
}
|
||||
|
||||
public String exportValue() {
|
||||
StringBuffer buf = new StringBuffer("("); //$NON-NLS-1$
|
||||
for (Iterator<IProblemPreference> iterator = list.iterator(); iterator
|
||||
.hasNext();) {
|
||||
IProblemPreference d = iterator.next();
|
||||
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
|
||||
IProblemPreference d = (IProblemPreference) childDescriptor.clone();
|
||||
d.setValue(iterator.next());
|
||||
buf.append(d.exportValue());
|
||||
if (iterator.hasNext())
|
||||
buf.append(","); //$NON-NLS-1$
|
||||
|
@ -146,34 +179,86 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
|||
|
||||
public void importValue(String str) {
|
||||
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||
try {
|
||||
importValue(tokenizer);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException(str, e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param tokenizer
|
||||
*/
|
||||
@Override
|
||||
public void importValue(StreamTokenizer tokenizer) {
|
||||
clear();
|
||||
int token;
|
||||
int index = 0;
|
||||
try {
|
||||
token = tokenizer.nextToken();
|
||||
String chara = String.valueOf((char) token);
|
||||
if (token != '(')
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(chara);
|
||||
token = tokenizer.nextToken();
|
||||
if (token != ')')
|
||||
tokenizer.pushBack();
|
||||
else
|
||||
return;
|
||||
while (true) {
|
||||
token = tokenizer.nextToken();
|
||||
String val = tokenizer.sval;
|
||||
String ik = String.valueOf(index);
|
||||
IProblemPreference desc = getChildDescriptor(ik);
|
||||
if (desc != null) {
|
||||
desc.importValue(val);
|
||||
addChildValue(ik, desc.getValue());
|
||||
if (desc != null && desc instanceof AbstractProblemPreference) {
|
||||
((AbstractProblemPreference) desc).importValue(tokenizer);
|
||||
setChildValue(ik, desc.getValue());
|
||||
}
|
||||
token = tokenizer.nextToken();
|
||||
if (token == ')')
|
||||
break;
|
||||
if (token != ',')
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(chara);
|
||||
index++;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeChildDescriptor(IProblemPreference info) {
|
||||
list.remove(info);
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return list.size();
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
list.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValue() {
|
||||
return getValues();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setValue(Object value) {
|
||||
Object[] values = (Object[]) value;
|
||||
if (Arrays.deepEquals(getValues(), values)) {
|
||||
return;
|
||||
}
|
||||
list.clear();
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
Object object = values[i];
|
||||
list.add(object);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return childDescriptor + ":" + list.toString(); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public Object[] getValues() {
|
||||
return list.toArray(new Object[list.size()]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import java.io.IOException;
|
|||
import java.io.StreamTokenizer;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eclipse.cdt.codan.core.model.AbstractCheckerWithProblemPreferences;
|
||||
|
||||
|
@ -73,10 +74,10 @@ public class MapProblemPreference extends AbstractProblemPreference implements
|
|||
* @param i
|
||||
* @param info
|
||||
*/
|
||||
public void addChildDescriptor(IProblemPreference info) {
|
||||
IProblemPreference desc = (IProblemPreference) info.clone();
|
||||
public IProblemPreference addChildDescriptor(IProblemPreference desc) {
|
||||
desc.setParent(this);
|
||||
hash.put(info.getKey(), desc);
|
||||
hash.put(desc.getKey(), desc);
|
||||
return desc;
|
||||
}
|
||||
|
||||
public IProblemPreference[] getChildDescriptors() {
|
||||
|
@ -89,7 +90,7 @@ public class MapProblemPreference extends AbstractProblemPreference implements
|
|||
return childInfo.getValue();
|
||||
}
|
||||
|
||||
public void addChildValue(String key, Object value) {
|
||||
public void setChildValue(String key, Object value) {
|
||||
getChildDescriptor(key).setValue(value);
|
||||
}
|
||||
|
||||
|
@ -120,40 +121,96 @@ public class MapProblemPreference extends AbstractProblemPreference implements
|
|||
|
||||
public void importValue(String str) {
|
||||
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||
try {
|
||||
importValue(tokenizer);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException(str + ":" + e.toString(), e); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param tokenizer
|
||||
*/
|
||||
@Override
|
||||
public void importValue(StreamTokenizer tokenizer) {
|
||||
int token;
|
||||
try {
|
||||
token = tokenizer.nextToken();
|
||||
if (token != '{')
|
||||
throw new IllegalArgumentException(str);
|
||||
String chara = String.valueOf((char) token);
|
||||
if (token != '{') {
|
||||
throw new IllegalArgumentException(chara);
|
||||
}
|
||||
while (true) {
|
||||
token = tokenizer.nextToken();
|
||||
String key = tokenizer.sval;
|
||||
token = tokenizer.nextToken();
|
||||
if (token != '=')
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(chara);
|
||||
token = tokenizer.nextToken();
|
||||
if (token != '>')
|
||||
throw new IllegalArgumentException(str);
|
||||
token = tokenizer.nextToken();
|
||||
String val = tokenizer.sval;
|
||||
throw new IllegalArgumentException(chara);
|
||||
IProblemPreference desc = getChildDescriptor(key);
|
||||
if (desc != null) {
|
||||
desc.importValue(val);
|
||||
} else {
|
||||
//putChildValue(key, val);
|
||||
if (desc != null && desc instanceof AbstractProblemPreference) {
|
||||
((AbstractProblemPreference) desc).importValue(tokenizer);
|
||||
setChildValue(key, desc.getValue());
|
||||
}
|
||||
token = tokenizer.nextToken();
|
||||
if (token == '}')
|
||||
break;
|
||||
if (token != ',')
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(chara);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new IllegalArgumentException(str);
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void removeChildDescriptor(IProblemPreference info) {
|
||||
hash.remove(info);
|
||||
}
|
||||
|
||||
public int size() {
|
||||
return hash.size();
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
hash.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return hash.values().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getValue() {
|
||||
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
|
||||
for (Iterator<IProblemPreference> iterator = hash.values().iterator(); iterator
|
||||
.hasNext();) {
|
||||
IProblemPreference pref = iterator.next();
|
||||
map.put(pref.getKey(), pref.getValue());
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public void setValue(Object value) {
|
||||
Map<String, Object> map = (Map<String, Object>) value;
|
||||
LinkedHashMap<String, IProblemPreference> hash2 = (LinkedHashMap<String, IProblemPreference>) hash
|
||||
.clone();
|
||||
hash.clear();
|
||||
for (Iterator<String> iterator = map.keySet().iterator(); iterator
|
||||
.hasNext();) {
|
||||
String key = iterator.next();
|
||||
Object value2 = map.get(key);
|
||||
if (value2 instanceof IProblemPreference) {
|
||||
hash.put(key, (IProblemPreference) value2);
|
||||
} else {
|
||||
IProblemPreference pref = hash2.get(key);
|
||||
pref.setValue(value2);
|
||||
hash.put(key, pref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ public class CodanUIMessages extends NLS {
|
|||
public static String CustomizeProblemDialog_Message;
|
||||
public static String CustomizeProblemDialog_Title;
|
||||
public static String Job_TitleRunningAnalysis;
|
||||
public static String ParametersComposite_NewValue;
|
||||
public static String ParametersComposite_None;
|
||||
static {
|
||||
// initialize resource bundle
|
||||
|
|
|
@ -16,11 +16,15 @@ import org.eclipse.cdt.codan.core.model.IProblem;
|
|||
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
||||
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
||||
import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor;
|
||||
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
||||
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||
import org.eclipse.jface.dialogs.InputDialog;
|
||||
import org.eclipse.jface.preference.BooleanFieldEditor;
|
||||
import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
||||
import org.eclipse.jface.preference.ListEditor;
|
||||
import org.eclipse.jface.preference.PreferenceStore;
|
||||
import org.eclipse.jface.preference.StringFieldEditor;
|
||||
import org.eclipse.jface.window.Window;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.layout.GridLayout;
|
||||
|
@ -59,7 +63,8 @@ public class ParametersComposite extends Composite {
|
|||
/**
|
||||
* @param info
|
||||
*/
|
||||
private void createFieldEditorsForParameters(IProblemPreference info) {
|
||||
private void createFieldEditorsForParameters(
|
||||
final IProblemPreference info) {
|
||||
if (info == null)
|
||||
return;
|
||||
switch (info.getType()) {
|
||||
|
@ -77,7 +82,53 @@ public class ParametersComposite extends Composite {
|
|||
addField(fe);
|
||||
break;
|
||||
}
|
||||
case TYPE_MAP: {
|
||||
case TYPE_LIST:
|
||||
ListEditor le = new ListEditor(info.getQualifiedKey(),
|
||||
info.getLabel(), getFieldEditorParent()) {
|
||||
@Override
|
||||
protected String[] parseString(String stringList) {
|
||||
ListProblemPreference list = (ListProblemPreference) info;
|
||||
IProblemPreference[] childDescriptors = list
|
||||
.getChildDescriptors();
|
||||
if (childDescriptors.length == 0)
|
||||
return new String[0];
|
||||
String res[] = new String[childDescriptors.length];
|
||||
for (int i = 0; i < childDescriptors.length; i++) {
|
||||
IProblemPreference item = childDescriptors[i];
|
||||
res[i] = String.valueOf(item.getValue());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getNewInputObject() {
|
||||
ListProblemPreference list = (ListProblemPreference) info;
|
||||
String label = list
|
||||
.getChildDescriptor()
|
||||
.getLabel();
|
||||
InputDialog dialog = new InputDialog(
|
||||
getShell(), CodanUIMessages.ParametersComposite_NewValue, label, "", null); //$NON-NLS-1$
|
||||
if (dialog.open() == Window.OK) {
|
||||
return dialog.getValue();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String createList(String[] items) {
|
||||
ListProblemPreference list = (ListProblemPreference) info
|
||||
.clone();
|
||||
list.clear();
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
String val = items[i];
|
||||
list.addChildValue(val);
|
||||
}
|
||||
return list.exportValue();
|
||||
}
|
||||
};
|
||||
addField(le);
|
||||
break;
|
||||
case TYPE_MAP:
|
||||
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) info)
|
||||
.getChildDescriptors();
|
||||
for (int i = 0; i < childrenDescriptor.length; i++) {
|
||||
|
@ -85,7 +136,6 @@ public class ParametersComposite extends Composite {
|
|||
createFieldEditorsForParameters(desc);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new UnsupportedOperationException(info.getType()
|
||||
.toString());
|
||||
|
@ -126,8 +176,10 @@ public class ParametersComposite extends Composite {
|
|||
case TYPE_FILE:
|
||||
desc.setValue(new File(prefStore.getString(key)));
|
||||
break;
|
||||
case TYPE_MAP:
|
||||
case TYPE_LIST:
|
||||
desc.importValue(prefStore.getString(key));
|
||||
break;
|
||||
case TYPE_MAP:
|
||||
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
||||
.getChildDescriptors();
|
||||
for (int i = 0; i < childrenDescriptor.length; i++) {
|
||||
|
@ -158,8 +210,10 @@ public class ParametersComposite extends Composite {
|
|||
case TYPE_FILE:
|
||||
prefStore.setValue(key, ((File) desc.getValue()).getPath());
|
||||
break;
|
||||
case TYPE_LIST:
|
||||
prefStore.setValue(key, desc.exportValue());
|
||||
break;
|
||||
case TYPE_MAP:
|
||||
case TYPE_LIST: {
|
||||
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
||||
.getChildDescriptors();
|
||||
for (int i = 0; i < childrenDescriptor.length; i++) {
|
||||
|
@ -167,7 +221,6 @@ public class ParametersComposite extends Composite {
|
|||
initPrefStore(chi);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
throw new UnsupportedOperationException(desc.getType()
|
||||
.toString());
|
||||
|
|
|
@ -13,6 +13,7 @@ CustomizeProblemComposite_TabScope=Scope
|
|||
CustomizeProblemDialog_Message=Edit problem preferences, scope and launch options
|
||||
CustomizeProblemDialog_Title=Customize Problem...
|
||||
Job_TitleRunningAnalysis=Running Code Analysis
|
||||
ParametersComposite_NewValue=New Value
|
||||
ParametersComposite_None=No extra preferences
|
||||
ProblemsTreeEditor_NameColumn=Name
|
||||
ProblemsTreeEditor_Problems=Problems
|
||||
|
|
Loading…
Add table
Reference in a new issue