1fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye/*
2fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * Copyright (C) 2012 The Android Open Source Project
3fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye *
4fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * you may not use this file except in compliance with the License.
6fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * You may obtain a copy of the License at
7fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye *
8fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye *      http://www.eclipse.org/org/documents/epl-v10.php
9fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye *
10fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * Unless required by applicable law or agreed to in writing, software
11fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS,
12fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * See the License for the specific language governing permissions and
14fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye * limitations under the License.
15fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye */
16fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
17fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyepackage com.android.ide.eclipse.adt.internal.lint;
18fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
19fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport com.android.ide.eclipse.adt.AdtPlugin;
20fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport com.android.ide.eclipse.adt.AdtUtils;
21fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate;
22fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport com.android.ide.eclipse.adt.internal.editors.layout.refactoring.UseCompoundDrawableRefactoring;
23fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport com.android.tools.lint.checks.UseCompoundDrawableDetector;
24fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
25fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.core.resources.IFile;
26fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.core.resources.IMarker;
27fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.jface.text.IDocument;
28fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.jface.text.ITextSelection;
29fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.jface.text.TextSelection;
30fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.ltk.ui.refactoring.RefactoringWizard;
31fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
32fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.swt.graphics.Image;
33fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.ui.IWorkbenchWindow;
34fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.ui.PlatformUI;
35fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
36fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbyeimport org.w3c.dom.Node;
37fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
38fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye/** Quickfix for the {@link UseCompoundDrawableDetector} */
39fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye@SuppressWarnings("restriction") // DOM model
40d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeclass UseCompoundDrawableDetectorFix extends DocumentFix {
41fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    protected UseCompoundDrawableDetectorFix(String id, IMarker marker) {
42fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        super(id, marker);
43fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
44fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
45fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
46fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    public String getDisplayString() {
47fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        return "Convert to a compound drawable";
48fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
49fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
50fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
51fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    public Image getImage() {
52fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        return AdtPlugin.getAndroidLogo();
53fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
54fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
55fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
56fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    public boolean needsFocus() {
57fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        return false;
58fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
59fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
60fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
61fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    public boolean isCancelable() {
62fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        return false;
63fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
64fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
65fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
66fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    public boolean isBulkCapable() {
67fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        return false;
68fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
69fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
70fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    @Override
71fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    protected void apply(IDocument document, IStructuredModel model, Node node,
72fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            int start, int end) {
73fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
74fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        // Invoke refactoring
75fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        LayoutEditorDelegate delegate =
76fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                LayoutEditorDelegate.fromEditor(AdtUtils.getActiveEditor());
77fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye
78fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        if (delegate != null) {
79fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            IFile file = (IFile) mMarker.getResource();
80fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            ITextSelection textSelection = new TextSelection(start,
81fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                    end - start);
82fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            UseCompoundDrawableRefactoring refactoring =
83fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                    new UseCompoundDrawableRefactoring(file, delegate, textSelection, null);
84fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            RefactoringWizard wizard = refactoring.createWizard();
85fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            RefactoringWizardOpenOperation op =
86fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                    new RefactoringWizardOpenOperation(wizard);
87fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            try {
88fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                IWorkbenchWindow window = PlatformUI.getWorkbench().
89fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                        getActiveWorkbenchWindow();
90fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye                op.run(window.getShell(), wizard.getDefaultPageTitle());
91fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            } catch (InterruptedException e) {
92fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye            }
93fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye        }
94fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye    }
95fefa8b7d47b787d2250dc2fd0f35cac5540241e2Tor Norbye}
96