improved include detection
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPSourceViewerConfiguration.java
index 627a046..2874885 100644 (file)
  **********************************************************************/
 package net.sourceforge.phpeclipse.phpeditor;
 import java.util.Vector;
+
+import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.internal.ui.text.AbstractJavaScanner;
 import net.sourceforge.phpdt.internal.ui.text.ContentAssistPreference;
 import net.sourceforge.phpdt.internal.ui.text.HTMLTextPresenter;
+import net.sourceforge.phpdt.internal.ui.text.IPHPPartitions;
 import net.sourceforge.phpdt.internal.ui.text.JavaAnnotationHover;
 import net.sourceforge.phpdt.internal.ui.text.JavaElementProvider;
 import net.sourceforge.phpdt.internal.ui.text.JavaOutlineInformationControl;
+import net.sourceforge.phpdt.internal.ui.text.JavaPresentationReconciler;
 import net.sourceforge.phpdt.internal.ui.text.JavaReconciler;
 import net.sourceforge.phpdt.internal.ui.text.java.JavaFormattingStrategy;
 import net.sourceforge.phpdt.internal.ui.text.java.JavaReconcilingStrategy;
+import net.sourceforge.phpdt.internal.ui.text.java.JavaStringAutoIndentStrategy;
 import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor;
 import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy;
 import net.sourceforge.phpdt.internal.ui.text.phpdoc.PHPDocCompletionProcessor;
 import net.sourceforge.phpdt.ui.PreferenceConstants;
+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.html.HTMLFormattingStrategy;
 import net.sourceforge.phpeclipse.phpeditor.php.HTMLCompletionProcessor;
-import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPAutoIndentStrategy;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPCompletionProcessor;
 import net.sourceforge.phpeclipse.phpeditor.php.PHPDoubleClickSelector;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
-import org.eclipse.core.resources.IFile;
+
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.text.DefaultAutoIndentStrategy;
@@ -66,10 +71,10 @@ import org.eclipse.jface.text.rules.Token;
 import org.eclipse.jface.text.source.IAnnotationHover;
 import org.eclipse.jface.text.source.ISourceViewer;
 import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.texteditor.ITextEditor;
 /**
  * Configuration for an <code>SourceViewer</code> which shows PHP code.
  */
@@ -90,7 +95,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
        // IPHPPartitionScannerConstants.HTML;
        //IDocument.DEFAULT_CONTENT_TYPE;
        private JavaTextTools fJavaTextTools;
