misc changes
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPEditor.java
index a2f3ae0..43295c7 100644 (file)
@@ -12,8 +12,10 @@ Contributors:
     Klaus Hartlage - www.eclipseproject.de
 **********************************************************************/
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.StringTokenizer;
 
@@ -22,27 +24,28 @@ import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.IMember;
 import net.sourceforge.phpdt.core.ISourceRange;
 import net.sourceforge.phpdt.core.ISourceReference;
+import net.sourceforge.phpdt.core.JavaCore;
 import net.sourceforge.phpdt.core.JavaModelException;
 import net.sourceforge.phpdt.internal.ui.actions.CompositeActionGroup;
 import net.sourceforge.phpdt.internal.ui.text.HTMLTextPresenter;
+import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions;
 import net.sourceforge.phpdt.internal.ui.text.PHPPairMatcher;
 import net.sourceforge.phpdt.internal.ui.viewsupport.IViewPartInputProvider;
 import net.sourceforge.phpdt.ui.IContextMenuConstants;
 import net.sourceforge.phpdt.ui.JavaUI;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
-import net.sourceforge.phpdt.ui.actions.GenerateActionGroup;
 import net.sourceforge.phpdt.ui.actions.GotoMatchingBracketAction;
-import net.sourceforge.phpdt.ui.text.IColorManager;
 import net.sourceforge.phpdt.ui.text.JavaTextTools;
-import net.sourceforge.phpeclipse.PHPCore;
 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
-import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.IAction;
@@ -60,7 +63,6 @@ import org.eclipse.jface.text.IInformationControlCreator;
 import org.eclipse.jface.text.IRegion;
 import org.eclipse.jface.text.ITextHover;
 import org.eclipse.jface.text.ITextInputListener;
-import org.eclipse.jface.text.ITextOperationTarget;
 import org.eclipse.jface.text.ITextSelection;
 import org.eclipse.jface.text.ITextViewer;
 import org.eclipse.jface.text.ITextViewerExtension2;
@@ -72,19 +74,12 @@ import org.eclipse.jface.text.TextSelection;
 import org.eclipse.jface.text.information.IInformationProvider;
 import org.eclipse.jface.text.information.InformationPresenter;
 import org.eclipse.jface.text.source.Annotation;
-import org.eclipse.jface.text.source.AnnotationRulerColumn;
-import org.eclipse.jface.text.source.CompositeRuler;
-import org.eclipse.jface.text.source.IAnnotationAccess;
 import org.eclipse.jface.text.source.IAnnotationModel;
+import org.eclipse.jface.text.source.IAnnotationModelExtension;
 import org.eclipse.jface.text.source.IOverviewRuler;
-import org.eclipse.jface.text.source.ISharedTextColors;
 import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.ISourceViewerExtension;
 import org.eclipse.jface.text.source.IVerticalRuler;
-import org.eclipse.jface.text.source.IVerticalRulerColumn;
-import org.eclipse.jface.text.source.LineNumberRulerColumn;
 import org.eclipse.jface.text.source.OverviewRuler;
-import org.eclipse.jface.text.source.SourceViewer;
 import org.eclipse.jface.text.source.SourceViewerConfiguration;
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
@@ -130,18 +125,13 @@ import org.eclipse.ui.actions.ActionGroup;
 import org.eclipse.ui.editors.text.DefaultEncodingSupport;
 import org.eclipse.ui.editors.text.IEncodingSupport;
 import org.eclipse.ui.part.IShowInTargetList;
-import org.eclipse.ui.texteditor.AddTaskAction;
-import org.eclipse.ui.texteditor.ContentAssistAction;
 import org.eclipse.ui.texteditor.DefaultRangeIndicator;
-import org.eclipse.ui.texteditor.IAbstractTextEditorHelpContextIds;
+import org.eclipse.ui.texteditor.ExtendedTextEditor;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.ui.texteditor.IEditorStatusLine;
 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
-import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
 import org.eclipse.ui.texteditor.MarkerAnnotation;
 import org.eclipse.ui.texteditor.ResourceAction;
-import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
-import org.eclipse.ui.texteditor.StatusTextEditor;
 import org.eclipse.ui.texteditor.TextEditorAction;
 import org.eclipse.ui.texteditor.TextOperationAction;
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
@@ -150,7 +140,8 @@ import org.eclipse.ui.views.tasklist.TaskList;
 /**
  * PHP specific text editor.
  */
-public abstract class PHPEditor extends StatusTextEditor implements IViewPartInputProvider { // extends TextEditor {
+public abstract class PHPEditor  extends ExtendedTextEditor implements IViewPartInputProvider {
+//extends StatusTextEditor implements IViewPartInputProvider { // extends TextEditor {
   /**
         * "Smart" runnable for updating the outline page's selection.
         */
@@ -960,38 +951,38 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
     }
   };
 
