/******************************************************************************* * Copyright (c) 2000, 2002 IBM Corp. 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: www.phpeclipse.de ******************************************************************************/ package net.sourceforge.phpeclipse.actions; import java.io.File; import java.util.Collections; import java.util.List; import java.util.Set; import net.sourceforge.phpeclipse.PHPeclipsePlugin; import net.sourceforge.phpeclipse.builder.IdentifierIndexManager; import net.sourceforge.phpeclipse.builder.PHPIdentifierLocation; import net.sourceforge.phpeclipse.phpeditor.PHPEditor; import net.sourceforge.phpeclipse.phpeditor.php.PHPWordExtractor; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.text.TextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Point; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.ActionDelegate; import org.eclipse.ui.dialogs.ListSelectionDialog; import org.eclipse.ui.internal.dialogs.ListContentProvider; public class PHPOpenDeclarationEditorAction extends ActionDelegate implements IEditorActionDelegate { // class Include implements Comparable { // final public static int UNDEFINED_MATCH = 0; // final public static int PATTERN_MATCH = 1; // final public static int EXACT_MATCH = 2; // // String fName; // // int fMatch; // // public Include(String name, int match) { // fName = name; // fMatch = match; // } // // /* // * (non-Javadoc) // * // * @see java.lang.Object#toString() // */ // public String toString() { // switch (fMatch) { // case UNDEFINED_MATCH: // return fName; // case PATTERN_MATCH: // return "[pattern included] " + fName; // case EXACT_MATCH: // return "[included] " + fName; // } // return fName; // } // // /** // * @return Returns the name. // */ // public String getName() { // return fName; // } // /* (non-Javadoc) // * @see java.lang.Comparable#compareTo(java.lang.Object) // */ // public int compareTo(Object o) { // Include i = (Include)o; // if (fMatch>i.fMatch) { // return 1; // } else if (fMatch 0) { // String workspaceLocation = PHPeclipsePlugin.getWorkspace().getRoot() // .getLocation().toString(); String workspaceLocation = fProject.getLocation().toString()+File.separatorChar; // TODO show all entries of the list in a dialog box // at the moment always the first entry will be opened if (locationsList.size() > 1) { // determine all includes: IncludesScanner includesScanner = new IncludesScanner(fProject, (IFileEditorInput) fEditor.getEditorInput()); includesScanner.addFile(f); Set exactIncludeSet = includesScanner.getSet(); PHPIdentifierLocation includeName; for (int i = 0; i < locationsList.size(); i++) { includeName = (PHPIdentifierLocation) locationsList.get(i); if (exactIncludeSet.contains(includeName.getFilename())) { includeName.setMatch(PHPIdentifierLocation.EXACT_MATCH); } else { includeName.setMatch(PHPIdentifierLocation.UNDEFINED_MATCH); } } Collections.sort(locationsList); ListSelectionDialog listSelectionDialog = new ListSelectionDialog( PHPeclipsePlugin.getDefault().getWorkbench() .getActiveWorkbenchWindow().getShell(), locationsList, new ListContentProvider(), new LabelProvider(), "Select the resources to open."); listSelectionDialog.setTitle("Multiple declarations found"); if (listSelectionDialog.open() == Window.OK) { Object[] locations = listSelectionDialog.getResult(); if (locations != null) { try { for (int i = 0; i < locations.length; i++) { PHPIdentifierLocation location = (PHPIdentifierLocation) locations[i]; String filename = workspaceLocation + location.getFilename(); // System.out.println(filename); if (location.getOffset() >= 0) { PHPeclipsePlugin.getDefault().openFileAndGotoOffset( filename, location.getOffset(), word.length()); } else { PHPeclipsePlugin.getDefault().openFileAndFindString( filename, word); } } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } else { try { PHPIdentifierLocation location = (PHPIdentifierLocation) locationsList .get(0); String filename = workspaceLocation + location.getFilename(); // System.out.println(filename); if (location.getOffset() >= 0) { PHPeclipsePlugin.getDefault().openFileAndGotoOffset(filename, location.getOffset(), word.length()); } else { PHPeclipsePlugin.getDefault().openFileAndFindString(filename, word); } } catch (CoreException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } } public void setActiveEditor(IAction action, IEditorPart targetEditor) { if (targetEditor != null && (targetEditor instanceof PHPEditor)) { fEditor = (PHPEditor) targetEditor; } } private String getPHPIdentifier(IDocument doc, int pos) { Point word = PHPWordExtractor.findWord(doc, pos); if (word != null) { try { return doc.get(word.x, word.y); } catch (BadLocationException e) { } } return ""; } }