1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 09:25:31 +02:00

Bug 337625 - Support for example parameters for message pattern to be used in codan preference UI.

This commit is contained in:
Sergey Prigogin 2011-02-20 00:54:08 +00:00
parent f1d8668d9a
commit 7a7f4df061
5 changed files with 231 additions and 154 deletions

View file

@ -168,6 +168,56 @@ where xxx what checker would post as an argument for the problem.
</appinfo>
</annotation>
</attribute>
<attribute name="exampleParam0" type="string">
<annotation>
<documentation>
Example parameter for &apos;messagePattern&apos; (with position 0.) This value is used only in the &quot;Code Analysis&quot; Preference UI to provide some context to the message shown for a particular problem.
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
<attribute name="exampleParam1" type="string">
<annotation>
<documentation>
Example parameter for &apos;messagePattern&apos; (with position 1.) This value is used only in the &quot;Code Analysis&quot; Preference UI to provide some context to the message shown for a particular problem.
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
<attribute name="exampleParam2" type="string">
<annotation>
<documentation>
Example parameter for &apos;messagePattern&apos; (with position 2.) This value is used only in the &quot;Code Analysis&quot; Preference UI to provide some context to the message shown for a particular problem.
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
<attribute name="exampleParam3" type="string">
<annotation>
<documentation>
Example parameter for &apos;messagePattern&apos; (with position 3.) This value is used only in the &quot;Code Analysis&quot; Preference UI to provide some context to the message shown for a particular problem.
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
<attribute name="exampleParam4" type="string">
<annotation>
<documentation>
Example parameter for &apos;messagePattern&apos; (with position 4.) This value is used only in the &quot;Code Analysis&quot; Preference UI to provide some context to the message shown for a particular problem.
</documentation>
<appinfo>
<meta.attribute translatable="true"/>
</appinfo>
</annotation>
</attribute>
<attribute name="description" type="string">
<annotation>
<documentation>