-  static protected class AnnotationAccess implements IAnnotationAccess {
-    /*
-     * @see org.eclipse.jface.text.source.IAnnotationAccess#getType(org.eclipse.jface.text.source.Annotation)
-     */
-    public Object getType(Annotation annotation) {
-      if (annotation instanceof IJavaAnnotation) {
-        IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation;
-        if (javaAnnotation.isRelevant())
-          return javaAnnotation.getAnnotationType();
-      }
-      return null;
-    }
-
-    /*
-     * @see org.eclipse.jface.text.source.IAnnotationAccess#isMultiLine(org.eclipse.jface.text.source.Annotation)
-     */
-    public boolean isMultiLine(Annotation annotation) {
-      return true;
-    }
-
-    /*
-     * @see org.eclipse.jface.text.source.IAnnotationAccess#isTemporary(org.eclipse.jface.text.source.Annotation)
-     */
-    public boolean isTemporary(Annotation annotation) {
-      if (annotation instanceof IJavaAnnotation) {
-        IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation;
-        if (javaAnnotation.isRelevant())
-          return javaAnnotation.isTemporary();
-      }
-      return false;
-    }
-  };
+//  static protected class AnnotationAccess implements IAnnotationAccess {
+//    /*
+//     * @see org.eclipse.jface.text.source.IAnnotationAccess#getType(org.eclipse.jface.text.source.Annotation)
+//     */
+//    public Object getType(Annotation annotation) {
+//      if (annotation instanceof IJavaAnnotation) {
+//        IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation;
+//   //     if (javaAnnotation.isRelevant())
+//   //       return javaAnnotation.getAnnotationType();
+//      }
+//      return null;
+//    }
+//
+//    /*
+//     * @see org.eclipse.jface.text.source.IAnnotationAccess#isMultiLine(org.eclipse.jface.text.source.Annotation)
+//     */
+//    public boolean isMultiLine(Annotation annotation) {
+//      return true;
+//    }
+//
+//    /*
+//     * @see org.eclipse.jface.text.source.IAnnotationAccess#isTemporary(org.eclipse.jface.text.source.Annotation)
+//     */
+//    public boolean isTemporary(Annotation annotation) {
+//      if (annotation instanceof IJavaAnnotation) {
+//        IJavaAnnotation javaAnnotation = (IJavaAnnotation) annotation;
+//        if (javaAnnotation.isRelevant())
+//          return javaAnnotation.isTemporary();
+//      }
+//      return false;
+//    }
+//  };
 
   private class PropertyChangeListener implements org.eclipse.core.runtime.Preferences.IPropertyChangeListener {
     /*
@@ -1001,14 +992,134 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
       handlePreferencePropertyChanged(event);
     }
   };
+  
+  /**
+        * Finds and marks occurrence annotations.
+        * 
+        * @since 3.0
+        */
+       class OccurrencesFinderJob extends Job implements IDocumentListener {
+               
+               private IDocument fDocument;
+               private boolean fCancelled= false;
+               private IProgressMonitor fProgressMonitor;
+               private Position[] fPositions;
+               
+               public OccurrencesFinderJob(IDocument document, Position[] positions) {
+                       super("Occurrences Marker"); //$NON-NLS-1$
+                       fDocument= document;
+                       fPositions= positions;
+                       fDocument.addDocumentListener(this);
+               }
+               
+               private boolean isCancelled() {
+                       return fCancelled || fProgressMonitor.isCanceled();
+               }
+               
+               /*
+                * @see Job#run(org.eclipse.core.runtime.IProgressMonitor)
+                */
+               public IStatus run(IProgressMonitor progressMonitor) {
+                       
+                       fProgressMonitor= progressMonitor;
+                       
+                       try {
+                               
+                               if (isCancelled())
+                                       return Status.CANCEL_STATUS;
+                               
+                               ITextViewer textViewer= getViewer(); 
+                               if (textViewer == null)
+                                       return Status.CANCEL_STATUS;
+                               
+                               IDocument document= textViewer.getDocument();
+                               if (document == null)
+                                       return Status.CANCEL_STATUS;
+                               
+                               IDocumentProvider documentProvider= getDocumentProvider();
+                               if (documentProvider == null)
+                                       return Status.CANCEL_STATUS;
+                       
+                               IAnnotationModel annotationModel= documentProvider.getAnnotationModel(getEditorInput());
+                               if (annotationModel == null)
+                                       return Status.CANCEL_STATUS;
+                               
+                               // Add occurrence annotations
+                               int length= fPositions.length;
+                               Map annotationMap= new HashMap(length);
+                               for (int i= 0; i < length; i++) {
+                                       
+                                       if (isCancelled())
+                                               return Status.CANCEL_STATUS; 
+                                       
+                                       String message;
+                                       Position position= fPositions[i];
+                                       
+                                       // Create & add annotation
+                                       try {
+                                               message= document.get(position.offset, position.length);
+                                       } catch (BadLocationException ex) {
+                                               // Skip this match
+                                               continue;
+                                       }
+                                       annotationMap.put(
+                                                       new Annotation("net.sourceforge.phpdt.ui.occurrences", false, message), //$NON-NLS-1$
+                                                       position);
+                               }
+                               
+                               if (isCancelled())
+                                       return Status.CANCEL_STATUS;
+                               
+                               synchronized (annotationModel) {
+                                       if (annotationModel instanceof IAnnotationModelExtension) {
+                                               ((IAnnotationModelExtension)annotationModel).replaceAnnotations(fOccurrenceAnnotations, annotationMap);
+                                       } else {
+                                               removeOccurrenceAnnotations();
+                                               Iterator iter= annotationMap.entrySet().iterator();
+                                               while (iter.hasNext()) {
+                                                       Map.Entry mapEntry= (Map.Entry)iter.next(); 
+                                                       annotationModel.addAnnotation((Annotation)mapEntry.getKey(), (Position)mapEntry.getValue());
+                                               }
+                                       }
+                                       fOccurrenceAnnotations= (Annotation[])annotationMap.keySet().toArray(new Annotation[annotationMap.keySet().size()]);
+                               }
+                       } finally {
+                               fDocument.removeDocumentListener(this);
+                       }
+                       return Status.OK_STATUS;
+               }
+
+               /*
+                * @see org.eclipse.jface.text.IDocumentListener#documentAboutToBeChanged(org.eclipse.jface.text.DocumentEvent)
+                */
+               public void documentAboutToBeChanged(DocumentEvent event) {
+                       fCancelled= true;
+               }
+
+               /*
+                * @see org.eclipse.jface.text.IDocumentListener#documentChanged(org.eclipse.jface.text.DocumentEvent)
+                */
+               public void documentChanged(DocumentEvent event) {
+               }
+       }
+       
+       
+       /**
+        * Holds the current occurrence annotations.
+        * @since 3.0
+        */
+  private Annotation[] fOccurrenceAnnotations= null;
+  
+  private Job fOccurrencesFinderJob;
+       
   /** Preference key for showing the line number ruler */
-  private final static String LINE_NUMBER_RULER = PreferenceConstants.EDITOR_LINE_NUMBER_RULER;
+//  private final static String LINE_NUMBER_RULER = PreferenceConstants.EDITOR_LINE_NUMBER_RULER;
   /** Preference key for the foreground color of the line numbers */
-  private final static String LINE_NUMBER_COLOR = PreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR;
+ // private final static String LINE_NUMBER_COLOR = PreferenceConstants.EDITOR_LINE_NUMBER_RULER_COLOR;
   /** Preference key for the link color */
   private final static String LINK_COLOR = PreferenceConstants.EDITOR_LINK_COLOR;
   /** Preference key for compiler task tags */
-  private final static String COMPILER_TASK_TAGS = PHPCore.COMPILER_TASK_TAGS;
+  private final static String COMPILER_TASK_TAGS = JavaCore.COMPILER_TASK_TAGS;
 
   // protected PHPActionGroup fActionGroups;
   //  /** The outline page */
@@ -1017,6 +1128,12 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
   protected JavaOutlinePage fOutlinePage;
   /** Outliner context menu Id */
   protected String fOutlinerContextMenuId;
+       /**
+        * The editor selection changed listener.
+        * 
+        * @since 3.0
+        */
+//  private EditorSelectionChangedListener fEditorSelectionChangedListener;
   /** Indicates whether this editor should react on outline page selection changes */
   private int fIgnoreOutlinePageSelection;
   
@@ -1033,27 +1150,25 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
 
 
   /** The line number ruler column */
-  private LineNumberRulerColumn fLineNumberRulerColumn;
+//  private LineNumberRulerColumn fLineNumberRulerColumn;
   /** This editor's encoding support */
   private DefaultEncodingSupport fEncodingSupport;
   /** The mouse listener */
   private MouseClickListener fMouseListener;
 
   protected CompositeActionGroup fActionGroups;
-  /** The standard action groups added to the menu */
-  protected GenerateActionGroup fGenerateActionGroup;
   protected CompositeActionGroup fContextMenuGroup;
 
   /** The information presenter. */
   private InformationPresenter fInformationPresenter;
   /** The annotation access */
-  protected IAnnotationAccess fAnnotationAccess = new AnnotationAccess();
+//  protected IAnnotationAccess fAnnotationAccess = new AnnotationAccess();
   /** The overview ruler */
   protected OverviewRuler isOverviewRulerVisible;
   /** The source viewer decoration support */
-  protected SourceViewerDecorationSupport fSourceViewerDecorationSupport;
+  //protected SourceViewerDecorationSupport fSourceViewerDecorationSupport;
   /** The overview ruler */
-  protected OverviewRuler fOverviewRuler;
+  //protected OverviewRuler fOverviewRuler;
 
   /** The preference property change listener for java core. */
   private org.eclipse.core.runtime.Preferences.IPropertyChangeListener fPropertyChangeListener = new PropertyChangeListener();
@@ -1078,32 +1193,20 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
    */
   public PHPEditor() {
     super();
-    JavaTextTools textTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
-    setSourceViewerConfiguration(new PHPSourceViewerConfiguration(textTools, this));
-    setRangeIndicator(new DefaultRangeIndicator());
-    setPreferenceStore(PHPeclipsePlugin.getDefault().getPreferenceStore());
-
-    // don't activate this scope without synchronizing plugin.xml !!!
-    //    setKeyBindingScopes(new String[] { "net.sourceforge.phpdt.ui.phpEditorScope" }); //$NON-NLS-1$
-
-        if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE))
-          fUpdater= new OutlinePageSelectionUpdater();
+       JavaTextTools textTools= PHPeclipsePlugin.getDefault().getJavaTextTools();
+       setSourceViewerConfiguration(new PHPSourceViewerConfiguration(textTools, this)); //, IJavaPartitions.JAVA_PARTITIONING));
+       setRangeIndicator(new DefaultRangeIndicator());
+       IPreferenceStore store= PHPeclipsePlugin.getDefault().getPreferenceStore();
+       setPreferenceStore(store);
+       setKeyBindingScopes(new String[] { "net.sourceforge.phpdt.ui.phpEditorScope" });  //$NON-NLS-1$
+//     fMarkOccurrenceAnnotations= store.getBoolean(PreferenceConstants.EDITOR_MARK_OCCURRENCES);
+//     fStickyOccurrenceAnnotations= store.getBoolean(PreferenceConstants.EDITOR_STICKY_OCCURRENCES);
+    
+       // TODO changed in 3.x ?
+    if (PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE))
+      fUpdater= new OutlinePageSelectionUpdater();
   }
