mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-12 18:55:38 +02:00
Added scope preference for checkers
This commit is contained in:
parent
fc70a0f70d
commit
c2919ed4f9
21 changed files with 4069 additions and 59 deletions
|
@ -63,6 +63,7 @@ public abstract class AbstractIndexAstChecker extends AbstractCheckerWithProblem
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean processResource(IResource resource) {
|
public synchronized boolean processResource(IResource resource) {
|
||||||
|
if (!shouldProduceProblems(resource)) return false;
|
||||||
if (resource instanceof IFile) {
|
if (resource instanceof IFile) {
|
||||||
IFile file = (IFile) resource;
|
IFile file = (IFile) resource;
|
||||||
try {
|
try {
|
||||||
|
@ -102,7 +103,7 @@ public abstract class AbstractIndexAstChecker extends AbstractCheckerWithProblem
|
||||||
else
|
else
|
||||||
loc = getRuntime().getProblemLocationFactory()
|
loc = getRuntime().getProblemLocationFactory()
|
||||||
.createProblemLocation(astFile, line);
|
.createProblemLocation(astFile, line);
|
||||||
getProblemReporter().reportProblem(id, loc, args);
|
reportProblem(id, loc, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -65,9 +65,9 @@ public abstract class AbstractChecker implements IChecker {
|
||||||
* - file in scope
|
* - file in scope
|
||||||
* @return problem instance
|
* @return problem instance
|
||||||
*/
|
*/
|
||||||
public IProblem getProblemById(String id, IFile file) {
|
public IProblem getProblemById(String id, IResource file) {
|
||||||
IProblem problem = CheckersRegistry.getInstance().getResourceProfile(
|
IProblem problem = CheckersRegistry.getInstance()
|
||||||
file).findProblem(id);
|
.getResourceProfile(file).findProblem(id);
|
||||||
if (problem == null)
|
if (problem == null)
|
||||||
throw new IllegalArgumentException("Id is not registered"); //$NON-NLS-1$
|
throw new IllegalArgumentException("Id is not registered"); //$NON-NLS-1$
|
||||||
return problem;
|
return problem;
|
||||||
|
@ -144,4 +144,9 @@ public abstract class AbstractChecker implements IChecker {
|
||||||
public boolean runInEditor() {
|
public boolean runInEditor() {
|
||||||
return this instanceof IRunnableInEditorChecker;
|
return this instanceof IRunnableInEditorChecker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void reportProblem(String problemId, IProblemLocation loc,
|
||||||
|
Object... args) {
|
||||||
|
getProblemReporter().reportProblem(problemId, loc, args);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,17 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.core.model;
|
package org.eclipse.cdt.codan.core.model;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.param.BasicProblemPreference;
|
import org.eclipse.cdt.codan.core.param.BasicProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
|
||||||
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
||||||
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
|
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
|
||||||
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
||||||
import org.eclipse.cdt.codan.core.param.MapProblemPreference;
|
import org.eclipse.cdt.codan.core.param.MapProblemPreference;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AbstarctChecker that has extra methods to simplify adding problem
|
* AbstarctChecker that has extra methods to simplify adding problem
|
||||||
|
@ -28,7 +34,55 @@ public abstract class AbstractCheckerWithProblemPreferences extends
|
||||||
* Checker that actually has parameter must override this
|
* Checker that actually has parameter must override this
|
||||||
*/
|
*/
|
||||||
public void initPreferences(IProblemWorkingCopy problem) {
|
public void initPreferences(IProblemWorkingCopy problem) {
|
||||||
// do nothing
|
// by default add file scope preference
|
||||||
|
addPreference(problem, new FileScopeProblemPreference(), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param problem
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FileScopeProblemPreference getScopePreference(IProblem problem) {
|
||||||
|
FileScopeProblemPreference scope = (FileScopeProblemPreference) getTopLevelPreferenceMap(
|
||||||
|
problem).getChildDescriptor(FileScopeProblemPreference.KEY);
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User can scope out some resources for this checker. Checker can use this
|
||||||
|
* call to test if it should run on this resource at all or not. Test should
|
||||||
|
* be done within processResource method not in enabledInContext.
|
||||||
|
*
|
||||||
|
* @param res
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean shouldProduceProblems(IResource res) {
|
||||||
|
Collection<IProblem> refProblems = getRuntime().getChechersRegistry()
|
||||||
|
.getRefProblems(this);
|
||||||
|
for (Iterator<IProblem> iterator = refProblems.iterator(); iterator
|
||||||
|
.hasNext();) {
|
||||||
|
IProblem checkerProblem = iterator.next();
|
||||||
|
if (shouldProduceProblem(
|
||||||
|
getProblemById(checkerProblem.getId(), res),
|
||||||
|
res.getLocation()))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldProduceProblem(IProblem problem, IPath resource) {
|
||||||
|
FileScopeProblemPreference scope = getScopePreference(problem);
|
||||||
|
if (scope == null)
|
||||||
|
return true;
|
||||||
|
return scope.isInScope(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reportProblem(String problemId, IProblemLocation loc,
|
||||||
|
Object... args) {
|
||||||
|
if (shouldProduceProblem(getProblemById(problemId, loc.getFile()), loc
|
||||||
|
.getFile().getLocation()))
|
||||||
|
super.reportProblem(problemId, loc, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -102,13 +156,14 @@ public abstract class AbstractCheckerWithProblemPreferences extends
|
||||||
* @param problem
|
* @param problem
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected MapProblemPreference getTopLevelPreferenceMap(
|
protected MapProblemPreference getTopLevelPreferenceMap(IProblem problem) {
|
||||||
IProblemWorkingCopy problem) {
|
|
||||||
MapProblemPreference map = (MapProblemPreference) problem
|
MapProblemPreference map = (MapProblemPreference) problem
|
||||||
.getPreference();
|
.getPreference();
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
map = new MapProblemPreference("params", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
map = new MapProblemPreference("params", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
problem.setPreference(map);
|
if (problem instanceof IProblemWorkingCopy) {
|
||||||
|
((IProblemWorkingCopy) problem).setPreference(map);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
package org.eclipse.cdt.codan.core.param;
|
package org.eclipse.cdt.codan.core.param;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.StreamTokenizer;
|
import java.io.StreamTokenizer;
|
||||||
|
|
||||||
|
@ -150,6 +151,39 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
|
||||||
/**
|
/**
|
||||||
* @param tokenizer
|
* @param tokenizer
|
||||||
* @return
|
* @return
|
||||||
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
public abstract void importValue(StreamTokenizer tokenizer);
|
public abstract void importValue(StreamTokenizer tokenizer)
|
||||||
|
throws IOException;
|
||||||
|
|
||||||
|
public void importValue(String str) {
|
||||||
|
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||||
|
try {
|
||||||
|
importValue(tokenizer);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
throw new IllegalArgumentException(str, e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String escape(String x) {
|
||||||
|
x = x.replaceAll("[\"\\\\]", "\\\\$0"); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
return "\"" + x + "\""; //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param str
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected String unescape(String str) {
|
||||||
|
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||||
|
try {
|
||||||
|
tokenizer.nextToken();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String sval = tokenizer.sval;
|
||||||
|
return sval;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,11 +81,6 @@ public class BasicProblemPreference extends AbstractProblemPreference {
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String escape(String x) {
|
|
||||||
x = x.replaceAll("[\"\\\\]", "\\\\$0"); //$NON-NLS-1$//$NON-NLS-2$
|
|
||||||
return "\"" + x + "\""; //$NON-NLS-1$//$NON-NLS-2$
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -93,6 +88,7 @@ public class BasicProblemPreference extends AbstractProblemPreference {
|
||||||
* org.eclipse.cdt.codan.core.param.IProblemPreferenceValue#importValue(
|
* org.eclipse.cdt.codan.core.param.IProblemPreferenceValue#importValue(
|
||||||
* java.lang.String)
|
* java.lang.String)
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
public void importValue(String str) {
|
public void importValue(String str) {
|
||||||
if (str.startsWith("\"")) //$NON-NLS-1$
|
if (str.startsWith("\"")) //$NON-NLS-1$
|
||||||
str = unescape(str);
|
str = unescape(str);
|
||||||
|
@ -115,21 +111,6 @@ public class BasicProblemPreference extends AbstractProblemPreference {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param str
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
protected String unescape(String str) {
|
|
||||||
StreamTokenizer tokenizer = getImportTokenizer(str);
|
|
||||||
try {
|
|
||||||
tokenizer.nextToken();
|
|
||||||
} catch (IOException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String sval = tokenizer.sval;
|
|
||||||
return sval;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "(" + type + ")" + key + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
|
return "(" + type + ")" + key + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
|
||||||
|
|
|
@ -0,0 +1,264 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009,2010 QNX Software Systems
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX Software Systems (Alena Laskavaia) - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.core.param;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.StreamTokenizer;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.internal.core.CharOperation;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: add description
|
||||||
|
*/
|
||||||
|
public class FileScopeProblemPreference extends AbstractProblemPreference {
|
||||||
|
public static final String KEY = "fileScope"; //$NON-NLS-1$
|
||||||
|
public static final String EXCLUSION = "exclusion"; //$NON-NLS-1$
|
||||||
|
public static final String INCLUSION = "inclusion"; //$NON-NLS-1$
|
||||||
|
private IResource resource;
|
||||||
|
private IPath[] inclusion = new IPath[0];
|
||||||
|
private IPath[] exclusion = new IPath[0];
|
||||||
|
|
||||||
|
public FileScopeProblemPreference() {
|
||||||
|
setKey(KEY);
|
||||||
|
setLabel("File Exclusion and Inclusion");
|
||||||
|
setType(PreferenceType.TYPE_CUSTOM);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param key
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IPath[] getAttribute(String key) {
|
||||||
|
if (key == EXCLUSION)
|
||||||
|
return exclusion;
|
||||||
|
if (key == INCLUSION)
|
||||||
|
return inclusion;
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAttribute(String key, IPath[] value) {
|
||||||
|
if (key == EXCLUSION)
|
||||||
|
exclusion = value.clone();
|
||||||
|
if (key == INCLUSION)
|
||||||
|
inclusion = value.clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IProject getProject() {
|
||||||
|
if (resource != null)
|
||||||
|
return resource.getProject();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IPath getPath() {
|
||||||
|
if (resource != null)
|
||||||
|
return resource.getFullPath();
|
||||||
|
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
||||||
|
IWorkspaceRoot root = workspace.getRoot();
|
||||||
|
return root.getFullPath();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resource
|
||||||
|
* the resource to set
|
||||||
|
*/
|
||||||
|
public void setResource(IResource resource) {
|
||||||
|
this.resource = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the resource
|
||||||
|
*/
|
||||||
|
public IResource getResource() {
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String exportValue() {
|
||||||
|
return exportPathList(INCLUSION, inclusion) + "," //$NON-NLS-1$
|
||||||
|
+ exportPathList(EXCLUSION, exclusion);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param inclusion2
|
||||||
|
* @param inclusion3
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private String exportPathList(String key, IPath[] arr) {
|
||||||
|
String res = key + "=>("; //$NON-NLS-1$
|
||||||
|
for (int i = 0; i < arr.length; i++) {
|
||||||
|
if (i != 0)
|
||||||
|
res += ","; //$NON-NLS-1$
|
||||||
|
res += escape(arr[i].toPortableString());
|
||||||
|
}
|
||||||
|
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);
|
||||||
|
inclusion = inc.toArray(new IPath[inc.size()]);
|
||||||
|
checkChar(tokenizer, ',');
|
||||||
|
List<IPath> exc = importPathList(tokenizer, EXCLUSION);
|
||||||
|
exclusion = exc.toArray(new IPath[exc.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param tokenizer
|
||||||
|
* @param c
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private void checkChar(StreamTokenizer tokenizer, char c)
|
||||||
|
throws IOException {
|
||||||
|
tokenizer.nextToken();
|
||||||
|
if (tokenizer.ttype != c)
|
||||||
|
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();
|
||||||
|
if (tokenizer.sval == null || !tokenizer.sval.equals(keyword))
|
||||||
|
throw new IllegalArgumentException("Expected " + keyword); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
|
protected List<IPath> importPathList(StreamTokenizer tokenizer,
|
||||||
|
String keyword) throws IOException {
|
||||||
|
checkKeyword(tokenizer, keyword);
|
||||||
|
checkChar(tokenizer, '=');
|
||||||
|
checkChar(tokenizer, '>');
|
||||||
|
ArrayList<IPath> list = new ArrayList<IPath>();
|
||||||
|
int token;
|
||||||
|
int index = 0;
|
||||||
|
try {
|
||||||
|
checkChar(tokenizer, '(');
|
||||||
|
token = tokenizer.nextToken();
|
||||||
|
if (token != ')')
|
||||||
|
tokenizer.pushBack();
|
||||||
|
else
|
||||||
|
return Collections.emptyList();
|
||||||
|
while (true) {
|
||||||
|
token = tokenizer.nextToken();
|
||||||
|
if (tokenizer.sval == null)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
list.add(new Path(tokenizer.sval));
|
||||||
|
token = tokenizer.nextToken();
|
||||||
|
if (token == ')')
|
||||||
|
break;
|
||||||
|
tokenizer.pushBack();
|
||||||
|
checkChar(tokenizer, ',');
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new IllegalArgumentException(e);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValue() {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(Object value) {
|
||||||
|
if (this == value)
|
||||||
|
return;
|
||||||
|
FileScopeProblemPreference scope = (FileScopeProblemPreference) value;
|
||||||
|
setAttribute(INCLUSION, scope.getAttribute(INCLUSION));
|
||||||
|
setAttribute(EXCLUSION, scope.getAttribute(EXCLUSION));
|
||||||
|
this.resource = scope.getResource();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.codan.core.param.AbstractProblemPreference#clone()
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Object clone() {
|
||||||
|
FileScopeProblemPreference scope = (FileScopeProblemPreference) super
|
||||||
|
.clone();
|
||||||
|
scope.setValue(this);
|
||||||
|
return scope;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param file
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isInScope(IPath file) {
|
||||||
|
//System.err.println("test " + file + " " + exportValue());
|
||||||
|
if (inclusion.length > 0) {
|
||||||
|
if (!matchesFilter(file, inclusion))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (exclusion.length > 0) {
|
||||||
|
if (matchesFilter(file, exclusion))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param resourcePath
|
||||||
|
* @param inclusion2
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private 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();
|
||||||
|
if (CharOperation.pathMatch(pattern, path, true, '/')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isExcludedPath(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();
|
||||||
|
if (CharOperation.pathMatch(pattern, path, true, '/')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
|
@ -36,7 +36,8 @@ public interface IProblemPreferenceDescriptor extends Cloneable {
|
||||||
TYPE_BOOLEAN("boolean"), //$NON-NLS-1$
|
TYPE_BOOLEAN("boolean"), //$NON-NLS-1$
|
||||||
TYPE_FILE("file"), //$NON-NLS-1$
|
TYPE_FILE("file"), //$NON-NLS-1$
|
||||||
TYPE_LIST("list"), //$NON-NLS-1$
|
TYPE_LIST("list"), //$NON-NLS-1$
|
||||||
TYPE_MAP("map"); //$NON-NLS-1$
|
TYPE_MAP("map"), //$NON-NLS-1$
|
||||||
|
TYPE_CUSTOM("custom"); //$NON-NLS-1$
|
||||||
private String literal;
|
private String literal;
|
||||||
|
|
||||||
private PreferenceType(String literal) {
|
private PreferenceType(String literal) {
|
||||||
|
@ -75,8 +76,7 @@ public interface IProblemPreferenceDescriptor extends Cloneable {
|
||||||
return TYPE_LIST;
|
return TYPE_LIST;
|
||||||
if (value instanceof Map)
|
if (value instanceof Map)
|
||||||
return TYPE_MAP;
|
return TYPE_MAP;
|
||||||
throw new IllegalArgumentException(
|
return TYPE_CUSTOM;
|
||||||
"Cannot determine type for " + value.getClass()); //$NON-NLS-1$
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -157,11 +157,16 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
||||||
list.remove(index);
|
list.remove(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
@Override
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
ListProblemPreference list1 = (ListProblemPreference) super.clone();
|
ListProblemPreference list1 = (ListProblemPreference) super.clone();
|
||||||
list1.list = (ArrayList<Object>) list.clone();
|
list1.list = new ArrayList<Object>();
|
||||||
|
list1.setChildDescriptor((IProblemPreference) getChildDescriptor()
|
||||||
|
.clone());
|
||||||
|
for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
|
||||||
|
Object value = iterator.next();
|
||||||
|
list1.addChildValue(value);
|
||||||
|
}
|
||||||
return list1;
|
return list1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,6 +182,7 @@ public class ListProblemPreference extends AbstractProblemPreference implements
|
||||||
return buf.toString() + ")"; //$NON-NLS-1$
|
return buf.toString() + ")"; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void importValue(String str) {
|
public void importValue(String str) {
|
||||||
StreamTokenizer tokenizer = getImportTokenizer(str);
|
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -98,11 +98,15 @@ public class MapProblemPreference extends AbstractProblemPreference implements
|
||||||
hash.remove(key);
|
hash.remove(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
@Override
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
MapProblemPreference map = (MapProblemPreference) super.clone();
|
MapProblemPreference map = (MapProblemPreference) super.clone();
|
||||||
map.hash = (LinkedHashMap<String, IProblemPreference>) hash.clone();
|
map.hash = new LinkedHashMap<String, IProblemPreference>();
|
||||||
|
for (Iterator<String> iterator = hash.keySet().iterator(); iterator
|
||||||
|
.hasNext();) {
|
||||||
|
String key = iterator.next();
|
||||||
|
map.hash.put(key, (IProblemPreference) hash.get(key).clone());
|
||||||
|
}
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,6 +123,7 @@ public class MapProblemPreference extends AbstractProblemPreference implements
|
||||||
return buf.toString() + "}"; //$NON-NLS-1$
|
return buf.toString() + "}"; //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void importValue(String str) {
|
public void importValue(String str) {
|
||||||
StreamTokenizer tokenizer = getImportTokenizer(str);
|
StreamTokenizer tokenizer = getImportTokenizer(str);
|
||||||
try {
|
try {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -70,7 +70,11 @@ public class CodanProblem implements IProblemWorkingCopy {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Object clone() throws CloneNotSupportedException {
|
public Object clone() throws CloneNotSupportedException {
|
||||||
return super.clone();
|
CodanProblem prob = (CodanProblem) super.clone();
|
||||||
|
if (preference != null) {
|
||||||
|
prob.preference = (IProblemPreference) preference.clone();
|
||||||
|
}
|
||||||
|
return prob;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPreference(IProblemPreference value) {
|
public void setPreference(IProblemPreference value) {
|
||||||
|
|
|
@ -41,6 +41,40 @@ public class CodanUIMessages extends NLS {
|
||||||
public static String Job_TitleRunningAnalysis;
|
public static String Job_TitleRunningAnalysis;
|
||||||
public static String ParametersComposite_NewValue;
|
public static String ParametersComposite_NewValue;
|
||||||
public static String ParametersComposite_None;
|
public static String ParametersComposite_None;
|
||||||
|
//
|
||||||
|
public static String ExclusionInclusionDialog_title;
|
||||||
|
public static String ExclusionInclusionDialog_description;
|
||||||
|
public static String ExclusionInclusionDialog_description2;
|
||||||
|
public static String ExclusionInclusionDialog_exclusion_pattern_label;
|
||||||
|
public static String ExclusionInclusionDialog_inclusion_pattern_label;
|
||||||
|
public static String ExclusionInclusionDialog_inclusion_pattern_add;
|
||||||
|
public static String ExclusionInclusionDialog_inclusion_pattern_add_multiple;
|
||||||
|
public static String ExclusionInclusionDialog_inclusion_pattern_remove;
|
||||||
|
public static String ExclusionInclusionDialog_inclusion_pattern_edit;
|
||||||
|
public static String ExclusionInclusionDialog_exclusion_pattern_add;
|
||||||
|
public static String ExclusionInclusionDialog_exclusion_pattern_add_multiple;
|
||||||
|
public static String ExclusionInclusionDialog_exclusion_pattern_remove;
|
||||||
|
public static String ExclusionInclusionDialog_exclusion_pattern_edit;
|
||||||
|
public static String ExclusionInclusionDialog_ChooseExclusionPattern_title;
|
||||||
|
public static String ExclusionInclusionDialog_ChooseExclusionPattern_description;
|
||||||
|
public static String ExclusionInclusionDialog_ChooseInclusionPattern_title;
|
||||||
|
public static String ExclusionInclusionDialog_ChooseInclusionPattern_description;
|
||||||
|
public static String ExclusionInclusionEntryDialog_exclude_add_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_exclude_edit_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_exclude_description;
|
||||||
|
public static String ExclusionInclusionEntryDialog_exclude_pattern_label;
|
||||||
|
public static String ExclusionInclusionEntryDialog_include_add_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_include_edit_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_include_description;
|
||||||
|
public static String ExclusionInclusionEntryDialog_include_pattern_label;
|
||||||
|
public static String ExclusionInclusionEntryDialog_pattern_button;
|
||||||
|
public static String ExclusionInclusionEntryDialog_error_empty;
|
||||||
|
public static String ExclusionInclusionEntryDialog_error_notrelative;
|
||||||
|
public static String ExclusionInclusionEntryDialog_error_exists;
|
||||||
|
public static String ExclusionInclusionEntryDialog_ChooseExclusionPattern_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_ChooseExclusionPattern_description;
|
||||||
|
public static String ExclusionInclusionEntryDialog_ChooseInclusionPattern_title;
|
||||||
|
public static String ExclusionInclusionEntryDialog_ChooseInclusionPattern_description;
|
||||||
static {
|
static {
|
||||||
// initialize resource bundle
|
// initialize resource bundle
|
||||||
NLS.initializeMessages(BUNDLE_NAME, CodanUIMessages.class);
|
NLS.initializeMessages(BUNDLE_NAME, CodanUIMessages.class);
|
||||||
|
|
|
@ -13,6 +13,8 @@ package org.eclipse.cdt.codan.internal.ui.dialogs;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblem;
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
||||||
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.widgets.CustomizeProblemComposite;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.jface.dialogs.TitleAreaDialog;
|
import org.eclipse.jface.dialogs.TitleAreaDialog;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
@ -27,27 +29,37 @@ import org.eclipse.swt.widgets.Shell;
|
||||||
public class CustomizeProblemDialog extends TitleAreaDialog {
|
public class CustomizeProblemDialog extends TitleAreaDialog {
|
||||||
private CustomizeProblemComposite comp;
|
private CustomizeProblemComposite comp;
|
||||||
private IProblem problem;
|
private IProblem problem;
|
||||||
|
private IResource resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param parentShell
|
* @param parentShell
|
||||||
* @param selectedProblem
|
* @param selectedProblem
|
||||||
|
* @param iResource
|
||||||
*/
|
*/
|
||||||
public CustomizeProblemDialog(Shell parentShell, IProblem selectedProblem) {
|
public CustomizeProblemDialog(Shell parentShell, IProblem selectedProblem,
|
||||||
|
IResource resource) {
|
||||||
super(parentShell);
|
super(parentShell);
|
||||||
this.problem = selectedProblem;
|
this.problem = selectedProblem;
|
||||||
|
this.resource = resource;
|
||||||
setShellStyle(getShellStyle() | SWT.RESIZE);
|
setShellStyle(getShellStyle() | SWT.RESIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores edit values into problem working copy
|
* Stores edit values into problem working copy
|
||||||
* @param problem - problem working copy
|
*
|
||||||
|
* @param problem
|
||||||
|
* - problem working copy
|
||||||
*/
|
*/
|
||||||
public void save(IProblemWorkingCopy problem) {
|
public void save(IProblemWorkingCopy problem) {
|
||||||
comp.save(problem);
|
comp.save(problem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
* @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see
|
||||||
|
* org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse
|
||||||
|
* .swt.widgets.Composite)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Control createDialogArea(Composite parent) {
|
protected Control createDialogArea(Composite parent) {
|
||||||
|
@ -55,14 +67,16 @@ public class CustomizeProblemDialog extends TitleAreaDialog {
|
||||||
setTitle(problem.getName());
|
setTitle(problem.getName());
|
||||||
setMessage(CodanUIMessages.CustomizeProblemDialog_Message);
|
setMessage(CodanUIMessages.CustomizeProblemDialog_Message);
|
||||||
Composite area = (Composite) super.createDialogArea(parent);
|
Composite area = (Composite) super.createDialogArea(parent);
|
||||||
comp = new CustomizeProblemComposite(area, problem);
|
comp = new CustomizeProblemComposite(area, problem, resource);
|
||||||
GridData ld = new GridData(GridData.FILL_BOTH);
|
GridData ld = new GridData(GridData.FILL_BOTH);
|
||||||
ld.minimumHeight=300;
|
ld.minimumHeight = 300;
|
||||||
comp.setLayoutData(ld);
|
comp.setLayoutData(ld);
|
||||||
return area;
|
return area;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
|
* @see org.eclipse.jface.dialogs.Dialog#okPressed()
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,274 @@
|
||||||
|
package org.eclipse.cdt.codan.internal.ui.dialogs;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.widgets.BasicElementLabels;
|
||||||
|
import org.eclipse.cdt.internal.ui.dialogs.StatusInfo;
|
||||||
|
import org.eclipse.cdt.internal.ui.dialogs.TypedElementSelectionValidator;
|
||||||
|
import org.eclipse.cdt.internal.ui.dialogs.TypedViewerFilter;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IStringButtonAdapter;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.StringButtonDialogField;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IFolder;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.jface.dialogs.StatusDialog;
|
||||||
|
import org.eclipse.jface.viewers.ILabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
|
import org.eclipse.jface.viewers.ViewerFilter;
|
||||||
|
import org.eclipse.jface.window.Window;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
|
||||||
|
import org.eclipse.ui.dialogs.ISelectionStatusValidator;
|
||||||
|
import org.eclipse.ui.model.WorkbenchContentProvider;
|
||||||
|
import org.eclipse.ui.model.WorkbenchLabelProvider;
|
||||||
|
import org.eclipse.ui.views.navigator.ResourceComparator;
|
||||||
|
|
||||||
|
public class ExclusionInclusionEntryDialog extends StatusDialog {
|
||||||
|
private StringButtonDialogField fExclusionPatternDialog;
|
||||||
|
private StatusInfo fExclusionPatternStatus;
|
||||||
|
private IContainer fCurrSourceFolder;
|
||||||
|
private String fExclusionPattern;
|
||||||
|
private List fExistingPatterns;
|
||||||
|
private boolean fIsExclusion;
|
||||||
|
|
||||||
|
public ExclusionInclusionEntryDialog(Shell parent, boolean isExclusion,
|
||||||
|
String patternToEdit, List existingPatterns,
|
||||||
|
FileScopeProblemPreference entryToEdit) {
|
||||||
|
super(parent);
|
||||||
|
fIsExclusion = isExclusion;
|
||||||
|
fExistingPatterns = existingPatterns;
|
||||||
|
String title, message;
|
||||||
|
if (isExclusion) {
|
||||||
|
if (patternToEdit == null) {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_exclude_add_title;
|
||||||
|
} else {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_exclude_edit_title;
|
||||||
|
}
|
||||||
|
message = MessageFormat
|
||||||
|
.format(CodanUIMessages.ExclusionInclusionEntryDialog_exclude_pattern_label,
|
||||||
|
BasicElementLabels.getPathLabel(
|
||||||
|
entryToEdit.getPath(), false));
|
||||||
|
} else {
|
||||||
|
if (patternToEdit == null) {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_include_add_title;
|
||||||
|
} else {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_include_edit_title;
|
||||||
|
}
|
||||||
|
message = MessageFormat
|
||||||
|
.format(CodanUIMessages.ExclusionInclusionEntryDialog_include_pattern_label,
|
||||||
|
BasicElementLabels.getPathLabel(
|
||||||
|
entryToEdit.getPath(), false));
|
||||||
|
}
|
||||||
|
setTitle(title);
|
||||||
|
if (patternToEdit != null) {
|
||||||
|
fExistingPatterns.remove(patternToEdit);
|
||||||
|
}
|
||||||
|
IProject currProject = entryToEdit.getProject();
|
||||||
|
IWorkspaceRoot root = currProject != null ? currProject.getWorkspace()
|
||||||
|
.getRoot() : ResourcesPlugin.getWorkspace().getRoot();
|
||||||
|
IResource res = root.findMember(entryToEdit.getPath());
|
||||||
|
if (res instanceof IContainer) {
|
||||||
|
fCurrSourceFolder = (IContainer) res;
|
||||||
|
}
|
||||||
|
fExclusionPatternStatus = new StatusInfo();
|
||||||
|
ExclusionPatternAdapter adapter = new ExclusionPatternAdapter();
|
||||||
|
fExclusionPatternDialog = new StringButtonDialogField(adapter);
|
||||||
|
fExclusionPatternDialog.setLabelText(message);
|
||||||
|
fExclusionPatternDialog
|
||||||
|
.setButtonLabel(CodanUIMessages.ExclusionInclusionEntryDialog_pattern_button);
|
||||||
|
fExclusionPatternDialog.setDialogFieldListener(adapter);
|
||||||
|
fExclusionPatternDialog.enableButton(fCurrSourceFolder != null);
|
||||||
|
if (patternToEdit == null) {
|
||||||
|
fExclusionPatternDialog.setText(""); //$NON-NLS-1$
|
||||||
|
} else {
|
||||||
|
fExclusionPatternDialog.setText(patternToEdit.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Control createDialogArea(Composite parent) {
|
||||||
|
Composite composite = (Composite) super.createDialogArea(parent);
|
||||||
|
int widthHint = convertWidthInCharsToPixels(60);
|
||||||
|
Composite inner = new Composite(composite, SWT.NONE);
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.marginHeight = 0;
|
||||||
|
layout.marginWidth = 0;
|
||||||
|
layout.numColumns = 2;
|
||||||
|
inner.setLayout(layout);
|
||||||
|
Label description = new Label(inner, SWT.WRAP);
|
||||||
|
if (fIsExclusion) {
|
||||||
|
description
|
||||||
|
.setText(CodanUIMessages.ExclusionInclusionEntryDialog_exclude_description);
|
||||||
|
} else {
|
||||||
|
description
|
||||||
|
.setText(CodanUIMessages.ExclusionInclusionEntryDialog_include_description);
|
||||||
|
}
|
||||||
|
GridData gd = new GridData();
|
||||||
|
gd.horizontalSpan = 2;
|
||||||
|
gd.widthHint = convertWidthInCharsToPixels(80);
|
||||||
|
description.setLayoutData(gd);
|
||||||
|
fExclusionPatternDialog.doFillIntoGrid(inner, 3);
|
||||||
|
LayoutUtil.setWidthHint(fExclusionPatternDialog.getLabelControl(null),
|
||||||
|
widthHint);
|
||||||
|
LayoutUtil.setHorizontalSpan(
|
||||||
|
fExclusionPatternDialog.getLabelControl(null), 2);
|
||||||
|
LayoutUtil.setWidthHint(fExclusionPatternDialog.getTextControl(null),
|
||||||
|
widthHint);
|
||||||
|
LayoutUtil.setHorizontalGrabbing(fExclusionPatternDialog
|
||||||
|
.getTextControl(null));
|
||||||
|
fExclusionPatternDialog.postSetFocusOnDialogField(parent.getDisplay());
|
||||||
|
applyDialogFont(composite);
|
||||||
|
return composite;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------- ExclusionPatternAdapter --------
|
||||||
|
private class ExclusionPatternAdapter implements IDialogFieldListener,
|
||||||
|
IStringButtonAdapter {
|
||||||
|
// -------- IDialogFieldListener
|
||||||
|
public void dialogFieldChanged(DialogField field) {
|
||||||
|
doStatusLineUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeControlPressed(DialogField field) {
|
||||||
|
doChangeControlPressed();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doChangeControlPressed() {
|
||||||
|
IPath pattern = chooseExclusionPattern();
|
||||||
|
if (pattern != null) {
|
||||||
|
fExclusionPatternDialog.setText(pattern.toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doStatusLineUpdate() {
|
||||||
|
checkIfPatternValid();
|
||||||
|
updateStatus(fExclusionPatternStatus);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkIfPatternValid() {
|
||||||
|
String pattern = fExclusionPatternDialog.getText().trim();
|
||||||
|
if (pattern.length() == 0) {
|
||||||
|
fExclusionPatternStatus
|
||||||
|
.setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_empty);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
IPath path = new Path(pattern);
|
||||||
|
if (path.isAbsolute() || path.getDevice() != null) {
|
||||||
|
fExclusionPatternStatus
|
||||||
|
.setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_notrelative);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (fExistingPatterns.contains(pattern)) {
|
||||||
|
fExclusionPatternStatus
|
||||||
|
.setError(CodanUIMessages.ExclusionInclusionEntryDialog_error_exists);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
fExclusionPattern = pattern;
|
||||||
|
fExclusionPatternStatus.setOK();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExclusionPattern() {
|
||||||
|
return fExclusionPattern;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.window.Window#configureShell(Shell)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
protected void configureShell(Shell newShell) {
|
||||||
|
super.configureShell(newShell);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------- util method ------------
|
||||||
|
private IPath chooseExclusionPattern() {
|
||||||
|
String title, message;
|
||||||
|
if (fIsExclusion) {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseExclusionPattern_title;
|
||||||
|
message = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseExclusionPattern_description;
|
||||||
|
} else {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseInclusionPattern_title;
|
||||||
|
message = CodanUIMessages.ExclusionInclusionEntryDialog_ChooseInclusionPattern_description;
|
||||||
|
}
|
||||||
|
IPath initialPath = new Path(fExclusionPatternDialog.getText());
|
||||||
|
IPath[] res = chooseExclusionPattern(getShell(), fCurrSourceFolder,
|
||||||
|
title, message, initialPath, false);
|
||||||
|
if (res == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return res[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IPath[] chooseExclusionPattern(Shell shell,
|
||||||
|
IContainer currentSourceFolder, String title, String message,
|
||||||
|
IPath initialPath, boolean multiSelection) {
|
||||||
|
Class[] acceptedClasses = new Class[] { IFolder.class, IFile.class,
|
||||||
|
IProject.class };
|
||||||
|
ISelectionStatusValidator validator = new TypedElementSelectionValidator(
|
||||||
|
acceptedClasses, multiSelection);
|
||||||
|
ViewerFilter filter = new TypedViewerFilter(acceptedClasses);
|
||||||
|
ILabelProvider lp = new WorkbenchLabelProvider();
|
||||||
|
ITreeContentProvider cp = new WorkbenchContentProvider();
|
||||||
|
IResource initialElement = null;
|
||||||
|
if (initialPath != null) {
|
||||||
|
IContainer curr = currentSourceFolder;
|
||||||
|
int nSegments = initialPath.segmentCount();
|
||||||
|
for (int i = 0; i < nSegments; i++) {
|
||||||
|
IResource elem = curr.findMember(initialPath.segment(i));
|
||||||
|
if (elem != null) {
|
||||||
|
initialElement = elem;
|
||||||
|
}
|
||||||
|
if (elem instanceof IContainer) {
|
||||||
|
curr = (IContainer) elem;
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
|
||||||
|
shell, lp, cp);
|
||||||
|
dialog.setTitle(title);
|
||||||
|
dialog.setValidator(validator);
|
||||||
|
dialog.setMessage(message);
|
||||||
|
dialog.addFilter(filter);
|
||||||
|
dialog.setInput(currentSourceFolder);
|
||||||
|
dialog.setInitialSelection(initialElement);
|
||||||
|
dialog.setComparator(new ResourceComparator(ResourceComparator.NAME));
|
||||||
|
dialog.setHelpAvailable(false);
|
||||||
|
if (dialog.open() == Window.OK) {
|
||||||
|
Object[] objects = dialog.getResult();
|
||||||
|
int existingSegments = currentSourceFolder.getFullPath()
|
||||||
|
.segmentCount();
|
||||||
|
IPath[] resArr = new IPath[objects.length];
|
||||||
|
for (int i = 0; i < objects.length; i++) {
|
||||||
|
IResource currRes = (IResource) objects[i];
|
||||||
|
IPath path = currRes.getFullPath()
|
||||||
|
.removeFirstSegments(existingSegments).makeRelative();
|
||||||
|
if (currRes instanceof IContainer) {
|
||||||
|
path = path.addTrailingSeparator();
|
||||||
|
}
|
||||||
|
resArr[i] = path;
|
||||||
|
}
|
||||||
|
return resArr;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,3 +23,53 @@ OverlayPage_Use_Project_Settings=Use pr&oject settings
|
||||||
OverlayPage_Configure_Workspace_Settings=&Configure Workspace Settings...
|
OverlayPage_Configure_Workspace_Settings=&Configure Workspace Settings...
|
||||||
PropertyStore_Cannot_write_resource_property=Cannot write resource property
|
PropertyStore_Cannot_write_resource_property=Cannot write resource property
|
||||||
|
|
||||||
|
# ------- ExclusionInclusionDialog -------
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_title=Inclusion and Exclusion Patterns
|
||||||
|
ExclusionInclusionDialog_description=Included and excluded resources for ''{0}''.
|
||||||
|
ExclusionInclusionDialog_description2=Add or remove inclusion and exclusion patterns to resources for which problem is reported
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_exclusion_pattern_label=E&xclusion patterns:
|
||||||
|
ExclusionInclusionDialog_inclusion_pattern_label=I&nclusion patterns:
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_inclusion_pattern_add=A&dd...
|
||||||
|
ExclusionInclusionDialog_inclusion_pattern_add_multiple=Add &Multiple...
|
||||||
|
ExclusionInclusionDialog_inclusion_pattern_remove=&Remove
|
||||||
|
ExclusionInclusionDialog_inclusion_pattern_edit=&Edit...
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_exclusion_pattern_add=&Add...
|
||||||
|
ExclusionInclusionDialog_exclusion_pattern_add_multiple=Add M&ultiple...
|
||||||
|
ExclusionInclusionDialog_exclusion_pattern_remove=Rem&ove
|
||||||
|
ExclusionInclusionDialog_exclusion_pattern_edit=Edi&t...
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_ChooseExclusionPattern_title=Exclusion Pattern Selection
|
||||||
|
ExclusionInclusionDialog_ChooseExclusionPattern_description=&Choose folders or files to exclude:
|
||||||
|
|
||||||
|
ExclusionInclusionDialog_ChooseInclusionPattern_title=Inclusion Pattern Selection
|
||||||
|
ExclusionInclusionDialog_ChooseInclusionPattern_description=&Choose folders or files to include:
|
||||||
|
|
||||||
|
# ------- ExclusionInclusionEntryDialog -------
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_exclude_add_title=Add Exclusion Pattern
|
||||||
|
ExclusionInclusionEntryDialog_exclude_edit_title=Edit Exclusion Pattern
|
||||||
|
ExclusionInclusionEntryDialog_exclude_description=Enter a pattern for excluding files from the source folder. Allowed wildcards are '*', '?' and '**'. Examples: 'src/util/a*.c', 'src/util/', '**/Test*'.
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_exclude_pattern_label=E&xclusion pattern (Path relative to ''{0}''):
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_include_add_title=Add Inclusion Pattern
|
||||||
|
ExclusionInclusionEntryDialog_include_edit_title=Edit Inclusion Pattern
|
||||||
|
ExclusionInclusionEntryDialog_include_description=Enter a pattern for including files to the source folder. Allowed wildcards are '*', '?' and '**'. Examples: 'src/util/a*.c', 'src/util/', '**/Test*'.
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_include_pattern_label=I&nclusion pattern (Path relative to ''{0}''):
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_pattern_button=Bro&wse...
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_error_empty=Enter a pattern.
|
||||||
|
ExclusionInclusionEntryDialog_error_notrelative=Pattern must be a relative path.
|
||||||
|
ExclusionInclusionEntryDialog_error_exists=Pattern already exists.
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_ChooseExclusionPattern_title=Exclusion Pattern Selection
|
||||||
|
ExclusionInclusionEntryDialog_ChooseExclusionPattern_description=&Choose a folder or file to exclude:
|
||||||
|
|
||||||
|
ExclusionInclusionEntryDialog_ChooseInclusionPattern_title=Inclusion Pattern Selection
|
||||||
|
ExclusionInclusionEntryDialog_ChooseInclusionPattern_description=&Choose a folder or file to include:
|
|
@ -279,7 +279,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
|
||||||
*/
|
*/
|
||||||
protected void openCustomizeDialog() {
|
protected void openCustomizeDialog() {
|
||||||
CustomizeProblemDialog d = new CustomizeProblemDialog(getShell(),
|
CustomizeProblemDialog d = new CustomizeProblemDialog(getShell(),
|
||||||
selectedProblem);
|
selectedProblem, (IResource) getElement());
|
||||||
d.open();
|
d.open();
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,302 @@
|
||||||
|
package org.eclipse.cdt.codan.internal.ui.preferences;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.CodanUIActivator;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.dialogs.ExclusionInclusionEntryDialog;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.widgets.BasicElementLabels;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.DialogField;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.IListAdapter;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.LayoutUtil;
|
||||||
|
import org.eclipse.cdt.internal.ui.wizards.dialogfields.ListDialogField;
|
||||||
|
import org.eclipse.core.resources.IContainer;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
import org.eclipse.jface.dialogs.Dialog;
|
||||||
|
import org.eclipse.jface.preference.PreferencePage;
|
||||||
|
import org.eclipse.jface.resource.ImageDescriptor;
|
||||||
|
import org.eclipse.jface.viewers.LabelProvider;
|
||||||
|
import org.eclipse.jface.viewers.ViewerComparator;
|
||||||
|
import org.eclipse.jface.window.Window;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.graphics.Image;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Control;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
|
||||||
|
public class FileScopePreferencePage extends PreferencePage {
|
||||||
|
private ListDialogField fInclusionPatternList;
|
||||||
|
private ListDialogField fExclusionPatternList;
|
||||||
|
private FileScopeProblemPreference fCurrElement;
|
||||||
|
private IProject fCurrProject;
|
||||||
|
private IContainer fCurrSourceFolder;
|
||||||
|
private static final int IDX_ADD = 0;
|
||||||
|
private static final int IDX_ADD_MULTIPLE = 1;
|
||||||
|
private static final int IDX_EDIT = 2;
|
||||||
|
private static final int IDX_REMOVE = 4;
|
||||||
|
|
||||||
|
public FileScopePreferencePage(FileScopeProblemPreference entryToEdit) {
|
||||||
|
setTitle(CodanUIMessages.ExclusionInclusionDialog_title);
|
||||||
|
setDescription(CodanUIMessages.ExclusionInclusionDialog_description2);
|
||||||
|
fCurrElement = entryToEdit;
|
||||||
|
fCurrProject = entryToEdit.getProject();
|
||||||
|
IWorkspaceRoot root = fCurrProject != null ? fCurrProject
|
||||||
|
.getWorkspace().getRoot() : ResourcesPlugin.getWorkspace()
|
||||||
|
.getRoot();
|
||||||
|
IResource res = root.findMember(entryToEdit.getPath());
|
||||||
|
if (res instanceof IContainer) {
|
||||||
|
fCurrSourceFolder = (IContainer) res;
|
||||||
|
}
|
||||||
|
if (res == null)
|
||||||
|
fCurrSourceFolder = root;
|
||||||
|
String excLabel = CodanUIMessages.ExclusionInclusionDialog_exclusion_pattern_label;
|
||||||
|
ImageDescriptor excDescriptor = null; //JavaPluginImages.DESC_OBJS_EXCLUSION_FILTER_ATTRIB;
|
||||||
|
String[] excButtonLabels = new String[] {
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_exclusion_pattern_add,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_exclusion_pattern_add_multiple,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_exclusion_pattern_edit,
|
||||||
|
null,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_exclusion_pattern_remove };
|
||||||
|
String incLabel = CodanUIMessages.ExclusionInclusionDialog_inclusion_pattern_label;
|
||||||
|
ImageDescriptor incDescriptor = null; //JavaPluginImages.DESC_OBJS_INCLUSION_FILTER_ATTRIB;
|
||||||
|
String[] incButtonLabels = new String[] {
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_inclusion_pattern_add,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_inclusion_pattern_add_multiple,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_inclusion_pattern_edit,
|
||||||
|
null,
|
||||||
|
CodanUIMessages.ExclusionInclusionDialog_inclusion_pattern_remove };
|
||||||
|
fExclusionPatternList = createListContents(entryToEdit,
|
||||||
|
FileScopeProblemPreference.EXCLUSION, excLabel, null,
|
||||||
|
excButtonLabels);
|
||||||
|
fInclusionPatternList = createListContents(entryToEdit,
|
||||||
|
FileScopeProblemPreference.INCLUSION, incLabel, null,
|
||||||
|
incButtonLabels);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Control createContents(Composite parent) {
|
||||||
|
Composite inner = new Composite(parent, SWT.NONE);
|
||||||
|
inner.setFont(parent.getFont());
|
||||||
|
GridLayout layout = new GridLayout();
|
||||||
|
layout.marginHeight = 0;
|
||||||
|
layout.marginWidth = 0;
|
||||||
|
layout.numColumns = 2;
|
||||||
|
inner.setLayout(layout);
|
||||||
|
inner.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||||
|
fInclusionPatternList.doFillIntoGrid(inner, 3);
|
||||||
|
LayoutUtil.setHorizontalSpan(
|
||||||
|
fInclusionPatternList.getLabelControl(null), 2);
|
||||||
|
LayoutUtil.setHorizontalGrabbing(fInclusionPatternList
|
||||||
|
.getListControl(null));
|
||||||
|
fExclusionPatternList.doFillIntoGrid(inner, 3);
|
||||||
|
LayoutUtil.setHorizontalSpan(
|
||||||
|
fExclusionPatternList.getLabelControl(null), 2);
|
||||||
|
LayoutUtil.setHorizontalGrabbing(fExclusionPatternList
|
||||||
|
.getListControl(null));
|
||||||
|
setControl(inner);
|
||||||
|
Dialog.applyDialogFont(inner);
|
||||||
|
return inner;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class ExclusionInclusionLabelProvider extends LabelProvider {
|
||||||
|
private Image fElementImage;
|
||||||
|
|
||||||
|
public ExclusionInclusionLabelProvider(String descriptorPath) {
|
||||||
|
if (descriptorPath != null) {
|
||||||
|
ImageDescriptor d = CodanUIActivator
|
||||||
|
.getImageDescriptor(descriptorPath);
|
||||||
|
}
|
||||||
|
fElementImage = null; // XXX
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Image getImage(Object element) {
|
||||||
|
return fElementImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getText(Object element) {
|
||||||
|
return BasicElementLabels.getFilePattern((String) element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ListDialogField createListContents(
|
||||||
|
FileScopeProblemPreference entryToEdit, String key, String label,
|
||||||
|
String descriptor, String[] buttonLabels) {
|
||||||
|
ExclusionPatternAdapter adapter = new ExclusionPatternAdapter();
|
||||||
|
ListDialogField patternList = new ListDialogField(adapter,
|
||||||
|
buttonLabels, new ExclusionInclusionLabelProvider(descriptor));
|
||||||
|
patternList.setDialogFieldListener(adapter);
|
||||||
|
patternList.setLabelText(label);
|
||||||
|
patternList.enableButton(IDX_EDIT, false);
|
||||||
|
IPath[] pattern = entryToEdit.getAttribute(key);
|
||||||
|
ArrayList elements = new ArrayList(pattern.length);
|
||||||
|
for (int i = 0; i < pattern.length; i++) {
|
||||||
|
String patternName = pattern[i].toString();
|
||||||
|
if (patternName.length() > 0)
|
||||||
|
elements.add(patternName);
|
||||||
|
}
|
||||||
|
patternList.setElements(elements);
|
||||||
|
patternList.selectFirstElement();
|
||||||
|
patternList.enableButton(IDX_ADD_MULTIPLE, fCurrSourceFolder != null);
|
||||||
|
patternList.setViewerComparator(new ViewerComparator());
|
||||||
|
return patternList;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doCustomButtonPressed(ListDialogField field, int index) {
|
||||||
|
if (index == IDX_ADD) {
|
||||||
|
addEntry(field);
|
||||||
|
} else if (index == IDX_EDIT) {
|
||||||
|
editEntry(field);
|
||||||
|
} else if (index == IDX_ADD_MULTIPLE) {
|
||||||
|
addMultipleEntries(field);
|
||||||
|
} else if (index == IDX_REMOVE) {
|
||||||
|
field.removeElements(field.getSelectedElements());
|
||||||
|
}
|
||||||
|
updateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateStatus() {
|
||||||
|
fCurrElement.setAttribute(FileScopeProblemPreference.INCLUSION,
|
||||||
|
getInclusionPattern());
|
||||||
|
fCurrElement.setAttribute(FileScopeProblemPreference.EXCLUSION,
|
||||||
|
getExclusionPattern());
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doDoubleClicked(ListDialogField field) {
|
||||||
|
editEntry(field);
|
||||||
|
updateStatus();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doSelectionChanged(ListDialogField field) {
|
||||||
|
List selected = field.getSelectedElements();
|
||||||
|
field.enableButton(IDX_EDIT, canEdit(selected));
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canEdit(List selected) {
|
||||||
|
return selected.size() == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void editEntry(ListDialogField field) {
|
||||||
|
List selElements = field.getSelectedElements();
|
||||||
|
if (selElements.size() != 1) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List existing = field.getElements();
|
||||||
|
String entry = (String) selElements.get(0);
|
||||||
|
ExclusionInclusionEntryDialog dialog = new ExclusionInclusionEntryDialog(
|
||||||
|
getShell(), isExclusion(field), entry, existing, fCurrElement);
|
||||||
|
if (dialog.open() == Window.OK) {
|
||||||
|
field.replaceElement(entry, dialog.getExclusionPattern());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isExclusion(ListDialogField field) {
|
||||||
|
return field == fExclusionPatternList;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addEntry(ListDialogField field) {
|
||||||
|
List existing = field.getElements();
|
||||||
|
ExclusionInclusionEntryDialog dialog = new ExclusionInclusionEntryDialog(
|
||||||
|
getShell(), isExclusion(field), null, existing, fCurrElement);
|
||||||
|
if (dialog.open() == Window.OK) {
|
||||||
|
field.addElement(dialog.getExclusionPattern());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------- ExclusionPatternAdapter --------
|
||||||
|
private class ExclusionPatternAdapter implements IListAdapter,
|
||||||
|
IDialogFieldListener {
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#customButtonPressed(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField,
|
||||||
|
* int)
|
||||||
|
*/
|
||||||
|
public void customButtonPressed(ListDialogField field, int index) {
|
||||||
|
doCustomButtonPressed(field, index);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#selectionChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
|
||||||
|
*/
|
||||||
|
public void selectionChanged(ListDialogField field) {
|
||||||
|
doSelectionChanged(field);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IListAdapter#doubleClicked(org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField)
|
||||||
|
*/
|
||||||
|
public void doubleClicked(ListDialogField field) {
|
||||||
|
doDoubleClicked(field);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener#dialogFieldChanged(org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField)
|
||||||
|
*/
|
||||||
|
public void dialogFieldChanged(DialogField field) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void doStatusLineUpdate() {
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void checkIfPatternValid() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private IPath[] getPattern(ListDialogField field) {
|
||||||
|
Object[] arr = field.getElements().toArray();
|
||||||
|
Arrays.sort(arr);
|
||||||
|
IPath[] res = new IPath[arr.length];
|
||||||
|
for (int i = 0; i < res.length; i++) {
|
||||||
|
res[i] = new Path((String) arr[i]);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPath[] getExclusionPattern() {
|
||||||
|
return getPattern(fExclusionPatternList);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPath[] getInclusionPattern() {
|
||||||
|
return getPattern(fInclusionPatternList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @see org.eclipse.jface.window.Window#configureShell(Shell)
|
||||||
|
*/
|
||||||
|
protected void configureShell(Shell newShell) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addMultipleEntries(ListDialogField field) {
|
||||||
|
String title, message;
|
||||||
|
if (isExclusion(field)) {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionDialog_ChooseExclusionPattern_title;
|
||||||
|
message = CodanUIMessages.ExclusionInclusionDialog_ChooseExclusionPattern_description;
|
||||||
|
} else {
|
||||||
|
title = CodanUIMessages.ExclusionInclusionDialog_ChooseInclusionPattern_title;
|
||||||
|
message = CodanUIMessages.ExclusionInclusionDialog_ChooseInclusionPattern_description;
|
||||||
|
}
|
||||||
|
IPath[] res = ExclusionInclusionEntryDialog.chooseExclusionPattern(
|
||||||
|
getShell(), fCurrSourceFolder, title, message, null, true);
|
||||||
|
if (res != null) {
|
||||||
|
for (int i = 0; i < res.length; i++) {
|
||||||
|
field.addElement(res[i].toString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void noDefaultAndApplyButton() {
|
||||||
|
super.noDefaultAndApplyButton();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,147 @@
|
||||||
|
package org.eclipse.cdt.codan.internal.ui.widgets;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.osgi.util.TextProcessor;
|
||||||
|
import org.eclipse.ui.IWorkingSet;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A label provider for basic elements like paths. The label provider will make
|
||||||
|
* sure that the labels are correctly
|
||||||
|
* shown in RTL environments.
|
||||||
|
*
|
||||||
|
* @since 3.4
|
||||||
|
*/
|
||||||
|
public class BasicElementLabels {
|
||||||
|
// TextProcessor delimiters
|
||||||
|
private static final String CODE_DELIMITERS = TextProcessor
|
||||||
|
.getDefaultDelimiters() + "<>()?,{}+-*!%=^|&;[]~"; //$NON-NLS-1$
|
||||||
|
private static final String FILE_PATTERN_DELIMITERS = TextProcessor
|
||||||
|
.getDefaultDelimiters() + "*.?"; //$NON-NLS-1$
|
||||||
|
private static final String URL_DELIMITERS = TextProcessor
|
||||||
|
.getDefaultDelimiters() + ":@?-"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the label of a path.
|
||||||
|
*
|
||||||
|
* @param path
|
||||||
|
* the path
|
||||||
|
* @param isOSPath
|
||||||
|
* if <code>true</code>, the path represents an OS path, if
|
||||||
|
* <code>false</code> it is a workspace path.
|
||||||
|
* @return the label of the path to be used in the UI.
|
||||||
|
*/
|
||||||
|
public static String getPathLabel(IPath path, boolean isOSPath) {
|
||||||
|
String label;
|
||||||
|
if (isOSPath) {
|
||||||
|
label = path.toOSString();
|
||||||
|
} else {
|
||||||
|
label = path.makeRelative().toString();
|
||||||
|
}
|
||||||
|
return markLTR(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the label of the path of a file.
|
||||||
|
*
|
||||||
|
* @param file
|
||||||
|
* the file
|
||||||
|
* @return the label of the file path to be used in the UI.
|
||||||
|
*/
|
||||||
|
public static String getPathLabel(File file) {
|
||||||
|
return markLTR(file.getAbsolutePath());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the label for a file pattern like '*.java'
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* the pattern
|
||||||
|
* @return the label of the pattern.
|
||||||
|
*/
|
||||||
|
public static String getFilePattern(String name) {
|
||||||
|
return markLTR(name, FILE_PATTERN_DELIMITERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the label for a URL, URI or URL part. Example is
|
||||||
|
* 'http://www.x.xom/s.html#1'
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* the URL string
|
||||||
|
* @return the label of the URL.
|
||||||
|
*/
|
||||||
|
public static String getURLPart(String name) {
|
||||||
|
return markLTR(name, URL_DELIMITERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a label for a resource name.
|
||||||
|
*
|
||||||
|
* @param resource
|
||||||
|
* the resource
|
||||||
|
* @return the label of the resource name.
|
||||||
|
*/
|
||||||
|
public static String getResourceName(IResource resource) {
|
||||||
|
return markLTR(resource.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a label for a resource name.
|
||||||
|
*
|
||||||
|
* @param resourceName
|
||||||
|
* the resource name
|
||||||
|
* @return the label of the resource name.
|
||||||
|
*/
|
||||||
|
public static String getResourceName(String resourceName) {
|
||||||
|
return markLTR(resourceName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a label for Java code snippet used in a label. Example is 'Test
|
||||||
|
* test= new Test<? extends List>() { ...}'.
|
||||||
|
*
|
||||||
|
* @param string
|
||||||
|
* the Java code snippet
|
||||||
|
* @return the label for the Java code snippet
|
||||||
|
*/
|
||||||
|
public static String getJavaCodeString(String string) {
|
||||||
|
return markLTR(string, CODE_DELIMITERS);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a label for a version name. Example is '1.4.1'
|
||||||
|
*
|
||||||
|
* @param name
|
||||||
|
* the version string
|
||||||
|
* @return the version label
|
||||||
|
*/
|
||||||
|
public static String getVersionName(String name) {
|
||||||
|
return markLTR(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a label for a working set
|
||||||
|
*
|
||||||
|
* @param set
|
||||||
|
* the working set
|
||||||
|
* @return the label of the working set
|
||||||
|
*/
|
||||||
|
public static String getWorkingSetLabel(IWorkingSet set) {
|
||||||
|
return markLTR(set.getLabel());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It does not do anything now, but just in case we need to do the same as
|
||||||
|
* JDT does (see String.markLTR in JDT)
|
||||||
|
*/
|
||||||
|
private static String markLTR(String label) {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String markLTR(String label, String delim) {
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,16 +8,16 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.internal.ui.dialogs;
|
package org.eclipse.cdt.codan.internal.ui.widgets;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.model.IProblem;
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
||||||
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
import org.eclipse.swt.widgets.TabFolder;
|
import org.eclipse.swt.widgets.TabFolder;
|
||||||
import org.eclipse.swt.widgets.TabItem;
|
import org.eclipse.swt.widgets.TabItem;
|
||||||
|
|
||||||
|
@ -29,17 +29,21 @@ public class CustomizeProblemComposite extends Composite {
|
||||||
private Composite parametersTab;
|
private Composite parametersTab;
|
||||||
private IProblem problem;
|
private IProblem problem;
|
||||||
private ParametersComposite problemsComposite;
|
private ParametersComposite problemsComposite;
|
||||||
|
private FileScopeComposite scopeComposite;
|
||||||
|
private IResource resource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param parent
|
* @param parent
|
||||||
* @param selectedProblem
|
* @param selectedProblem
|
||||||
|
* @param resource
|
||||||
* @param style
|
* @param style
|
||||||
*/
|
*/
|
||||||
public CustomizeProblemComposite(Composite parent, IProblem selectedProblem) {
|
public CustomizeProblemComposite(Composite parent,
|
||||||
|
IProblem selectedProblem, IResource resource) {
|
||||||
super(parent, SWT.NONE);
|
super(parent, SWT.NONE);
|
||||||
|
|
||||||
this.setLayout(new GridLayout(1, false));
|
this.setLayout(new GridLayout(1, false));
|
||||||
this.problem = selectedProblem;
|
this.problem = selectedProblem;
|
||||||
|
this.resource = resource;
|
||||||
final TabFolder tabFolder = new TabFolder(this, SWT.TOP);
|
final TabFolder tabFolder = new TabFolder(this, SWT.TOP);
|
||||||
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
|
tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||||
// createMainTab(tabFolder);
|
// createMainTab(tabFolder);
|
||||||
|
@ -49,6 +53,7 @@ public class CustomizeProblemComposite extends Composite {
|
||||||
|
|
||||||
public void save(IProblemWorkingCopy problem) {
|
public void save(IProblemWorkingCopy problem) {
|
||||||
problemsComposite.save(problem);
|
problemsComposite.save(problem);
|
||||||
|
scopeComposite.save(problem);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -61,7 +66,8 @@ public class CustomizeProblemComposite extends Composite {
|
||||||
tabItem1.setControl(parametersTab);
|
tabItem1.setControl(parametersTab);
|
||||||
parametersTab.setLayout(new GridLayout());
|
parametersTab.setLayout(new GridLayout());
|
||||||
problemsComposite = new ParametersComposite(parametersTab, problem);
|
problemsComposite = new ParametersComposite(parametersTab, problem);
|
||||||
problemsComposite.setLayoutData(new GridData(SWT.BEGINNING,SWT.BEGINNING, true, false));
|
problemsComposite.setLayoutData(new GridData(SWT.BEGINNING,
|
||||||
|
SWT.BEGINNING, true, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,8 +79,8 @@ public class CustomizeProblemComposite extends Composite {
|
||||||
Composite comp = new Composite(tabFolder, SWT.NONE);
|
Composite comp = new Composite(tabFolder, SWT.NONE);
|
||||||
tabItem1.setControl(comp);
|
tabItem1.setControl(comp);
|
||||||
comp.setLayout(new GridLayout());
|
comp.setLayout(new GridLayout());
|
||||||
Label label = new Label(comp, SWT.NONE);
|
scopeComposite = new FileScopeComposite(comp, problem, resource);
|
||||||
label.setText("Scope: TODO"); //$NON-NLS-1$
|
scopeComposite.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING,
|
||||||
label.setLayoutData(new GridData(GridData.FILL_BOTH));
|
true, false));
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,100 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2009 Alena Laskavaia
|
||||||
|
* 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
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Alena Laskavaia - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.codan.internal.ui.widgets;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
|
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
||||||
|
import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.core.param.MapProblemPreference;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
|
import org.eclipse.cdt.codan.internal.ui.preferences.FileScopePreferencePage;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.jface.preference.PreferenceStore;
|
||||||
|
import org.eclipse.swt.SWT;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Composite to show problem scope
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FileScopeComposite extends Composite {
|
||||||
|
private FileScopePreferencePage page;
|
||||||
|
private IProblem problem;
|
||||||
|
private PreferenceStore prefStore;
|
||||||
|
private FileScopeProblemPreference scope;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param parent
|
||||||
|
* @param problem
|
||||||
|
* @param resource
|
||||||
|
* @param style
|
||||||
|
*/
|
||||||
|
public FileScopeComposite(Composite parent, final IProblem problem,
|
||||||
|
IResource resource) {
|
||||||
|
super(parent, SWT.NONE);
|
||||||
|
if (problem == null)
|
||||||
|
throw new NullPointerException();
|
||||||
|
this.setLayout(new GridLayout(2, false));
|
||||||
|
this.problem = problem;
|
||||||
|
this.prefStore = new PreferenceStore();
|
||||||
|
IProblemPreference info = problem.getPreference();
|
||||||
|
FileScopeProblemPreference scopeIn = null;
|
||||||
|
if (info == null
|
||||||
|
|| (!(info instanceof MapProblemPreference))
|
||||||
|
|| ((scopeIn = (FileScopeProblemPreference) ((MapProblemPreference) info)
|
||||||
|
.getChildDescriptor(FileScopeProblemPreference.KEY)) == null)) {
|
||||||
|
Label label = new Label(this, 0);
|
||||||
|
label.setText(CodanUIMessages.ParametersComposite_None);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
scope = (FileScopeProblemPreference) scopeIn.clone();
|
||||||
|
scope.setResource(resource);
|
||||||
|
initPrefStore();
|
||||||
|
page = new FileScopePreferencePage(scope);
|
||||||
|
page.setPreferenceStore(prefStore);
|
||||||
|
page.noDefaultAndApplyButton();
|
||||||
|
page.createControl(parent);
|
||||||
|
page.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save(IProblemWorkingCopy problem) {
|
||||||
|
if (page != null)
|
||||||
|
page.performOk();
|
||||||
|
savePrefStore();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void savePrefStore() {
|
||||||
|
if (scope == null)
|
||||||
|
return;
|
||||||
|
String key = scope.getQualifiedKey();
|
||||||
|
((MapProblemPreference) problem.getPreference()).setChildValue(
|
||||||
|
FileScopeProblemPreference.KEY, scope);
|
||||||
|
prefStore.setValue(key, scope.exportValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initPrefStore() {
|
||||||
|
if (scope == null)
|
||||||
|
return;
|
||||||
|
String key = scope.getQualifiedKey();
|
||||||
|
prefStore.setValue(key, scope.exportValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the problem
|
||||||
|
*/
|
||||||
|
public IProblem getProblem() {
|
||||||
|
return problem;
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,12 +8,13 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Alena Laskavaia - initial API and implementation
|
* Alena Laskavaia - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.codan.internal.ui.dialogs;
|
package org.eclipse.cdt.codan.internal.ui.widgets;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import org.eclipse.cdt.codan.core.model.IProblem;
|
import org.eclipse.cdt.codan.core.model.IProblem;
|
||||||
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
|
||||||
|
import org.eclipse.cdt.codan.core.param.FileScopeProblemPreference;
|
||||||
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
import org.eclipse.cdt.codan.core.param.IProblemPreference;
|
||||||
import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor;
|
import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor;
|
||||||
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
|
||||||
|
@ -21,6 +22,7 @@ import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
|
||||||
import org.eclipse.jface.dialogs.InputDialog;
|
import org.eclipse.jface.dialogs.InputDialog;
|
||||||
import org.eclipse.jface.preference.BooleanFieldEditor;
|
import org.eclipse.jface.preference.BooleanFieldEditor;
|
||||||
import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
||||||
|
import org.eclipse.jface.preference.FileFieldEditor;
|
||||||
import org.eclipse.jface.preference.ListEditor;
|
import org.eclipse.jface.preference.ListEditor;
|
||||||
import org.eclipse.jface.preference.PreferenceStore;
|
import org.eclipse.jface.preference.PreferenceStore;
|
||||||
import org.eclipse.jface.preference.StringFieldEditor;
|
import org.eclipse.jface.preference.StringFieldEditor;
|
||||||
|
@ -67,6 +69,8 @@ public class ParametersComposite extends Composite {
|
||||||
final IProblemPreference info) {
|
final IProblemPreference info) {
|
||||||
if (info == null)
|
if (info == null)
|
||||||
return;
|
return;
|
||||||
|
if (info.getKey() == FileScopeProblemPreference.KEY)
|
||||||
|
return; // skip the scope
|
||||||
switch (info.getType()) {
|
switch (info.getType()) {
|
||||||
case TYPE_STRING: {
|
case TYPE_STRING: {
|
||||||
StringFieldEditor fe = new StringFieldEditor(
|
StringFieldEditor fe = new StringFieldEditor(
|
||||||
|
@ -103,11 +107,12 @@ public class ParametersComposite extends Composite {
|
||||||
@Override
|
@Override
|
||||||
protected String getNewInputObject() {
|
protected String getNewInputObject() {
|
||||||
ListProblemPreference list = (ListProblemPreference) info;
|
ListProblemPreference list = (ListProblemPreference) info;
|
||||||
String label = list
|
String label = list.getChildDescriptor()
|
||||||
.getChildDescriptor()
|
|
||||||
.getLabel();
|
.getLabel();
|
||||||
InputDialog dialog = new InputDialog(
|
InputDialog dialog = new InputDialog(
|
||||||
getShell(), CodanUIMessages.ParametersComposite_NewValue, label, "", null); //$NON-NLS-1$
|
getShell(),
|
||||||
|
CodanUIMessages.ParametersComposite_NewValue,
|
||||||
|
label, "", null); //$NON-NLS-1$
|
||||||
if (dialog.open() == Window.OK) {
|
if (dialog.open() == Window.OK) {
|
||||||
return dialog.getValue();
|
return dialog.getValue();
|
||||||
}
|
}
|
||||||
|
@ -136,6 +141,20 @@ public class ParametersComposite extends Composite {
|
||||||
createFieldEditorsForParameters(desc);
|
createFieldEditorsForParameters(desc);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TYPE_CUSTOM: {
|
||||||
|
StringFieldEditor fe = new StringFieldEditor(
|
||||||
|
info.getQualifiedKey(), info.getLabel(),
|
||||||
|
getFieldEditorParent());
|
||||||
|
addField(fe);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TYPE_FILE: {
|
||||||
|
FileFieldEditor fe = new FileFieldEditor(
|
||||||
|
info.getQualifiedKey(), info.getLabel(),
|
||||||
|
getFieldEditorParent());
|
||||||
|
addField(fe);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedOperationException(info.getType()
|
throw new UnsupportedOperationException(info.getType()
|
||||||
.toString());
|
.toString());
|
||||||
|
@ -179,6 +198,9 @@ public class ParametersComposite extends Composite {
|
||||||
case TYPE_LIST:
|
case TYPE_LIST:
|
||||||
desc.importValue(prefStore.getString(key));
|
desc.importValue(prefStore.getString(key));
|
||||||
break;
|
break;
|
||||||
|
case TYPE_CUSTOM:
|
||||||
|
desc.importValue(prefStore.getString(key));
|
||||||
|
break;
|
||||||
case TYPE_MAP:
|
case TYPE_MAP:
|
||||||
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
||||||
.getChildDescriptors();
|
.getChildDescriptors();
|
||||||
|
@ -213,6 +235,9 @@ public class ParametersComposite extends Composite {
|
||||||
case TYPE_LIST:
|
case TYPE_LIST:
|
||||||
prefStore.setValue(key, desc.exportValue());
|
prefStore.setValue(key, desc.exportValue());
|
||||||
break;
|
break;
|
||||||
|
case TYPE_CUSTOM:
|
||||||
|
prefStore.setValue(key, desc.exportValue());
|
||||||
|
break;
|
||||||
case TYPE_MAP:
|
case TYPE_MAP:
|
||||||
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
|
||||||
.getChildDescriptors();
|
.getChildDescriptors();
|
Loading…
Add table
Reference in a new issue