/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpeclipse.phpeditor; import java.util.Iterator; import java.util.ResourceBundle; import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.internal.ui.IJavaHelpContextIds; import org.eclipse.core.resources.IFile; import org.eclipse.jface.text.IDocument; //import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.Position; import org.eclipse.jface.text.source.Annotation; import org.eclipse.jface.text.source.IVerticalRulerInfo; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.ITextEditorExtension; import org.eclipse.ui.texteditor.SelectMarkerRulerAction; /** * A special select marker ruler action which activates quick fix if clicked on * a quick fixable problem. */ public class JavaSelectMarkerRulerAction extends SelectMarkerRulerAction { private ITextEditor fTextEditor; private Position fPosition; public JavaSelectMarkerRulerAction(ResourceBundle bundle, String prefix, ITextEditor editor, IVerticalRulerInfo ruler) { super(bundle, prefix, editor, ruler); fTextEditor = editor; PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IJavaHelpContextIds.JAVA_SELECT_MARKER_RULER_ACTION); } public void run() { // if // (PHPeclipsePlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_ANNOTATION_ROLL_OVER)) // return; if (fPosition != null) { // ITextOperationTarget operation = (ITextOperationTarget) fTextEditor // .getAdapter(ITextOperationTarget.class); // final int opCode= PHPUnitEditor.CORRECTIONASSIST_PROPOSALS; // if (operation != null && operation.canDoOperation(opCode)) { // fTextEditor.selectAndReveal(fPosition.getOffset(), // fPosition.getLength()); // operation.doOperation(opCode); // return; // } return; } super.run(); } public void update() { // Begin Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20114 if (!(fTextEditor instanceof ITextEditorExtension) || ((ITextEditorExtension) fTextEditor).isEditorInputReadOnly()) { fPosition = null; super.update(); return; } // End Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20114 fPosition = getJavaAnnotationPosition(); if (fPosition != null) setEnabled(true); else super.update(); } private Position getJavaAnnotationPosition() { AbstractMarkerAnnotationModel model = getAnnotationModel(); IDocument document = getDocument(); if (model == null) return null; ICompilationUnit cu = getCompilationUnit(); if (cu == null) { return null; } // boolean hasAssistLightbulb= // PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.APPEARANCE_QUICKASSIST_LIGHTBULB); Annotation assistAnnotation = null; Iterator iter = model.getAnnotationIterator(); while (iter.hasNext()) { Annotation annotation = (Annotation) iter.next(); if (annotation instanceof IJavaAnnotation) { IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation; if (!javaAnnotation.isMarkedDeleted()) { //Position position = model.getPosition(annotation); // if (includesRulerLine(position, document) && // JavaCorrectionProcessor.hasCorrections(javaAnnotation)) // return position; } } // else if (hasAssistLightbulb && annotation instanceof // AssistAnnotation) { // // there is only one AssistAnnotation at a time // assistAnnotation= annotation; // } } if (assistAnnotation != null) { Position position = model.getPosition(assistAnnotation); // no need to check 'JavaCorrectionProcessor.hasAssists': annotation // only created when // there are assists if (includesRulerLine(position, document)) return position; } return null; } private ICompilationUnit getCompilationUnit() { IEditorInput input = fTextEditor.getEditorInput(); if (input instanceof IFileEditorInput) { IFile file = ((IFileEditorInput) input).getFile(); IJavaElement element = JavaCore.create(file); if (element instanceof ICompilationUnit) return (ICompilationUnit) element; } return null; } }