-  //
-  //   /**
-  //    * @see IMember#getCompilationUnit()
-  //    */
-  //   public ICompilationUnit getCompilationUnit() {
-  //           return this; 
-  //   }
-  //   /**
-  //    * @see org.phpeclipse.phpdt.internal.compiler.env.ICompilationUnit#getContents()
-  //    */
-  //   public char[] getContents() {
-  //           IDocument doc = this.getDocumentProvider().getDocument(this.getEditorInput());
-  //   
-  //           return doc.get().toCharArray();
-  //   }
   /*
    * @see org.eclipse.ui.texteditor.AbstractTextEditor#updatePropertyDependentActions()
    */
@@ -1166,7 +1269,7 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
   public void createPartControl(Composite parent) {
     super.createPartControl(parent);
 
-    fSourceViewerDecorationSupport.install(getPreferenceStore());
+    //fSourceViewerDecorationSupport.install(getPreferenceStore());
 
     Preferences preferences = PHPeclipsePlugin.getDefault().getPluginPreferences();
     preferences.addPropertyChangeListener(fPropertyChangeListener);
@@ -1219,74 +1322,77 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
    */
   protected void createActions() {
     super.createActions();
-
-    ResourceAction resAction = new AddTaskAction(PHPEditorMessages.getResourceBundle(), "AddTask.", this); //$NON-NLS-1$
-    resAction.setHelpContextId(IAbstractTextEditorHelpContextIds.ADD_TASK_ACTION);
-    resAction.setActionDefinitionId(ITextEditorActionDefinitionIds.ADD_TASK);
-    setAction(ITextEditorActionConstants.ADD_TASK, resAction);
-
-    resAction = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "ShowJavaDoc.", this, ISourceViewer.INFORMATION, true); //$NON-NLS-1$
-    resAction = new InformationDispatchAction(PHPEditorMessages.getResourceBundle(), "ShowJavaDoc.", (TextOperationAction) resAction); //$NON-NLS-1$
-    resAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_JAVADOC);
-    setAction("ShowJavaDoc", resAction); //$NON-NLS-1$
-    //                                         WorkbenchHelp.setHelp(resAction, IJavaHelpContextIds.SHOW_JAVADOC_ACTION);
-
-    Action action;
-
-    setAction(
-      "ContentAssistTip",
-      new TextOperationAction(PHPEditorMessages.getResourceBundle(), "ContentAssistTip.", this, ISourceViewer.CONTENTASSIST_CONTEXT_INFORMATION));
-
-    action = new ContentAssistAction(PHPEditorMessages.getResourceBundle(), "ContentAssistProposal.", this); //$NON-NLS-1$
-    action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
-    setAction("ContentAssistProposal", action); //$NON-NLS-1$
-    markAsStateDependentAction("ContentAssistProposal", true); //$NON-NLS-1$
-    // WorkbenchHelp.setHelp(action, IJavaHelpContextIds.CONTENT_ASSIST_ACTION);
-
-    fEncodingSupport = new DefaultEncodingSupport();
-    fEncodingSupport.initialize(this);
-
-    action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Comment.", this, ITextOperationTarget.PREFIX); //$NON-NLS-1$
-    action.setActionDefinitionId(PHPEditorActionDefinitionIds.COMMENT);
-    setAction("Comment", action); //$NON-NLS-1$
-    markAsStateDependentAction("Comment", true); //$NON-NLS-1$
-    //         WorkbenchHelp.setHelp(action, IJavaHelpContextIds.COMMENT_ACTION);
-
-    action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Uncomment.", this, ITextOperationTarget.STRIP_PREFIX); //$NON-NLS-1$
-    action.setActionDefinitionId(PHPEditorActionDefinitionIds.UNCOMMENT);
-    setAction("Uncomment", action); //$NON-NLS-1$
-    markAsStateDependentAction("Uncomment", true); //$NON-NLS-1$
-    //         WorkbenchHelp.setHelp(action, IJavaHelpContextIds.UNCOMMENT_ACTION);
-
-    action = new TextOperationAction(PHPEditorMessages.getResourceBundle(), "Format.", this, ISourceViewer.FORMAT); //$NON-NLS-1$
-    action.setActionDefinitionId(PHPEditorActionDefinitionIds.FORMAT);
-    setAction("Format", action); //$NON-NLS-1$
-    markAsStateDependentAction("Format", true); //$NON-NLS-1$
-    markAsSelectionDependentAction("Format", true); //$NON-NLS-1$              
-    // WorkbenchHelp.setHelp(action, IJavaHelpContextIds.FORMAT_ACTION);
-
-    action = new GotoMatchingBracketAction(this);
-    action.setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_MATCHING_BRACKET);
-    setAction(GotoMatchingBracketAction.GOTO_MATCHING_BRACKET, action);
-
-    fGenerateActionGroup = new GenerateActionGroup(this, ITextEditorActionConstants.GROUP_EDIT);
-
-    fActionGroups = new CompositeActionGroup(new ActionGroup[] { fGenerateActionGroup });
-
-    // We have to keep the context menu group separate to have better control over positioning
-    fContextMenuGroup = new CompositeActionGroup(new ActionGroup[] { fGenerateActionGroup });
-    //      rg, 
-    //      new LocalHistoryActionGroup(this, ITextEditorActionConstants.GROUP_EDIT)});
-
-    //    if (fValidationThread == null) {
-    //      fValidationThread =
-    //        new PHPSyntaxParserThread(this, getSourceViewer());
-    //      //Thread defaults
-    //
-    //      fValidationThread.start();
-    //    }
-    //
-    //    fValidationThread.setText(getSourceViewer().getTextWidget().getText());
+    
+       ResourceAction resAction= new TextOperationAction(PHPEditorMessages.getResourceBundle(), "ShowJavaDoc.", this, ISourceViewer.INFORMATION, true); //$NON-NLS-1$
+       resAction= new InformationDispatchAction(PHPEditorMessages.getResourceBundle(), "ShowJavaDoc.", (TextOperationAction) resAction); //$NON-NLS-1$
+       resAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_JAVADOC);
+       setAction("ShowJavaDoc", resAction); //$NON-NLS-1$
+//     WorkbenchHelp.setHelp(resAction, IJavaHelpContextIds.SHOW_JAVADOC_ACTION);
+       
+       Action action= new GotoMatchingBracketAction(this);
+       action.setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_MATCHING_BRACKET);                               
+       setAction(GotoMatchingBracketAction.GOTO_MATCHING_BRACKET, action);
+               
+//     action= new TextOperationAction(PHPEditorMessages.getResourceBundle(),"ShowOutline.", this, JavaSourceViewer.SHOW_OUTLINE, true); //$NON-NLS-1$
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_OUTLINE);
+//     setAction(PHPEditorActionDefinitionIds.SHOW_OUTLINE, action);
+////   WorkbenchHelp.setHelp(action, IJavaHelpContextIds.SHOW_OUTLINE_ACTION);
+//
+//     action= new TextOperationAction(PHPEditorMessages.getResourceBundle(),"OpenStructure.", this, JavaSourceViewer.OPEN_STRUCTURE, true); //$NON-NLS-1$
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_OUTLINE.OPEN_STRUCTURE);
+//     setAction(PHPEditorActionDefinitionIds.SHOW_OUTLINE.OPEN_STRUCTURE, action);
+////   WorkbenchHelp.setHelp(action, IJavaHelpContextIds.OPEN_STRUCTURE_ACTION);
+//     
+//     action= new TextOperationAction(PHPEditorMessages.getResourceBundle(),"OpenHierarchy.", this, JavaSourceViewer.SHOW_HIERARCHY, true); //$NON-NLS-1$
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SHOW_OUTLINE.OPEN_HIERARCHY);
+//     setAction(PHPEditorActionDefinitionIds.SHOW_OUTLINE.OPEN_HIERARCHY, action);
+////   WorkbenchHelp.setHelp(action, IJavaHelpContextIds.OPEN_HIERARCHY_ACTION);
+       
+       fEncodingSupport= new DefaultEncodingSupport();
+       fEncodingSupport.initialize(this);
+       
+//     fSelectionHistory= new SelectionHistory(this);
+//
+//     action= new StructureSelectEnclosingAction(this, fSelectionHistory);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_ENCLOSING);                            
+//     setAction(StructureSelectionAction.ENCLOSING, action);
+//
+//     action= new StructureSelectNextAction(this, fSelectionHistory);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_NEXT);
+//     setAction(StructureSelectionAction.NEXT, action);
+//
+//     action= new StructureSelectPreviousAction(this, fSelectionHistory);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_PREVIOUS);
+//     setAction(StructureSelectionAction.PREVIOUS, action);
+//
+//     StructureSelectHistoryAction historyAction= new StructureSelectHistoryAction(this, fSelectionHistory);
+//     historyAction.setActionDefinitionId(PHPEditorActionDefinitionIds.SELECT_LAST);          
+//     setAction(StructureSelectionAction.HISTORY, historyAction);
+//     fSelectionHistory.setHistoryAction(historyAction);
+//                     
+//     action= GoToNextPreviousMemberAction.newGoToNextMemberAction(this);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_NEXT_MEMBER);                            
+//     setAction(GoToNextPreviousMemberAction.NEXT_MEMBER, action);
+//
+//     action= GoToNextPreviousMemberAction.newGoToPreviousMemberAction(this);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER);                                
+//     setAction(GoToNextPreviousMemberAction.PREVIOUS_MEMBER, action);
+//     
+//     action= new QuickFormatAction();
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.QUICK_FORMAT);
+//     setAction(IJavaEditorActionDefinitionIds.QUICK_FORMAT, action);
+//
+//     action= new RemoveOccurrenceAnnotations(this);
+//     action.setActionDefinitionId(PHPEditorActionDefinitionIds.REMOVE_OCCURRENCE_ANNOTATIONS);
+//     setAction("RemoveOccurrenceAnnotations", action); //$NON-NLS-1$
+
+       // add annotation actions
+       action= new JavaSelectMarkerRulerAction2(PHPEditorMessages.getResourceBundle(), "Editor.RulerAnnotationSelection.", this); //$NON-NLS-1$
+       setAction("AnnotationAction", action); //$NON-NLS-1$
+    
+       // add annotation actions
+       action= new JavaSelectMarkerRulerAction2(PHPEditorMessages.getResourceBundle(), "Editor.RulerAnnotationSelection.", this); //$NON-NLS-1$
+       setAction("AnnotationAction", action); //$NON-NLS-1$
   }
 
   /** The <code>PHPEditor</code> implementation of this 
@@ -1315,10 +1421,10 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
       fPropertyChangeListener = null;
     }
 
-    if (fSourceViewerDecorationSupport != null) {
-      fSourceViewerDecorationSupport.dispose();
-      fSourceViewerDecorationSupport = null;
-    }
+//    if (fSourceViewerDecorationSupport != null) {
+//      fSourceViewerDecorationSupport.dispose();
+//      fSourceViewerDecorationSupport = null;
+//    }
 
     if (fBracketMatcher != null) {
       fBracketMatcher.dispose();
@@ -1518,10 +1624,6 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
       fOutlinePage.addSelectionChangedListener(fSelectionChangedListener);
     }
   }
-  protected void updateStateDependentActions() {
-    super.updateStateDependentActions();
-    fGenerateActionGroup.editorStateChanged();
-  }
 
   protected void setSelection(ISourceReference reference, boolean moveCursor) {
 
@@ -1805,28 +1907,28 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
         }
         return;
       }
-
-      if (OVERVIEW_RULER.equals(property)) {
-        if (isOverviewRulerVisible())
-          showOverviewRuler();
-        else
-          hideOverviewRuler();
-        return;
-      }
-
-      if (LINE_NUMBER_RULER.equals(property)) {
-        if (isLineNumberRulerVisible())
-          showLineNumberRuler();
-        else
-          hideLineNumberRuler();
-        return;
-      }
-
-      if (fLineNumberRulerColumn != null
-        && (LINE_NUMBER_COLOR.equals(property) || PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(property) || PREFERENCE_COLOR_BACKGROUND.equals(property))) {
-
-        initializeLineNumberRulerColumn(fLineNumberRulerColumn);
-      }
+      
+//      if (OVERVIEW_RULER.equals(property)) {
+//        if (isOverviewRulerVisible())
+//          showOverviewRuler();
+//        else
+//          hideOverviewRuler();
+//        return;
+//      }
+
+//      if (LINE_NUMBER_RULER.equals(property)) {
+//        if (isLineNumberRulerVisible())
+//          showLineNumberRuler();
+//        else
+//          hideLineNumberRuler();
+//        return;
+//      }
+
+//      if (fLineNumberRulerColumn != null
+//        && (LINE_NUMBER_COLOR.equals(property) || PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(property) || PREFERENCE_COLOR_BACKGROUND.equals(property))) {
+//
+//        initializeLineNumberRulerColumn(fLineNumberRulerColumn);
+//      }
 
       if (isJavaEditorHoverProperty(property))
         updateHoverBehavior();
@@ -1839,6 +1941,44 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
         return;
       }
 
+//      if (PreferenceConstants.EDITOR_SYNC_OUTLINE_ON_CURSOR_MOVE.equals(property)) {
+//             if ((event.getNewValue() instanceof Boolean) && ((Boolean)event.getNewValue()).booleanValue())
+//                     fEditorSelectionChangedListener.selectionChanged();
+//             return;
+//     }
+       
+       if (PreferenceConstants.EDITOR_DISABLE_OVERWRITE_MODE.equals(property)) {
+               if (event.getNewValue() instanceof Boolean) {
+                       Boolean disable= (Boolean) event.getNewValue();
+                       configureInsertMode(OVERWRITE, !disable.booleanValue());
+               }
+       }
+       
+//     if (PreferenceConstants.EDITOR_MARK_OCCURRENCES.equals(property)) {
+//             if (event.getNewValue() instanceof Boolean) {
+//                     boolean markOccurrenceAnnotations= ((Boolean)event.getNewValue()).booleanValue();
+//                     if (markOccurrenceAnnotations != fMarkOccurrenceAnnotations) {
+//                             fMarkOccurrenceAnnotations= markOccurrenceAnnotations;
+//                             if (!fMarkOccurrenceAnnotations)
+//                                     uninstallOccurrencesFinder();
+//                             else
+//                                     installOccurrencesFinder();
+//                     }
+//             }
+//     }
+//     if (PreferenceConstants.EDITOR_STICKY_OCCURRENCES.equals(property)) {
+//             if (event.getNewValue() instanceof Boolean) {
+//                     boolean stickyOccurrenceAnnotations= ((Boolean)event.getNewValue()).booleanValue();
+//                     if (stickyOccurrenceAnnotations != fStickyOccurrenceAnnotations) {
+//                             fStickyOccurrenceAnnotations= stickyOccurrenceAnnotations;
+////                           if (!fMarkOccurrenceAnnotations)
+////                                   uninstallOccurrencesFinder();
+////                           else
+////                                   installOccurrencesFinder();
+//                     }
+//             }
+//     }
+       
     } finally {
       super.handlePreferenceStoreChanged(event);
     }
@@ -1902,13 +2042,13 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
   /**
    * Shows the line number ruler column.
    */
