diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringAction.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringAction.java | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringAction.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringAction.java deleted file mode 100644 index 14556fd9f..000000000 --- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/refactorings/extractstring/ExtractStringAction.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Eclipse Public License, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.eclipse.org/org/documents/epl-v10.php - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.ide.eclipse.adt.internal.refactorings.extractstring; - -import com.android.ide.eclipse.adt.AdtConstants; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.text.ITextSelection; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.ltk.ui.refactoring.RefactoringWizard; -import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.IWorkbenchWindowActionDelegate; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.part.FileEditorInput; - -/* - * Quick Reference Link: - * http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html - * and - * http://www.ibm.com/developerworks/opensource/library/os-ecjdt/ - */ - -/** - * Action executed when the "Extract String" menu item is invoked. - * <p/> - * The intent of the action is to start a refactoring that extracts a source string and - * replaces it by an Android string resource ID. - * <p/> - * Workflow: - * <ul> - * <li> The action is currently located in the Refactoring menu in the main menu. - * <li> TODO: extend the popup refactoring menu in a Java or Android XML file. - * <li> The action is only enabled if the selection is 1 character or more. That is at least part - * of the string must be selected, it's not enough to just move the insertion point. This is - * a limitation due to {@link #selectionChanged(IAction, ISelection)} not being called when - * the insertion point is merely moved. TODO: address this limitation. - * <ul> The action gets the current {@link ISelection}. It also knows the current - * {@link IWorkbenchWindow}. However for the refactoring we are also interested in having the - * actual resource file. By looking at the Active Window > Active Page > Active Editor we - * can get the {@link IEditorInput} and find the {@link ICompilationUnit} (aka Java file) - * that is being edited. - * <ul> TODO: change this to find the {@link IFile} being manipulated. The {@link ICompilationUnit} - * can be inferred using {@link JavaCore#createCompilationUnitFrom(IFile)}. This will allow - * us to be able to work with a selection from an Android XML file later. - * <li> The action creates a new {@link ExtractStringRefactoring} and make it run on in a new - * {@link ExtractStringWizard}. - * <ul> - */ -public class ExtractStringAction implements IWorkbenchWindowActionDelegate { - - /** Keep track of the current workbench window. */ - private IWorkbenchWindow mWindow; - private ITextSelection mSelection; - private IEditorPart mEditor; - private IFile mFile; - - /** - * Keep track of the current workbench window. - */ - @Override - public void init(IWorkbenchWindow window) { - mWindow = window; - } - - @Override - public void dispose() { - // Nothing to do - } - - /** - * Examine the selection to determine if the action should be enabled or not. - * <p/> - * Keep a link to the relevant selection structure (i.e. a part of the Java AST). - */ - @Override - public void selectionChanged(IAction action, ISelection selection) { - - // Note, two kinds of selections are returned here: - // ITextSelection on a Java source window - // IStructuredSelection in the outline or navigator - // This simply deals with the refactoring based on a non-empty selection. - // At that point, just enable the action and later decide if it's valid when it actually - // runs since we don't have access to the AST yet. - - mSelection = null; - mFile = null; - - if (selection instanceof ITextSelection) { - mSelection = (ITextSelection) selection; - if (mSelection.getLength() > 0) { - mEditor = getActiveEditor(); - mFile = getSelectedFile(mEditor); - } - } - - action.setEnabled(mSelection != null && mFile != null); - } - - /** - * Create a new instance of our refactoring and a wizard to configure it. - */ - @Override - public void run(IAction action) { - if (mSelection != null && mFile != null) { - ExtractStringRefactoring ref = new ExtractStringRefactoring(mFile, mEditor, mSelection); - RefactoringWizard wizard = new ExtractStringWizard(ref, mFile.getProject()); - RefactoringWizardOpenOperation op = new RefactoringWizardOpenOperation(wizard); - try { - op.run(mWindow.getShell(), wizard.getDefaultPageTitle()); - } catch (InterruptedException e) { - // Interrupted. Pass. - } - } - } - - /** - * Returns the active editor (hopefully matching our selection) or null. - */ - private IEditorPart getActiveEditor() { - IWorkbenchWindow wwin = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (wwin != null) { - IWorkbenchPage page = wwin.getActivePage(); - if (page != null) { - return page.getActiveEditor(); - } - } - - return null; - } - - /** - * Returns the active {@link IFile} (hopefully matching our selection) or null. - * The file is only returned if it's a file from a project with an Android nature. - * <p/> - * At that point we do not try to analyze if the selection nor the file is suitable - * for the refactoring. This check is performed when the refactoring is invoked since - * it can then produce meaningful error messages as needed. - */ - private IFile getSelectedFile(IEditorPart editor) { - if (editor != null) { - IEditorInput input = editor.getEditorInput(); - - if (input instanceof FileEditorInput) { - FileEditorInput fi = (FileEditorInput) input; - IFile file = fi.getFile(); - if (file.exists()) { - IProject proj = file.getProject(); - try { - if (proj != null && proj.hasNature(AdtConstants.NATURE_DEFAULT)) { - return file; - } - } catch (CoreException e) { - // ignore - } - } - } - } - - return null; - } -} |