-       private PHPEditor fEditor;
+       private ITextEditor fTextEditor;
        private ContentFormatter fFormatter;
        private HTMLFormattingStrategy fFormattingStrategy;
        /**
@@ -102,12 +107,78 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
                }
        };
        /**
+        * The document partitioning.
+        * @since 3.0
+        */
+       private String fDocumentPartitioning;
+       /**
+        * The Java source code scanner
+        * @since 3.0
+        */
+       private AbstractJavaScanner fCodeScanner;
+       /** 
+        * The Java multi-line comment scanner 
+        * @since 3.0
+        */
+       private AbstractJavaScanner fMultilineCommentScanner;
+       /**
+        * The Java single-line comment scanner
+        * @since 3.0
+        */
+       private AbstractJavaScanner fSinglelineCommentScanner;
+       /**
+        * The Java string scanner
+        * @since 3.0
+        */
+       private AbstractJavaScanner fStringScanner;
+       /**
+        * The Javadoc scanner
+        * @since 3.0
+        */
+       private AbstractJavaScanner fJavaDocScanner;
+       /**
+        * The preference store, can be read-only
+        * @since 3.0
+        */
+       private IPreferenceStore fPreferenceStore;
+       /**
+        * The color manager
+        * @since 3.0
+        */
+       private IColorManager fColorManager;
+       
+       /**
+        * Creates a new Java source viewer configuration for viewers in the given editor 
+        * using the given preference store, the color manager and the specified document partitioning.
+        * <p>
+        * Creates a Java source viewer configuration in the new setup without text tools. Clients are
+        * allowed to call {@link JavaSourceViewerConfiguration#handlePropertyChangeEvent(PropertyChangeEvent)}
+        * and disallowed to call {@link JavaSourceViewerConfiguration#getPreferenceStore()} on the resulting
+        * Java source viewer configuration.
+        * </p>
+        *
+        * @param colorManager the color manager
+        * @param preferenceStore the preference store, can be read-only
+        * @param editor the editor in which the configured viewer(s) will reside
+        * @param partitioning the document partitioning for this configuration
+        * @since 3.0
+        */
+       public PHPSourceViewerConfiguration(IColorManager colorManager, IPreferenceStore preferenceStore, ITextEditor editor, String partitioning) {
+               fColorManager= colorManager;
+               fPreferenceStore= preferenceStore;
+               fTextEditor= editor;
+               fDocumentPartitioning= partitioning;
+               fJavaTextTools = PHPeclipsePlugin.getDefault().getJavaTextTools();
+//             initializeScanners();
+       }
+
+       /**
         * Default constructor.
         */
        public PHPSourceViewerConfiguration(JavaTextTools textTools,
                        PHPEditor editor) {
                fJavaTextTools = textTools;
-               fEditor = editor;
+               fTextEditor = editor;
        }
        /*
         * @see SourceViewerConfiguration#getContentFormatter(ISourceViewer)
@@ -163,8 +234,8 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
        //  private String[] getPartitionManagingPositionCategories() {
        //    return new String[] { DefaultPartitioner.CONTENT_TYPES_CATEGORY };
        //  }
-       public PHPEditor getEditor() {
-               return fEditor;
+       public ITextEditor getEditor() {
+               return fTextEditor;
        }
        /**
         * Returns the preference store used by this configuration to initialize
@@ -202,7 +273,10 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
         */
        public IAutoIndentStrategy getAutoIndentStrategy(
                        ISourceViewer sourceViewer, String contentType) {
-               return (IPHPPartitionScannerConstants.PHP.equals(contentType)
+               if (IPHPPartitions.PHP_STRING_DQ.equals(contentType))
+                       return new JavaStringAutoIndentStrategy(getConfiguredDocumentPartitioning(sourceViewer));
+
+               return (IPHPPartitions.PHP_PARTITIONING.equals(contentType)
                                ? new PHPAutoIndentStrategy()
                                : new DefaultAutoIndentStrategy());
        }
@@ -332,16 +406,16 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
         * (non-Javadoc) Method declared on SourceViewerConfiguration
         */
        public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) {
-               return new String[]{IPHPPartitionScannerConstants.HTML,
-                               IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT,
-                               IPHPPartitionScannerConstants.PHP,
-                               IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT,
-                               IPHPPartitionScannerConstants.CSS,
-                               IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT,
-                               IPHPPartitionScannerConstants.JAVASCRIPT,
-                               IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT,
-                               IPHPPartitionScannerConstants.SMARTY,
-                               IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT,
+               return new String[]{IPHPPartitions.HTML,
+                               IPHPPartitions.HTML_MULTILINE_COMMENT,
+                               IPHPPartitions.PHP_PARTITIONING,
+                               IPHPPartitions.PHP_PHPDOC_COMMENT,
+                               IPHPPartitions.CSS,
+                               IPHPPartitions.CSS_MULTILINE_COMMENT,
+                               IPHPPartitions.JAVASCRIPT,
+                               IPHPPartitions.JS_MULTILINE_COMMENT,
+                               IPHPPartitions.SMARTY,
+                               IPHPPartitions.SMARTY_MULTILINE_COMMENT,
                                IDocument.DEFAULT_CONTENT_TYPE};
        }
        /*
@@ -351,28 +425,28 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
                ContentAssistant assistant = new ContentAssistant();
                IContentAssistProcessor processor = new HTMLCompletionProcessor();
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.HTML);
+                               IPHPPartitions.HTML);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT);
+                               IPHPPartitions.HTML_MULTILINE_COMMENT);
                assistant.setContentAssistProcessor(processor,
                                IDocument.DEFAULT_CONTENT_TYPE);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.CSS);
+                               IPHPPartitions.CSS);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT);
+                               IPHPPartitions.CSS_MULTILINE_COMMENT);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.JAVASCRIPT);
+                               IPHPPartitions.JAVASCRIPT);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
+                               IPHPPartitions.JS_MULTILINE_COMMENT);
                // TODO define special smarty partition content assist
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.SMARTY);
+                               IPHPPartitions.SMARTY);
                assistant.setContentAssistProcessor(processor,
-                               IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+                               IPHPPartitions.SMARTY_MULTILINE_COMMENT);
                assistant.setContentAssistProcessor(new PHPCompletionProcessor(),
-                               IPHPPartitionScannerConstants.PHP);
+                               IPHPPartitions.PHP_PARTITIONING);
                assistant.setContentAssistProcessor(new PHPDocCompletionProcessor(),
-                               IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT);
+                               IPHPPartitions.PHP_PHPDOC_COMMENT);
                //    assistant.enableAutoActivation(true);
                //    assistant.setAutoActivationDelay(500);
                //    assistant.setProposalPopupOrientation(ContentAssistant.PROPOSAL_OVERLAY);
@@ -423,7 +497,7 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
                // prefix[0] is either '\t' or ' ' x tabWidth, depending on useSpaces
                final IPreferenceStore preferences = PHPeclipsePlugin.getDefault()
                                .getPreferenceStore();
-               int tabWidth = preferences.getInt(PHPCore.FORMATTER_TAB_SIZE);
+               int tabWidth = preferences.getInt(JavaCore.FORMATTER_TAB_SIZE);
                boolean useSpaces = getPreferenceStore().getBoolean(SPACES_FOR_TABS);
                for (int i = 0; i <= tabWidth; i++) {
                        StringBuffer prefix = new StringBuffer();
@@ -452,52 +526,54 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
                // PHPEditorEnvironment.getPHPColorProvider();
                //    JavaColorManager provider =
                // PHPEditorEnvironment.getPHPColorProvider();
-               PresentationReconciler reconciler = new PresentationReconciler();
+               PresentationReconciler reconciler= new JavaPresentationReconciler();
+               reconciler.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
+
                DefaultDamagerRepairer dr = new DefaultDamagerRepairer(getHTMLScanner());
                reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE);
                reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE);
                dr = new DefaultDamagerRepairer(getHTMLScanner());
-               reconciler.setDamager(dr, IPHPPartitionScannerConstants.HTML);
-               reconciler.setRepairer(dr, IPHPPartitionScannerConstants.HTML);
+               reconciler.setDamager(dr, IPHPPartitions.HTML);
+               reconciler.setRepairer(dr, IPHPPartitions.HTML);
                dr = new DefaultDamagerRepairer(getHTMLScanner());
-               reconciler.setDamager(dr, IPHPPartitionScannerConstants.CSS);
-               reconciler.setRepairer(dr, IPHPPartitionScannerConstants.CSS);
+               reconciler.setDamager(dr, IPHPPartitions.CSS);
+               reconciler.setRepairer(dr, IPHPPartitions.CSS);
                dr = new DefaultDamagerRepairer(getHTMLScanner());
                reconciler.setDamager(dr,
-                               IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT);
+                               IPHPPartitions.CSS_MULTILINE_COMMENT);
                reconciler.setRepairer(dr,
-                               IPHPPartitionScannerConstants.CSS_MULTILINE_COMMENT);
+                               IPHPPartitions.CSS_MULTILINE_COMMENT);
                dr = new DefaultDamagerRepairer(getHTMLScanner());
-               reconciler.setDamager(dr, IPHPPartitionScannerConstants.JAVASCRIPT);
-               reconciler.setRepairer(dr, IPHPPartitionScannerConstants.JAVASCRIPT);
+               reconciler.setDamager(dr, IPHPPartitions.JAVASCRIPT);
+               reconciler.setRepairer(dr, IPHPPartitions.JAVASCRIPT);
                dr = new DefaultDamagerRepairer(getHTMLScanner());
                reconciler.setDamager(dr,
-                               IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
+                               IPHPPartitions.JS_MULTILINE_COMMENT);
                reconciler.setRepairer(dr,
-                               IPHPPartitionScannerConstants.JS_MULTILINE_COMMENT);
+                               IPHPPartitions.JS_MULTILINE_COMMENT);
                dr = new DefaultDamagerRepairer(getSmartyScanner());
-               reconciler.setDamager(dr, IPHPPartitionScannerConstants.SMARTY);
-               reconciler.setRepairer(dr, IPHPPartitionScannerConstants.SMARTY);
+               reconciler.setDamager(dr, IPHPPartitions.SMARTY);
+               reconciler.setRepairer(dr, IPHPPartitions.SMARTY);
                dr = new DefaultDamagerRepairer(getSmartyDocScanner());
                reconciler.setDamager(dr,
-                               IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+                               IPHPPartitions.SMARTY_MULTILINE_COMMENT);
                reconciler.setRepairer(dr,
-                               IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+                               IPHPPartitions.SMARTY_MULTILINE_COMMENT);
                dr = new DefaultDamagerRepairer(new SingleTokenScanner(
                                new TextAttribute(fJavaTextTools.getColorManager().getColor(
                                                PHPColorProvider.MULTI_LINE_COMMENT))));
                reconciler.setDamager(dr,
-                               IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT);
+                               IPHPPartitions.HTML_MULTILINE_COMMENT);
                reconciler.setRepairer(dr,
-                               IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT);
+                               IPHPPartitions.HTML_MULTILINE_COMMENT);
                dr = new DefaultDamagerRepairer(getCodeScanner());
-               reconciler.setDamager(dr, IPHPPartitionScannerConstants.PHP);
-               reconciler.setRepairer(dr, IPHPPartitionScannerConstants.PHP);
+               reconciler.setDamager(dr, IPHPPartitions.PHP_PARTITIONING);
+               reconciler.setRepairer(dr, IPHPPartitions.PHP_PARTITIONING);
                dr = new DefaultDamagerRepairer(getPHPDocScanner());
                reconciler.setDamager(dr,
-                               IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT);
+                               IPHPPartitions.PHP_PHPDOC_COMMENT);
                reconciler.setRepairer(dr,
-                               IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT);
+                               IPHPPartitions.PHP_PHPDOC_COMMENT);
                return reconciler;
        }
        /*
@@ -621,15 +697,15 @@ public class PHPSourceViewerConfiguration extends SourceViewerConfiguration {
                presenter.setInformationProvider(provider,
                                IDocument.DEFAULT_CONTENT_TYPE);
                presenter.setInformationProvider(provider,
-                               IPHPPartitionScannerConstants.PHP);
+                               IPHPPartitions.PHP_PARTITIONING);
                presenter.setInformationProvider(provider,
-                               IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT);
+                               IPHPPartitions.PHP_PHPDOC_COMMENT);
                presenter.setInformationProvider(provider,
-                               IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT);
+                               IPHPPartitions.SMARTY_MULTILINE_COMMENT);
                presenter.setInformationProvider(provider,
-                               IPHPPartitionScannerConstants.HTML);
+                               IPHPPartitions.HTML);
                presenter.setInformationProvider(provider,
-                               IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT);
+                               IPHPPartitions.HTML_MULTILINE_COMMENT);
                presenter.setSizeConstraints(40, 20, true, false);
                return presenter;
        }