-  private void showLineNumberRuler() {
-    IVerticalRuler v = getVerticalRuler();
-    if (v instanceof CompositeRuler) {
-      CompositeRuler c = (CompositeRuler) v;
-      c.addDecorator(1, createLineNumberRulerColumn());
-    }
-  }
+//  private void showLineNumberRuler() {
+//    IVerticalRuler v = getVerticalRuler();
+//    if (v instanceof CompositeRuler) {
+//      CompositeRuler c = (CompositeRuler) v;
+//      c.addDecorator(1, createLineNumberRulerColumn());
+//    }
+//  }
   private boolean isJavaEditorHoverProperty(String property) {
     return PreferenceConstants.EDITOR_TEXT_HOVER_MODIFIERS.equals(property);
   }
@@ -1963,23 +2103,23 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
    * visible according to the preference store settings.
    * @return <code>true</code> if the line numbers should be visible
    */
-  private boolean isLineNumberRulerVisible() {
-    IPreferenceStore store = getPreferenceStore();
-    return store.getBoolean(LINE_NUMBER_RULER);
-  }
+//  protected boolean isLineNumberRulerVisible() {
+//    IPreferenceStore store = getPreferenceStore();
+//    return store.getBoolean(LINE_NUMBER_RULER);
+//  }
   /**
    * Hides the line number ruler column.
    */
