/* * 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.ui.internal.text.correction.proposals; import com.google.dart.tools.internal.corext.refactoring.util.Messages; import com.google.dart.tools.ui.DartPluginImages; import com.google.dart.tools.ui.instrumentation.UIInstrumentation; import com.google.dart.tools.ui.instrumentation.UIInstrumentationBuilder; import com.google.dart.tools.ui.internal.text.correction.CorrectionCommandHandler; import com.google.dart.tools.ui.internal.text.correction.CorrectionMessages; import com.google.dart.tools.ui.internal.text.correction.ICommandAccess; import com.google.dart.tools.ui.text.dart.IDartCompletionProposal; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.ICompletionProposalExtension6; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.jface.viewers.StyledCellLabelProvider; import org.eclipse.jface.viewers.StyledString; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; /** * A quick assist proposal that runs some action. * * @coverage dart.editor.ui.correction */ public abstract class AbstractActionProposal implements IDartCompletionProposal, ICompletionProposalExtension6, ICommandAccess { private final IAction action; private final String label; public AbstractActionProposal(IAction action, String label) { this.action = action; this.label = label; } @Override public void apply(IDocument document) { UIInstrumentationBuilder instrumentation = UIInstrumentation.builder(this.getClass()); try { action.run(); instrumentation.metric("Apply", "Completed"); } catch (RuntimeException e) { instrumentation.record(e); throw e; } finally { instrumentation.log(); } } @Override public String getCommandId() { return action.getId(); } @Override public IContextInformation getContextInformation() { return null; } @Override public String getDisplayString() { String shortCutString = CorrectionCommandHandler.getShortCutString(getCommandId()); if (shortCutString != null) { return Messages.format( CorrectionMessages.ChangeCorrectionProposal_name_with_shortcut, new String[] {label, shortCutString}); } return label; } @Override public Image getImage() { return DartPluginImages.get(DartPluginImages.IMG_CORRECTION_CHANGE); } @Override public Point getSelection(IDocument document) { return null; } @Override public StyledString getStyledDisplayString() { StyledString str = new StyledString(label); String shortCutString = CorrectionCommandHandler.getShortCutString(getCommandId()); if (shortCutString != null) { String decorated = Messages.format( CorrectionMessages.ChangeCorrectionProposal_name_with_shortcut, new String[] {label, shortCutString}); return StyledCellLabelProvider.styleDecoratedString( decorated, StyledString.QUALIFIER_STYLER, str); } return str; } }