aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFix.java13
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintViewPart.java50
2 files changed, 47 insertions, 16 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFix.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFix.java
index c132248..5bf0851 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFix.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintFix.java
@@ -77,6 +77,7 @@ import org.eclipse.wst.sse.core.StructuredModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
@@ -102,7 +103,8 @@ abstract class LintFix implements ICompletionProposal {
/**
* Returns true if this fix needs focus (which means that when the fix is
- * performed from a {@link LintListDialog}'s Fix button
+ * performed from for example a {@link LintListDialog}'s Fix button) the
+ * editor needs to be given focus.
*
* @return true if this fix needs focus after being applied
*/
@@ -233,12 +235,17 @@ abstract class LintFix implements ICompletionProposal {
int start, int end);
public void apply(IDocument document) {
+ if (!(document instanceof IStructuredDocument)) {
+ AdtPlugin.log(null, "Unexpected document type: %1$s. Can't fix.",
+ document.getClass().getName());
+ return;
+ }
int start = mMarker.getAttribute(IMarker.CHAR_START, -1);
int end = mMarker.getAttribute(IMarker.CHAR_END, -1);
if (start != -1 && end != -1) {
- Node node = DomUtilities.getNode(document, start);
IModelManager manager = StructuredModelManager.getModelManager();
- IStructuredModel model = manager.getExistingModelForEdit(document);
+ IStructuredModel model = manager.getModelForEdit((IStructuredDocument) document);
+ Node node = DomUtilities.getNode(document, start);
try {
apply(document, model, node, start, end);
} finally {
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintViewPart.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintViewPart.java
index f9a78a5..6f42bf2 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintViewPart.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/lint/LintViewPart.java
@@ -16,16 +16,15 @@
package com.android.ide.eclipse.adt.internal.lint;
import com.android.ide.eclipse.adt.AdtPlugin;
-import com.android.ide.eclipse.adt.AdtUtils;
-import com.android.ide.eclipse.adt.internal.editors.AndroidXmlEditor;
import com.android.ide.eclipse.adt.internal.editors.IconFactory;
import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
+import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.Job;
@@ -33,6 +32,9 @@ import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionEvent;
@@ -43,7 +45,6 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbench;
@@ -51,8 +52,9 @@ import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.editors.text.TextFileDocumentProvider;
import org.eclipse.ui.part.ViewPart;
-import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
+import org.eclipse.ui.texteditor.IDocumentProvider;
import java.util.ArrayList;
import java.util.Collections;
@@ -360,14 +362,36 @@ public class LintViewPart extends ViewPart implements SelectionListener, IJobCha
List<IMarker> markers = mLintView.getSelectedMarkers();
for (IMarker marker : markers) {
LintFix fix = LintFix.getFix(EclipseLintClient.getId(marker), marker);
- IEditorPart editor = AdtUtils.getActiveEditor();
- if (editor instanceof AndroidXmlEditor) {
- IStructuredDocument doc =
- ((AndroidXmlEditor) editor).getStructuredDocument();
- fix.apply(doc);
- } else {
- AdtPlugin.log(IStatus.ERROR,
- "Did not find associated editor to apply fix");
+ IResource resource = marker.getResource();
+ if (fix.needsFocus() && resource instanceof IFile) {
+ IRegion region = null;
+ try {
+ int start = marker.getAttribute(IMarker.CHAR_START, -1);
+ int end = marker.getAttribute(IMarker.CHAR_END, -1);
+ if (start != -1) {
+ region = new Region(start, end - start);
+ }
+ AdtPlugin.openFile((IFile) resource, region);
+ } catch (PartInitException e) {
+ AdtPlugin.log(e, "Can't open file %1$s", resource);
+ }
+ }
+ IDocumentProvider provider = new TextFileDocumentProvider();
+ try {
+ provider.connect(resource);
+ IDocument document = provider.getDocument(resource);
+ if (document != null) {
+ fix.apply(document);
+ if (!fix.needsFocus()) {
+ provider.saveDocument(new NullProgressMonitor(), resource,
+ document, true /*overwrite*/);
+ }
+ }
+ } catch (Exception e) {
+ AdtPlugin.log(e, "Did not find associated editor to apply fix: %1$s",
+ resource.getName());
+ } finally {
+ provider.disconnect(resource);
}
}
break;