-  private void hideLineNumberRuler() {
-    IVerticalRuler v = getVerticalRuler();
-    if (v instanceof CompositeRuler) {
-      CompositeRuler c = (CompositeRuler) v;
-      try {
-        c.removeDecorator(1);
-      } catch (Throwable e) {
-      }
-    }
-  }
+//  private void hideLineNumberRuler() {
+//    IVerticalRuler v = getVerticalRuler();
+//    if (v instanceof CompositeRuler) {
+//      CompositeRuler c = (CompositeRuler) v;
+//      try {
+//        c.removeDecorator(1);
+//      } catch (Throwable e) {
+//      }
+//    }
+//  }
 
        /*
         * @see AbstractTextEditor#handleCursorPositionChanged()
@@ -1994,56 +2134,56 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
    * Initializes the given line number ruler column from the preference store.
    * @param rulerColumn the ruler column to be initialized
    */
-  protected void initializeLineNumberRulerColumn(LineNumberRulerColumn rulerColumn) {
-    JavaTextTools textTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
-    IColorManager manager = textTools.getColorManager();
-
-    IPreferenceStore store = getPreferenceStore();
-    if (store != null) {
-
-      RGB rgb = null;
-      // foreground color
-      if (store.contains(LINE_NUMBER_COLOR)) {
-        if (store.isDefault(LINE_NUMBER_COLOR))
-          rgb = PreferenceConverter.getDefaultColor(store, LINE_NUMBER_COLOR);
-        else
-          rgb = PreferenceConverter.getColor(store, LINE_NUMBER_COLOR);
-      }
-      rulerColumn.setForeground(manager.getColor(rgb));
-
-      rgb = null;
-      // background color
-      if (!store.getBoolean(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
-        if (store.contains(PREFERENCE_COLOR_BACKGROUND)) {
-          if (store.isDefault(PREFERENCE_COLOR_BACKGROUND))
-            rgb = PreferenceConverter.getDefaultColor(store, PREFERENCE_COLOR_BACKGROUND);
-          else
-            rgb = PreferenceConverter.getColor(store, PREFERENCE_COLOR_BACKGROUND);
-        }
-      }
-      rulerColumn.setBackground(manager.getColor(rgb));
-    }
-  }
+//  protected void initializeLineNumberRulerColumn(LineNumberRulerColumn rulerColumn) {
+//    JavaTextTools textTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
+//    IColorManager manager = textTools.getColorManager();
+//
+//    IPreferenceStore store = getPreferenceStore();
+//    if (store != null) {
+//
+//      RGB rgb = null;
+//      // foreground color
+//      if (store.contains(LINE_NUMBER_COLOR)) {
+//        if (store.isDefault(LINE_NUMBER_COLOR))
+//          rgb = PreferenceConverter.getDefaultColor(store, LINE_NUMBER_COLOR);
+//        else
+//          rgb = PreferenceConverter.getColor(store, LINE_NUMBER_COLOR);
+//      }
+//      rulerColumn.setForeground(manager.getColor(rgb));
+//
+//      rgb = null;
+//      // background color
+//      if (!store.getBoolean(PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)) {
+//        if (store.contains(PREFERENCE_COLOR_BACKGROUND)) {
+//          if (store.isDefault(PREFERENCE_COLOR_BACKGROUND))
+//            rgb = PreferenceConverter.getDefaultColor(store, PREFERENCE_COLOR_BACKGROUND);
+//          else
+//            rgb = PreferenceConverter.getColor(store, PREFERENCE_COLOR_BACKGROUND);
+//        }
+//      }
+//      rulerColumn.setBackground(manager.getColor(rgb));
+//    }
+//  }
 
   /**
    * Creates a new line number ruler column that is appropriately initialized.
    */
-  protected IVerticalRulerColumn createLineNumberRulerColumn() {
-    fLineNumberRulerColumn = new LineNumberRulerColumn();
-    initializeLineNumberRulerColumn(fLineNumberRulerColumn);
-    return fLineNumberRulerColumn;
-  }
+//  protected IVerticalRulerColumn createLineNumberRulerColumn() {
+//    fLineNumberRulerColumn = new LineNumberRulerColumn();
+//    initializeLineNumberRulerColumn(fLineNumberRulerColumn);
+//    return fLineNumberRulerColumn;
+//  }
 
   /*
    * @see AbstractTextEditor#createVerticalRuler()
    */
-  protected IVerticalRuler createVerticalRuler() {
-    CompositeRuler ruler = new CompositeRuler();
-    ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH));
-    if (isLineNumberRulerVisible())
-      ruler.addDecorator(1, createLineNumberRulerColumn());
-    return ruler;
-  }
+//  protected IVerticalRuler createVerticalRuler() {
+//    CompositeRuler ruler = new CompositeRuler();
+//    ruler.addDecorator(0, new AnnotationRulerColumn(VERTICAL_RULER_WIDTH));
+//    if (isLineNumberRulerVisible())
+//      ruler.addDecorator(1, createLineNumberRulerColumn());
+//    return ruler;
+//  }
 
   private static IRegion getSignedSelection(ITextViewer viewer) {
 
@@ -2081,13 +2221,13 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
   /** Preference key for print margin ruler column */
   protected final static String PRINT_MARGIN_COLUMN = PreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN;
   /** Preference key for error indication */
-  protected final static String ERROR_INDICATION = PreferenceConstants.EDITOR_PROBLEM_INDICATION;
+//  protected final static String ERROR_INDICATION = PreferenceConstants.EDITOR_PROBLEM_INDICATION;
   /** Preference key for error color */
-  protected final static String ERROR_INDICATION_COLOR = PreferenceConstants.EDITOR_PROBLEM_INDICATION_COLOR;
+//  protected final static String ERROR_INDICATION_COLOR = PreferenceConstants.EDITOR_PROBLEM_INDICATION_COLOR;
   /** Preference key for warning indication */
-  protected final static String WARNING_INDICATION = PreferenceConstants.EDITOR_WARNING_INDICATION;
+//  protected final static String WARNING_INDICATION = PreferenceConstants.EDITOR_WARNING_INDICATION;
   /** Preference key for warning color */
-  protected final static String WARNING_INDICATION_COLOR = PreferenceConstants.EDITOR_WARNING_INDICATION_COLOR;
+//  protected final static String WARNING_INDICATION_COLOR = PreferenceConstants.EDITOR_WARNING_INDICATION_COLOR;
   /** Preference key for task indication */
   protected final static String TASK_INDICATION = PreferenceConstants.EDITOR_TASK_INDICATION;
   /** Preference key for task color */
@@ -2154,54 +2294,54 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
     }
   }
 
