| /* |
| * Copyright (c) 2014, the Dart project authors. |
| * |
| * Licensed under the Eclipse Public License v1.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/legal/epl-v10.html |
| * |
| * 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.google.dart.tools.wst.ui.handlers; |
| |
| import com.google.dart.engine.element.Element; |
| import com.google.dart.engine.html.ast.HtmlUnit; |
| import com.google.dart.tools.internal.corext.refactoring.RefactoringExecutionStarter; |
| import com.google.dart.tools.wst.ui.HtmlReconcilerHook; |
| import com.google.dart.tools.wst.ui.HtmlReconcilerManager; |
| import com.google.dart.tools.wst.ui.hyperlink.ElementHyperlinkDetector; |
| import com.google.dart.tools.wst.ui.hyperlink.ElementRegion; |
| |
| import org.eclipse.core.commands.AbstractHandler; |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.jface.text.IDocument; |
| import org.eclipse.jface.text.ITextViewer; |
| import org.eclipse.ui.IWorkbenchWindow; |
| import org.eclipse.ui.handlers.HandlerUtil; |
| import org.eclipse.ui.texteditor.ITextEditor; |
| import org.eclipse.wst.sse.ui.StructuredTextEditor; |
| import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; |
| |
| /** |
| * Rename refactoring handler for HTML editor. |
| */ |
| public class RenameHandler extends AbstractHandler { |
| @Override |
| public Object execute(ExecutionEvent event) throws ExecutionException { |
| IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event); |
| ITextEditor editor = (ITextEditor) HandlerUtil.getActiveEditor(event); |
| executeWith(window, editor); |
| return null; |
| } |
| |
| private void executeWith(IWorkbenchWindow window, ITextEditor editor) { |
| if (window == null) { |
| return; |
| } |
| if (!(editor instanceof StructuredTextEditor)) { |
| return; |
| } |
| // prepare HtmlUnit |
| StructuredTextEditor structuredEditor = (StructuredTextEditor) editor; |
| StructuredTextViewer textViewer = structuredEditor.getTextViewer(); |
| HtmlUnit htmlUnit = getHtmlUnit(textViewer); |
| // find Element |
| int offset = textViewer.getSelectedRange().x; |
| ElementRegion elementRegion = ElementHyperlinkDetector.getElementRegion(htmlUnit, offset); |
| // start rename refactoring |
| if (elementRegion != null) { |
| Element element = elementRegion.element; |
| RefactoringExecutionStarter.startRenameRefactoring(element); |
| } |
| } |
| |
| private HtmlUnit getHtmlUnit(ITextViewer textViewer) { |
| IDocument document = textViewer.getDocument(); |
| HtmlReconcilerHook reconciler = HtmlReconcilerManager.getInstance().reconcilerFor(document); |
| return reconciler.getResolvedUnit(); |
| } |
| } |