View file

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2009, 2010 Alena Laskavaia
* Copyright (c) 2009, 2011 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
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.core.model;
@ -20,20 +20,20 @@ import org.eclipse.cdt.codan.core.param.IProblemPreference;
* determined by runtime. If it is the case - two Problems should be created
* (i.e. one for error and one for warning). All of problem attributes are
* defined in a checker extension point.
*
*
* <p>
* <strong>EXPERIMENTAL</strong>. This class or interface has been added as part
* of a work in progress. There is no guarantee that this API will work or that
* it will remain the same.
* </p>
*
*
* @noextend This interface is not intended to be extended by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IProblem extends IProblemElement {
/**
* Name of the problem - user visible "title", not the message
*
*
* @return title of the problem
*/
String getName();
@ -41,50 +41,60 @@ public interface IProblem extends IProblemElement {
/**
* Unique problem id. Should be qualified by plugin name to maintain
* uniqueness.
*
*
* @return unique problem id
*/
String getId();
/**
* Is enabled in current context (usually within profile)
*
* Returns <code>true</code> if the problem is enabled in current context
* (usually within profile)
*
* @return true if enabled
*/
boolean isEnabled();
/**
* Get current severity
*
* Returns current severity
*
* @return severity
*/
CodanSeverity getSeverity();
/**
* Message pattern, java patter like 'Variable {0} is never used here'
*
*
* @return pattern
*/
String getMessagePattern();
/**
* Get root preference descriptor or null if not defined (used by ui to
* Returns the example parameters to use with {@link #getMessagePattern()}.
* These parameters are used only in the "Code Analysis" Preference UI.
*
* @return example parameters
* @since 2.0
*/
public String[] getExampleMessageParameters();
/**
* Returns root preference descriptor or null if not defined (used by UI to
* generate user controls for changing parameters)
*
*
* @return root preference or null
*/
public IProblemPreference getPreference();
/**
* Get short description of a problem
*
* Returns short description of a problem
*
* @return description
*/
public String getDescription();
/**
* Return marker id for the problem
*
* Returns marker id for the problem
*
* @return marker id
*/
public String getMarkerType();

View file

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2009, 2010 Alena Laskavaia
* Copyright (c) 2009, 2011 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
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.internal.core;
@ -86,18 +86,15 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
processChecker(configurationElement);
}
// init parameters for checkers with parameters
for (Iterator<IChecker> iterator = problemList.keySet().iterator(); iterator
.hasNext();) {
for (Iterator<IChecker> iterator = problemList.keySet().iterator(); iterator.hasNext();) {
IChecker c = iterator.next();
if (c instanceof ICheckerWithPreferences) {
Collection<IProblem> list = problemList.get(c);
for (Iterator<IProblem> iterator2 = list.iterator(); iterator2
.hasNext();) {
for (Iterator<IProblem> iterator2 = list.iterator(); iterator2.hasNext();) {
IProblem p = iterator2.next();
if (p instanceof IProblemWorkingCopy) {
try {
((ICheckerWithPreferences) c)
.initPreferences((IProblemWorkingCopy) p);
((ICheckerWithPreferences) c).initPreferences((IProblemWorkingCopy) p);
} catch (Throwable t) {
t.printStackTrace();
CodanCorePlugin.log(t);
@ -140,19 +137,16 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
name = id;
IChecker checkerObj = null;
try {
Object checker = configurationElement
.createExecutableExtension("class"); //$NON-NLS-1$
Object checker = configurationElement.createExecutableExtension("class"); //$NON-NLS-1$
checkerObj = (IChecker) checker;
addChecker(checkerObj);
} catch (CoreException e) {
CodanCorePlugin.log(e);
return;
}
IConfigurationElement[] children1 = configurationElement
.getChildren("problemRef"); //$NON-NLS-1$
boolean hasRef = false;
IConfigurationElement[] children2 = configurationElement
.getChildren(PROBLEM_ELEMENT);
IConfigurationElement[] children2 =
configurationElement.getChildren(PROBLEM_ELEMENT);
if (children2 != null) {
for (IConfigurationElement ref : children2) {
IProblem p = processProblem(ref);
@ -160,11 +154,12 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
hasRef = true;
}
}
IConfigurationElement[] children1 =
configurationElement.getChildren("problemRef"); //$NON-NLS-1$
if (children1 != null) {
for (IConfigurationElement ref : children1) {
hasRef = true;
IProblem p = getDefaultProfile().findProblem(
ref.getAttribute("refId")); //$NON-NLS-1$
IProblem p = getDefaultProfile().findProblem(ref.getAttribute("refId")); //$NON-NLS-1$
addRefProblem(checkerObj, p);
}
}
@ -183,8 +178,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
* @param configurationElement
* @return
*/
private CodanProblem processProblem(
IConfigurationElement configurationElement) {
private CodanProblem processProblem(IConfigurationElement configurationElement) {
if (configurationElement.getName().equals(PROBLEM_ELEMENT)) {
String id = getAtt(configurationElement, ID_ATTR);
if (id == null)
@ -199,9 +193,15 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
String enab = getAtt(configurationElement, "defaultEnabled", false); //$NON-NLS-1$
String sev = getAtt(configurationElement, "defaultSeverity", false); //$NON-NLS-1$
String patt = getAtt(configurationElement, "messagePattern", false); //$NON-NLS-1$
ArrayList<String> exampleParams = new ArrayList<String>();
for (int i = 0; ; i++) {
String param = configurationElement.getAttribute("exampleParam" + i); //$NON-NLS-1$
if (param == null)
break;
exampleParams.add(param);
}
String desc = getAtt(configurationElement, "description", false); //$NON-NLS-1$
String markerType = getAtt(configurationElement,
"markerType", false); //$NON-NLS-1$
String markerType = getAtt(configurationElement, "markerType", false); //$NON-NLS-1$
if (enab != null) {
p.setEnabled(Boolean.valueOf(enab));
}
@ -213,6 +213,9 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
if (patt != null) {
p.setMessagePattern(patt);
}
if (!exampleParams.isEmpty()) {
p.setExampleMessageParameters(exampleParams.toArray(new String[exampleParams.size()]));
}
if (markerType != null) {
p.setMarkerType(markerType);
}
@ -232,21 +235,25 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
String name, boolean req) {
String elementValue = configurationElement.getAttribute(name);
if (elementValue == null && req)
CodanCorePlugin
.log("Extension " + configurationElement.getDeclaringExtension().getUniqueIdentifier() //$NON-NLS-1$
+ " missing required attribute: " + configurationElement.getName() + "." + name); //$NON-NLS-1$ //$NON-NLS-2$
CodanCorePlugin.log("Extension " //$NON-NLS-1$
+ configurationElement.getDeclaringExtension().getUniqueIdentifier()
+ " missing required attribute: " + configurationElement.getName() //$NON-NLS-1$
+ "." + name); //$NON-NLS-1$
return elementValue;
}
/*
* (non-Javadoc)
*
*
* @see org.eclipse.cdt.codan.core.model.ICheckersRegistry#iterator()
*/
public Iterator<IChecker> iterator() {
return checkers.iterator();
}
/**
* @return the singleton checkers registry
*/
public static CheckersRegistry getInstance() {
if (instance == null)
return new CheckersRegistry();
@ -255,7 +262,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#addChecker(org.eclipse
* .cdt.codan.core.model.IChecker)
@ -266,7 +273,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#addProblem(org.eclipse
* .cdt.codan.core.model.IProblem, java.lang.String)
@ -280,7 +287,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#addCategory(org.eclipse
* .cdt.codan.core.model.IProblemCategory, java.lang.String)
@ -294,7 +301,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#addRefProblem(org.
* eclipse.cdt.codan.core.model.IChecker,
@ -311,7 +318,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/**
* Returns list of problems registered for given checker
*
*
* @return collection of problems or null
*/
public Collection<IProblem> getRefProblems(IChecker checker) {
@ -320,7 +327,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#getDefaultProfile()
*/
@ -330,7 +337,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#getWorkspaceProfile()
*/
@ -361,7 +368,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.ICheckersRegistry#getResourceProfile
* (org.eclipse.core.resources.IResource)
@ -373,18 +380,17 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
try {
prof = (IProblemProfile) getWorkspaceProfile().clone();
// load default values
CodanPreferencesLoader loader = new CodanPreferencesLoader(
prof);
Preferences projectNode = CodanPreferencesLoader
.getProjectNode((IProject) element);
boolean useWorkspace = projectNode.getBoolean(
PreferenceConstants.P_USE_PARENT, false);
CodanPreferencesLoader loader = new CodanPreferencesLoader(prof);
Preferences projectNode =
CodanPreferencesLoader.getProjectNode((IProject) element);
boolean useWorkspace = projectNode.getBoolean(PreferenceConstants.P_USE_PARENT,
false);
if (!useWorkspace) {
loader.load(projectNode);
}
profiles.put(element, prof);
} catch (CloneNotSupportedException e) {
// cant
// can't
}
} else if (element.getParent() != null) {
prof = getResourceProfile(element.getParent());
@ -398,34 +404,32 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
/*
* (non-Javadoc)
*
*
* @seeorg.eclipse.cdt.codan.core.model.ICheckersRegistry#
* getResourceProfileWorkingCopy(org.eclipse.core.resources.IResource)
*/
public IProblemProfile getResourceProfileWorkingCopy(IResource element) {
try {
IProblemProfile prof = (IProblemProfile) getResourceProfile(element)
.clone();
IProblemProfile prof = (IProblemProfile) getResourceProfile(element).clone();
return prof;
} catch (CloneNotSupportedException e) {
// cant
// can't
return null;
}
}
/**
* Test if checker is enabled (needs to be run) or not. Checker is enabled
* if at least one problem it prints is enabled.
*
* Tests if a checker is enabled (needs to be run) or not. Checker is enabled
* if at least one problem it reports is enabled.
*
* @param checker
* @param resource
* @return
* @return <code>true</code> if the checker is enabled
*/
public boolean isCheckerEnabled(IChecker checker, IResource resource) {
IProblemProfile resourceProfile = getResourceProfile(resource);
Collection<IProblem> refProblems = getRefProblems(checker);
for (Iterator<IProblem> iterator = refProblems.iterator(); iterator
.hasNext();) {
for (Iterator<IProblem> iterator = refProblems.iterator(); iterator.hasNext();) {
IProblem p = iterator.next();
// we need to check problem enablement in particular profile
IProblem problem = resourceProfile.findProblem(p.getId());
@ -439,15 +443,15 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
}
/**
* Test if checker need to run in specific launch mode
*
* Tests if a checker needs to run in a specific launch mode.
*
* @param checker
* @param resource
* @param mode
* @return
* @return <code>true</code> if the checker should run.
*/
public boolean isCheckerEnabledForLaunchMode(IChecker checker,
IResource resource, CheckerLaunchMode mode) {
public boolean isCheckerEnabledForLaunchMode(IChecker checker, IResource resource,
CheckerLaunchMode mode) {
IProblemProfile resourceProfile = getResourceProfile(resource);
Collection<IProblem> refProblems = getRefProblems(checker);
boolean enabled = false;
@ -459,13 +463,10 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
if (problem == null)
throw new IllegalArgumentException("Id is not registered"); //$NON-NLS-1$
if (checker instanceof AbstractCheckerWithProblemPreferences) {
MapProblemPreference map = (MapProblemPreference) problem
.getPreference();
IProblemPreference pref1 = map
.getChildDescriptor(LaunchTypeProblemPreference.KEY);
MapProblemPreference map = (MapProblemPreference) problem.getPreference();
IProblemPreference pref1 = map.getChildDescriptor(LaunchTypeProblemPreference.KEY);
LaunchTypeProblemPreference pref = (LaunchTypeProblemPreference) pref1;
if (pref == null
|| pref.isRunningInMode(CheckerLaunchMode.USE_PARENT)) {
if (pref == null || pref.isRunningInMode(CheckerLaunchMode.USE_PARENT)) {
enabled = true;
break;
}
@ -479,7 +480,7 @@ public class CheckersRegistry implements Iterable<IChecker>, ICheckersRegistry {
}
/**
* @return
* @return the number of checkers
*/
public int getCheckersSize() {
return checkers.size();

View file

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2009, 2010 Alena Laskavaia
* Copyright (c) 2009, 2011 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
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.internal.core.model;
@ -15,21 +15,30 @@ import org.eclipse.cdt.codan.core.model.IProblemReporter;
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
import org.eclipse.cdt.codan.core.param.IProblemPreference;
/**
* A type of problems reported by Codan.
*/
public class CodanProblem implements IProblemWorkingCopy, Cloneable {
private String id;
private String name;
private String message;
private String messagePattern;
private CodanSeverity severity = CodanSeverity.Warning;
private boolean enabled = true;
private IProblemPreference preference;
private boolean frozen;
private String description;
private String markerType = IProblemReporter.GENERIC_CODE_ANALYSIS_MARKER_TYPE;
private String[] exampleParams = { "X", "Y", "Z", "U", "V" }; //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$
public CodanSeverity getSeverity() {
return severity;
}
/**
* @param problemId - the ID of the problem
* @param name - the name of the problem
*/
public CodanProblem(String problemId, String name) {
this.id = problemId;
this.name = name;
@ -65,7 +74,7 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
/*
* (non-Javadoc)
*
*
* @see java.lang.Object#clone()
*/
@Override
@ -92,11 +101,11 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
/*
* (non-Javadoc)
*
*
* @see org.eclipse.cdt.codan.core.model.IProblem#getMessagePattern()
*/
public String getMessagePattern() {
return message;
return messagePattern;
}
protected void freeze() {
@ -104,12 +113,12 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
}
/**
* @param message
* the message to set
* @param messagePattern
* the message to set
*/
public void setMessagePattern(String message) {
public void setMessagePattern(String messagePattern) {
checkSet();
this.message = message;
this.messagePattern = messagePattern;
}
protected void checkSet() {
@ -119,7 +128,7 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
/*
* (non-Javadoc)
*
*
* @see org.eclipse.cdt.codan.core.model.IProblem#getDescription()
*/
public String getDescription() {
@ -128,7 +137,7 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
/*
* (non-Javadoc)
*
*
* @see
* org.eclipse.cdt.codan.core.model.IProblemWorkingCopy#setDescription(java
* .lang.String)
@ -139,14 +148,40 @@ public class CodanProblem implements IProblemWorkingCopy, Cloneable {
/*
* (non-Javadoc)
*
*
* @see org.eclipse.cdt.codan.core.model.IProblem#getMarkerType()
*/
public String getMarkerType() {
return markerType;
}
public void setMarkerType(String type) {
markerType = type;
/**
* Sets the marker id for the problem.
* @param markerType
*/
public void setMarkerType(String markerType) {
this.markerType = markerType;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.cdt.codan.core.model.IProblem#getExampleParameters()
*/
public String[] getExampleMessageParameters() {
return exampleParams.clone();
}
/**
* Sets an example message parameter to use with {@link #getMessagePattern()}.
*
* @param exampleParameters - the example message parameters to set,
* e.g. { "&lt;variable_name&gt;" }.
* @see #getExampleMessageParameters()
*/
public void setExampleMessageParameters(String[] exampleParameters) {
checkSet();
this.exampleParams = exampleParameters;
}
}

View file

@ -1,12 +1,12 @@
/*******************************************************************************
* Copyright (c) 2009, 2010 Alena Laskavaia
* Copyright (c) 2009, 2011 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
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.internal.ui.preferences;
@ -17,7 +17,6 @@ import org.eclipse.cdt.codan.core.CodanRuntime;
import org.eclipse.cdt.codan.core.model.ICheckersRegistry;
import org.eclipse.cdt.codan.core.model.IProblem;
import org.eclipse.cdt.codan.core.model.IProblemProfile;
import org.eclipse.cdt.codan.core.param.IProblemPreference;
import org.eclipse.cdt.codan.internal.ui.CodanUIActivator;
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
import org.eclipse.cdt.codan.internal.ui.dialogs.CustomizeProblemDialog;
@ -55,29 +54,27 @@ import org.eclipse.ui.preferences.ScopedPreferenceStore;
* preference store that belongs to the main plug-in class. That way,
* preferences can be accessed directly via the preference store.
*/
public class CodanPreferencePage extends FieldEditorOverlayPage implements
IWorkbenchPreferencePage {
public class CodanPreferencePage extends FieldEditorOverlayPage implements IWorkbenchPreferencePage {
private IProblemProfile profile;
private ISelectionChangedListener problemSelectionListener;
private IProblem selectedProblem;
private Group info;
private Label infoDesc;
private Label infoMessage;
//private Label infoParams;
// private Label infoParams;
private Button infoButton;
private ProblemsTreeEditor checkedTreeEditor;
public CodanPreferencePage() {
super(GRID);
setPreferenceStore(new ScopedPreferenceStore(new InstanceScope(),
setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE,
CodanCorePlugin.PLUGIN_ID));
// setDescription("Code Analysis Preference Page");
problemSelectionListener = new ISelectionChangedListener() {
public void selectionChanged(SelectionChangedEvent event) {
if (info != null) {
if (event.getSelection() instanceof ITreeSelection) {
ITreeSelection s = (ITreeSelection) event
.getSelection();
ITreeSelection s = (ITreeSelection) event.getSelection();
if (s.getFirstElement() instanceof IProblem)
setSelectedProblem((IProblem) s.getFirstElement());
else
@ -100,8 +97,7 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
*/
@Override
public void createFieldEditors() {
checkedTreeEditor = new ProblemsTreeEditor(getFieldEditorParent(),
profile);
checkedTreeEditor = new ProblemsTreeEditor(getFieldEditorParent(), profile);
addField(checkedTreeEditor);
checkedTreeEditor.getTreeViewer().addSelectionChangedListener(
problemSelectionListener);
@ -111,11 +107,9 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
openCustomizeDialog();
}
});
GridData layoutData = new GridData(GridData.FILL, GridData.FILL, true,
true);
GridData layoutData = new GridData(GridData.FILL, GridData.FILL, true, true);
layoutData.heightHint = 400;
checkedTreeEditor.getTreeViewer().getControl()
.setLayoutData(layoutData);
checkedTreeEditor.getTreeViewer().getControl().setLayoutData(layoutData);
}
/*
@ -127,9 +121,9 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
*/
@Override
protected Control createContents(Composite parent) {
profile = isPropertyPage() ? getRegistry()
.getResourceProfileWorkingCopy((IResource) getElement())
: getRegistry().getWorkspaceProfile();
profile = isPropertyPage() ?
getRegistry().getResourceProfileWorkingCopy((IResource) getElement()) :
getRegistry().getWorkspaceProfile();
Composite comp = (Composite) super.createContents(parent);
createInfoControl(comp);
return comp;
@ -143,10 +137,10 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
info.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
info.setLayout(new GridLayout(2, false));
info.setText(CodanUIMessages.CodanPreferencePage_Info);
GridDataFactory gdLab = GridDataFactory.swtDefaults()
.align(SWT.BEGINNING, SWT.BEGINNING).grab(false, false);
GridDataFactory gdFact = GridDataFactory.swtDefaults()
.align(SWT.BEGINNING, SWT.BEGINNING).grab(true, true);
GridDataFactory gdLab =
GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(false, false);
GridDataFactory gdFact =
GridDataFactory.swtDefaults().align(SWT.BEGINNING, SWT.BEGINNING).grab(true, true);
// message
Label labelMessage = new Label(info, SWT.NONE);
labelMessage.setText(CodanUIMessages.CodanPreferencePage_MessageLabel);
@ -154,9 +148,9 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
infoMessage = new Label(info, SWT.WRAP);
infoMessage.setLayoutData(gdFact.copy().create());
// description
// Label labelDesc = new Label(info, SWT.NONE);
// labelDesc.setText(CodanUIMessages.CodanPreferencePage_Description);
// labelDesc.setLayoutData(gdLab.create());
// Label labelDesc = new Label(info, SWT.NONE);
// labelDesc.setText(CodanUIMessages.CodanPreferencePage_Description);
// labelDesc.setLayoutData(gdLab.create());
infoDesc = new Label(info, SWT.WRAP);
PixelConverter pixelConverter = new PixelConverter(comp);
infoDesc.setLayoutData(gdFact
@ -166,14 +160,14 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
pixelConverter.convertHeightInCharsToPixels(3))
.create());
// params
// Label labelParams = new Label(info, SWT.NONE);
// labelParams.setText(CodanUIMessages.CodanPreferencePage_Parameters);
// labelParams.setLayoutData(gdLab.create());
// infoParams = new Label(info, SWT.NONE);
// infoParams.setLayoutData(gdFact.create());
// Label labelParams = new Label(info, SWT.NONE);
// labelParams.setText(CodanUIMessages.CodanPreferencePage_Parameters);
// labelParams.setLayoutData(gdLab.create());
// infoParams = new Label(info, SWT.NONE);
// infoParams.setLayoutData(gdFact.create());
infoButton = new Button(info, SWT.PUSH);
infoButton.setLayoutData(GridDataFactory.swtDefaults().span(2, 1)
.align(SWT.END, SWT.BEGINNING).create());
infoButton.setLayoutData(
GridDataFactory.swtDefaults().span(2, 1).align(SWT.END, SWT.BEGINNING).create());
infoButton.setText(CodanUIMessages.CodanPreferencePage_Customize);
infoButton.addSelectionListener(new SelectionAdapter() {
@Override
@ -212,20 +206,13 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
return super.performOk();
}
/**
*
*/
private void saveWidgetValues() {
CodanUIActivator
.getDefault()
.getDialogSettings()
.put(getWidgetId(),
selectedProblem == null ? "" : selectedProblem.getId()); //$NON-NLS-1$
CodanUIActivator.getDefault().getDialogSettings().put(getWidgetId(),
selectedProblem == null ? "" : selectedProblem.getId()); //$NON-NLS-1$
}
private void restoreWidgetValues() {
String id = CodanUIActivator.getDefault().getDialogSettings()
.get(getWidgetId());
String id = CodanUIActivator.getDefault().getDialogSettings().get(getWidgetId());
if (id != null && id.length() > 0 && checkedTreeEditor != null) {
checkedTreeEditor.getTreeViewer().setSelection(
new StructuredSelection(profile.findProblem(id)), true);
@ -241,30 +228,28 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
return getPageId() + ".selection"; //$NON-NLS-1$
}
/**
*
*/
private void updateProblemInfo() {
if (selectedProblem == null) {
infoMessage.setText(""); //$NON-NLS-1$
infoDesc.setText(""); //$NON-NLS-1$
//infoParams.setText(""); //$NON-NLS-1$
// infoParams.setText(""); //$NON-NLS-1$
infoButton.setEnabled(false);
} else {
IProblemPreference pref = selectedProblem.getPreference();
String description = selectedProblem.getDescription();
if (description == null)
description = CodanUIMessages.CodanPreferencePage_NoInfo;
String messageToShow = CodanUIMessages.CodanPreferencePage_NoInfo;
String messagePattern = selectedProblem.getMessagePattern();
String message = CodanUIMessages.CodanPreferencePage_NoInfo;
if (messagePattern != null) {
message = MessageFormat.format(messagePattern, "X", "Y", "Z"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
Object[] exampleParams = selectedProblem.getExampleMessageParameters();
messageToShow = MessageFormat.format(messagePattern, exampleParams);
}
infoMessage.setText(message);
infoMessage.setText(messageToShow);
infoDesc.setText(description);
// infoParams
// .setText(pref == null ? CodanUIMessages.CodanPreferencePage_NoInfo
// : CodanUIMessages.CodanPreferencePage_HasPreferences);
// IProblemPreference pref = selectedProblem.getPreference();
// infoParams.setText(pref == null ?
// CodanUIMessages.CodanPreferencePage_NoInfo :
// CodanUIMessages.CodanPreferencePage_HasPreferences);
infoButton.setEnabled(true);
}
info.layout(true);
@ -273,20 +258,16 @@ public class CodanPreferencePage extends FieldEditorOverlayPage implements
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
*/
public void init(IWorkbench workbench) {
}
/**
*
*/
protected void openCustomizeDialog() {
if (selectedProblem == null)
return;
CustomizeProblemDialog d = new CustomizeProblemDialog(getShell(),
selectedProblem, (IResource) getElement());
d.open();
CustomizeProblemDialog dialog = new CustomizeProblemDialog(getShell(), selectedProblem,
(IResource) getElement());
dialog.open();
}
}