-  protected void configureSourceViewerDecorationSupport() {
-
-    fSourceViewerDecorationSupport.setCharacterPairMatcher(fBracketMatcher);
-
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.UNKNOWN,
-      UNKNOWN_INDICATION_COLOR,
-      UNKNOWN_INDICATION,
-      UNKNOWN_INDICATION_IN_OVERVIEW_RULER,
-      0);
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.BOOKMARK,
-      BOOKMARK_INDICATION_COLOR,
-      BOOKMARK_INDICATION,
-      BOOKMARK_INDICATION_IN_OVERVIEW_RULER,
-      1);
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.TASK,
-      TASK_INDICATION_COLOR,
-      TASK_INDICATION,
-      TASK_INDICATION_IN_OVERVIEW_RULER,
-      2);
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.SEARCH,
-      SEARCH_RESULT_INDICATION_COLOR,
-      SEARCH_RESULT_INDICATION,
-      SEARCH_RESULT_INDICATION_IN_OVERVIEW_RULER,
-      3);
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.WARNING,
-      WARNING_INDICATION_COLOR,
-      WARNING_INDICATION,
-      WARNING_INDICATION_IN_OVERVIEW_RULER,
-      4);
-    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
-      AnnotationType.ERROR,
-      ERROR_INDICATION_COLOR,
-      ERROR_INDICATION,
-      ERROR_INDICATION_IN_OVERVIEW_RULER,
-      5);
-
-    fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE, CURRENT_LINE_COLOR);
-    fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN, PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN);
-    fSourceViewerDecorationSupport.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR);
-
-    fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey());
-
-  }
+//  protected void configureSourceViewerDecorationSupport() {
+//
+//    fSourceViewerDecorationSupport.setCharacterPairMatcher(fBracketMatcher);
+//
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.UNKNOWN,
+//      UNKNOWN_INDICATION_COLOR,
+//      UNKNOWN_INDICATION,
+//      UNKNOWN_INDICATION_IN_OVERVIEW_RULER,
+//      0);
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.BOOKMARK,
+//      BOOKMARK_INDICATION_COLOR,
+//      BOOKMARK_INDICATION,
+//      BOOKMARK_INDICATION_IN_OVERVIEW_RULER,
+//      1);
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.TASK,
+//      TASK_INDICATION_COLOR,
+//      TASK_INDICATION,
+//      TASK_INDICATION_IN_OVERVIEW_RULER, 
+//      2);
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.SEARCH,
+//      SEARCH_RESULT_INDICATION_COLOR,
+//      SEARCH_RESULT_INDICATION,
+//      SEARCH_RESULT_INDICATION_IN_OVERVIEW_RULER,
+//      3);
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.WARNING,
+//      WARNING_INDICATION_COLOR,
+//      WARNING_INDICATION,
+//      WARNING_INDICATION_IN_OVERVIEW_RULER,
+//      4);
+//    fSourceViewerDecorationSupport.setAnnotationPainterPreferenceKeys(
+//      AnnotationType.ERROR,
+//      ERROR_INDICATION_COLOR,
+//      ERROR_INDICATION,
+//      ERROR_INDICATION_IN_OVERVIEW_RULER,
+//      5);
+//
+//    fSourceViewerDecorationSupport.setCursorLinePainterPreferenceKeys(CURRENT_LINE, CURRENT_LINE_COLOR);
+//    fSourceViewerDecorationSupport.setMarginPainterPreferenceKeys(PRINT_MARGIN, PRINT_MARGIN_COLOR, PRINT_MARGIN_COLUMN);
+//    fSourceViewerDecorationSupport.setMatchingCharacterPainterPreferenceKeys(MATCHING_BRACKETS, MATCHING_BRACKETS_COLOR);
+//
+//    fSourceViewerDecorationSupport.setSymbolicFontName(getFontPropertyPreferenceKey());
+//
+//  }
   /**
     * Jumps to the matching bracket.
     */
