Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2008-05-14 04:07:46 +0000
committerspingel2008-05-14 04:07:46 +0000
commitd6766a52ec7442063d818ca51b2fae0b8bc55108 (patch)
tree3a70bd3dfd897c0e23c547df824ab4fb35a22e3e /org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal
parent839c9ae28ce335ef04382223014033421b3f0541 (diff)
downloadorg.eclipse.mylyn.tasks-d6766a52ec7442063d818ca51b2fae0b8bc55108.tar.gz
org.eclipse.mylyn.tasks-d6766a52ec7442063d818ca51b2fae0b8bc55108.tar.xz
org.eclipse.mylyn.tasks-d6766a52ec7442063d818ca51b2fae0b8bc55108.zip
NEW - bug 197181: [api] make duplicate detection support generic
https://bugs.eclipse.org/bugs/show_bug.cgi?id=197181
Diffstat (limited to 'org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal')
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java29
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java30
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java66
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java108
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java4
5 files changed, 190 insertions, 47 deletions
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java
index 35c4dae15..ca52ad55b 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TasksUiPlugin.java
@@ -52,6 +52,7 @@ import org.eclipse.mylyn.context.core.ContextCore;
import org.eclipse.mylyn.internal.context.core.ContextPreferenceContstants;
import org.eclipse.mylyn.internal.provisional.commons.ui.AbstractNotification;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonColors;
+import org.eclipse.mylyn.internal.tasks.core.AbstractSearchHandler;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.ITasksCoreConstants;
import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector;
@@ -66,7 +67,6 @@ import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.core.TasksModel;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataManager;
import org.eclipse.mylyn.internal.tasks.core.data.TaskDataStore;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractDuplicateDetector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
import org.eclipse.mylyn.internal.tasks.core.externalization.ExternalizationManager;
import org.eclipse.mylyn.internal.tasks.core.externalization.IExternalizationParticipant;
@@ -76,6 +76,7 @@ import org.eclipse.mylyn.internal.tasks.ui.notifications.TaskListNotificationQue
import org.eclipse.mylyn.internal.tasks.ui.notifications.TaskListNotificationReminder;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiExtensionReader;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskRepositoriesView;
+import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
@@ -178,6 +179,8 @@ public class TasksUiPlugin extends AbstractUIPlugin {
private TaskJobFactory tasksJobFactory;
+ private final List<AbstractSearchHandler> searchHandlers = new ArrayList<AbstractSearchHandler>();
+
private static final boolean DEBUG_HTTPCLIENT = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.mylyn.tasks.ui/debug/httpclient"));
// XXX reconsider if this is necessary
@@ -1021,9 +1024,8 @@ public class TasksUiPlugin extends AbstractUIPlugin {
}
public void addDuplicateDetector(AbstractDuplicateDetector duplicateDetector) {
- if (duplicateDetector != null) {
- duplicateDetectors.add(duplicateDetector);
- }
+ Assert.isNotNull(duplicateDetector);
+ duplicateDetectors.add(duplicateDetector);
}
public Set<AbstractDuplicateDetector> getDuplicateSearchCollectorsList() {
@@ -1150,4 +1152,23 @@ public class TasksUiPlugin extends AbstractUIPlugin {
public static TasksModel getTasksModel() {
return tasksModel;
}
+
+ public void addSearchHandler(AbstractSearchHandler searchHandler) {
+ searchHandlers.add(searchHandler);
+ }
+
+ public void removeSearchHandler(AbstractSearchHandler searchHandler) {
+ searchHandlers.remove(searchHandler);
+ }
+
+ public AbstractSearchHandler getSearchHandler(String connectorKind) {
+ Assert.isNotNull(connectorKind);
+ for (AbstractSearchHandler searchHandler : searchHandlers) {
+ if (searchHandler.getConnectorKind().equals(connectorKind)) {
+ return searchHandler;
+ }
+ }
+ return null;
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java
index 43508b154..8d1dd3628 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/deprecated/AbstractRepositoryTaskEditor.java
@@ -78,7 +78,7 @@ import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.AbstractTaskCategory;
import org.eclipse.mylyn.internal.tasks.core.CommentQuoter;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractDuplicateDetector;
+import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyDuplicateDetector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskDataHandler;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryAttachment;
@@ -116,6 +116,7 @@ import org.eclipse.mylyn.internal.tasks.ui.editors.TaskUrlHyperlink;
import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.tasks.ui.views.UpdateRepositoryConfigurationAction;
+import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskElement;
@@ -1224,11 +1225,11 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
/**
* @since 3.0
*/
- protected AbstractDuplicateDetector getDuplicateDetector(String name) {
+ protected AbstractLegacyDuplicateDetector getDuplicateDetector(String name) {
String duplicateDetectorName = name.equals("default") ? "Stack Trace" : name;
- Set<AbstractDuplicateDetector> allDetectors = getDuplicateDetectorList();
+ Set<AbstractLegacyDuplicateDetector> allDetectors = getDuplicateDetectorList();
- for (AbstractDuplicateDetector detector : allDetectors) {
+ for (AbstractLegacyDuplicateDetector detector : allDetectors) {
if (detector.getName().equals(duplicateDetectorName)) {
return detector;
}
@@ -1240,13 +1241,14 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
/**
* @since 3.0
*/
- protected Set<AbstractDuplicateDetector> getDuplicateDetectorList() {
- Set<AbstractDuplicateDetector> duplicateDetectors = new HashSet<AbstractDuplicateDetector>();
+ protected Set<AbstractLegacyDuplicateDetector> getDuplicateDetectorList() {
+ Set<AbstractLegacyDuplicateDetector> duplicateDetectors = new HashSet<AbstractLegacyDuplicateDetector>();
for (AbstractDuplicateDetector abstractDuplicateDetector : TasksUiPlugin.getDefault()
.getDuplicateSearchCollectorsList()) {
- if (abstractDuplicateDetector.getKind() == null
- || abstractDuplicateDetector.getKind().equals(getConnector().getConnectorKind())) {
- duplicateDetectors.add(abstractDuplicateDetector);
+ if (abstractDuplicateDetector instanceof AbstractLegacyDuplicateDetector
+ && (abstractDuplicateDetector.getConnectorKind() == null || abstractDuplicateDetector.getConnectorKind()
+ .equals(getConnector().getConnectorKind()))) {
+ duplicateDetectors.add((AbstractLegacyDuplicateDetector) abstractDuplicateDetector);
}
}
return duplicateDetectors;
@@ -1254,7 +1256,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
public boolean searchForDuplicates() {
String duplicateDetectorName = duplicateDetectorChooser.getItem(duplicateDetectorChooser.getSelectionIndex());
- AbstractDuplicateDetector duplicateDetector = getDuplicateDetector(duplicateDetectorName);
+ AbstractLegacyDuplicateDetector duplicateDetector = getDuplicateDetector(duplicateDetectorName);
if (duplicateDetector != null) {
RepositoryQuery duplicatesQuery = duplicateDetector.getDuplicatesQuery(repository, taskData);
if (duplicatesQuery != null) {
@@ -1928,7 +1930,7 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
}
protected void addDuplicateDetection(Composite composite) {
- List<AbstractDuplicateDetector> allCollectors = new ArrayList<AbstractDuplicateDetector>();
+ List<AbstractLegacyDuplicateDetector> allCollectors = new ArrayList<AbstractLegacyDuplicateDetector>();
if (getDuplicateDetectorList() != null) {
allCollectors.addAll(getDuplicateDetectorList());
}
@@ -1951,15 +1953,15 @@ public abstract class AbstractRepositoryTaskEditor extends TaskFormPage {
duplicateDetectorChooser.setFont(TEXT_FONT);
duplicateDetectorChooser.setLayoutData(GridDataFactory.swtDefaults().hint(150, SWT.DEFAULT).create());
- Collections.sort(allCollectors, new Comparator<AbstractDuplicateDetector>() {
+ Collections.sort(allCollectors, new Comparator<AbstractLegacyDuplicateDetector>() {
- public int compare(AbstractDuplicateDetector c1, AbstractDuplicateDetector c2) {
+ public int compare(AbstractLegacyDuplicateDetector c1, AbstractLegacyDuplicateDetector c2) {
return c1.getName().compareToIgnoreCase(c2.getName());
}
});
- for (AbstractDuplicateDetector detector : allCollectors) {
+ for (AbstractLegacyDuplicateDetector detector : allCollectors) {
duplicateDetectorChooser.add(detector.getName());
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
index 3f4f47888..9db7340a9 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/TaskEditorDescriptionPart.java
@@ -15,15 +15,17 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.core.IdentityAttributeFactory;
-import org.eclipse.mylyn.internal.tasks.core.data.TaskDataUtil;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractDuplicateDetector;
+import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyDuplicateDetector;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
+import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.search.ui.NewSearchUI;
import org.eclipse.swt.SWT;
@@ -39,6 +41,9 @@ import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
+/**
+ * @author Steffen Pingel
+ */
public class TaskEditorDescriptionPart extends TaskEditorRichTextPart {
private static final String LABEL_SEARCH_DUPS = "Search";
@@ -56,8 +61,11 @@ public class TaskEditorDescriptionPart extends TaskEditorRichTextPart {
allCollectors.addAll(getDuplicateSearchCollectorsList());
}
if (!allCollectors.isEmpty()) {
- Section duplicatesSection = toolkit.createSection(composite, ExpandableComposite.TWISTIE
- | ExpandableComposite.SHORT_TITLE_BAR);
+ int style = ExpandableComposite.TWISTIE | ExpandableComposite.SHORT_TITLE_BAR;
+ if (getTaskData().isNew()) {
+ style |= ExpandableComposite.EXPANDED;
+ }
+ Section duplicatesSection = toolkit.createSection(composite, style);
duplicatesSection.setText(LABEL_SELECT_DETECTOR);
duplicatesSection.setLayout(new GridLayout());
GridDataFactory.fillDefaults().indent(SWT.DEFAULT, 15).applyTo(duplicatesSection);
@@ -124,44 +132,48 @@ public class TaskEditorDescriptionPart extends TaskEditorRichTextPart {
toolBar.add(replyAction);
}
- protected RepositoryQuery getDuplicateSearchCollector(String name) {
+ protected IRepositoryQuery getDuplicateQuery(String name) throws CoreException {
String duplicateDetectorName = name.equals("default") ? "Stack Trace" : name;
- Set<AbstractDuplicateDetector> allDetectors = getDuplicateSearchCollectorsList();
-
- for (AbstractDuplicateDetector detector : allDetectors) {
+ for (AbstractDuplicateDetector detector : getDuplicateSearchCollectorsList()) {
if (detector.getName().equals(duplicateDetectorName)) {
- return detector.getDuplicatesQuery(getTaskEditorPage().getTaskRepository(), TaskDataUtil.toLegacyData(
- getTaskData(), IdentityAttributeFactory.getInstance()));
+ return detector.getDuplicatesQuery(getTaskEditorPage().getTaskRepository(), getTaskData());
}
}
- // didn't find it
return null;
}
protected Set<AbstractDuplicateDetector> getDuplicateSearchCollectorsList() {
Set<AbstractDuplicateDetector> duplicateDetectors = new HashSet<AbstractDuplicateDetector>();
- for (AbstractDuplicateDetector abstractDuplicateDetector : TasksUiPlugin.getDefault()
- .getDuplicateSearchCollectorsList()) {
- if (abstractDuplicateDetector.getKind() == null
- || abstractDuplicateDetector.getKind().equals(getTaskEditorPage().getConnectorKind())) {
- duplicateDetectors.add(abstractDuplicateDetector);
+ for (AbstractDuplicateDetector detector : TasksUiPlugin.getDefault().getDuplicateSearchCollectorsList()) {
+ if (isValidDuplicateDetector(detector)) {
+ duplicateDetectors.add(detector);
}
}
return duplicateDetectors;
}
- public boolean searchForDuplicates(String duplicateDetectorName) {
- RepositoryQuery duplicatesQuery = getDuplicateSearchCollector(duplicateDetectorName);
- if (duplicatesQuery != null) {
- SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(),
- getTaskEditorPage().getTaskRepository(), duplicatesQuery);
- if (collector != null) {
+ @SuppressWarnings( { "deprecation", "restriction" })
+ private boolean isValidDuplicateDetector(AbstractDuplicateDetector detector) {
+ return !(detector instanceof AbstractLegacyDuplicateDetector) //
+ && (detector.getConnectorKind() == null || detector.getConnectorKind().equals(
+ getTaskEditorPage().getConnectorKind())) //
+ && detector.canQuery(getTaskData());
+ }
+
+ public void searchForDuplicates(String duplicateDetectorName) {
+ try {
+ IRepositoryQuery duplicatesQuery = getDuplicateQuery(duplicateDetectorName);
+ if (duplicatesQuery != null) {
+ SearchHitCollector collector = new SearchHitCollector(TasksUiInternal.getTaskList(),
+ getTaskEditorPage().getTaskRepository(), duplicatesQuery);
NewSearchUI.runQueryInBackground(collector);
- return true;
+ } else {
+ TasksUiInternal.displayStatus("Duplicate Detection Failed", new Status(IStatus.ERROR,
+ TasksUiPlugin.ID_PLUGIN, "The duplicate detector did not return a valid query."));
}
+ } catch (CoreException e) {
+ TasksUiInternal.displayStatus("Duplicate Detection Failed", e.getStatus());
}
-
- return false;
}
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java
new file mode 100644
index 000000000..984063f60
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/search/StackTraceDuplicateDetector.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers and others.
+ * 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.search;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.mylyn.internal.tasks.core.AbstractSearchHandler;
+import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
+import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
+import org.eclipse.mylyn.tasks.ui.TasksUi;
+
+/**
+ * @author Gail Murphy
+ * @author Steffen Pingel
+ */
+public class StackTraceDuplicateDetector extends AbstractDuplicateDetector {
+
+ @Override
+ public boolean canQuery(TaskData taskData) {
+ return TasksUiPlugin.getDefault().getSearchHandler(taskData.getConnectorKind()) != null;
+ }
+
+ private String getDescription(TaskData taskData) {
+ TaskAttribute attribute = taskData.getMappedAttribute(TaskAttribute.DESCRIPTION);
+ if (attribute == null) {
+ attribute = taskData.getMappedAttribute(TaskAttribute.COMMENT_NEW);
+ }
+ return (attribute != null) ? attribute.getTaskData().getAttributeMapper().getValueLabel(attribute) : "";
+ }
+
+ @Override
+ public IRepositoryQuery getDuplicatesQuery(TaskRepository taskRepository, TaskData taskData) throws CoreException {
+ String description = getDescription(taskData);
+ String searchString = getStackTraceFromDescription(description);
+ if (searchString == null) {
+ throw new CoreException(new Status(IStatus.INFO, TasksUiPlugin.ID_PLUGIN,
+ "Unable to locate a stack trace in the description text."));
+ }
+
+ IRepositoryQuery query = TasksUi.getTasksModel().createQuery(taskRepository);
+ AbstractSearchHandler searchHandler = TasksUiPlugin.getDefault().getSearchHandler(
+ taskRepository.getConnectorKind());
+ if (searchHandler.queryForText(taskRepository, query, taskData, searchString)) {
+ return query;
+ }
+ return null;
+ }
+
+ public static String getStackTraceFromDescription(String description) {
+ String stackTrace = null;
+
+ if (description == null) {
+ return null;
+ }
+
+ String punct = "!\"#$%&'\\(\\)*+,-./:;\\<=\\>?@\\[\\]^_`\\{|\\}~\n";
+ String lineRegex = " *at\\s+[\\w" + punct + "]+ ?\\(.*\\) *\n?";
+ Pattern tracePattern = Pattern.compile(lineRegex);
+ Matcher match = tracePattern.matcher(description);
+
+ if (match.find()) {
+ // record the index of the first stack trace line
+ int start = match.start();
+ int lastEnd = match.end();
+
+ // find the last stack trace line
+ while (match.find()) {
+ lastEnd = match.end();
+ }
+
+ // make sure there's still room to find the exception
+ if (start <= 0) {
+ return null;
+ }
+
+ // count back to the line before the stack trace to find the
+ // exception
+ int stackStart = 0;
+ int index = start - 1;
+ while (index > 1 && description.charAt(index) == ' ') {
+ index--;
+ }
+
+ // locate the exception line index
+ stackStart = description.substring(0, index - 1).lastIndexOf("\n");
+ stackStart = (stackStart == -1) ? 0 : stackStart + 1;
+
+ stackTrace = description.substring(stackStart, lastEnd);
+ }
+
+ return stackTrace;
+ }
+
+}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java
index 1254e7d5f..273e684d9 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java
@@ -22,7 +22,6 @@ import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractDuplicateDetector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskListFactory;
import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer;
@@ -30,6 +29,7 @@ import org.eclipse.mylyn.internal.tasks.ui.IDynamicSubMenuContributor;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.views.AbstractTaskListPresentation;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
+import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
@@ -283,7 +283,7 @@ public class TasksUiExtensionReader {
if (obj instanceof AbstractDuplicateDetector) {
AbstractDuplicateDetector duplicateDetector = (AbstractDuplicateDetector) obj;
duplicateDetector.setName(element.getAttribute(ATTR_NAME));
- duplicateDetector.setKind(element.getAttribute(ATTR_KIND));
+ duplicateDetector.setConnectorKind(element.getAttribute(ATTR_KIND));
TasksUiPlugin.getDefault().addDuplicateDetector(duplicateDetector);
} else {
StatusHandler.log(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,

Back to the top