@@ -2289,7 +2429,7 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
 
     List segmentation = new ArrayList();
     for (int i = 0; i < linePartitioning.length; i++) {
-      if (IPHPPartitionScannerConstants.PHP_STRING.equals(linePartitioning[i].getType()))
+      if (IPHPPartitions.PHP_STRING.equals(linePartitioning[i].getType()))
         segmentation.add(linePartitioning[i]);
     }
 
@@ -2363,64 +2503,89 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
   //    //   JavaUIHelp.setHelp(this, text, IJavaHelpContextIds.JAVA_EDITOR);
   //    return viewer;
   //  }
-  protected final ISourceViewer createSourceViewer(Composite parent, IVerticalRuler verticalRuler, int styles) {
-
-    ISharedTextColors sharedColors = PHPeclipsePlugin.getDefault().getJavaTextTools().getColorManager();
-
-    fOverviewRuler = new OverviewRuler(fAnnotationAccess, VERTICAL_RULER_WIDTH, sharedColors);
-    fOverviewRuler.addHeaderAnnotationType(AnnotationType.WARNING);
-    fOverviewRuler.addHeaderAnnotationType(AnnotationType.ERROR);
-
-    ISourceViewer viewer = createJavaSourceViewer(parent, verticalRuler, fOverviewRuler, isOverviewRulerVisible(), styles);
-
-    StyledText text = viewer.getTextWidget();
-    text.addBidiSegmentListener(new BidiSegmentListener() {
-      public void lineGetSegments(BidiSegmentEvent event) {
-        event.segments = getBidiLineSegments(event.lineOffset, event.lineText);
-      }
-    });
-
-    //         JavaUIHelp.setHelp(this, text, IJavaHelpContextIds.JAVA_EDITOR);
-
-    fSourceViewerDecorationSupport = new SourceViewerDecorationSupport(viewer, fOverviewRuler, fAnnotationAccess, sharedColors);
-    configureSourceViewerDecorationSupport();
-
-    return viewer;
-  }
-
-  protected void showOverviewRuler() {
-    if (fOverviewRuler != null) {
-      if (getSourceViewer() instanceof ISourceViewerExtension) {
-        ((ISourceViewerExtension) getSourceViewer()).showAnnotationsOverview(true);
-        fSourceViewerDecorationSupport.updateOverviewDecorations();
-      }
-    }
+  
+  public final ISourceViewer getViewer() {
+       return getSourceViewer();
   }
+  
+  protected final ISourceViewer createSourceViewer(Composite parent, IVerticalRuler verticalRuler, int styles) {
+       ISourceViewer viewer= createJavaSourceViewer(parent, verticalRuler, getOverviewRuler(), isOverviewRulerVisible(), styles);
+       
+       StyledText text= viewer.getTextWidget();
+       text.addBidiSegmentListener(new  BidiSegmentListener() {
+               public void lineGetSegments(BidiSegmentEvent event) {
+                       event.segments= getBidiLineSegments(event.lineOffset, event.lineText);
+               }
+       });
+       
+//     JavaUIHelp.setHelp(this, text, IJavaHelpContextIds.JAVA_EDITOR);
 
-  protected void hideOverviewRuler() {
-    if (getSourceViewer() instanceof ISourceViewerExtension) {
-      fSourceViewerDecorationSupport.hideAnnotationOverview();
-      ((ISourceViewerExtension) getSourceViewer()).showAnnotationsOverview(false);
-    }
+       // ensure source viewer decoration support has been created and configured
+       getSourceViewerDecorationSupport(viewer);                               
+       
+       return viewer;
+       
+//    ISharedTextColors sharedColors = PHPeclipsePlugin.getDefault().getJavaTextTools().getColorManager();
+//
+//    fOverviewRuler = new OverviewRuler(fAnnotationAccess, VERTICAL_RULER_WIDTH, sharedColors);
+//    fOverviewRuler.addHeaderAnnotationType(AnnotationType.WARNING);
+//    fOverviewRuler.addHeaderAnnotationType(AnnotationType.ERROR);
+//
+//    ISourceViewer viewer = createJavaSourceViewer(parent, verticalRuler, fOverviewRuler, isOverviewRulerVisible(), styles);
+//
+//    StyledText text = viewer.getTextWidget();
+//    text.addBidiSegmentListener(new BidiSegmentListener() {
+//      public void lineGetSegments(BidiSegmentEvent event) {
+//        event.segments = getBidiLineSegments(event.lineOffset, event.lineText);
+//      }
+//    });
+//
+//    //               JavaUIHelp.setHelp(this, text, IJavaHelpContextIds.JAVA_EDITOR);
+//
+//    fSourceViewerDecorationSupport = new SourceViewerDecorationSupport(viewer, fOverviewRuler, fAnnotationAccess, sharedColors);
+//    configureSourceViewerDecorationSupport();
+//
+//    return viewer;
   }
 
-  protected boolean isOverviewRulerVisible() {
-    IPreferenceStore store = getPreferenceStore();
-    return store.getBoolean(OVERVIEW_RULER);
-  }
+//  protected void showOverviewRuler() {
+//    if (fOverviewRuler != null) {
+//      if (getSourceViewer() instanceof ISourceViewerExtension) {
+//        ((ISourceViewerExtension) getSourceViewer()).showAnnotationsOverview(true);
+//        fSourceViewerDecorationSupport.updateOverviewDecorations();
+//      }
+//    }
+//  }
+//
+//  protected void hideOverviewRuler() {
+//    if (getSourceViewer() instanceof ISourceViewerExtension) {
+//      fSourceViewerDecorationSupport.hideAnnotationOverview();
+//      ((ISourceViewerExtension) getSourceViewer()).showAnnotationsOverview(false);
+//    }
+//  }
+
+//  protected boolean isOverviewRulerVisible() {
+//    IPreferenceStore store = getPreferenceStore();
+//    return store.getBoolean(OVERVIEW_RULER);
+//  }
   /*
    * @see AbstractTextEditor#createSourceViewer(Composite, IVerticalRuler, int)
    */
-  protected ISourceViewer createJavaSourceViewer(
-    Composite parent,
-    IVerticalRuler ruler,
-    IOverviewRuler overviewRuler,
-    boolean isOverviewRulerVisible,
-    int styles) {
-    return new SourceViewer(parent, ruler, overviewRuler, isOverviewRulerVisible(), styles);
-    //    return super.createSourceViewer(parent, ruler, styles);
-  }
-
+//  protected ISourceViewer createJavaSourceViewer(
+//    Composite parent,
+//    IVerticalRuler ruler,
+//    IOverviewRuler overviewRuler,
+//    boolean isOverviewRulerVisible,
+//    int styles) {
+//    return new SourceViewer(parent, ruler, overviewRuler, isOverviewRulerVisible(), styles);
+//  }
+  
+  /*
+        * @see AbstractTextEditor#createSourceViewer(Composite, IVerticalRuler, int)
+        */
+       protected ISourceViewer createJavaSourceViewer(Composite parent, IVerticalRuler verticalRuler, IOverviewRuler overviewRuler, boolean isOverviewRulerVisible, int styles) {
+               return new JavaSourceViewer(parent, verticalRuler, getOverviewRuler(), isOverviewRulerVisible(), styles);
+       }
   /*
    * @see AbstractTextEditor#affectsTextPresentation(PropertyChangeEvent)
    */
@@ -2468,7 +2633,7 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
       }
 
       selectAndReveal(errorPosition.getOffset(), errorPosition.getLength());
-      setStatusLineErrorMessage(nextError.getMessage());
+//      setStatusLineErrorMessage(nextError.getMessage());
 
     } else {
 
@@ -2524,4 +2689,23 @@ public abstract class PHPEditor extends StatusTextEditor implements IViewPartInp
 
     return nextError;
   }
+  void removeOccurrenceAnnotations() {
+       IDocumentProvider documentProvider= getDocumentProvider();
+       if (documentProvider == null)
+               return;
+       
+       IAnnotationModel annotationModel= documentProvider.getAnnotationModel(getEditorInput());
+       if (annotationModel == null || fOccurrenceAnnotations == null)
+               return;
+
+       synchronized (annotationModel) {
+               if (annotationModel instanceof IAnnotationModelExtension) {
+                       ((IAnnotationModelExtension)annotationModel).replaceAnnotations(fOccurrenceAnnotations, null);
+               } else {
+                       for (int i= 0, length= fOccurrenceAnnotations.length; i < length; i++)
+                               annotationModel.removeAnnotation(fOccurrenceAnnotations[i]);
+               }
+               fOccurrenceAnnotations= null;
+       }
+}
 }