diff options
Diffstat (limited to 'bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp')
134 files changed, 0 insertions, 19353 deletions
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/properties/JSPedCSSPropertySource.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/properties/JSPedCSSPropertySource.java deleted file mode 100644 index 09c7828b9b..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/properties/JSPedCSSPropertySource.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.css.ui.internal.properties; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.css.ui.internal.properties.CSSPropertySource; - - - -public class JSPedCSSPropertySource extends CSSPropertySource { - - public JSPedCSSPropertySource(ICSSNode target) { - super(target); - } - - public void setPropertyValue(Object name, Object value) { - // workaround to avoid DOMException: if value contains jsp element, nothing happen. - String v = value.toString(); - if (v.indexOf("${") != -1 || v.indexOf("<%=") != -1){ - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - String title = JSPUIMessages.Title_InvalidValue; //$NON-NLS-1$ - String message = JSPUIMessages.Message_InvalidValue; //$NON-NLS-1$ - MessageDialog.openWarning(window.getShell(), title, message); - return; - } - super.setPropertyValue(name, value); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/registry/AdapterFactoryProviderJSPedCSS.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/registry/AdapterFactoryProviderJSPedCSS.java deleted file mode 100644 index 809e87b0d9..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/registry/AdapterFactoryProviderJSPedCSS.java +++ /dev/null @@ -1,25 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.css.ui.internal.registry; - -import org.eclipse.jst.jsp.css.core.internal.modelhandler.ModelHandlerForJSPedCSS; -import org.eclipse.wst.css.ui.internal.registry.AdapterFactoryProviderCSS; -import org.eclipse.wst.sse.core.internal.ltk.modelhandler.IDocumentTypeHandler; - -public class AdapterFactoryProviderJSPedCSS extends AdapterFactoryProviderCSS { - - - public boolean isFor(IDocumentTypeHandler contentTypeDescription) { - return (contentTypeDescription instanceof ModelHandlerForJSPedCSS); - } - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/views/properties/JSPedCSSPropertySheetConfiguration.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/views/properties/JSPedCSSPropertySheetConfiguration.java deleted file mode 100644 index 7403816675..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/css/ui/internal/views/properties/JSPedCSSPropertySheetConfiguration.java +++ /dev/null @@ -1,188 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.css.ui.internal.views.properties; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jst.jsp.css.ui.internal.properties.JSPedCSSPropertySource; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.progress.UIJob; -import org.eclipse.ui.views.properties.IPropertySheetPage; -import org.eclipse.ui.views.properties.IPropertySource; -import org.eclipse.ui.views.properties.IPropertySourceProvider; -import org.eclipse.ui.views.properties.PropertySheetPage; -import org.eclipse.wst.css.core.internal.provisional.document.ICSSNode; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.ui.views.properties.PropertySheetConfiguration; -import org.eclipse.wst.xml.ui.internal.XMLUIMessages; - -public class JSPedCSSPropertySheetConfiguration extends PropertySheetConfiguration { - private class CSSPropertySheetRefreshAdapter implements INodeAdapter { - public boolean isAdapterForType(Object type) { - return false; - } - - public void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) { - if (fPropertySheetPage != null) { - getPropertiesRefreshJob().addPropertySheetPage(fPropertySheetPage); - } - } - } - - private class CSSPropertySourceProvider implements IPropertySourceProvider { - private IPropertySource fPropertySource = null; - private ICSSNode fSource = null; - - public IPropertySource getPropertySource(Object object) { - if (fSource != null && object.equals(fSource)) { - return fPropertySource; - } - - if (object instanceof ICSSNode) { - fSource = (ICSSNode)object; - fPropertySource = new JSPedCSSPropertySource(fSource); - } - else { - fSource = null; - fPropertySource = null; - } - return fPropertySource; - } - } - - private class PropertiesRefreshJob extends UIJob { - public static final int UPDATE_DELAY = 200; - - private Set propertySheetPages = null; - - public PropertiesRefreshJob() { - super(XMLUIMessages.JFaceNodeAdapter_1); - setSystem(true); - setPriority(Job.SHORT); - propertySheetPages = new HashSet(1); - } - - void addPropertySheetPage(IPropertySheetPage page) { - propertySheetPages.add(page); - schedule(UPDATE_DELAY); - } - - public IStatus runInUIThread(IProgressMonitor monitor) { - Object[] pages = propertySheetPages.toArray(); - propertySheetPages.clear(); - - for (int i = 0; i < pages.length; i++) { - PropertySheetPage page = (PropertySheetPage) pages[i]; - if (page.getControl() != null && !page.getControl().isDisposed()) { - page.refresh(); - } - } - - return Status.OK_STATUS; - } - } - - private PropertiesRefreshJob fPropertiesRefreshJob = null; - - IPropertySheetPage fPropertySheetPage; - - private IPropertySourceProvider fPropertySourceProvider = null; - - private INodeAdapter fRefreshAdapter = new CSSPropertySheetRefreshAdapter(); - - private INodeNotifier[] fSelectedNotifiers; - - /** - * Create new instance of CSSPropertySheetConfiguration - */ - public JSPedCSSPropertySheetConfiguration() { - // Must have empty constructor to createExecutableExtension - super(); - } - - public ISelection getInputSelection(IWorkbenchPart selectingPart, ISelection selection) { - // remove UI refresh adapters - if (fSelectedNotifiers != null) { - for (int i = 0; i < fSelectedNotifiers.length; i++) { - fSelectedNotifiers[i].removeAdapter(fRefreshAdapter); - } - fSelectedNotifiers = null; - } - - ISelection preferredSelection = super.getInputSelection(selectingPart, selection); - if (preferredSelection instanceof IStructuredSelection) { - Object[] selectedObjects = new Object[((IStructuredSelection) selection).size()]; - System.arraycopy(((IStructuredSelection) selection).toArray(), 0, selectedObjects, 0, selectedObjects.length); - for (int i = 0; i < selectedObjects.length; i++) { - if (selectedObjects[i] instanceof ICSSNode) { - ICSSNode node = (ICSSNode) selectedObjects[i]; - while (node.getNodeType() == ICSSNode.PRIMITIVEVALUE_NODE || node.getNodeType() == ICSSNode.STYLEDECLITEM_NODE) { - node = node.getParentNode(); - selectedObjects[i] = node; - } - } - } - - /* - * Add UI refresh adapters and remember notifiers for later - * removal - */ - if (selectedObjects.length > 0) { - List selectedNotifiers = new ArrayList(1); - for (int i = 0; i < selectedObjects.length; i++) { - if (selectedObjects[i] instanceof INodeNotifier) { - selectedNotifiers.add(selectedObjects[i]); - ((INodeNotifier) selectedObjects[i]).addAdapter(fRefreshAdapter); - } - } - fSelectedNotifiers = (INodeNotifier[]) selectedNotifiers.toArray(new INodeNotifier[selectedNotifiers.size()]); - } - preferredSelection = new StructuredSelection(selectedObjects); - } - return preferredSelection; - } - - PropertiesRefreshJob getPropertiesRefreshJob() { - if (fPropertiesRefreshJob == null) { - fPropertiesRefreshJob = new PropertiesRefreshJob(); - } - return fPropertiesRefreshJob; - } - - public IPropertySourceProvider getPropertySourceProvider(IPropertySheetPage page) { - if (fPropertySourceProvider == null) { - fPropertySourceProvider = new CSSPropertySourceProvider(); - fPropertySheetPage = page; - } - return fPropertySourceProvider; - } - - public void unconfigure() { - super.unconfigure(); - if (fSelectedNotifiers != null) { - for (int i = 0; i < fSelectedNotifiers.length; i++) { - fSelectedNotifiers[i].removeAdapter(fRefreshAdapter); - } - fSelectedNotifiers = null; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java deleted file mode 100644 index bc4158feaa..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/StructuredTextViewerConfigurationJSP.java +++ /dev/null @@ -1,382 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Matthias Fuessel, mat.fuessel@gmx.net - [177387] use base hyperlinking extension points - *******************************************************************************/ -package org.eclipse.jst.jsp.ui; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.jdt.ui.JavaUI; -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jdt.ui.text.IJavaPartitions; -import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.IAutoEditStrategy; -import org.eclipse.jface.text.ITextDoubleClickStrategy; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContentAssistant; -import org.eclipse.jface.text.formatter.IContentFormatter; -import org.eclipse.jface.text.formatter.MultiPassContentFormatter; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.text.StructuredTextPartitionerForJSP; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.jst.jsp.ui.internal.autoedit.AutoEditStrategyForTabs; -import org.eclipse.jst.jsp.ui.internal.autoedit.StructuredAutoEditStrategyJSP; -import org.eclipse.jst.jsp.ui.internal.contentassist.JSPContentAssistProcessor; -import org.eclipse.jst.jsp.ui.internal.contentassist.JSPELContentAssistProcessor; -import org.eclipse.jst.jsp.ui.internal.contentassist.JSPJavaContentAssistProcessor; -import org.eclipse.jst.jsp.ui.internal.contentassist.NoRegionContentAssistProcessorForJSP; -import org.eclipse.jst.jsp.ui.internal.format.FormattingStrategyJSPJava; -import org.eclipse.jst.jsp.ui.internal.style.LineStyleProviderForJSP; -import org.eclipse.jst.jsp.ui.internal.style.java.LineStyleProviderForJava; -import org.eclipse.jst.jsp.ui.internal.style.jspel.LineStyleProviderForJSPEL; -import org.eclipse.wst.css.core.text.ICSSPartitions; -import org.eclipse.wst.html.core.internal.format.HTMLFormatProcessorImpl; -import org.eclipse.wst.html.core.internal.provisional.contenttype.ContentTypeIdForHTML; -import org.eclipse.wst.html.core.text.IHTMLPartitions; -import org.eclipse.wst.html.ui.StructuredTextViewerConfigurationHTML; -import org.eclipse.wst.sse.core.text.IStructuredPartitions; -import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration; -import org.eclipse.wst.sse.ui.internal.format.StructuredFormattingStrategy; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; -import org.eclipse.wst.xml.core.internal.provisional.contenttype.ContentTypeIdForXML; -import org.eclipse.wst.xml.core.text.IXMLPartitions; -import org.eclipse.wst.xml.ui.StructuredTextViewerConfigurationXML; -import org.eclipse.wst.xml.ui.internal.contentoutline.JFaceNodeLabelProvider; -import org.w3c.dom.Node; - -/** - * Configuration for a source viewer which shows JSP content. - * <p> - * Clients can subclass and override just those methods which must be specific - * to their needs. - * </p> - * - * @see org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration - * @since 1.0 - */ -public class StructuredTextViewerConfigurationJSP extends StructuredTextViewerConfiguration { - /* - * One instance per configuration because not sourceviewer-specific and - * it's a String array - */ - private String[] fConfiguredContentTypes; - /* - * One instance per configuration - */ - private LineStyleProvider fLineStyleProviderForJava; - /* - * One instance per configuration - */ - private LineStyleProvider fLineStyleProviderForJSP; - /* - * One instance per configuration - */ - private LineStyleProvider fLineStyleProviderForJSPEL; - private StructuredTextViewerConfiguration fHTMLSourceViewerConfiguration; - private JavaSourceViewerConfiguration fJavaSourceViewerConfiguration; - private StructuredTextViewerConfiguration fXMLSourceViewerConfiguration; - private ILabelProvider fStatusLineLabelProvider; - - /** - * Create new instance of StructuredTextViewerConfigurationJSP - */ - public StructuredTextViewerConfigurationJSP() { - // Must have empty constructor to createExecutableExtension - super(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getAutoEditStrategies(org.eclipse.jface.text.source.ISourceViewer, - * java.lang.String) - */ - public IAutoEditStrategy[] getAutoEditStrategies(ISourceViewer sourceViewer, String contentType) { - IAutoEditStrategy[] strategies = null; - - if (contentType == IXMLPartitions.XML_DEFAULT) { - // xml autoedit strategies - strategies = getXMLSourceViewerConfiguration().getAutoEditStrategies(sourceViewer, contentType); - } - else if (contentType == IJSPPartitions.JSP_CONTENT_JAVA) { - // jsp java autoedit strategies - List allStrategies = new ArrayList(0); - - IAutoEditStrategy[] javaStrategies = getJavaSourceViewerConfiguration().getAutoEditStrategies(sourceViewer, IJavaPartitions.JAVA_PARTITIONING); - for (int i = 0; i < javaStrategies.length; i++) { - allStrategies.add(javaStrategies[i]); - } - // be sure this is added last, after others, so it can modify - // results from earlier steps. - // add auto edit strategy that handles when tab key is pressed - allStrategies.add(new AutoEditStrategyForTabs()); - - strategies = (IAutoEditStrategy[]) allStrategies.toArray(new IAutoEditStrategy[allStrategies.size()]); - } - else if (contentType == IHTMLPartitions.HTML_DEFAULT || contentType == IHTMLPartitions.HTML_DECLARATION) { - // html and jsp autoedit strategies - List allStrategies = new ArrayList(0); - - // add the jsp autoedit strategy first then add all html's - allStrategies.add(new StructuredAutoEditStrategyJSP()); - - IAutoEditStrategy[] htmlStrategies = getHTMLSourceViewerConfiguration().getAutoEditStrategies(sourceViewer, contentType); - for (int i = 0; i < htmlStrategies.length; i++) { - allStrategies.add(htmlStrategies[i]); - } - - strategies = (IAutoEditStrategy[]) allStrategies.toArray(new IAutoEditStrategy[allStrategies.size()]); - } - else { - // default autoedit strategies - List allStrategies = new ArrayList(0); - - IAutoEditStrategy[] superStrategies = super.getAutoEditStrategies(sourceViewer, contentType); - for (int i = 0; i < superStrategies.length; i++) { - allStrategies.add(superStrategies[i]); - } - - // be sure this is added last, after others, so it can modify - // results from earlier steps. - // add auto edit strategy that handles when tab key is pressed - allStrategies.add(new AutoEditStrategyForTabs()); - - strategies = (IAutoEditStrategy[]) allStrategies.toArray(new IAutoEditStrategy[allStrategies.size()]); - } - - return strategies; - } - - public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { - if (fConfiguredContentTypes == null) { - /* - * A little bit of cheating because assuming html's configured - * content types will add default, unknown, and all xml configured - * content types - */ - String[] htmlTypes = getHTMLSourceViewerConfiguration().getConfiguredContentTypes(sourceViewer); - String[] jspTypes = StructuredTextPartitionerForJSP.getConfiguredContentTypes(); - fConfiguredContentTypes = new String[htmlTypes.length + jspTypes.length]; - - int index = 0; - System.arraycopy(htmlTypes, 0, fConfiguredContentTypes, index, htmlTypes.length); - System.arraycopy(jspTypes, 0, fConfiguredContentTypes, index += htmlTypes.length, jspTypes.length); - } - - return fConfiguredContentTypes; - } - - protected IContentAssistProcessor[] getContentAssistProcessors(ISourceViewer sourceViewer, String partitionType) { - IContentAssistProcessor[] processors = null; - - if (partitionType == IHTMLPartitions.SCRIPT) { - // HTML JavaScript - IContentAssistant htmlContentAssistant = getHTMLSourceViewerConfiguration().getContentAssistant(sourceViewer); - IContentAssistProcessor processor = htmlContentAssistant.getContentAssistProcessor(IHTMLPartitions.SCRIPT); - processors = new IContentAssistProcessor[]{processor}; - } - else if (partitionType == ICSSPartitions.STYLE) { - // HTML CSS - IContentAssistant htmlContentAssistant = getHTMLSourceViewerConfiguration().getContentAssistant(sourceViewer); - IContentAssistProcessor processor = htmlContentAssistant.getContentAssistProcessor(ICSSPartitions.STYLE); - processors = new IContentAssistProcessor[]{processor}; - } - // // jspcontentassistprocessor handles this? - // else if ((partitionType == IHTMLPartitionTypes.HTML_DEFAULT) || - // (partitionType == IHTMLPartitionTypes.HTML_COMMENT)) { - // processors = new IContentAssistProcessor[]{new - // HTMLContentAssistProcessor()}; - // } - else if ((partitionType == IXMLPartitions.XML_DEFAULT) || (partitionType == IHTMLPartitions.HTML_DEFAULT) || (partitionType == IHTMLPartitions.HTML_COMMENT) || (partitionType == IJSPPartitions.JSP_DEFAULT) || (partitionType == IJSPPartitions.JSP_DIRECTIVE) || (partitionType == IJSPPartitions.JSP_CONTENT_DELIMITER) || (partitionType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT) || (partitionType == IJSPPartitions.JSP_COMMENT)) { - // jsp - processors = new IContentAssistProcessor[]{new JSPContentAssistProcessor()}; - } - else if ((partitionType == IXMLPartitions.XML_CDATA) || (partitionType == IJSPPartitions.JSP_CONTENT_JAVA)) { - // jsp java - processors = new IContentAssistProcessor[]{new JSPJavaContentAssistProcessor()}; - } - else if (partitionType == IJSPPartitions.JSP_DEFAULT_EL) { - // jsp el - processors = new IContentAssistProcessor[]{new JSPELContentAssistProcessor()}; - } - else if (partitionType == IStructuredPartitions.UNKNOWN_PARTITION) { - // unknown - processors = new IContentAssistProcessor[]{new NoRegionContentAssistProcessorForJSP()}; - } - - return processors; - } - - public IContentFormatter getContentFormatter(ISourceViewer sourceViewer) { - IContentFormatter formatter = super.getContentFormatter(sourceViewer); - // super was unable to create a formatter, probably because - // sourceViewer does not have document set yet, so just create a - // generic one - if (!(formatter instanceof MultiPassContentFormatter)) - formatter = new MultiPassContentFormatter(getConfiguredDocumentPartitioning(sourceViewer), IXMLPartitions.XML_DEFAULT); - - MultiPassContentFormatter multiFormatter = (MultiPassContentFormatter) formatter; - multiFormatter.setMasterStrategy(new StructuredFormattingStrategy(new HTMLFormatProcessorImpl())); - multiFormatter.setSlaveStrategy(new FormattingStrategyJSPJava(), IJSPPartitions.JSP_CONTENT_JAVA); - - return formatter; - } - - public ITextDoubleClickStrategy getDoubleClickStrategy(ISourceViewer sourceViewer, String contentType) { - ITextDoubleClickStrategy strategy = null; - - // html or javascript - if (contentType == IHTMLPartitions.HTML_DEFAULT || contentType == IHTMLPartitions.SCRIPT) - strategy = getHTMLSourceViewerConfiguration().getDoubleClickStrategy(sourceViewer, contentType); - else if (contentType == IJSPPartitions.JSP_CONTENT_JAVA || contentType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT) - // JSP Java or JSP JavaScript - strategy = getJavaSourceViewerConfiguration().getDoubleClickStrategy(sourceViewer, contentType); - else if (contentType == IJSPPartitions.JSP_DEFAULT) - // JSP (just treat like html) - strategy = getHTMLSourceViewerConfiguration().getDoubleClickStrategy(sourceViewer, IHTMLPartitions.HTML_DEFAULT); - else - strategy = super.getDoubleClickStrategy(sourceViewer, contentType); - - return strategy; - } - - private StructuredTextViewerConfiguration getHTMLSourceViewerConfiguration() { - if (fHTMLSourceViewerConfiguration == null) { - fHTMLSourceViewerConfiguration = new StructuredTextViewerConfigurationHTML(); - } - return fHTMLSourceViewerConfiguration; - } - - public String[] getIndentPrefixes(ISourceViewer sourceViewer, String contentType) { - String[] indentations = null; - - if (contentType == IXMLPartitions.XML_DEFAULT) - indentations = getXMLSourceViewerConfiguration().getIndentPrefixes(sourceViewer, contentType); - else - indentations = getHTMLSourceViewerConfiguration().getIndentPrefixes(sourceViewer, contentType); - - return indentations; - } - - private JavaSourceViewerConfiguration getJavaSourceViewerConfiguration() { - if (fJavaSourceViewerConfiguration == null) { - IPreferenceStore store = PreferenceConstants.getPreferenceStore(); - /* - * NOTE: null text editor is being passed to - * JavaSourceViewerConfiguration because - * StructuredTextViewerConfiguration does not know current editor. - * this is okay because editor is not needed in the cases we are - * using javasourceviewerconfiguration. - */ - fJavaSourceViewerConfiguration = new JavaSourceViewerConfiguration(JavaUI.getColorManager(), store, null, IJavaPartitions.JAVA_PARTITIONING); - } - return fJavaSourceViewerConfiguration; - } - - public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { - LineStyleProvider[] providers = null; - - if (partitionType == IHTMLPartitions.HTML_DEFAULT || partitionType == IHTMLPartitions.HTML_COMMENT || partitionType == IHTMLPartitions.HTML_DECLARATION) { - providers = getHTMLSourceViewerConfiguration().getLineStyleProviders(sourceViewer, IHTMLPartitions.HTML_DEFAULT); - } - else if (partitionType == IHTMLPartitions.SCRIPT || partitionType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT) { - providers = getHTMLSourceViewerConfiguration().getLineStyleProviders(sourceViewer, IHTMLPartitions.SCRIPT); - } - else if (partitionType == ICSSPartitions.STYLE) { - providers = getHTMLSourceViewerConfiguration().getLineStyleProviders(sourceViewer, ICSSPartitions.STYLE); - } - else if (partitionType == IXMLPartitions.XML_DEFAULT || partitionType == IXMLPartitions.XML_CDATA || partitionType == IXMLPartitions.XML_COMMENT || partitionType == IXMLPartitions.XML_DECLARATION || partitionType == IXMLPartitions.XML_PI) { - providers = getXMLSourceViewerConfiguration().getLineStyleProviders(sourceViewer, IXMLPartitions.XML_DEFAULT); - } - else if (partitionType == IJSPPartitions.JSP_CONTENT_JAVA) { - providers = new LineStyleProvider[]{getLineStyleProviderForJava()}; - } - else if (partitionType == IJSPPartitions.JSP_DEFAULT_EL) { - providers = new LineStyleProvider[]{getLineStyleProviderForJSPEL()}; - } - else if (partitionType == IJSPPartitions.JSP_COMMENT || partitionType == IJSPPartitions.JSP_CONTENT_DELIMITER || partitionType == IJSPPartitions.JSP_DEFAULT || partitionType == IJSPPartitions.JSP_DIRECTIVE) { - providers = new LineStyleProvider[]{getLineStyleProviderForJSP()}; - } - - return providers; - } - - private LineStyleProvider getLineStyleProviderForJava() { - if (fLineStyleProviderForJava == null) { - fLineStyleProviderForJava = new LineStyleProviderForJava(); - } - return fLineStyleProviderForJava; - } - - private LineStyleProvider getLineStyleProviderForJSP() { - if (fLineStyleProviderForJSP == null) { - fLineStyleProviderForJSP = new LineStyleProviderForJSP(); - } - return fLineStyleProviderForJSP; - } - - private LineStyleProvider getLineStyleProviderForJSPEL() { - if (fLineStyleProviderForJSPEL == null) { - fLineStyleProviderForJSPEL = new LineStyleProviderForJSPEL(); - } - return fLineStyleProviderForJSPEL; - } - - public ILabelProvider getStatusLineLabelProvider(ISourceViewer sourceViewer) { - if (fStatusLineLabelProvider == null) { - fStatusLineLabelProvider = new JFaceNodeLabelProvider() { - public String getText(Object element) { - - if (element == null) - return null; - - StringBuffer s = new StringBuffer(); - Node node = (Node) element; - while (node != null) { - if (node.getNodeType() != Node.DOCUMENT_NODE) { - s.insert(0, super.getText(node)); - } - node = node.getParentNode(); - if (node != null && node.getNodeType() != Node.DOCUMENT_NODE) { - s.insert(0, IPath.SEPARATOR); - } - } - return s.toString(); - } - - }; - } - return fStatusLineLabelProvider; - } - - private StructuredTextViewerConfiguration getXMLSourceViewerConfiguration() { - if (fXMLSourceViewerConfiguration == null) { - fXMLSourceViewerConfiguration = new StructuredTextViewerConfigurationXML(); - } - return fXMLSourceViewerConfiguration; - } - - protected Map getHyperlinkDetectorTargets(ISourceViewer sourceViewer) { - Map targets = super.getHyperlinkDetectorTargets(sourceViewer); - targets.put(ContentTypeIdForJSP.ContentTypeID_JSP, null); - - // also add html & xml since there could be html/xml content in jsp - // (just hope the hyperlink detectors will do additional checking) - targets.put(ContentTypeIdForHTML.ContentTypeID_HTML, null); - targets.put(ContentTypeIdForXML.ContentTypeID_XML, null); - return targets; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionConstantsJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionConstantsJSP.java deleted file mode 100644 index a400780e48..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionConstantsJSP.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal; - -/** - * @author pavery - */ -public interface IActionConstantsJSP { - public final static String ACTION_NAME_RENAME_ELEMENT = "RenameElement"; //$NON-NLS-1$ - public final static String ACTION_NAME_MOVE_ELEMENT = "MoveElement"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionDefinitionIdsJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionDefinitionIdsJSP.java deleted file mode 100644 index f90607e7b2..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/IActionDefinitionIdsJSP.java +++ /dev/null @@ -1,21 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal; - -import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds; - -/** - * @author pavery - */ -public interface IActionDefinitionIdsJSP { - public final static String RENAME_ELEMENT = IJavaEditorActionDefinitionIds.RENAME_ELEMENT; - public final static String MOVE_ELEMENT = IJavaEditorActionDefinitionIds.MOVE_ELEMENT; -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java deleted file mode 100644 index c844c963fb..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIMessages.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM - Initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal; - -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -import org.eclipse.osgi.util.NLS; - -/** - * Strings used by JSP UI - * - * @plannedfor 1.0 - */ -public class JSPUIMessages extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.jst.jsp.ui.internal.JSPUIPluginResources";//$NON-NLS-1$ - private static ResourceBundle fResourceBundle; - - static { - // load message values from bundle file - NLS.initializeMessages(BUNDLE_NAME, JSPUIMessages.class); - } - - public static ResourceBundle getResourceBundle() { - try { - if (fResourceBundle == null) - fResourceBundle = ResourceBundle.getBundle(BUNDLE_NAME); - } - catch (MissingResourceException x) { - fResourceBundle = null; - } - return fResourceBundle; - } - - public static String Sample_JSP_doc; - public static String JSP_Delimiters_UI_; - public static String Refactor_label; - public static String RenameElement_label; // resource bundle - public static String MoveElement_label; // resource bundle - public static String MoveElementWizard; - public static String OK; - public static String JSP_changes; - public static String ActionContributorJSP_0; - public static String JSPRenameElementAction_0; - public static String JSPMoveElementAction_0; - public static String BasicRefactorSearchRequestor_0; - public static String BasicRefactorSearchRequestor_1; - public static String BasicRefactorSearchRequestor_2; - public static String BasicRefactorSearchRequestor_3; - public static String BasicRefactorSearchRequestor_4; - public static String BasicRefactorSearchRequestor_5; - public static String BasicRefactorSearchRequestor_6; - public static String BreakpointNotAllowed; - public static String _UI_WIZARD_NEW_TITLE; - public static String _UI_WIZARD_NEW_HEADING; - public static String _UI_WIZARD_NEW_DESCRIPTION; - public static String _ERROR_FILENAME_MUST_END_JSP; - public static String _WARNING_FILE_MUST_BE_INSIDE_JAVA_PROJECT; - public static String _WARNING_FOLDER_MUST_BE_INSIDE_WEB_CONTENT; - public static String ResourceGroup_nameExists; - public static String NewJSPTemplatesWizardPage_0; - public static String NewJSPTemplatesWizardPage_1; - public static String NewJSPTemplatesWizardPage_2; - public static String NewJSPTemplatesWizardPage_3; - public static String NewJSPTemplatesWizardPage_4; - public static String NewJSPTemplatesWizardPage_5; - public static String NewJSPTemplatesWizardPage_6; - public static String ToggleComment_label; // resource bundle - public static String ToggleComment_tooltip; // resource bundle - public static String ToggleComment_description; // resource bundle - public static String AddBlockComment_label; // resource bundle - public static String AddBlockComment_tooltip; // resource bundle - public static String AddBlockComment_description; // resource bundle - public static String RemoveBlockComment_label; // resource bundle - public static String RemoveBlockComment_tooltip; // resource bundle - public static String RemoveBlockComment_description; // resource bundle - public static String CleanupDocument_label; // resource bundle - public static String CleanupDocument_tooltip; // resource bundle - public static String CleanupDocument_description; // resource bundle - public static String FindOccurrences_label; // resource bundle - public static String OccurrencesSearchQuery_0; - public static String OccurrencesSearchQuery_2; - public static String Override_method_in; - public static String Creating_files_encoding; - public static String Content_Assist_not_availab_UI_; - public static String Java_Content_Assist_is_not_UI_; - public static String JSPSourcePreferencePage_0; - public static String JSPSourcePreferencePage_1; - public static String JSPSourcePreferencePage_2; - public static String JSPColorPage_jsp_content; - public static String JSPFilesPreferencePage_0; - public static String JSPFilesPreferencePage_1; - public static String JSPFContentSettingsPropertyPage_0; - public static String JSPFContentSettingsPropertyPage_1; - public static String JSPFContentSettingsPropertyPage_2; - public static String JSPFContentSettingsPropertyPage_3; - public static String JSPFContentSettingsPropertyPage_4; - public static String ProjectJSPFContentSettingsPropertyPage_0; - public static String Title_InvalidValue; - public static String Message_InvalidValue; - public static String SyntaxColoringPage_0; - public static String SyntaxColoringPage_2; - public static String SyntaxColoringPage_3; - public static String SyntaxColoringPage_4; - public static String SyntaxColoringPage_5; - public static String SyntaxColoringPage_6; -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPlugin.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPlugin.java deleted file mode 100644 index f1b8e637e5..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPlugin.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal; - -import java.io.IOException; - -import org.eclipse.jface.text.templates.ContextTypeRegistry; -import org.eclipse.jface.text.templates.persistence.TemplateStore; -import org.eclipse.jst.jsp.ui.internal.preferences.JSPUIPreferenceNames; -import org.eclipse.jst.jsp.ui.internal.templates.TemplateContextTypeIdsJSP; -import org.eclipse.ui.editors.text.templates.ContributionContextTypeRegistry; -import org.eclipse.ui.editors.text.templates.ContributionTemplateStore; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.eclipse.wst.sse.ui.internal.provisional.registry.AdapterFactoryRegistry; -import org.eclipse.wst.sse.ui.internal.provisional.registry.AdapterFactoryRegistryImpl; - -/** - * The main plugin class to be used in the desktop. - */ -public class JSPUIPlugin extends AbstractUIPlugin { - public final static String ID = "org.eclipse.jst.jsp.ui"; //$NON-NLS-1$ - - protected static JSPUIPlugin instance = null; - - /** - * The template store for the jsp editor. - */ - private TemplateStore fTemplateStore; - - /** - * The template context type registry for the jsp editor. - */ - private ContextTypeRegistry fContextTypeRegistry; - - public JSPUIPlugin() { - super(); - instance = this; - } - - public static JSPUIPlugin getDefault() { - return instance; - } - - public synchronized static JSPUIPlugin getInstance() { - return instance; - } - - public AdapterFactoryRegistry getAdapterFactoryRegistry() { - return AdapterFactoryRegistryImpl.getInstance(); - - } - - /** - * Returns the template store for the jsp editor templates. - * - * @return the template store for the jsp editor templates - */ - public TemplateStore getTemplateStore() { - if (fTemplateStore == null) { - fTemplateStore= new ContributionTemplateStore(getTemplateContextRegistry(), getPreferenceStore(), JSPUIPreferenceNames.TEMPLATES_KEY); - - try { - fTemplateStore.load(); - } catch (IOException e) { - Logger.logException(e); - } - } - return fTemplateStore; - } - - /** - * Returns the template context type registry for the jsp plugin. - * - * @return the template context type registry for the jsp plugin - */ - public ContextTypeRegistry getTemplateContextRegistry() { - if (fContextTypeRegistry == null) { - ContributionContextTypeRegistry registry = new ContributionContextTypeRegistry(); - registry.addContextType(TemplateContextTypeIdsJSP.ALL); - registry.addContextType(TemplateContextTypeIdsJSP.NEW); - registry.addContextType(TemplateContextTypeIdsJSP.TAG); - registry.addContextType(TemplateContextTypeIdsJSP.ATTRIBUTE); - registry.addContextType(TemplateContextTypeIdsJSP.ATTRIBUTE_VALUE); - - fContextTypeRegistry= registry; - } - - return fContextTypeRegistry; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties deleted file mode 100644 index 5d6aab5da4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/JSPUIPluginResources.properties +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################### -# Copyright (c) 2004, 2007 IBM Corporation and others. -# All rights reserved. This program and the accompanying materials -# are made available under the terms of the Eclipse Public License v1.0 -# which accompanies this distribution, and is available at -# http://www.eclipse.org/legal/epl-v10.html -# -# Contributors: -# IBM Corporation - initial API and implementation -############################################################################### -## The following line is a sample JSP document. Please translate only the following parts: -## Use below tags ONLY for JSP 1.1 -## Welcome! -## Use below tags ONLY for JSP 1.2 -## Welcome! -Sample_JSP_doc=<%@ page \n\tlanguage=\"java\" \n\tcontentType=\"text/html; charset=ISO-8859-1\"\n%>\n<jsp:include flush=\"true\" page=\"titleBar.jsp\"/>\n\n<%-- Use below tags ONLY for JSP 1.1 --%>\n<%\n\tSystem.out.println(\"Welcome!\");\n%>\n<%-- Use below tags ONLY for JSP 1.2 --%>\n<jsp:scriptlet>\n\tSystem.out.println(\"Welcome!\");\n</jsp:scriptlet> -JSP_Delimiters_UI_=Scripting Element Delimiters -Refactor_label=Refactor -RenameElement_label=Rename -MoveElement_label=Move -MoveElementWizard=Move the selected elements -# -OK=OK -BreakpointNotAllowed=A breakpoint is not allowed on this line -JSP_changes=JSP changes -ActionContributorJSP_0=Refa&ctor -JSPRenameElementAction_0=Editor selection does not resolve to a renamable Java element -JSPMoveElementAction_0=Editor selection does not resolve to movable Java elements -BasicRefactorSearchRequestor_0=JSP Rename -BasicRefactorSearchRequestor_1=in file: {0} line: {1} -BasicRefactorSearchRequestor_2=Move Type ''{0}'' to package ''{1}'' -BasicRefactorSearchRequestor_3=Rename Method ''{0}'' to ''{1}'' -BasicRefactorSearchRequestor_4=Rename Type ''{0}'' to ''{1}'' -BasicRefactorSearchRequestor_5=Rename Package ''{0}'' to ''{1}'' -BasicRefactorSearchRequestor_6=JSP Rename Change -# -_UI_WIZARD_NEW_TITLE = New JavaServer Page -_UI_WIZARD_NEW_HEADING = JavaServer Page -_UI_WIZARD_NEW_DESCRIPTION = Create a new JavaServer Page. -_ERROR_FILENAME_MUST_END_JSP = The file name must end in one of the following extensions {0}. -_WARNING_FILE_MUST_BE_INSIDE_JAVA_PROJECT = JavaServer Pages created in projects that do not support Java might not work as expected. -_WARNING_FOLDER_MUST_BE_INSIDE_WEB_CONTENT = Files created outside of the Web Content folder will not be included in your deployed Web application. -ResourceGroup_nameExists = The same name already exists. -NewJSPTemplatesWizardPage_0=Select JSP Template -NewJSPTemplatesWizardPage_1=Select a template as initial content in the JSP page. -NewJSPTemplatesWizardPage_2=Name -NewJSPTemplatesWizardPage_3=Description -NewJSPTemplatesWizardPage_4=Use JSP Template -NewJSPTemplatesWizardPage_5=Preview -NewJSPTemplatesWizardPage_6=Templates are 'New JSP' templates found in the <a>JSP Templates</a> preference page. -# Copied from sse.ui -CleanupDocument_label=Cleanup Document... -CleanupDocument_tooltip=Cleanup Document -CleanupDocument_description=Cleanup Document -ToggleComment_label=Toggle Comment -ToggleComment_tooltip=Toggle Comment -ToggleComment_description=Toggle Comment -AddBlockComment_label=Add Block Comment -AddBlockComment_tooltip=Add Block Comment -AddBlockComment_description=Add Block Comment -RemoveBlockComment_label=Remove Block Comment -RemoveBlockComment_tooltip=Remove Block Comment -RemoveBlockComment_description=Remove Block Comment -FindOccurrences_label=Occurrences in File -OccurrencesSearchQuery_0={0} - {1} Occurrences in {2} -OccurrencesSearchQuery_2=file -Content_Assist_not_availab_UI_=Content Assist not available at the current location -Java_Content_Assist_is_not_UI_=Java Content Assist is not available for the current cursor location -# -Override_method_in=Override method in ' -Creating_files_encoding=Creating files encoding preference -# -JSPSourcePreferencePage_0=JSP Source preferences are based on the content within the JSP. -JSPSourcePreferencePage_1=See <a>''{0}''</a> for JSP with HTML content. -JSPSourcePreferencePage_2=See <a>''{0}''</a> for JSP with XML content. -JSPColorPage_jsp_content=Scripting Elements -JSPFilesPreferencePage_0=Validating files -JSPFilesPreferencePage_1=Validate JSP fragments -# JSP Fragments -JSPFContentSettingsPropertyPage_0=none -JSPFContentSettingsPropertyPage_1=The properties used instead of the page directive that cannot be specified in JSP fragment files. The project setting is used if you specify "none." -JSPFContentSettingsPropertyPage_2=Language: -JSPFContentSettingsPropertyPage_3=Content Type: -JSPFContentSettingsPropertyPage_4=Enable specific setting: -ProjectJSPFContentSettingsPropertyPage_0=The properties for J2EE Web projects act as "project" default to be looked up when no properties are specified for a particular JSP fragment file. -# CSS JSP -Title_InvalidValue=Invalid Value -Message_InvalidValue=Invalid property value. - -SyntaxColoringPage_0=Syntax Element: -SyntaxColoringPage_2=Enable -SyntaxColoringPage_3=&Bold -SyntaxColoringPage_4=&Italic -SyntaxColoringPage_5=&Strikethrough -SyntaxColoringPage_6=&Underline diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/Logger.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/Logger.java deleted file mode 100644 index 5df00f69d3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/Logger.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal; - -import com.ibm.icu.util.StringTokenizer; - -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.osgi.framework.Bundle; - -/** - * Small convenience class to log messages to plugin's log file and also, if desired, - * the console. This class should only be used by classes in this plugin. Other - * plugins should make their own copy, with appropriate ID. - */ -public class Logger { - private static final String PLUGIN_ID = "org.eclipse.jst.jsp.ui"; //$NON-NLS-1$ - - private static final String TRACEFILTER_LOCATION = "/debug/tracefilter"; //$NON-NLS-1$ - - public static final int OK = IStatus.OK; // 0 - public static final int INFO = IStatus.INFO; // 1 - public static final int WARNING = IStatus.WARNING; // 2 - public static final int ERROR = IStatus.ERROR; // 4 - - public static final int OK_DEBUG = 200 + OK; - public static final int INFO_DEBUG = 200 + INFO; - public static final int WARNING_DEBUG = 200 + WARNING; - public static final int ERROR_DEBUG = 200 + ERROR; - - /** - * Adds message to log. - * @param level severity level of the message (OK, INFO, WARNING, ERROR, OK_DEBUG, INFO_DEBUG, WARNING_DEBUG, ERROR_DEBUG) - * @param message text to add to the log - * @param exception exception thrown - */ - protected static void _log(int level, String message, Throwable exception) { - if (level == OK_DEBUG || level == INFO_DEBUG || level == WARNING_DEBUG || level == ERROR_DEBUG) { - if (!isDebugging()) - return; - } - - int severity = IStatus.OK; - switch (level) { - case INFO_DEBUG : - case INFO : - severity = IStatus.INFO; - break; - case WARNING_DEBUG : - case WARNING : - severity = IStatus.WARNING; - break; - case ERROR_DEBUG : - case ERROR : - severity = IStatus.ERROR; - } - message = (message != null) ? message : "null"; //$NON-NLS-1$ - Status statusObj = new Status(severity, PLUGIN_ID, severity, message, exception); - Bundle bundle = Platform.getBundle(PLUGIN_ID); - if (bundle != null) - Platform.getLog(bundle).log(statusObj); - } - - /** - * Prints message to log if category matches /debug/tracefilter option. - * @param message text to print - * @param category category of the message, to be compared with /debug/tracefilter - */ - protected static void _trace(String category, String message, Throwable exception) { - if (isTracing(category)) { - message = (message != null) ? message : "null"; //$NON-NLS-1$ - Status statusObj = new Status(IStatus.OK, PLUGIN_ID, IStatus.OK, message, exception); - Bundle bundle = Platform.getBundle(PLUGIN_ID); - if (bundle != null) - Platform.getLog(bundle).log(statusObj); - } - } - - /** - * @return true if the platform is debugging - */ - public static boolean isDebugging() { - return Platform.inDebugMode(); - } - - /** - * Determines if currently tracing a category - * @param category - * @return true if tracing category, false otherwise - */ - public static boolean isTracing(String category) { - if (!isDebugging()) - return false; - - String traceFilter = Platform.getDebugOption(PLUGIN_ID + TRACEFILTER_LOCATION); - if (traceFilter != null) { - StringTokenizer tokenizer = new StringTokenizer(traceFilter, ","); //$NON-NLS-1$ - while (tokenizer.hasMoreTokens()) { - String cat = tokenizer.nextToken().trim(); - if (category.equals(cat)) { - return true; - } - } - } - return false; - } - - public static void log(int level, String message) { - _log(level, message, null); - } - - public static void log(int level, String message, Throwable exception) { - _log(level, message, exception); - } - - public static void logException(String message, Throwable exception) { - _log(ERROR, message, exception); - } - - public static void logException(Throwable exception) { - _log(ERROR, exception.getMessage(), exception); - } - - public static void traceException(String category, String message, Throwable exception) { - _trace(category, message, exception); - } - - public static void traceException(String category, Throwable exception) { - _trace(category, exception.getMessage(), exception); - } - - public static void trace(String category, String message) { - _trace(category, message, null); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/AutoEditStrategyForTabs.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/AutoEditStrategyForTabs.java deleted file mode 100644 index 1ecbc02129..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/AutoEditStrategyForTabs.java +++ /dev/null @@ -1,187 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.autoedit; - -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.ConfigurableLineTracker; -import org.eclipse.jface.text.DocumentCommand; -import org.eclipse.jface.text.IAutoEditStrategy; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ILineTracker; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.ITextEditorExtension3; -import org.eclipse.wst.html.core.internal.HTMLCorePlugin; -import org.eclipse.wst.html.core.internal.preferences.HTMLCorePreferenceNames; - -/** - * AutoEditStrategy to handle characters inserted when Tab key is pressed - */ -public class AutoEditStrategyForTabs implements IAutoEditStrategy { - private final String TAB_CHARACTER = "\t"; //$NON-NLS-1$ - - public void customizeDocumentCommand(IDocument document, DocumentCommand command) { - // if not in smart insert mode just ignore - if (!isSmartInsertMode()) - return; - - // spaces for tab character - if (command.length == 0 && command.text != null && command.text.length() > 0 && command.text.indexOf(TAB_CHARACTER) != -1) - smartInsertForTab(command, document); - } - - /** - * Insert spaces for tabs - * - * @param command - */ - private void smartInsertForTab(DocumentCommand command, IDocument document) { - // tab key was pressed. now check preferences to see if need to insert - // spaces instead of tab - int indentationWidth = getIndentationWidth(); - if (indentationWidth > -1) { - String originalText = command.text; - StringBuffer newText = new StringBuffer(originalText); - - // determine where in line this command begins - int lineOffset = -1; - try { - IRegion lineInfo = document.getLineInformationOfOffset(command.offset); - lineOffset = command.offset - lineInfo.getOffset(); - } catch (BadLocationException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - - ILineTracker lineTracker = getLineTracker(document, originalText); - - int startIndex = 0; - int index = newText.indexOf(TAB_CHARACTER); - while (index != -1) { - String indent = getIndentString(indentationWidth, lineOffset, lineTracker, index); - - // replace \t character with spaces - newText.replace(index, index + 1, indent); - if (lineTracker != null) { - try { - lineTracker.replace(index, 1, indent); - } catch (BadLocationException e) { - // if something goes wrong with replacing text, just - // reset to current string - lineTracker.set(newText.toString()); - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - - startIndex = index + indent.length(); - index = newText.indexOf(TAB_CHARACTER, startIndex); - } - command.text = newText.toString(); - } - } - - /** - * Calculate number of spaces for next tab stop - */ - private String getIndentString(int indentationWidth, int lineOffset, ILineTracker lineTracker, int index) { - int indentSize = indentationWidth; - int offsetInLine = -1; - if (lineTracker != null) { - try { - IRegion lineInfo = lineTracker.getLineInformationOfOffset(index); - if (lineInfo.getOffset() == 0 && lineOffset > -1) - offsetInLine = lineOffset + index; - else - offsetInLine = index - lineInfo.getOffset(); - } catch (BadLocationException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } else { - if (lineOffset > -1) { - offsetInLine = lineOffset + index; - } - } - if (offsetInLine > -1 && indentationWidth > 0) { - int remainder = offsetInLine % indentationWidth; - indentSize = indentationWidth - remainder; - } - - StringBuffer indent = new StringBuffer(); - for (int i = 0; i < indentSize; i++) - indent.append(' '); - return indent.toString(); - } - - /** - * Set up a line tracker for text within command if text is multi-line - */ - private ILineTracker getLineTracker(IDocument document, String originalText) { - ConfigurableLineTracker lineTracker = null; - int[] delims = TextUtilities.indexOf(document.getLegalLineDelimiters(), originalText, 0); - if (delims[0] != -1 || delims[1] != -1) { - lineTracker = new ConfigurableLineTracker(document.getLegalLineDelimiters()); - lineTracker.set(originalText); - } - return lineTracker; - } - - /** - * Return true if active editor is in smart insert mode, false otherwise - * - * @return - */ - private boolean isSmartInsertMode() { - boolean isSmartInsertMode = false; - - ITextEditor textEditor = null; - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - IWorkbenchPage page = window.getActivePage(); - if (page != null) { - IEditorPart editor = page.getActiveEditor(); - if (editor != null) { - if (editor instanceof ITextEditor) - textEditor = (ITextEditor) editor; - else - textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class); - } - } - } - - // check if smart insert mode - if (textEditor instanceof ITextEditorExtension3 && ((ITextEditorExtension3) textEditor).getInsertMode() == ITextEditorExtension3.SMART_INSERT) - isSmartInsertMode = true; - return isSmartInsertMode; - } - - /** - * Returns indentation width if using spaces for indentation, -1 otherwise - * - * @return - */ - private int getIndentationWidth() { - int width = -1; - - Preferences preferences = HTMLCorePlugin.getDefault().getPluginPreferences(); - if (HTMLCorePreferenceNames.SPACE.equals(preferences.getString(HTMLCorePreferenceNames.INDENTATION_CHAR))) - width = preferences.getInt(HTMLCorePreferenceNames.INDENTATION_SIZE); - - return width; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/StructuredAutoEditStrategyJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/StructuredAutoEditStrategyJSP.java deleted file mode 100644 index 2445b71565..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/autoedit/StructuredAutoEditStrategyJSP.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.autoedit; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.DocumentCommand; -import org.eclipse.jface.text.IAutoEditStrategy; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.ui.texteditor.ITextEditorExtension3; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; - -public class StructuredAutoEditStrategyJSP implements IAutoEditStrategy { - public void customizeDocumentCommand(IDocument document, DocumentCommand command) { - Object textEditor = getActiveTextEditor(); - if (!(textEditor instanceof ITextEditorExtension3 && ((ITextEditorExtension3) textEditor).getInsertMode() == ITextEditorExtension3.SMART_INSERT)) - return; - - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - - if (model != null) { - if (command.text != null) { - if (command.text.equals("%")) { //$NON-NLS-1$ - // scriptlet - add end %> - IDOMNode node = (IDOMNode) model.getIndexedRegion(command.offset); - if (prefixedWith(document, command.offset, "<") && !node.getSource().endsWith("%>")) { //$NON-NLS-1$ //$NON-NLS-2$ - command.text += " %>"; //$NON-NLS-1$ - command.shiftsCaret = false; - command.caretOffset = command.offset + 1; - command.doit = false; - } - } - if (command.text.equals("{")) { //$NON-NLS-1$ - IDOMNode node = (IDOMNode) model.getIndexedRegion(command.offset); - if ((prefixedWith(document, command.offset, "$") || prefixedWith(document, command.offset, "#")) && //$NON-NLS-1$ //$NON-NLS-2$ - !node.getSource().endsWith("}")) { //$NON-NLS-1$ //$NON-NLS-2$ - command.text += " }"; //$NON-NLS-1$ - command.shiftsCaret = false; - command.caretOffset = command.offset + 1; - command.doit = false; - } - } - } - } - } - finally { - if (model != null) - model.releaseFromRead(); - } - } - - /** - * Return the active text editor if possible, otherwise the active editor - * part. - * - * @return - */ - private Object getActiveTextEditor() { - IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); - if (window != null) { - IWorkbenchPage page = window.getActivePage(); - if (page != null) { - IEditorPart editor = page.getActiveEditor(); - if (editor != null) { - if (editor instanceof ITextEditor) - return editor; - ITextEditor textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class); - if (textEditor != null) - return textEditor; - return editor; - } - } - } - return null; - } - - private boolean prefixedWith(IDocument document, int offset, String string) { - - try { - return document.getLength() >= string.length() && document.get(offset - string.length(), string.length()).equals(string); - } - catch (BadLocationException e) { - Logger.logException(e); - return false; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/AbstractBreakpointProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/AbstractBreakpointProvider.java deleted file mode 100644 index f7e3772430..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/AbstractBreakpointProvider.java +++ /dev/null @@ -1,268 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.breakpointproviders; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDElementDeclaration; -import org.eclipse.jst.jsp.core.internal.provisional.JSP12Namespace; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.ui.IEditorInput; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionCollection; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.ui.internal.provisional.extensions.ISourceEditingTextTools; -import org.eclipse.wst.sse.ui.internal.provisional.extensions.breakpoint.IBreakpointProvider; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; -import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMNodeWrapper; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.provisional.IDOMSourceEditingTextTools; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Abstract breakpoint provider class which implements breakpoint provider - * interface. - * - * This is a temporary class for JavaBreakpointProvider and - * JavaScriptBreakpointProvider, and should be refactored to separate Java and - * JavaScript parts. - */ -public abstract class AbstractBreakpointProvider implements IBreakpointProvider { - - protected static final int END_OF_LINE = -1; - protected static final int JAVA = 1; - protected static final int JAVASCRIPT = 2; - private static final String[] JAVASCRIPT_LANGUAGE_KEYS = new String[]{"javascript", "javascript1.0", "javascript1.1_3", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - "javascript1.2", "javascript1.3", "javascript1.4", "javascript1.5", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - "javascript1.6", "jscript", "sashscript"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - private static final String JSP_DIRECTIVE_PAGE = "jsp:directive.page"; //$NON-NLS-1$ - - protected static final int NO_VALID_CONTENT = -2; - protected static final int UNSUPPORTED = 0; - - protected static boolean contains(String[] haystack, String needle) { - for (int i = 0; i < haystack.length; i++) { - if (haystack[i].equals(needle)) { - return true; - } - } - return false; - } - - /* - * Return the page language - */ - protected static int getPageLanguage(Document doc) { - if (doc == null) - return UNSUPPORTED; - - NodeList pageDirectives = doc.getElementsByTagName(JSP_DIRECTIVE_PAGE); - // Search for first language directive - for (int i = 0; i < pageDirectives.getLength(); i++) { - Node child = pageDirectives.item(i); - Node languageAttr = child.getAttributes().getNamedItem("language"); //$NON-NLS-1$ - if (languageAttr != null) { - String pageLanguage = languageAttr.getNodeValue(); - if (pageLanguage == null || pageLanguage.length() == 0) - return UNSUPPORTED; - pageLanguage = pageLanguage.toLowerCase(); - if (contains(JAVASCRIPT_LANGUAGE_KEYS, pageLanguage)) - return JAVASCRIPT; - else if (pageLanguage.equals("java"))//$NON-NLS-1$ - return JAVA; - else - return UNSUPPORTED; - } - } - return JAVA; // Java is default if no language directive - } - - /* - * Search the RegionContainer's regions looking for JSP content. If valid - * content is found, return the position >= 0 If no valid content is - * found, return NO_VALID_CONTENT. If a region starts after the line's - * endOffset, return END_OF_LINE. - */ - private static int getValidRegionPosition(IStructuredModel model, ITextRegionCollection regionContainer, int startOffset, int endOffset) { - - ITextRegionList regions = regionContainer.getRegions(); - for (int i = 0; i < regions.size(); i++) { - ITextRegion region = regions.get(i); - if (region instanceof ITextRegionCollection) { - int validPosition = getValidRegionPosition(model, (ITextRegionCollection) region, startOffset, endOffset); - if (validPosition == END_OF_LINE || validPosition >= 0) - return validPosition; - } - else { - // region must be at least partially on selected line - if (regionContainer.getEndOffset(region) > startOffset) { - - int regionStartOffset = regionContainer.getStartOffset(region); - // if region starts after line's endOffset, we're done - // searching - if (regionStartOffset > endOffset) - return END_OF_LINE; - - // If region is JSP content, make sure the language is - // Java not Javascript by - // checking the content assist adapter's type. - if (region.getType().equals(DOMJSPRegionContexts.JSP_CONTENT)) { - // DWM: this logic is not incorrect ... given changes - // to adapters, etc. - // but probably don't need anything here, since both - // Java and JavaScript - // are supported in V5. - - // nsd_TODO: verify this!!! - - // INodeNotifier notifier = - // (INodeNotifier)model.getNode(region.getStartOffset()); - // IAdapterFactory factory = - // model.getFactoryRegistry().getFactoryFor(ContentAssistAdapter.class); - // if(factory instanceof - // HTMLContentAssistAdapterFactory) { - // INodeAdapter adapter = - // ((HTMLContentAssistAdapterFactory)factory).createAdapter(notifier, - // region); - // if(adapter != null && adapter instanceof - // JSPJavaContentAssistAdapter) - - if (regionStartOffset > startOffset) - return regionStartOffset; - else - return startOffset; - // } - } - // a custom tag, jsp:useBean, getproperty or setproperty - // statement is also a valid breakpoint location - else if (region.getType().equals(DOMRegionContext.XML_TAG_NAME) && (isCustomTagRegion(model.getIndexedRegion(regionStartOffset)) || regionContainer.getText(region).equals(JSP12Namespace.ElementName.USEBEAN) || regionContainer.getText(region).equals(JSP12Namespace.ElementName.GETPROPERTY) || regionContainer.getText(region).equals(JSP12Namespace.ElementName.SETPROPERTY))) { - - if (regionStartOffset > startOffset) - return regionStartOffset; - else - return startOffset; - } - else { - // Defect #241090, the Text Nodes inside of JSP - // scriptlets, expressions, and declarations are valid - // breakpoint-able locations - boolean isCodeNode = false; - IndexedRegion node = model.getIndexedRegion(regionStartOffset); - if (node != null && node instanceof Node) { - Node domNode = (Node) node; - Node root = domNode.getOwnerDocument().getDocumentElement(); - if (root != null && root.getNodeName().equals(JSP12Namespace.ElementName.ROOT) && domNode.getNodeType() == Node.TEXT_NODE && domNode.getParentNode() != null) { - String parentName = domNode.getParentNode().getNodeName(); - isCodeNode = parentName.equals(JSP12Namespace.ElementName.SCRIPTLET) || parentName.equals(JSP12Namespace.ElementName.EXPRESSION) || parentName.equals(JSP12Namespace.ElementName.DECLARATION); - } - } - if (isCodeNode) { - if (regionStartOffset > startOffset) - return regionStartOffset; - else - return startOffset; - } - } - } - } - } - return NO_VALID_CONTENT; - } - - private static boolean isCustomTagRegion(IndexedRegion node) { - - if (node instanceof Element) { - Element xmlElement = (Element) node; - ModelQuery mq = ModelQueryUtil.getModelQuery(xmlElement.getOwnerDocument()); - CMElementDeclaration decl = mq.getCMElementDeclaration(xmlElement); - if (decl instanceof CMNodeWrapper) { - CMNode cmNode = ((CMNodeWrapper) decl).getOriginNode(); - return cmNode instanceof TLDElementDeclaration; - } - } - return false; - } - - private ISourceEditingTextTools fSourceEditingTextTools; - - - protected IResource getEditorInputResource(IEditorInput input) { - IResource resource = (IResource) input.getAdapter(IFile.class); - if (resource == null) { - resource = (IResource) input.getAdapter(IResource.class); - } - return resource; - } - - public ISourceEditingTextTools getSourceEditingTextTools() { - return fSourceEditingTextTools; - } - - protected int getValidPosition(IDocument idoc, int lineNumber) { - if (!(getSourceEditingTextTools() instanceof IDOMSourceEditingTextTools)) { - return NO_VALID_CONTENT; - } - if (idoc == null) - return NO_VALID_CONTENT; - - int startOffset, endOffset; - try { - startOffset = idoc.getLineOffset(lineNumber - 1); - endOffset = idoc.getLineOffset(lineNumber) - 1; - - if (idoc == null) - return NO_VALID_CONTENT; - String lineText = idoc.get(startOffset, endOffset - startOffset).trim(); - - // blank lines or lines with only an open or close brace or - // scriptlet tag cannot have a breakpoint - if (lineText.equals("") || lineText.equals("{") || //$NON-NLS-2$//$NON-NLS-1$ - lineText.equals("}") || lineText.equals("<%"))//$NON-NLS-2$//$NON-NLS-1$ - return NO_VALID_CONTENT; - } - catch (BadLocationException e) { - return NO_VALID_CONTENT; - } - - IStructuredDocumentRegion flatNode = ((IStructuredDocument) idoc).getRegionAtCharacterOffset(startOffset); - // go through the node's regions looking for JSP content - // until reaching the end of the line - while (flatNode != null) { - int validPosition = getValidRegionPosition(((IDOMDocument) ((IDOMSourceEditingTextTools) getSourceEditingTextTools()).getDOMDocument()).getModel(), flatNode, startOffset, endOffset); - - if (validPosition == END_OF_LINE) - return NO_VALID_CONTENT; - - if (validPosition >= 0) - return validPosition; - - flatNode = flatNode.getNext(); - } - return NO_VALID_CONTENT; - } - - public void setSourceEditingTextTools(ISourceEditingTextTools sourceEditingTextTools) { - fSourceEditingTextTools = sourceEditingTextTools; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaBreakpointProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaBreakpointProvider.java deleted file mode 100644 index bc0725b262..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaBreakpointProvider.java +++ /dev/null @@ -1,105 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.breakpointproviders; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.debug.core.JDIDebugModel; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.wst.xml.ui.internal.provisional.IDOMSourceEditingTextTools; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * A BreakpointProvider supporting server-side Java as a JSP language - * - * @deprecated - */ -public class JavaBreakpointProvider extends AbstractBreakpointProvider { - - /* - * @param res @return String - */ - private static final String getTypeName(IResource res) { - IPath path = res.getFullPath(); - // Assume under Web Content folder if more than 2 segments - if (path.segmentCount() > 2) { - path = path.removeFirstSegments(2); - } - else { - path = path.removeFirstSegments(1); - } - String typeName = path.toString().replace(IPath.SEPARATOR, '.'); - if (res.getFileExtension() != null) { - typeName = typeName.substring(0, typeName.lastIndexOf('.')); - } - return typeName; - } - - - - public IStatus addBreakpoint(IDocument document, IEditorInput input, int lineNumber, int offset) throws CoreException { - int pos = getValidPosition(document, lineNumber); - if (pos != NO_VALID_CONTENT) { - IResource res = getEditorInputResource(input); - if (res != null) { - String typeName = getTypeName(res); - try { - JDIDebugModel.createLineBreakpoint(res, typeName, lineNumber, pos, pos, 0, true, null); - } - catch (CoreException e) { - return e.getStatus(); - } - } - } - return new Status(IStatus.OK, JSPUIPlugin.ID, IStatus.OK, JSPUIMessages.OK, null); //$NON-NLS-1$ - } - - public boolean canAddBreakpoint(IDocument document, IEditorInput input, Node node, int lineNumber, int offset) { - IResource res = input instanceof IFileEditorInput ? ((IFileEditorInput) input).getFile() : null; - Document doc = null; - if (getSourceEditingTextTools() instanceof IDOMSourceEditingTextTools) { - doc = ((IDOMSourceEditingTextTools) getSourceEditingTextTools()).getDOMDocument(); - } - - return res != null && !isBreakpointExist(res, lineNumber) && isValidPosition(document, lineNumber) && (getPageLanguage(doc) == JAVA); - } - - public IResource getResource(IEditorInput input) { - return getEditorInputResource(input); - } - - /* - * @param res @param lineNumber @return boolean - */ - private boolean isBreakpointExist(IResource res, int lineNumber) { - try { - return JDIDebugModel.lineBreakpointExists(getTypeName(res), lineNumber) != null; - } - catch (CoreException e) { - return false; - } - } - - /* - * @param doc @param idoc @param lineNumber @return boolean - */ - private boolean isValidPosition(IDocument idoc, int lineNumber) { - return getValidPosition(idoc, lineNumber) != NO_VALID_CONTENT; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaScriptBreakpointProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaScriptBreakpointProvider.java deleted file mode 100644 index 2c7c51d2c0..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaScriptBreakpointProvider.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.breakpointproviders; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IBreakpointManager; -import org.eclipse.debug.core.model.IBreakpoint; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.ui.IEditorInput; -import org.w3c.dom.Document; - -/** - * A IBreakpointProvider supporting server-side JavaScript as a JSP language - * - */ -public class JavaScriptBreakpointProvider extends AbstractBreakpointProvider { - public boolean canAddBreakpoint(IDocument document, IEditorInput input, int lineNumber, int offset) { - IResource res = getEditorInputResource(input); - Document doc = null; - return res != null && !isBreakpointExist(res, lineNumber) && isValidPosition(document, lineNumber) && (getPageLanguage(doc) != JAVA); - } - - - public IStatus addBreakpoint(IDocument document, IEditorInput input, int lineNumber, int offset) { - int pos = getValidPosition(document, lineNumber); - if (pos != NO_VALID_CONTENT && canAddBreakpoint(document, input, lineNumber, offset)) { - IResource res = getEditorInputResource(input); - if (res != null) { - new JavascriptLineBreakpoint(res, lineNumber, pos, pos); - } - } - return new Status(IStatus.OK, JSPUIPlugin.ID, IStatus.OK, JSPUIMessages.OK, null); //$NON-NLS-1$ - } - - /* - * @param res @param lineNumber @return boolean - */ - private boolean isBreakpointExist(IResource res, int lineNumber) { - IBreakpointManager manager = DebugPlugin.getDefault().getBreakpointManager(); - IBreakpoint[] breakpoints = manager.getBreakpoints(); - for (int i = 0; i < breakpoints.length; i++) { - if (!(breakpoints[i] instanceof JavascriptLineBreakpoint)) - continue; - JavascriptLineBreakpoint breakpoint = (JavascriptLineBreakpoint) breakpoints[i]; - try { - if (breakpoint.getResource().equals(res) && breakpoint.getLineNumber() == lineNumber) { - return true; - } - } - catch (CoreException e) { - return true; - } - } - return false; - } - - /* - * @param doc @param idoc @param lineNumber @return boolean - */ - private boolean isValidPosition(IDocument idoc, int lineNumber) { - return getValidPosition(idoc, lineNumber) != NO_VALID_CONTENT; - } - - public IResource getResource(IEditorInput input) { - return getEditorInputResource(input); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaStratumBreakpointProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaStratumBreakpointProvider.java deleted file mode 100644 index f897fe2603..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavaStratumBreakpointProvider.java +++ /dev/null @@ -1,220 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.breakpointproviders; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExecutableExtension; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.content.IContentDescription; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.debug.core.model.IBreakpoint; -import org.eclipse.jdt.debug.core.JDIDebugModel; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IStorageEditorInput; -import org.eclipse.wst.sse.ui.internal.StructuredResourceMarkerAnnotationModel; -import org.eclipse.wst.sse.ui.internal.provisional.extensions.ISourceEditingTextTools; -import org.eclipse.wst.sse.ui.internal.provisional.extensions.breakpoint.IBreakpointProvider; - -/** - * A IBreakpointProvider supporting JSP breakpoints for a Non-Java Language - * Source JSP page - */ -public class JavaStratumBreakpointProvider implements IBreakpointProvider, IExecutableExtension { - private static final String DEFAULT_CLASS_PATTERN = "*jsp,jsp_servlet._*"; - private Object fData = null; - - public IStatus addBreakpoint(IDocument document, IEditorInput input, int editorLineNumber, int offset) throws CoreException { - // check if there is a valid position to set breakpoint - int pos = getValidPosition(document, editorLineNumber); - IStatus status = null; - if (pos >= 0) { - IResource res = getResourceFromInput(input); - if (res != null) { - String path = null; - IBreakpoint point = JDIDebugModel.createStratumBreakpoint(res, "JSP", res.getName(), path, getClassPattern(res), editorLineNumber, pos, pos, 0, true, null); //$NON-NLS-1$ - if (point == null) { - status = new Status(IStatus.ERROR, JSPUIPlugin.ID, IStatus.ERROR, "unsupported input type", null); //$NON-NLS-1$ - } - } - else if (input instanceof IStorageEditorInput) { - // For non-resources, use the workspace root and a coordinated - // attribute that is used to - // prevent unwanted (breakpoint) markers from being loaded - // into the editors. - res = ResourcesPlugin.getWorkspace().getRoot(); - String id = input.getName(); - if (input instanceof IStorageEditorInput && ((IStorageEditorInput) input).getStorage() != null && ((IStorageEditorInput) input).getStorage().getFullPath() != null) { - id = ((IStorageEditorInput) input).getStorage().getFullPath().toString(); - } - Map attributes = new HashMap(); - attributes.put(StructuredResourceMarkerAnnotationModel.SECONDARY_ID_KEY, id); - String path = null; - IBreakpoint point = JDIDebugModel.createStratumBreakpoint(res, "JSP", input.getName(), path, getClassPattern(res), editorLineNumber, pos, pos, 0, true, attributes); //$NON-NLS-1$ - if (point == null) { - status = new Status(IStatus.ERROR, JSPUIPlugin.ID, IStatus.ERROR, "unsupported input type", null); //$NON-NLS-1$ - } - } - } - else { - status = new Status(IStatus.INFO, JSPUIPlugin.ID, IStatus.INFO, JSPUIMessages.BreakpointNotAllowed, null); - } - if (status == null) { - status = new Status(IStatus.OK, JSPUIPlugin.ID, IStatus.OK, JSPUIMessages.OK, null); - } - return status; - } - - private String getClassPattern(IResource resource) { - if (resource != null) { - String shortName = resource.getName(); - String extension = resource.getFileExtension(); - if (extension != null && extension.length() < shortName.length()) { - shortName = shortName.substring(0, shortName.length() - extension.length() - 1); - } - if (fData instanceof String && fData.toString().length() > 0) { - /* - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=154475 - */ - return fData + ",_" + shortName; - } - else if (fData instanceof Map && resource.isAccessible() && resource.getType() == IResource.FILE) { - IContentType[] types = Platform.getContentTypeManager().findContentTypesFor(resource.getName()); - if (types.length == 0) { - // if failed to find quickly, be more aggressive - IContentDescription d = null; - try { - // optimized description lookup, might not succeed - d = ((IFile) resource).getContentDescription(); - if (d != null) { - types = new IContentType[]{d.getContentType()}; - } - } - catch (CoreException e) { - /* - * should not be possible given the accessible and - * file type check above - */ - } - } - // wasn't found earlier - if (types == null) { - types = Platform.getContentTypeManager().findContentTypesFor(resource.getName()); - } - StringBuffer patternBuffer = new StringBuffer("_" + shortName); - for (int i = 0; i < types.length; i++) { - Object pattern = ((Map) fData).get(types[i].getId()); - if (pattern != null) { - patternBuffer.append(","); //$NON-NLS-1$ - patternBuffer.append(pattern); - } - } - return patternBuffer.toString(); - } - } - return DEFAULT_CLASS_PATTERN; - } - - public IResource getResource(IEditorInput input) { - return getResourceFromInput(input); - } - - private IResource getResourceFromInput(IEditorInput input) { - IResource resource = (IResource) input.getAdapter(IFile.class); - if (resource == null) { - resource = (IResource) input.getAdapter(IResource.class); - } - return resource; - } - - /** - * Finds a valid position somewhere on lineNumber in document, idoc, where - * a breakpoint can be set and returns that position. -1 is returned if a - * position could not be found. - * - * @param idoc - * @param editorLineNumber - * @return position to set breakpoint or -1 if no position could be found - */ - private int getValidPosition(IDocument idoc, int editorLineNumber) { - int result = -1; - if (idoc != null) { - - int startOffset = 0; - int endOffset = 0; - try { - IRegion line = idoc.getLineInformation(editorLineNumber - 1); - startOffset = line.getOffset(); - endOffset = Math.max(line.getOffset(), line.getOffset() + line.getLength()); - - String lineText = idoc.get(startOffset, endOffset - startOffset).trim(); - - // blank lines or lines with only an open or close brace or - // scriptlet tag cannot have a breakpoint - if (lineText.equals("") || lineText.equals("{") || //$NON-NLS-1$ //$NON-NLS-2$ - lineText.equals("}") || lineText.equals("<%")) //$NON-NLS-1$ //$NON-NLS-2$ - { - result = -1; - } - else { - // get all partitions for current line - ITypedRegion[] partitions = null; - - partitions = idoc.computePartitioning(startOffset, endOffset - startOffset); - - - for (int i = 0; i < partitions.length; ++i) { - String type = partitions[i].getType(); - // if found jsp java content, jsp directive tags, - // custom - // tags, - // return that position - if (type == IJSPPartitions.JSP_CONTENT_JAVA || type == IJSPPartitions.JSP_DIRECTIVE) { - result = partitions[i].getOffset(); - } - } - } - } - catch (BadLocationException e) { - result = -1; - } - } - - return result; - } - - /** - * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, - * java.lang.String, java.lang.Object) - */ - public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { - fData = data; - } - - public void setSourceEditingTextTools(ISourceEditingTextTools tools) { - // not used - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavascriptLineBreakpoint.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavascriptLineBreakpoint.java deleted file mode 100644 index 1fad5968e6..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/breakpointproviders/JavascriptLineBreakpoint.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -/* - * Created on Jul 20, 2003 - * - * To change the template for this generated file go to - * Window>Preferences>Java>Code Generation>Code and Comments - */ -package org.eclipse.jst.jsp.ui.internal.breakpointproviders; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; - -/** - * @author davidw - * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments - */ -public class JavascriptLineBreakpoint { - - /** - * @param res - * @param lineNumber - * @param pos - * @param pos1 - */ - public JavascriptLineBreakpoint(IResource res, int lineNumber, int pos, int pos1) { - - // TODO Should be deleted? Along with calling class? - } - - /** - * - */ - public JavascriptLineBreakpoint() { - super(); - } - - /** - * - */ - public IResource getResource() throws CoreException { - // TODO Auto-generated method stub - return null; - } - - /** - * @return - */ - public int getLineNumber() { - // TODO Auto-generated method stub - return 0; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/AutoImportProposal.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/AutoImportProposal.java deleted file mode 100644 index a3e5a62b34..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/AutoImportProposal.java +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Genuitec, LLC - Fix for bug 203303 - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.swt.graphics.Image; -import org.eclipse.text.edits.InsertEdit; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -public class AutoImportProposal extends JSPCompletionProposal { - - // the import string, no quotes or colons - String fImportDeclaration; - - public AutoImportProposal(String importDeclaration, String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int relevance, boolean updateReplacementLengthOnValidate) { - super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, relevance, updateReplacementLengthOnValidate); - setImportDeclaration(importDeclaration); - } - - public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) { - super.apply(viewer, trigger, stateMask, offset); - addImportDeclaration(viewer); - } - /** - * adds the import declaration to the document in the viewer in the appropriate position - * @param viewer - */ - private void addImportDeclaration(ITextViewer viewer) { - - IDocument doc = viewer.getDocument(); - - // calculate once and pass along - boolean isXml = isXmlFormat(doc); - - int insertPosition = getInsertPosition(doc, isXml); - String insertText = createImportDeclaration(doc, isXml); - InsertEdit insert = new InsertEdit(insertPosition, insertText); - try { - insert.apply(doc); - } - catch (MalformedTreeException e) { - Logger.logException(e); - } - catch (BadLocationException e) { - Logger.logException(e); - } - - // make sure the cursor position after is correct - setCursorPosition(getCursorPosition() + insertText.length()); - } - /** - * - * @param doc - * @param isXml - * @return position after <jsp:root> if xml, otherwise right before the document element - */ - private int getInsertPosition(IDocument doc, boolean isXml) { - int pos = 0; - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(doc); - try { - if (sModel != null) { - if (sModel instanceof IDOMModel) { - IDOMDocument documentNode = ((IDOMModel) sModel).getDocument(); - Node docElement = documentNode.getDocumentElement(); - if (docElement != null && docElement instanceof IDOMElement) { - IStructuredDocumentRegion sdRegion = ((IDOMElement) docElement).getFirstStructuredDocumentRegion(); - if (isXml) { - // insert right after document element - pos = sdRegion.getEndOffset(); - } - else { - // insert before document element - pos = sdRegion.getStartOffset(); - } - } - } - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - return pos; - } - - // Genuitec bug #6227, - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=203303 - private boolean isCustomTagDocument(IDocument doc) { - boolean isTag = false; - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(doc); - try { - if (sModel instanceof IDOMModel) { - String contentType = ((IDOMModel) sModel).getContentTypeIdentifier(); - if (contentType != null) { - IContentType modelCT = Platform.getContentTypeManager().getContentType(contentType); - IContentType tagCT = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSPTAG); - if (modelCT != null && tagCT != null) { - isTag = modelCT.isKindOf(tagCT); - } - } - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - return isTag; - } - - /** - * - * @param doc - * @return true if this document is xml-jsp syntax, otherwise false - */ - private boolean isXmlFormat(IDocument doc) { - boolean isXml = false; - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(doc); - try { - if (sModel != null) { - if (!isXml) { - if (sModel instanceof IDOMModel) { - IDOMDocument documentNode = ((IDOMModel) sModel).getDocument(); - Element docElement = documentNode.getDocumentElement(); - isXml = docElement != null && ((docElement.getNodeName().equals("jsp:root")) || docElement.getAttributeNode("xmlns:jsp") != null || ((((IDOMNode) docElement).getStartStructuredDocumentRegion() == null && ((IDOMNode) docElement).getEndStructuredDocumentRegion() == null))); //$NON-NLS-1$ //$NON-NLS-2$ - } - } - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - return isXml; - } - /** - * - * @param doc - * @param isXml - * @return appropriate import declaration string depending if document is xml or not - */ - private String createImportDeclaration(IDocument doc, boolean isXml) { - String delim = (doc instanceof IStructuredDocument) ? ((IStructuredDocument) doc).getLineDelimiter() : TextUtilities.getDefaultLineDelimiter(doc); - boolean isCustomTag = isCustomTagDocument(doc); - final String opening; - final String closing; - if (isCustomTag) { - if (isXml) { - opening = "<jsp:directive.tag import=\""; //$NON-NLS-1$ - closing = "\"/>"; //$NON-NLS-1$ - } - else { - opening = "<%@tag import=\""; //$NON-NLS-1$ - closing = "\"%>"; //$NON-NLS-1$ - } - } - else { - if (isXml) { - opening = "<jsp:directive.page import=\""; //$NON-NLS-1$ - closing = "\"/>"; //$NON-NLS-1$ - } - else { - opening = "<%@page import=\""; //$NON-NLS-1$ - closing = "\"%>"; //$NON-NLS-1$ - } - } - return delim + opening + getImportDeclaration() + closing; - } - - public String getImportDeclaration() { - return fImportDeclaration; - } - public void setImportDeclaration(String importDeclaration) { - fImportDeclaration = importDeclaration; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/BeanInfoProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/BeanInfoProvider.java deleted file mode 100644 index 918bd2389d..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/BeanInfoProvider.java +++ /dev/null @@ -1,442 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.beans.Introspector; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import com.ibm.icu.util.StringTokenizer; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.jdt.core.Flags; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.ITypeHierarchy; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jst.jsp.ui.internal.Logger; - -/** - * Navigates the IJavaProject classpath (incl. source) on a given resource and infers bean properties - * given a fully qualified beanname. Bean properties can be retrieved using: - * <code>getRuntimeProperties(IResource baseResource, String typeName)</code> - * - * @plannedfor 1.0 - */ -public class BeanInfoProvider implements IBeanInfoProvider { - - public class JavaPropertyDescriptor implements IJavaPropertyDescriptor { - String fType = null; - String fName = null; - boolean fReadable = true; - boolean fWritable = true; - - public JavaPropertyDescriptor(String name, String type, boolean readable, boolean writable) { - fName = name; - fType = type; - fReadable = readable; - fWritable = writable; - } - - public String getDeclaredType() { - return fType; - } - - public String getDisplayName() { - return fName; - } - - public String getName() { - return fName; - } - - public boolean getReadable() { - return fReadable; - } - - public boolean getWriteable() { - return fWritable; - } - } - - // looks up encoded type (see Class.getName), and gives you a displayable string - private HashMap fEncodedTypeMap = null; - // to avoid repeat properties from showing up - private HashSet fRepeatMethods = null; - - public BeanInfoProvider() { - fRepeatMethods = new HashSet(); - } - - /** - * Returns the inferred properties of a bean based on the project from the baseResource, - * and the fully qualified name of the bean. - * - * @param baseResource the base resource where the bean is being used - * @param typeName the <i>fully qualified</i> type name (eg. javax.swing.JButton) of the bean - */ - public IJavaPropertyDescriptor[] getRuntimeProperties(IResource baseResource, String typeName) { - IJavaProject javaProject = JavaCore.create(baseResource.getProject()); - QualifiedName typeQualifiedName = getTypeQualifiedName(typeName); - List getMethodResults = new ArrayList(); - List isMethodResults = new ArrayList(); - List setMethodResults = new ArrayList(); - List descriptorResults = new ArrayList(); - try { - IType type = javaProject.findType(typeQualifiedName.getQualifier() + "." + typeQualifiedName.getLocalName()); //$NON-NLS-1$ - // type must exist - if(type != null) { - ITypeHierarchy hierarchy = type.newTypeHierarchy(null); - IType[] supers = hierarchy.getAllSuperclasses(type); - - IMethod[] methods = type.getMethods(); - // iterate the bean's methods - for (int i = 0; i < methods.length; i++) - acceptMethod(getMethodResults, isMethodResults, setMethodResults, methods[i]); - // the bean hierarchy's methods - for (int i = 0; i < supers.length; i++) { - methods = supers[i].getMethods(); - for (int j = 0; j < methods.length; j++) - acceptMethod(getMethodResults, isMethodResults, setMethodResults, methods[j]); - } - adaptMethodsToPropertyDescriptors(getMethodResults, isMethodResults, setMethodResults, descriptorResults); - } - } - catch (JavaModelException jmex) { - Logger.logException("Problem navigating JavaProject in BeanInfoProvider", jmex); //$NON-NLS-1$ - } - - IJavaPropertyDescriptor[] finalResults = new IJavaPropertyDescriptor[descriptorResults.size()]; - System.arraycopy(descriptorResults.toArray(), 0, finalResults, 0, descriptorResults.size()); - return finalResults; - } - - /** - * Retrieves the necessary information from method declaration lists, creates and fills a list of JavaPropertyDescriptors. - * @param getMethods - * @param isMethods - * @param setMethods - * @param descriptorResults - */ - private void adaptMethodsToPropertyDescriptors(List getMethods, List isMethods, List setMethods, List descriptors) throws JavaModelException { - List readable = new ArrayList(); - HashMap types = new HashMap(); - - // iterate through get* and is* methods, updating 'readable' list and 'types' map - filterGetMethods(getMethods, readable, types); - filterIsMethods(isMethods, readable, types); - - // iterate set* methods, checking overlap w/ readable - Iterator it = setMethods.iterator(); - IMethod temp = null; - String name = ""; //$NON-NLS-1$ - String type = ""; //$NON-NLS-1$ - String[] encodedParams = null; - String returnType = ""; //$NON-NLS-1$ - String param0 = ""; //$NON-NLS-1$ - - while (it.hasNext()) { - temp = (IMethod) it.next(); - name = createPropertyNameFromMethod(temp); - // invalid naming convention - if (name == null) - continue; - - returnType = getDecodedTypeName(temp.getReturnType()); - // setter should have no return type - if (!returnType.equals("void")) //$NON-NLS-1$ - continue; - - // need to get type from parameter - encodedParams = temp.getParameterTypes(); - if (encodedParams != null && encodedParams.length > 0) { - if (encodedParams.length > 1) { - // multiple params - param0 = getDecodedTypeName(encodedParams[0]); - if (!param0.equals("int")) //$NON-NLS-1$ - // not a valid indexed property - continue; - - type = getDecodedTypeName(encodedParams[1]); - } - else { - // one param, regular setter - if (isArray(encodedParams[0])) - type = getDecodedTypeName(encodedParams[0]); - } - } - - if (readable.contains(name)) { - // writable and readable - if (!fRepeatMethods.contains(name)) { - descriptors.add(new JavaPropertyDescriptor(name, (String) types.get(name), true, true)); - readable.remove(name); - fRepeatMethods.add(name); - } - } - else { - // wasn't readable, just writable - String[] params = temp.getParameterTypes(); - // can't be setProperty if no parameters - if (!(params.length > 0)) - continue; - if (!fRepeatMethods.contains(name)) { - type = getDecodedTypeName(params[0]); - descriptors.add(new JavaPropertyDescriptor(name, type, false, true)); - fRepeatMethods.add(name); - } - } - } - // add leftover from readable, get* and is* methods (readable = true, writable = false) - it = readable.iterator(); - while (it.hasNext()) { - name = (String) it.next(); - if (!fRepeatMethods.contains(name)) { - descriptors.add(new JavaPropertyDescriptor(name, (String) types.get(name), true, false)); - fRepeatMethods.add(name); - } - } - } - - private void filterGetMethods(List getMethods, List readable, HashMap types) throws JavaModelException { - IMethod temp; - String name; - String encodedReturnType; - String returnType; - Iterator it = getMethods.iterator(); - String[] encodedParams; - String paramType; - // iterate get* methods - while (it.hasNext()) { - temp = (IMethod) it.next(); - name = createPropertyNameFromMethod(temp); - // invalid bean naming convention - if (name == null) - continue; - - encodedReturnType = temp.getReturnType(); - returnType = getDecodedTypeName(encodedReturnType); - - // can't get be a getProperty if returns void - if (returnType.equals("void")) //$NON-NLS-1$ - continue; - - // check params in case it's indexed propety - encodedParams = temp.getParameterTypes(); - if (encodedParams != null && encodedParams.length == 1) { - paramType = getDecodedTypeName(encodedParams[0]); - // syntax is > Type getter(int); - if (!paramType.equals("int")) { //$NON-NLS-1$ - //it's not an indexed property - continue; - } - // it is indexed, prop type is an ARRAY - returnType += "[]"; //$NON-NLS-1$ - } - - readable.add(name); - types.put(name, returnType); - } - - } - - private void filterIsMethods(List isMethodResults, List readable, HashMap types) throws JavaModelException { - IMethod temp; - String name; - String encodedReturnType; - String returnType; - String[] encodedParams; - String paramType; - // iterate is* methods - Iterator it = isMethodResults.iterator(); - while (it.hasNext()) { - temp = (IMethod) it.next(); - name = createPropertyNameFromMethod(temp); - // invalid bean naming convention - if (name == null) - continue; - encodedReturnType = temp.getReturnType(); - returnType = getDecodedTypeName(encodedReturnType); - - // isProperty only valid for boolean - if (!returnType.equals("boolean")) //$NON-NLS-1$ - continue; - - // check params in case it's indexed propety - encodedParams = temp.getParameterTypes(); - if (encodedParams != null && encodedParams.length == 1) { - paramType = getDecodedTypeName(encodedParams[0]); - // syntax is > Type getter(int); - if (!paramType.equals("int")) { //$NON-NLS-1$ - //it's not a valid indexed property - continue; - } - } - - readable.add(name); - types.put(name, returnType); - } - } - - /** - * Pass in a get*|set*|is* method and it will return an inferred property name using <code>Introspector.decapitalize(String)</code> - * @param temp - * @return an inferred property name based on the IMethod name, null if the name is not valid according to bean spec - */ - private String createPropertyNameFromMethod(IMethod temp) { - String name = temp.getElementName(); - if (name.startsWith("is")) //$NON-NLS-1$ - name = Introspector.decapitalize(name.substring(2)); - else - // must be get or set - name = Introspector.decapitalize(name.substring(3)); - return name; - } - - /** - * Initial filtering of methods. Checks prefix if it's valid length. If the prefix is "get" the method name - * is placed in the getMethodResults List. If the prefix is "is", the name is added to the isMethodResults list. If the - * prefix is "set", it's added to the setMethodResultsList. - * - * @param getMethodResults - * @param isMethodResults - * @param setMethodResults - * @param method - */ - private void acceptMethod(List getMethodResults, List isMethodResults, List setMethodResults, IMethod method) throws JavaModelException { - if (!fRepeatMethods.contains(method.getElementName())) { - fRepeatMethods.add(method.getElementName()); - int flags = method.getFlags(); - String methodName = method.getElementName(); - if (Flags.isPublic(flags)) { - if (methodName.length() > 3 && methodName.startsWith("get")) //$NON-NLS-1$ - getMethodResults.add(method); - else if (methodName.length() > 2 && methodName.startsWith("is")) //$NON-NLS-1$ - isMethodResults.add(method); - else if (methodName.length() > 3 && methodName.startsWith("set")) //$NON-NLS-1$ - setMethodResults.add(method); - } - } - } - - /** - * @param typeName - * @return a Qualified name with the package as the qualifier, and class name as LocalName - */ - private QualifiedName getTypeQualifiedName(String typeName) { - StringTokenizer st = new StringTokenizer(typeName, ".", false); //$NON-NLS-1$ - int length = st.countTokens(); - int count = 0; - StringBuffer root = new StringBuffer(); - while (count++ < length - 1) { - root.append(st.nextToken()); - if (count < length - 1) - root.append('.'); - } - return new QualifiedName(root.toString(), st.nextToken()); - } - - /** - * Checks if encodedTypeName is an array - * @param encodedTypeName - * @return true if encodedTypeName is an array, false otherwise. - */ - private boolean isArray(String encodedTypeName) { - if (encodedTypeName != null && encodedTypeName.length() > 0) { - if (encodedTypeName.charAt(0) == '[') - return true; - } - return false; - } - - /** - * Returns the decoded (displayable) name fo the type. - * Either a primitive type (int, long, float...) Object (String) - * @param type - * @return decoded name for the encoded string - */ - private String getDecodedTypeName(String encoded) { - HashMap map = getEncodedTypeMap(); - - StringBuffer decoded = new StringBuffer(); - char BRACKET = '['; - String BRACKETS = "[]"; //$NON-NLS-1$ - char identifier = ' '; - int last = 0; - // count brackets - while (encoded.indexOf(BRACKET, last) != -1) { - last++; - } - identifier = encoded.charAt(last); - Object primitiveType = map.get(String.valueOf(identifier)); - // L > binary type name, Q > source type name - if (identifier == 'L' || identifier == 'Q') { - // handle object - String classname = encoded.substring(last + 1, encoded.length() - 1); - decoded.append(classname); - } - else if (primitiveType != null) { - // handle primitive type (from IField.getSignature()) - decoded.append((String) primitiveType); - } - else { - // handle primitive type (from Class.getName()) - decoded.append(encoded); - } - // handle arrays - if (last > 0) { - for (int i = 0; i < last; i++) { - decoded.append(BRACKETS); - } - } - return decoded.toString(); - } - - /** - * from Class.getName() javadoc - * also see Signature in jdt.core api - *<pre> - * B byte - * C char - * D double - * F float - * I int - * J long - * Lclassname; class or interface - * Qsourcename; source - * S short - * Z boolean - * V void - *</pre> - * - * @return the "encoding letter" to "type" map. - */ - private HashMap getEncodedTypeMap() { - if (fEncodedTypeMap == null) { - fEncodedTypeMap = new HashMap(); - fEncodedTypeMap.put("B", "byte"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("C", "char"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("D", "double"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("F", "float"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("I", "int"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("J", "long"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("S", "short"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("Z", "boolean"); //$NON-NLS-1$ //$NON-NLS-2$ - fEncodedTypeMap.put("V", "void"); //$NON-NLS-1$ //$NON-NLS-2$ - } - return fEncodedTypeMap; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/CustomTemplateProposal.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/CustomTemplateProposal.java deleted file mode 100644 index 912121ebf1..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/CustomTemplateProposal.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateContext; -import org.eclipse.jface.text.templates.TemplateProposal; -import org.eclipse.swt.graphics.Image; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceCompletionProposal; - -/** - * Purpose of this class is to make the additional proposal info into content - * fit for an HTML viewer (by escaping characters) - * - * @plannedfor 1.0 - */ -class CustomTemplateProposal extends TemplateProposal implements IRelevanceCompletionProposal { - // copies of this class exist in: - // org.eclipse.jst.jsp.ui.internal.contentassist - // org.eclipse.wst.html.ui.internal.contentassist - // org.eclipse.wst.xml.ui.internal.contentassist - - public CustomTemplateProposal(Template template, TemplateContext context, IRegion region, Image image, int relevance) { - super(template, context, region, image, relevance); - } - - public String getAdditionalProposalInfo() { - String additionalInfo = super.getAdditionalProposalInfo(); - return StringUtils.convertToHTMLContent(additionalInfo); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IBeanInfoProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IBeanInfoProvider.java deleted file mode 100644 index eed9ef7d95..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IBeanInfoProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.core.resources.IResource; - -/** - * @plannedfor 1.0 - */ -public interface IBeanInfoProvider { - IJavaPropertyDescriptor[] getRuntimeProperties(IResource baseResource, String typeName); -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IJavaPropertyDescriptor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IJavaPropertyDescriptor.java deleted file mode 100644 index 423e3f60c4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/IJavaPropertyDescriptor.java +++ /dev/null @@ -1,27 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -/** - * @plannedfor 1.0 - */ -public interface IJavaPropertyDescriptor { - - String getDeclaredType(); - - String getDisplayName(); - - String getName(); - - boolean getReadable(); - - boolean getWriteable(); -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProcessor.java deleted file mode 100644 index d23d28e620..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProcessor.java +++ /dev/null @@ -1,285 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.HashMap; -import java.util.Iterator; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.ui.internal.IReleasable; -import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.osgi.framework.Bundle; - - -/** - * @plannedfor 1.0 - */ -public class JSPCompletionProcessor implements IContentAssistProcessor, IReleasable { - // for debugging - private static final boolean DEBUG; - static { - String value = Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jsptranslation"); //$NON-NLS-1$ - DEBUG = value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - private static final String JDT_CORE_PLUGIN_ID = "org.eclipse.jdt.core"; //$NON-NLS-1$ - - protected int fJspSourcePosition, fJavaPosition; - protected String fErrorMessage = null; - protected StructuredTextViewer fViewer = null; - private JSPTranslationAdapter fTranslationAdapter = null; - - /** - * Returns a list of completion proposals based on the specified location - * within the document that corresponds to the current cursor position - * within the text viewer. - * - * @param viewer - * the viewer whose document is used to compute the proposals - * @param documentPosition - * an offset within the document for which completions should - * be computed - * @return an array of completion proposals or <code>null</code> if no - * proposals are possible - */ - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int pos) { - initialize(pos); - - JSPProposalCollector collector = null; - - IDOMModel xmlModel = null; - try { - if (viewer instanceof StructuredTextViewer) - fViewer = (StructuredTextViewer) viewer; - - xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(fViewer.getDocument()); - - IDOMDocument xmlDoc = xmlModel.getDocument(); - if (fTranslationAdapter == null) - fTranslationAdapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (fTranslationAdapter != null) { - - JSPTranslation translation = fTranslationAdapter.getJSPTranslation(); - fJavaPosition = translation.getJavaOffset(getDocumentPosition()); - - if (DEBUG) - System.out.println(debug(translation)); - - try { - - ICompilationUnit cu = translation.getCompilationUnit(); - - // can't get java proposals w/out a compilation unit - // or without a valid position - if (cu == null || -1 == fJavaPosition) - return new ICompletionProposal[0]; - - collector = getProposalCollector(cu, translation); - synchronized (cu) { - cu.codeComplete(fJavaPosition, collector, null); - } - } - catch (CoreException coreEx) { - // a possible Java Model Exception due to not being a Web - // (Java) Project - coreEx.printStackTrace(); - } - } - } - catch (Exception exc) { - exc.printStackTrace(); - // throw out exceptions on code assist. - } - finally { - if (xmlModel != null) { - xmlModel.releaseFromRead(); - } - } - ICompletionProposal[] results = new ICompletionProposal[0]; - if(collector != null) { - results = collector.getJSPCompletionProposals(); - if (results == null || results.length < 1) - fErrorMessage = JSPUIMessages.Java_Content_Assist_is_not_UI_; - } - return results; - } - - protected JSPProposalCollector getProposalCollector(ICompilationUnit cu, JSPTranslation translation) { - return new JSPProposalCollector(cu, translation); - } - - /** - * For debugging translation mapping only. - * - * @param translation - */ - private String debug(JSPTranslation translation) { - StringBuffer debugString = new StringBuffer(); - HashMap jsp2java = translation.getJsp2JavaMap(); - String javaText = translation.getJavaText(); - String jspText = fViewer.getDocument().get(); - debugString.append("[jsp2JavaMap in JSPCompletionProcessor]\r\n"); //$NON-NLS-1$ - debugString.append("jsp cursor position >> " + fViewer.getTextWidget().getCaretOffset() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ - Iterator it = jsp2java.keySet().iterator(); - while (it.hasNext()) { - try { - Position jspPos = (Position) it.next(); - Position javaPos = (Position) jsp2java.get(jspPos); - debugString.append("jsp > " + jspPos.offset + ":" + jspPos.length + ":" + jspText.substring(jspPos.offset, jspPos.offset + jspPos.length) + ":\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - debugString.append("java > " + javaPos.offset + ":" + javaPos.length + ":" + javaText.substring(javaPos.offset, javaPos.offset + javaPos.length) + ":\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - debugString.append("-------------------------------------------------\n"); //$NON-NLS-1$ - } - catch (Exception e) { - // eat exceptions, it's only for debug - } - } - return debugString.toString(); - } - - /** - * Returns information about possible contexts based on the specified - * location within the document that corresponds to the current cursor - * position within the text viewer. - * - * @param viewer - * the viewer whose document is used to compute the possible - * contexts - * @param documentPosition - * an offset within the document for which context information - * should be computed - * @return an array of context information objects or <code>null</code> - * if no context could be found - */ - public org.eclipse.jface.text.contentassist.IContextInformation[] computeContextInformation(org.eclipse.jface.text.ITextViewer viewer, int documentOffset) { - return null; - } - - /** - * Returns a string of characters which when pressed should automatically - * display content-assist proposals. - * - * @return string of characters - */ - public java.lang.String getAutoProposalInvocationCharacters() { - return null; - } - - /** - * Returns a string of characters which when pressed should automatically - * display a content-assist tip. - * - * @return string of characters - */ - public java.lang.String getAutoTipInvocationCharacters() { - return null; - } - - /** - * Returns the characters which when entered by the user should - * automatically trigger the presentation of possible completions. - * - * @return the auto activation characters for completion proposal or - * <code>null</code> if no auto activation is desired - */ - public char[] getCompletionProposalAutoActivationCharacters() { - return null; - } - - /** - * Returns the characters which when entered by the user should - * automatically trigger the presentation of context information. - * - * @return the auto activation characters for presenting context - * information or <code>null</code> if no auto activation is - * desired - */ - public char[] getContextInformationAutoActivationCharacters() { - return null; - } - - /** - * Returns a validator used to determine when displayed context - * information should be dismissed. May only return <code>null</code> if - * the processor is incapable of computing context information. - * - * @return a context information validator, or <code>null</code> if the - * processor is incapable of computing context information - */ - public org.eclipse.jface.text.contentassist.IContextInformationValidator getContextInformationValidator() { - return null; - } - - protected int getDocumentPosition() { - return fJspSourcePosition; - } - - public String getErrorMessage() { - // TODO: get appropriate error message - // if (fCollector.getErrorMessage() != null && - // fCollector.getErrorMessage().length() > 0) - // return fCollector.getErrorMessage(); - return fErrorMessage; - } - - /** - * Initialize the code assist processor. - */ - protected void initialize(int pos) { - initializeJavaPlugins(); - - fJspSourcePosition = pos; - fErrorMessage = null; - } - - /** - * Initialize the Java Plugins that the JSP processor requires. - * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=143765 - * We should not call "start", because that will cause that - * state to be remembered, and re-started automatically during - * the next boot up sequence. - * - * ISSUE: we may be able to get rid of this all together, in future, - * since 99% we probably have already used some JDT class by the time - * we need JDT to be active ... but ... this is the safest fix for - * this point in 1.5 stream. Next release, let's just remove this, - * re-discover what ever bug this was fixing (if any) and if there is - * one, then we'll either put back in, as is, or come up with a - * more appropriate fix. - * - */ - protected void initializeJavaPlugins() { - try { - Bundle bundle = Platform.getBundle(JDT_CORE_PLUGIN_ID); - bundle.loadClass("dummyClassNameThatShouldNeverExist"); - } - catch (ClassNotFoundException e) { - // this is the expected result, we just want to - // nudge the bundle to be sure its activated. - } - } - - public void release() { - fTranslationAdapter = null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProposal.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProposal.java deleted file mode 100644 index 075eadc8d0..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPCompletionProposal.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.swt.graphics.Image; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; - -/** - * Implements IJavaCompletionProposal for use with JSPProposalCollector. - * - * @plannedfor 1.0 - */ -public class JSPCompletionProposal extends CustomCompletionProposal implements IJavaCompletionProposal { - - /* - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=124483 - * - * This is a wrapped proposal so we don't need to - * make "slow" calls to the java proposal up front, only when needed - * for example, getAdditionalInfo() reads external javadoc, and it makes - * no sense - */ - ICompletionProposal fJavaCompletionProposal = null; - - public JSPCompletionProposal(String replacementString, int replacementOffset, int replacementLength, int cursorPosition, Image image, String displayString, IContextInformation contextInformation, String additionalProposalInfo, int relevance, boolean updateReplacementLengthOnValidate) { - super(replacementString, replacementOffset, replacementLength, cursorPosition, image, displayString, contextInformation, additionalProposalInfo, relevance, updateReplacementLengthOnValidate); - } - - /** - * Sets cursor position after applying. - */ - public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) { - super.apply(viewer, trigger, stateMask, offset); - } - - final public ICompletionProposal getJavaCompletionProposal() { - return fJavaCompletionProposal; - } - - final public void setJavaCompletionProposal(ICompletionProposal javaCompletionProposal) { - fJavaCompletionProposal = javaCompletionProposal; - } - - public String getAdditionalProposalInfo() { - - String additionalInfo = super.getAdditionalProposalInfo(); - ICompletionProposal javaProposal = getJavaCompletionProposal(); - if(javaProposal != null) - additionalInfo = javaProposal.getAdditionalProposalInfo(); - - return additionalInfo; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java deleted file mode 100644 index 7fa507e263..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPContentAssistProcessor.java +++ /dev/null @@ -1,1315 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Vector; - -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -import org.eclipse.jst.jsp.core.internal.contentmodel.JSPCMDocumentFactory; -import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; -import org.eclipse.jst.jsp.core.internal.contenttype.DeploymentDescriptorPropertyCache; -import org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapter; -import org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapterFactory; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.JSP12Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.JSP20Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImageHelper; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImages; -import org.eclipse.jst.jsp.ui.internal.templates.TemplateContextTypeIdsJSP; -import org.eclipse.wst.css.ui.internal.contentassist.CSSContentAssistProcessor; -import org.eclipse.wst.html.core.internal.contentmodel.HTMLElementDeclaration; -import org.eclipse.wst.html.core.internal.contentmodel.JSPCMDocument; -import org.eclipse.wst.html.core.internal.provisional.HTMLCMProperties; -import org.eclipse.wst.html.core.text.IHTMLPartitions; -import org.eclipse.wst.html.ui.internal.contentassist.HTMLContentAssistProcessor; -import org.eclipse.wst.javascript.ui.internal.common.contentassist.JavaScriptContentAssistProcessor; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker; -import org.eclipse.wst.sse.core.internal.provisional.IModelManager; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredPartitioning; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.text.IStructuredPartitions; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.IReleasable; -import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; -import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceCompletionProposal; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceConstants; -import org.eclipse.wst.sse.ui.internal.provisional.registry.AdapterFactoryProvider; -import org.eclipse.wst.sse.ui.internal.provisional.registry.AdapterFactoryRegistry; -import org.eclipse.wst.xml.core.internal.contentmodel.CMDocument; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; -import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; -import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQueryAction; -import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil; -import org.eclipse.wst.xml.core.internal.parser.XMLSourceParser; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocType; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMDocumentTracker; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMNodeWrapper; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.core.internal.ssemodelquery.ModelQueryAdapter; -import org.eclipse.wst.xml.core.text.IXMLPartitions; -import org.eclipse.wst.xml.ui.internal.contentassist.AbstractContentAssistProcessor; -import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; -import org.eclipse.wst.xml.ui.internal.contentassist.NonValidatingModelQueryAction; -import org.eclipse.wst.xml.ui.internal.contentassist.ProposalComparator; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLContentAssistProcessor; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLContentAssistUtilities; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLRelevanceConstants; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Adds proposals not normally covered by the generic behavior with the - * content model - * - * @plannedfor 1.0 - */ -public class JSPContentAssistProcessor extends AbstractContentAssistProcessor { - - protected int depthCount = 0; - protected ITextViewer fViewer = null; - protected boolean useEmbeddedResults = true; - protected boolean isInternalAdapter = false; - protected HashMap fNameToProcessorMap = null; - protected HashMap fPartitionToProcessorMap = null; - private final ICompletionProposal[] EMPTY_PROPOSAL_SET = new ICompletionProposal[0]; - private JSPTemplateCompletionProcessor fTemplateProcessor = null; - private List fTemplateContexts = new ArrayList(); - - public JSPContentAssistProcessor() { - super(); - initNameToProcessorMap(); - initPartitionToProcessorMap(); - } - - /** - * init map for extra content assist processors (useBean, - * get/setProperty). points [tagname > processor] - */ - protected void initNameToProcessorMap() { - fNameToProcessorMap = new HashMap(); - JSPPropertyContentAssistProcessor jspPropertyCAP = new JSPPropertyContentAssistProcessor(); - fNameToProcessorMap.put(JSP11Namespace.ElementName.SETPROPERTY, jspPropertyCAP); - fNameToProcessorMap.put(JSP11Namespace.ElementName.GETPROPERTY, jspPropertyCAP); - fNameToProcessorMap.put(JSP11Namespace.ElementName.USEBEAN, new JSPUseBeanContentAssistProcessor()); - fNameToProcessorMap.put(JSP11Namespace.ElementName.DIRECTIVE_TAGLIB, new JSPTaglibDirectiveContentAssistProcessor()); - } - - /** - * int map that points [partition > processor]. This takes place of - * embedded adapters for now. - */ - protected void initPartitionToProcessorMap() { - fPartitionToProcessorMap = new HashMap(); - HTMLContentAssistProcessor htmlProcessor = new HTMLContentAssistProcessor(); - JSPJavaContentAssistProcessor jspJavaProcessor = new JSPJavaContentAssistProcessor(); - XMLContentAssistProcessor xmlProcessor = new XMLContentAssistProcessor(); - JavaScriptContentAssistProcessor javascriptProcessor = new JavaScriptContentAssistProcessor(); - - fPartitionToProcessorMap.put(IHTMLPartitions.HTML_DEFAULT, htmlProcessor); - fPartitionToProcessorMap.put(IXMLPartitions.XML_DEFAULT, xmlProcessor); - fPartitionToProcessorMap.put(IStructuredPartitions.DEFAULT_PARTITION, htmlProcessor); - fPartitionToProcessorMap.put(IJSPPartitions.JSP_DEFAULT, jspJavaProcessor); - fPartitionToProcessorMap.put(IJSPPartitions.JSP_DIRECTIVE, xmlProcessor); - fPartitionToProcessorMap.put(IHTMLPartitions.HTML_COMMENT, htmlProcessor); - fPartitionToProcessorMap.put(IJSPPartitions.JSP_CONTENT_JAVASCRIPT, javascriptProcessor); - fPartitionToProcessorMap.put(IJSPPartitions.JSP_DEFAULT_EL, jspJavaProcessor); - fPartitionToProcessorMap.put(IHTMLPartitions.SCRIPT, javascriptProcessor); // default - // to - // javascript - // for - // all - // script - } - - protected void addCommentProposal(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addDocTypeProposal(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addEmptyDocumentProposals(ContentAssistRequest contentAssistRequest) { - addTemplates(contentAssistRequest, TemplateContextTypeIdsJSP.NEW); - - super.addEmptyDocumentProposals(contentAssistRequest); - addTagInsertionProposals(contentAssistRequest, 0); - } - - protected void addEndTagNameProposals(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addPCDATAProposal(String nodeName, ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addStartDocumentProposals(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addTagCloseProposals(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addXMLProposal(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addEndTagProposals(ContentAssistRequest contentAssistRequest) { - // do nothing - } - - protected void addAttributeNameProposals(ContentAssistRequest contentAssistRequest) { - addTemplates(contentAssistRequest, TemplateContextTypeIdsJSP.ATTRIBUTE); - } - - /** - * add proposals for tags in attribute values - */ - protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) { - addTemplates(contentAssistRequest, TemplateContextTypeIdsJSP.ATTRIBUTE_VALUE); - - IDOMNode node = (IDOMNode) contentAssistRequest.getNode(); - - // add JSP extra proposals from JSPBeanInfoContentAssistProcessor - // JSPPropertyContentAssistProcessor - - // 2.1 - // get results from JSPUseBean and JSPProperty here - // (look up processor in a map based on node name) - JSPDummyContentAssistProcessor extraProcessor = (JSPDummyContentAssistProcessor) fNameToProcessorMap.get(node.getNodeName()); - if (extraProcessor != null && contentAssistRequest != null) { - extraProcessor.addAttributeValueProposals(contentAssistRequest); - } - - ModelQuery mq = ModelQueryUtil.getModelQuery(node.getOwnerDocument()); - if (mq != null) { - CMDocument doc = mq.getCorrespondingCMDocument(node); - // this shouldn't have to have the prefix coded in - if (doc instanceof JSPCMDocument || doc instanceof CMNodeWrapper || node.getNodeName().startsWith("jsp:")) //$NON-NLS-1$ - return; - } - - // Find the attribute name for which this position should have a value - IStructuredDocumentRegion open = node.getFirstStructuredDocumentRegion(); - ITextRegionList openRegions = open.getRegions(); - int i = openRegions.indexOf(contentAssistRequest.getRegion()); - if (i < 0) - return; - ITextRegion nameRegion = null; - while (i >= 0) { - nameRegion = openRegions.get(i--); - if (nameRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) - break; - } - - String attributeName = null; - if (nameRegion != null) - attributeName = open.getText(nameRegion); - String currentValue = null; - if (attributeName != null) - currentValue = node.getAttributes().getNamedItem(attributeName).getNodeValue(); - - // on an empty value, add all the JSP and taglib tags - if ((contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS && contentAssistRequest.getReplacementLength() == 0) || (contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE && (currentValue == null || currentValue.length() == 0))) { - List rejectElements = new ArrayList(); - rejectElements.add(JSP12Namespace.ElementName.SCRIPTLET); - rejectElements.add(JSP12Namespace.ElementName.EXPRESSION); - rejectElements.add(JSP12Namespace.ElementName.DECLARATION); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_INCLUDE); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_PAGE); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_TAGLIB); - rejectElements.add(JSP12Namespace.ElementName.FALLBACK); - rejectElements.add(JSP12Namespace.ElementName.USEBEAN); - rejectElements.add(JSP12Namespace.ElementName.SETPROPERTY); - rejectElements.add(JSP12Namespace.ElementName.FORWARD); - rejectElements.add(JSP12Namespace.ElementName.PLUGIN); - rejectElements.add(JSP12Namespace.ElementName.FALLBACK); - rejectElements.add(JSP12Namespace.ElementName.PARAMS); - - List additionalElements = getAdditionalChildren(new ArrayList(), node, -1); - for (i = 0; i < additionalElements.size(); i++) { - CMElementDeclaration ed = (CMElementDeclaration) additionalElements.get(i); - if (rejectElements.contains(ed.getNodeName())) - continue; - String tagname = getContentGenerator().getRequiredName(node, ed); - StringBuffer contents = new StringBuffer("\""); //$NON-NLS-1$ - getContentGenerator().generateTag(node, ed, contents); - contents.append('"'); - CustomCompletionProposal proposal = new CustomCompletionProposal(contents.toString(), contentAssistRequest.getReplacementBeginPosition(), contentAssistRequest.getReplacementLength(), contents.length(), JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_GENERIC), tagname, null, null, XMLRelevanceConstants.R_JSP_ATTRIBUTE_VALUE); - contentAssistRequest.addProposal(proposal); - } - } - - else if (contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - try { - // Create a new model for Content Assist to operate on. This - // will simulate - // a full Document and then adjust the offset numbers in the - // list of results. - IStructuredModel internalModel = null; - IModelManager mmanager = StructuredModelManager.getModelManager(); - internalModel = mmanager.createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); - IDOMNode xmlNode = null; - IDOMModel xmlOuterModel = null; - if (contentAssistRequest.getNode() instanceof IDOMNode) { - xmlNode = (IDOMNode) contentAssistRequest.getNode(); - xmlOuterModel = xmlNode.getModel(); - internalModel.setResolver(xmlOuterModel.getResolver()); - internalModel.setBaseLocation(xmlOuterModel.getBaseLocation()); - } - String contents = StringUtils.strip(contentAssistRequest.getText()); - if (xmlNode != null && contents != null) { - int additionalShifts = 0; - // Be sure that custom tags from taglibs also show up - // by - // adding taglib declarations to the internal model. - TLDCMDocumentManager mgr = TaglibController.getTLDCMDocumentManager(xmlOuterModel.getStructuredDocument()); - if (mgr != null) { - List trackers = mgr.getCMDocumentTrackers(contentAssistRequest.getReplacementBeginPosition()); - if (trackers != null) { - for (i = 0; i < trackers.size(); i++) { - CMDocumentTracker tracker = (CMDocumentTracker) trackers.get(i); - String declaration = tracker.getStructuredDocumentRegion().getText(); - if (declaration != null) { - contents = declaration + contents; - additionalShifts += declaration.length(); - } - } - } - } - // Also copy any jsp:useBean tags so that - // jsp:[gs]etProperty will function - Document doc = null; - if (contentAssistRequest.getNode().getNodeType() == Node.DOCUMENT_NODE) - doc = (Document) node; - else - doc = node.getOwnerDocument(); - NodeList useBeans = doc.getElementsByTagName(JSP12Namespace.ElementName.USEBEAN); - for (int k = 0; k < useBeans.getLength(); k++) { - IDOMNode useBean = (IDOMNode) useBeans.item(k); - if (useBean.getStartOffset() < contentAssistRequest.getReplacementBeginPosition()) { - StringBuffer useBeanText = new StringBuffer("<jsp:useBean"); //$NON-NLS-1$ - for (int j = 0; j < useBean.getAttributes().getLength(); j++) { - Attr attr = (Attr) useBean.getAttributes().item(j); - useBeanText.append(' '); - useBeanText.append(attr.getName()); - useBeanText.append("=\""); //$NON-NLS-1$ - useBeanText.append(attr.getValue()); - useBeanText.append('"'); - } - useBeanText.append("/>"); //$NON-NLS-1$ - additionalShifts += useBeanText.length(); - contents = useBeanText.toString() + contents; - } - } - internalModel.getStructuredDocument().set(contents); - int internalOffset = 0; - boolean quoted = false; - // if quoted, use position inside and shift by one - if (contentAssistRequest.getMatchString().length() > 0 && (contentAssistRequest.getMatchString().charAt(0) == '\'' || contentAssistRequest.getMatchString().charAt(0) == '"')) { - internalOffset = contentAssistRequest.getMatchString().length() - 1 + additionalShifts; - quoted = true; - } - // if unquoted, use position inside - else if (contentAssistRequest.getMatchString().length() > 0 && contentAssistRequest.getMatchString().charAt(0) == '<') - internalOffset = contentAssistRequest.getMatchString().length() + additionalShifts; - else - internalOffset = contentAssistRequest.getReplacementBeginPosition() - contentAssistRequest.getStartOffset() + additionalShifts; - depthCount++; - IndexedRegion internalNode = null; - int tmpOffset = internalOffset; - while (internalNode == null && tmpOffset >= 0) - internalNode = internalModel.getIndexedRegion(tmpOffset--); - - if (internalModel.getFactoryRegistry() != null) { - // set up the internal model - if (internalModel.getFactoryRegistry().getFactoryFor(PageDirectiveAdapter.class) == null) { - internalModel.getFactoryRegistry().addFactory(new PageDirectiveAdapterFactory()); - } - PageDirectiveAdapter outerEmbeddedTypeAdapter = (PageDirectiveAdapter) xmlOuterModel.getDocument().getAdapterFor(PageDirectiveAdapter.class); - PageDirectiveAdapter internalEmbeddedTypeAdapter = (PageDirectiveAdapter) ((INodeNotifier) ((Node) internalNode).getOwnerDocument()).getAdapterFor(PageDirectiveAdapter.class); - internalEmbeddedTypeAdapter.setEmbeddedType(outerEmbeddedTypeAdapter.getEmbeddedType()); - } - - AdapterFactoryRegistry adapterRegistry = JSPUIPlugin.getDefault().getAdapterFactoryRegistry(); - Iterator adapterList = adapterRegistry.getAdapterFactories(); - // And all those appropriate for this particular type - // of content - while (adapterList.hasNext()) { - try { - AdapterFactoryProvider provider = (AdapterFactoryProvider) adapterList.next(); - if (provider.isFor(internalModel.getModelHandler())) { - provider.addAdapterFactories(internalModel); - } - } - catch (Exception e) { - Logger.logException(e); - } - } - - /** - * the internal adapter does all the real work of using - * the JSP content model to form proposals - */ - ICompletionProposal[] results = null; - depthCount--; - if (results != null) { - for (i = 0; i < results.length; i++) { - contentAssistRequest.addProposal(new CustomCompletionProposal(((CustomCompletionProposal) results[i]).getReplacementString(), ((CustomCompletionProposal) results[i]).getReplacementOffset() - additionalShifts + contentAssistRequest.getStartOffset() + (quoted ? 1 : 0), ((CustomCompletionProposal) results[i]).getReplacementLength(), ((CustomCompletionProposal) results[i]).getCursorPosition(), results[i].getImage(), results[i].getDisplayString(), ((CustomCompletionProposal) results[i]).getContextInformation(), ((CustomCompletionProposal) results[i]).getAdditionalProposalInfo(), (results[i] instanceof IRelevanceCompletionProposal) ? ((IRelevanceCompletionProposal) results[i]).getRelevance() : IRelevanceConstants.R_NONE)); - } - } - } - } - catch (Exception e) { - Logger.logException("Error in embedded JSP Content Assist", e); //$NON-NLS-1$ - } - } - - - } - - private List getAdditionalChildren(List elementDecls, Node node, int childIndex) { - if (node instanceof IDOMNode) { - /* - * find the location of the intended insertion as it will give us - * the correct offset for checking position dependent CMDocuments - */ - int textInsertionOffset = 0; - NodeList children = node.getChildNodes(); - if (children.getLength() >= childIndex && childIndex >= 0) { - Node nodeAlreadyAtIndex = children.item(childIndex); - if (nodeAlreadyAtIndex instanceof IDOMNode) - textInsertionOffset = ((IDOMNode) nodeAlreadyAtIndex).getEndOffset(); - } - else { - textInsertionOffset = ((IDOMNode) node).getStartOffset(); - } - TLDCMDocumentManager mgr = TaglibController.getTLDCMDocumentManager(((IDOMNode) node).getStructuredDocument()); - if (mgr != null) { - List moreCMDocuments = mgr.getCMDocumentTrackers(textInsertionOffset); - if (moreCMDocuments != null) { - for (int i = 0; i < moreCMDocuments.size(); i++) { - CMDocument doc = (CMDocument) moreCMDocuments.get(i); - CMNamedNodeMap elements = doc.getElements(); - if (elements != null) { - for (int j = 0; j < elements.getLength(); j++) { - CMElementDeclaration ed = (CMElementDeclaration) elements.item(j); - elementDecls.add(ed); - } - } - } - } - } - - // get position dependent CMDocuments and insert their tags as - // proposals - - ModelQueryAdapter mqAdapter = null; - if (node.getNodeType() == Node.DOCUMENT_NODE) - mqAdapter = (ModelQueryAdapter) ((IDOMNode) node).getAdapterFor(ModelQueryAdapter.class); - else - mqAdapter = (ModelQueryAdapter) ((IDOMNode) node.getOwnerDocument()).getAdapterFor(ModelQueryAdapter.class); - - if (mqAdapter != null) { - CMDocument doc = mqAdapter.getModelQuery().getCorrespondingCMDocument(node); - if (doc != null) { - CMDocument jcmdoc = getDefaultJSPCMDocument((IDOMNode) node); - CMNamedNodeMap jspelements = jcmdoc.getElements(); - - /* - * For a built-in JSP action the content model is properly - * set up, so don't just blindly add the rest--unless this - * will be a direct child of the document - */ - if (jspelements != null && (!(doc instanceof JSPCMDocument) || node.getNodeType() == Node.DOCUMENT_NODE)) { - List rejectElements = new ArrayList(); - - // determine if the document is in XML form - Document domDoc = null; - if (node.getNodeType() == Node.DOCUMENT_NODE) - domDoc = (Document) node; - else - domDoc = node.getOwnerDocument(); - - // Show XML tag forms of JSP markers if jsp:root is - // the document element OR it's HTML but - // isn't really in the text. - // If the document isn't strictly XML, pull out the - // XML tag forms it is xml format - rejectElements.add(JSP12Namespace.ElementName.SCRIPTLET); - rejectElements.add(JSP12Namespace.ElementName.EXPRESSION); - rejectElements.add(JSP12Namespace.ElementName.DECLARATION); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_INCLUDE); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_PAGE); - rejectElements.add(JSP12Namespace.ElementName.TEXT); - rejectElements.add(JSP12Namespace.ElementName.DIRECTIVE_TAGLIB); - rejectElements.add(JSP20Namespace.ElementName.DIRECTIVE_TAG); - rejectElements.add(JSP20Namespace.ElementName.DIRECTIVE_ATTRIBUTE); - rejectElements.add(JSP20Namespace.ElementName.DIRECTIVE_VARIABLE); - if (isXMLFormat(domDoc)) { - // jsp actions - rejectElements.add(JSP12Namespace.ElementName.FALLBACK); - rejectElements.add(JSP12Namespace.ElementName.USEBEAN); - rejectElements.add(JSP12Namespace.ElementName.GETPROPERTY); - rejectElements.add(JSP12Namespace.ElementName.SETPROPERTY); - rejectElements.add(JSP12Namespace.ElementName.INCLUDE); - rejectElements.add(JSP12Namespace.ElementName.FORWARD); - rejectElements.add(JSP12Namespace.ElementName.PLUGIN); - rejectElements.add(JSP12Namespace.ElementName.FALLBACK); - rejectElements.add(JSP12Namespace.ElementName.PARAM); - rejectElements.add(JSP12Namespace.ElementName.PARAMS); - } - - - // don't show jsp:root if a document element already - // exists - Element docElement = domDoc.getDocumentElement(); - if (docElement != null && ((docElement.getNodeName().equals("jsp:root")) || ((((IDOMNode) docElement).getStartStructuredDocumentRegion() != null || ((IDOMNode) docElement).getEndStructuredDocumentRegion() != null)))) //$NON-NLS-1$ - rejectElements.add(JSP12Namespace.ElementName.ROOT); - - for (int j = 0; j < jspelements.getLength(); j++) { - CMElementDeclaration ed = (CMElementDeclaration) jspelements.item(j); - if (rejectElements.contains(ed.getNodeName())) - continue; - elementDecls.add(ed); - } - - } - } - // No cm document (such as for the Document (a non-Element) node itself) - else { - CMNamedNodeMap jspElements = getDefaultJSPCMDocument((IDOMNode) node).getElements(); - int length = jspElements.getLength(); - for (int i = 0; i < length; i++) { - elementDecls.add(jspElements.item(i)); - } - } - } - } - return elementDecls; - } - - /** - * For JSP files and segments, this is just the JSP - * document, but when editing tag files and their fragments, it - * should be the tag document. - * - * It may also vary based on the model being edited in the future. - * - * @return the default non-embedded CMDocument for the document being - * edited. - */ - CMDocument getDefaultJSPCMDocument(IDOMNode node) { - // handle tag files here - String contentType = node.getModel().getContentTypeIdentifier(); - if (ContentTypeIdForJSP.ContentTypeID_JSPTAG.equals(contentType)) - return JSPCMDocumentFactory.getCMDocument(CMDocType.TAG20_DOC_TYPE); - - CMDocument jcmdoc = null; - String modelPath = node.getModel().getBaseLocation(); - if (modelPath != null && !IModelManager.UNMANAGED_MODEL.equals(modelPath)) { - float version = DeploymentDescriptorPropertyCache.getInstance().getJSPVersion(new Path(modelPath)); - jcmdoc = JSPCMDocumentFactory.getCMDocument(version); - } - if (jcmdoc == null) { - jcmdoc = JSPCMDocumentFactory.getCMDocument(); - } - - return jcmdoc; - } - - protected List getAvailableChildrenAtIndex(Element parent, int index, int validityChecking) { - List list = new ArrayList(); - List additionalElements = getAdditionalChildren(new ArrayList(), parent, index); - for (int i = 0; i < additionalElements.size(); i++) { - ModelQueryAction insertAction = new NonValidatingModelQueryAction((CMElementDeclaration) additionalElements.get(i), ModelQueryAction.INSERT, 0, parent.getChildNodes().getLength(), null); - list.add(insertAction); - } - - // add allowed children of implicit tags that don't already exist - NodeList children = parent.getChildNodes(); - List childNames = new ArrayList(); - if (children != null) { - for (int i = 0; i < children.getLength(); i++) { - Node child = children.item(i); - if (child.getNodeType() == Node.ELEMENT_NODE) - childNames.add(child.getNodeName().toLowerCase()); - } - } - List allActions = new ArrayList(); - Iterator iterator = list.iterator(); - ModelQuery modelQuery = ModelQueryUtil.getModelQuery(parent.getOwnerDocument()); - while (iterator.hasNext()) { - ModelQueryAction action = (ModelQueryAction) iterator.next(); - allActions.add(action); - if (action.getCMNode() instanceof HTMLElementDeclaration) { - HTMLElementDeclaration ed = (HTMLElementDeclaration) action.getCMNode(); - String ommission = (String) ed.getProperty(HTMLCMProperties.OMIT_TYPE); - if (!childNames.contains(ed.getNodeName().toLowerCase()) && ((ommission != null) && (ommission.equals(HTMLCMProperties.Values.OMIT_BOTH)))) { - List implicitValidActions = new ArrayList(); - modelQuery.getInsertActions(parent, ed, 0, ModelQuery.INCLUDE_CHILD_NODES, ModelQuery.VALIDITY_NONE, implicitValidActions); - if (implicitValidActions != null) { - Iterator implicitValidActionsIterator = implicitValidActions.iterator(); - while (implicitValidActionsIterator.hasNext()) { - ModelQueryAction insertAction = new NonValidatingModelQueryAction(((ModelQueryAction) implicitValidActionsIterator.next()).getCMNode(), ModelQueryAction.INSERT, 0, parent.getChildNodes().getLength(), null); - allActions.add(insertAction); - } - } - } - } - } - return allActions; - } - - protected List getAvailableRootChildren(Document document, int childIndex) { - List list = new ArrayList(); - if (!isXMLFormat(document)) - getAdditionalChildren(list, document, childIndex); - return list; - } - - protected void init() { - super.init(); - } - - public void setErrorMessage(String errorMessage) { - if (depthCount == 0) - fErrorMessage = errorMessage; - } - - /** - * This method is acting as a "catch all" for pulling together content - * assist proposals from different Processors when document partitioning - * alone couldn't determine definitively what content assist should show - * up at that particular position in the document - * - * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeCompletionProposals(ITextViewer, - * int) - */ - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentPosition) { - fTemplateContexts.clear(); - - IStructuredDocumentRegion sdRegion = ContentAssistUtils.getStructuredDocumentRegion(viewer, documentPosition); - fViewer = viewer; - ICompletionProposal[] jspResults = EMPTY_PROPOSAL_SET; - ICompletionProposal[] embeddedResults = EMPTY_PROPOSAL_SET; - - // check the actual partition type - String partitionType = getPartitionType((StructuredTextViewer) viewer, documentPosition); - IStructuredDocument structuredDocument = (IStructuredDocument) viewer.getDocument(); - - IStructuredDocumentRegion fn = structuredDocument.getRegionAtCharacterOffset(documentPosition); - - // //////////////////////////////////////////////////////////////////////////// - // ANOTHER WORKAROUND UNTIL PARTITIONING TAKES CARE OF THIS - // check for xml-jsp tags... - if (partitionType == IJSPPartitions.JSP_DIRECTIVE && fn != null) { - IStructuredDocumentRegion possibleXMLJSP = ((fn.getType() == DOMRegionContext.XML_CONTENT) && fn.getPrevious() != null) ? fn.getPrevious() : fn; - ITextRegionList regions = possibleXMLJSP.getRegions(); - if (regions.size() > 1) { - // check bounds cases - ITextRegion xmlOpenOrClose = regions.get(0); - if (xmlOpenOrClose.getType() == DOMRegionContext.XML_TAG_OPEN && documentPosition == possibleXMLJSP.getStartOffset()) { - // do regular jsp content assist - } - else if (xmlOpenOrClose.getType() == DOMRegionContext.XML_END_TAG_OPEN && documentPosition > possibleXMLJSP.getStartOffset()) { - // do regular jsp content assist - } - else { - // possible xml-jsp - ITextRegion nameRegion = regions.get(1); - String name = possibleXMLJSP.getText(nameRegion); - if (name.equals("jsp:scriptlet") || name.equals("jsp:expression") || name.equals("jsp:declaration")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - } - } - - // //////////////////////////////////////////////////////////////////////////// - // ** THIS IS A TEMP FIX UNTIL PARTITIONING TAKES CARE OF THIS... - // check for XML-JSP in a <script> region - if (partitionType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT || partitionType == IHTMLPartitions.SCRIPT) { - // fn should be block text - IStructuredDocumentRegion decodedSDRegion = decodeScriptBlock(fn.getFullText()); - // System.out.println("decoded > " + - // blockOfText.substring(decodedSDRegion.getStartOffset(), - // decodedSDRegion.getEndOffset())); - if (decodedSDRegion != null) { - IStructuredDocumentRegion sdr = decodedSDRegion; - while (sdr != null) { - // System.out.println("sdr " + sdr.getType()); - // System.out.println("sdr > " + - // blockOfText.substring(sdr.getStartOffset(), - // sdr.getEndOffset())); - if (sdr.getType() == DOMJSPRegionContexts.JSP_CONTENT) { - if (documentPosition >= fn.getStartOffset() + sdr.getStartOffset() && documentPosition <= fn.getStartOffset() + sdr.getEndOffset()) { - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - else if (sdr.getType() == DOMRegionContext.XML_TAG_NAME) { - if (documentPosition > fn.getStartOffset() + sdr.getStartOffset() && documentPosition < fn.getStartOffset() + sdr.getEndOffset()) { - return EMPTY_PROPOSAL_SET; - } - else if (documentPosition == fn.getStartOffset() + sdr.getEndOffset() && sdr.getNext() != null && sdr.getNext().getType() == DOMJSPRegionContexts.JSP_CONTENT) { - // the end of an open tag <script> - // <jsp:scriptlet>| blah </jsp:scriptlet> - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - else if (documentPosition == fn.getStartOffset() + sdr.getStartOffset() && sdr.getPrevious() != null && sdr.getPrevious().getType() == DOMRegionContext.XML_TAG_NAME) { - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - sdr = sdr.getNext(); - } - } - } - // ///////////////////////////////////////////////////////////////////////// - // check special JSP delimiter cases - if (fn != null && partitionType == IJSPPartitions.JSP_CONTENT_DELIMITER) { - IStructuredDocumentRegion fnDelim = fn; - - // if it's a nested JSP region, need to get the correct - // StructuredDocumentRegion - // not sure why this check was there... - // if (fnDelim.getType() == XMLRegionContext.BLOCK_TEXT) { - Iterator blockRegions = fnDelim.getRegions().iterator(); - ITextRegion temp = null; - ITextRegionContainer trc; - while (blockRegions.hasNext()) { - temp = (ITextRegion) blockRegions.next(); - // we hit a nested - if (temp instanceof ITextRegionContainer) { - trc = (ITextRegionContainer) temp; - // it's in this region - if (documentPosition >= trc.getStartOffset() && documentPosition < trc.getEndOffset()) { - Iterator nestedJSPRegions = trc.getRegions().iterator(); - while (nestedJSPRegions.hasNext()) { - temp = (ITextRegion) nestedJSPRegions.next(); - if (XMLContentAssistUtilities.isJSPOpenDelimiter(temp.getType()) && documentPosition == trc.getStartOffset(temp)) { - // HTML content assist - // we actually want content assist for the - // previous type of region, - // well get those proposals from the embedded - // adapter - if (documentPosition > 0) { - partitionType = getPartitionType((StructuredTextViewer) viewer, documentPosition - 1); - break; - } - } - else if (XMLContentAssistUtilities.isJSPCloseDelimiter(temp.getType()) && documentPosition == trc.getStartOffset(temp)) { - // JSP content assist - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - } - } - // } - } - - // take care of XML-JSP delimter cases - if (XMLContentAssistUtilities.isXMLJSPDelimiter(fnDelim)) { - // since it's a delimiter, we know it's a ITextRegionContainer - ITextRegion firstRegion = fnDelim.getRegions().get(0); - if (fnDelim.getStartOffset() == documentPosition && (firstRegion.getType() == DOMRegionContext.XML_TAG_OPEN)) { - // |<jsp:scriptlet> </jsp:scriptlet> - // (pa) commented out so that we get regular behavior JSP - // macros etc... - // return getHTMLCompletionProposals(viewer, - // documentPosition); - } - else if (fnDelim.getStartOffset() == documentPosition && (firstRegion.getType() == DOMRegionContext.XML_END_TAG_OPEN)) { - // <jsp:scriptlet> |</jsp:scriptlet> - // check previous partition type to see if it's JAVASCRIPT - // if it is, we're just gonna let the embedded JAVASCRIPT - // adapter get the proposals - if (documentPosition > 0) { - String checkType = getPartitionType((StructuredTextViewer) viewer, documentPosition - 1); - if (checkType != IJSPPartitions.JSP_CONTENT_JAVASCRIPT) { // this - // check - // is - // failing - // for - // XML-JSP - // (region - // is - // not - // javascript...) - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - partitionType = IJSPPartitions.JSP_CONTENT_JAVASCRIPT; - } - } - else if ((firstRegion.getType() == DOMRegionContext.XML_TAG_OPEN) && documentPosition >= fnDelim.getEndOffset()) { - // anything else inbetween - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - else if (XMLContentAssistUtilities.isJSPDelimiter(fnDelim)) { - // the delimiter <%, <%=, <%!, ... - if (XMLContentAssistUtilities.isJSPCloseDelimiter(fnDelim)) { - if (documentPosition == fnDelim.getStartOffset()) { - // check previous partition type to see if it's - // JAVASCRIPT - // if it is, we're just gonna let the embedded - // JAVASCRIPT adapter get the proposals - if (documentPosition > 0) { - String checkType = getPartitionType((StructuredTextViewer) viewer, documentPosition - 1); - if (checkType != IJSPPartitions.JSP_CONTENT_JAVASCRIPT) { - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - partitionType = IJSPPartitions.JSP_CONTENT_JAVASCRIPT; - } - } - } - else if (XMLContentAssistUtilities.isJSPOpenDelimiter(fnDelim)) { - // if it's the first position of open delimiter - // use embedded HTML results - if (documentPosition == fnDelim.getStartOffset()) { - embeddedResults = getHTMLCompletionProposals(viewer, documentPosition); - } - else if (documentPosition == fnDelim.getEndOffset()) { - // it's at the EOF <%| - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - } - } - - // need to check if it's JSP region inside of CDATA w/ no region - // <![CDATA[ <%|%> ]]> - // or a comment region - // <!-- <% |%> --> - if (fn != null && (fn.getType() == DOMRegionContext.XML_CDATA_TEXT || fn.getType() == DOMRegionContext.XML_COMMENT_TEXT)) { - if (fn instanceof ITextRegionContainer) { - Object[] cdataRegions = fn.getRegions().toArray(); - ITextRegion r = null; - ITextRegion jspRegion = null; - for (int i = 0; i < cdataRegions.length; i++) { - r = (ITextRegion) cdataRegions[i]; - if (r instanceof ITextRegionContainer) { - // CDATA embedded container, or comment container - Object[] jspRegions = ((ITextRegionContainer) r).getRegions().toArray(); - for (int j = 0; j < jspRegions.length; j++) { - jspRegion = (ITextRegion) jspRegions[j]; - if (jspRegion.getType() == DOMJSPRegionContexts.JSP_CLOSE) { - if (sdRegion.getStartOffset(jspRegion) == documentPosition) - return getJSPJavaCompletionProposals(viewer, documentPosition); - } - } - } - } - - } - } - - // check if it's in an attribute value, if so, don't add CDATA - // proposal - ITextRegion attrContainer = (fn != null) ? fn.getRegionAtCharacterOffset(documentPosition) : null; - if (attrContainer != null && attrContainer instanceof ITextRegionContainer) { - if (attrContainer.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - // test location of the cursor - // return null if it's in the middle of an open/close - // delimeter - Iterator attrRegions = ((ITextRegionContainer) attrContainer).getRegions().iterator(); - ITextRegion testRegion = null; - while (attrRegions.hasNext()) { - testRegion = (ITextRegion) attrRegions.next(); - // need to check for other valid attribute regions - if (XMLContentAssistUtilities.isJSPOpenDelimiter(testRegion.getType())) { - if (!(((ITextRegionContainer) attrContainer).getEndOffset(testRegion) <= documentPosition)) - return EMPTY_PROPOSAL_SET; - } - else if (XMLContentAssistUtilities.isJSPCloseDelimiter(testRegion.getType())) { - if (!(((ITextRegionContainer) attrContainer).getStartOffset(testRegion) >= documentPosition)) - return EMPTY_PROPOSAL_SET; - } - } - // TODO: handle non-Java code such as nested tags - if (testRegion.getType().equals(DOMJSPRegionContexts.JSP_CONTENT)) - return getJSPJavaCompletionProposals(viewer, documentPosition); - return EMPTY_PROPOSAL_SET; - } - } - - IContentAssistProcessor p = (IContentAssistProcessor) fPartitionToProcessorMap.get(partitionType); - if (p != null) { - embeddedResults = p.computeCompletionProposals(viewer, documentPosition); - // get bean methods, objects, and constants if there are any... - if (partitionType == IJSPPartitions.JSP_CONTENT_JAVASCRIPT || partitionType == IHTMLPartitions.SCRIPT) { - ICompletionProposal[] beanResults = getJSPJavaBeanProposals(viewer, documentPosition); - if (beanResults != null && beanResults.length > 0) { - ICompletionProposal[] added = new ICompletionProposal[beanResults.length + embeddedResults.length]; - System.arraycopy(beanResults, 0, added, 0, beanResults.length); - System.arraycopy(embeddedResults, 0, added, beanResults.length, embeddedResults.length); - embeddedResults = added; - } - } - } - else { - // the partition type is probably not mapped - } - - // fix for: - // HTML content assist give JSP tags in between empty script tags - if (!(p instanceof JavaScriptContentAssistProcessor || p instanceof CSSContentAssistProcessor)) { - fTemplateContexts.clear(); - jspResults = super.computeCompletionProposals(viewer, documentPosition); - } - if (useEmbeddedResults) { - if (embeddedResults != null && embeddedResults.length > 0) { - List results = new ArrayList(); - for (int i = 0; i < embeddedResults.length; i++) - results.add(embeddedResults[i]); - if (jspResults != null) { - for (int i = 0; i < jspResults.length; i++) - results.add(jspResults[i]); - } - jspResults = new ICompletionProposal[results.size()]; - Collections.sort(results, new ProposalComparator()); - for (int i = 0; i < results.size(); i++) - jspResults[i] = (ICompletionProposal) results.get(i); - - } - } - if (jspResults == null) - jspResults = EMPTY_PROPOSAL_SET; - setErrorMessage(jspResults.length == 0 ? UNKNOWN_CONTEXT : null); - - // fix for: - // check for |<%-- --%> first position of jsp comment - if (partitionType == IJSPPartitions.JSP_COMMENT) { - if (sdRegion.getStartOffset() == documentPosition) { - ICompletionProposal[] htmlResults = getHTMLCompletionProposals(viewer, documentPosition); - jspResults = merge(jspResults, htmlResults); - } - } - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=86656 - if (partitionType == IJSPPartitions.JSP_DIRECTIVE) { - ICompletionProposal[] importProposals = getImportProposals(viewer, documentPosition); - if (importProposals.length > 0) - jspResults = merge(jspResults, importProposals); - } - return jspResults; - } - - private ICompletionProposal[] getImportProposals(ITextViewer viewer, int documentPosition) { - List importProposals = new ArrayList(); - ICompletionProposal[] proposals = getJSPJavaCompletionProposals(viewer, documentPosition); - for (int i = 0; i < proposals.length; i++) { - if (proposals[i] instanceof JSPCompletionProposal) { - - ICompletionProposal importProposal = adjustImportProposal((JSPCompletionProposal) proposals[i]); - importProposals.add(importProposal); - } - } - return (ICompletionProposal[]) importProposals.toArray(new ICompletionProposal[importProposals.size()]); - } - - - private ICompletionProposal adjustImportProposal(JSPCompletionProposal importProposal) { - - // just need to remove the ";" - // and adjust offsets for the change - String newReplace = importProposal.getReplacementString().replaceAll(";", ""); //$NON-NLS-1$ //$NON-NLS-2$ - importProposal.setReplacementString(newReplace); - - String newDisplay = importProposal.getDisplayString().replaceAll(";", ""); //$NON-NLS-1$ //$NON-NLS-2$ - importProposal.setDisplayString(newDisplay); - - int newReplacementLength = importProposal.getReplacementLength() - 1; - importProposal.setReplacementLength(newReplacementLength); - - int newCursorPosition = importProposal.getCursorPosition() - 1; - importProposal.setCursorPosition(newCursorPosition); - - return importProposal; - } - - /** - * Adds 2 arrays of ICompletionProposals and sorts them with a - * ProposalComparator. - * - * @param jspResults - * @param htmlResults - * @return - */ - private ICompletionProposal[] merge(ICompletionProposal[] jspResults, ICompletionProposal[] htmlResults) { - List results = new ArrayList(); - List jsps = Arrays.asList(jspResults); - List htmls = Arrays.asList(htmlResults); - - results.addAll(jsps); - results.addAll(htmls); - - Collections.sort(results, new ProposalComparator()); - return (ICompletionProposal[]) results.toArray(new ICompletionProposal[results.size()]); - } - - /* - * This method will return JSPJava Proposals that are relevant to any java - * beans that in scope at the documentPosition - * - * TODO (pa) are taglib vars getting filtered? - * - * @param viewer @param documentPosition @return ICompletionProposal[] - */ - private ICompletionProposal[] getJSPJavaBeanProposals(ITextViewer viewer, int documentPosition) { - ICompletionProposal[] regularJSPResults = getJSPJavaCompletionProposals(viewer, documentPosition); - Vector filteredProposals = new Vector(); - ICompletionProposal[] finalResults = EMPTY_PROPOSAL_SET; - for (int i = 0; i < regularJSPResults.length; i++) { - ICompletionProposal test = regularJSPResults[i]; - - System.out.println("proposal > " + test.getDisplayString()); //$NON-NLS-1$ - System.out.println("relevance > " + ((CustomCompletionProposal) test).getRelevance()); //$NON-NLS-1$ - - if (isRelevanceAllowed(((CustomCompletionProposal) test).getRelevance())) { - filteredProposals.add(test); - } - } - if (filteredProposals.size() > 0) { - finalResults = new ICompletionProposal[filteredProposals.size()]; - Iterator it = filteredProposals.iterator(); - int j = 0; - while (it.hasNext()) { - finalResults[j++] = (ICompletionProposal) it.next(); - } - } - return finalResults; - } - - // These are the only things I'm allowing for use bean if the language is - // JAVASCRIPT - // I'm filtering based on JavaContentAssistProposal relevance - // - // 485 > method that belongs to the bean - // 486 > bean object - // 386 > bean CONSTANT - private boolean isRelevanceAllowed(int relevance) { - return (relevance == 485 || relevance == 486 || relevance == 326); - } - - - /** - * - * @param viewer - * @param documentPosition - * @return ICompletionProposal[] - */ - private ICompletionProposal[] getHTMLCompletionProposals(ITextViewer viewer, int documentPosition) { - - IContentAssistProcessor p = (IContentAssistProcessor) fPartitionToProcessorMap.get(IHTMLPartitions.HTML_DEFAULT); - return p.computeCompletionProposals(viewer, documentPosition); - } - - /** - * - * @param viewer - * @param documentPosition - * @return ICompletionProposal[] - */ - protected ICompletionProposal[] getJSPJavaCompletionProposals(ITextViewer viewer, int documentPosition) { - JSPJavaContentAssistProcessor p = (JSPJavaContentAssistProcessor) fPartitionToProcessorMap.get(IJSPPartitions.JSP_DEFAULT); - return p.computeCompletionProposals(viewer, documentPosition); - } - - /** - * @param viewer - * @param documentPosition - * @return String - */ - protected String getPartitionType(StructuredTextViewer viewer, int documentPosition) { - String partitionType = null; - try { - partitionType = TextUtilities.getContentType(viewer.getDocument(), IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, viewer.modelOffset2WidgetOffset(documentPosition), false); - } - catch (BadLocationException e) { - partitionType = IDocument.DEFAULT_CONTENT_TYPE; - } - return partitionType; - } - - /* - * ** TEMP WORKAROUND FOR CMVC 241882 Takes a String and blocks out - * jsp:scriptlet, jsp:expression, and jsp:declaration @param blockText - * @return - */ - private IStructuredDocumentRegion decodeScriptBlock(String blockText) { - XMLSourceParser parser = new XMLSourceParser(); - // use JSP_CONTENT for region type - parser.addBlockMarker(new BlockMarker("jsp:scriptlet", null, DOMJSPRegionContexts.JSP_CONTENT, false, false)); //$NON-NLS-1$ - parser.addBlockMarker(new BlockMarker("jsp:expression", null, DOMJSPRegionContexts.JSP_CONTENT, false, false)); //$NON-NLS-1$ - parser.addBlockMarker(new BlockMarker("jsp:declaration", null, DOMJSPRegionContexts.JSP_CONTENT, false, false)); //$NON-NLS-1$ - parser.reset(blockText); - return parser.getDocumentRegions(); - } - - /* - * @see ContentAssistAdapter#computeContextInformation(ITextViewer, int, - * IndexedRegion) - */ - public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset, IndexedRegion indexedNode) { - return super.computeContextInformation(viewer, documentOffset); - } - - /* - * @see ContentAssistAdapter#getContextInformationAutoActivationCharacters() - */ - public char[] getContextInformationAutoActivationCharacters() { - return super.getContextInformationAutoActivationCharacters(); - } - - - public char[] getCompletionProposalAutoActivationCharacters() { - IContentAssistProcessor p = (IContentAssistProcessor) fPartitionToProcessorMap.get(IHTMLPartitions.HTML_DEFAULT); - return p.getCompletionProposalAutoActivationCharacters(); - } - - /* - * @see ContentAssistAdapter#getContextInformationValidator() - */ - public IContextInformationValidator getContextInformationValidator() { - return super.getContextInformationValidator(); - } - - protected boolean isXMLFormat(Document doc) { - if (doc == null) - return false; - Element docElement = doc.getDocumentElement(); - return docElement != null && ((docElement.getNodeName().equals("jsp:root")) || ((((IDOMNode) docElement).getStartStructuredDocumentRegion() == null && ((IDOMNode) docElement).getEndStructuredDocumentRegion() == null))); //$NON-NLS-1$ - } - - /* - * @see ContentAssistAdapter#release() - */ - public void release() { - super.release(); - // release *ContentAssistProcessors in maps - // CMVC 254023 - releasePartitionToProcessorMap(); - releaseNameToProcessorMap(); - } - - protected void releasePartitionToProcessorMap() { - releaseMap(fPartitionToProcessorMap); - } - - protected void releaseNameToProcessorMap() { - releaseMap(fNameToProcessorMap); - } - - protected void releaseMap(HashMap map) { - if (map != null) { - if (!map.isEmpty()) { - Iterator it = map.keySet().iterator(); - Object key = null; - while (it.hasNext()) { - key = it.next(); - if (map.get(key) instanceof IReleasable) { - ((IReleasable) map.get(key)).release(); - } - } - } - map.clear(); - map = null; - } - } - - /** - * @see AbstractContentAssistProcessor#computeCompletionProposals(int, - * String, ITextRegion, IDOMNode, IDOMNode) - */ - protected ContentAssistRequest computeCompletionProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode treeNode, IDOMNode xmlnode) { - - ContentAssistRequest request = super.computeCompletionProposals(documentPosition, matchString, completionRegion, treeNode, xmlnode); - IStructuredDocumentRegion sdRegion = ContentAssistUtils.getStructuredDocumentRegion(fTextViewer, documentPosition); - - Document doc = null; - if (xmlnode != null) { - if (xmlnode.getNodeType() == Node.DOCUMENT_NODE) - doc = (Document) xmlnode; - else - doc = xmlnode.getOwnerDocument(); - } - String[] directiveNames = {"page", "include", "taglib"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - // suggest JSP Expression inside of XML comments - if (completionRegion.getType() == DOMRegionContext.XML_COMMENT_TEXT && !isXMLFormat(doc)) { - if (request == null) - request = newContentAssistRequest(treeNode, xmlnode, sdRegion, completionRegion, documentPosition, 0, ""); //$NON-NLS-1$ - request.addProposal(new CustomCompletionProposal("<%= %>", documentPosition, 0, 4, JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_GENERIC), "jsp:expression", null, "<%= %>", XMLRelevanceConstants.R_JSP)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - } - // handle proposals in and around JSP_DIRECTIVE_OPEN and - // JSP_DIRECTIVE_NAME - else if ((completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN && documentPosition >= sdRegion.getTextEndOffset(completionRegion)) || (completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME && documentPosition <= sdRegion.getTextEndOffset(completionRegion))) { - if (completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN) { - if (request == null) - request = newContentAssistRequest(xmlnode, xmlnode, sdRegion, completionRegion, documentPosition, 0, matchString); - Iterator regions = sdRegion.getRegions().iterator(); - String nameString = null; - int begin = request.getReplacementBeginPosition(); - int length = request.getReplacementLength(); - while (regions.hasNext()) { - ITextRegion region = (ITextRegion) regions.next(); - if (region.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { - nameString = sdRegion.getText(region); - begin = sdRegion.getStartOffset(region); - length = region.getTextLength(); - break; - } - } - if (nameString == null) - nameString = ""; //$NON-NLS-1$ - for (int i = 0; i < directiveNames.length; i++) { - if (directiveNames[i].startsWith(nameString) || documentPosition <= begin) - request.addProposal(new CustomCompletionProposal(directiveNames[i], begin, length, directiveNames[i].length(), JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_GENERIC), directiveNames[i], null, null, XMLRelevanceConstants.R_JSP)); - } - } - else { // by default, JSP_DIRECTIVE_NAME - if (request == null) - request = newContentAssistRequest(xmlnode, xmlnode, sdRegion, completionRegion, sdRegion.getStartOffset(completionRegion), completionRegion.getTextLength(), matchString); - for (int i = 0; i < directiveNames.length; i++) { - if (directiveNames[i].startsWith(matchString)) - request.addProposal(new CustomCompletionProposal(directiveNames[i], request.getReplacementBeginPosition(), request.getReplacementLength(), directiveNames[i].length(), JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_GENERIC), directiveNames[i], null, null, XMLRelevanceConstants.R_JSP)); - } - } - } - else if ((completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME && documentPosition > sdRegion.getTextEndOffset(completionRegion)) || (completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE && documentPosition <= sdRegion.getStartOffset(completionRegion))) { - if (request == null) - request = computeAttributeProposals(documentPosition, matchString, completionRegion, treeNode, xmlnode); - super.addTagCloseProposals(request); - // CMVC 274033, this is being added for all <jsp:* tags - // in addAttributeNameProposals(contentAssistRequest) - // super.addAttributeNameProposals(request); - } - // no name?: <%@ %> - else if (completionRegion.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE && documentPosition <= sdRegion.getStartOffset(completionRegion)) { - if (request != null) - request = computeAttributeProposals(documentPosition, matchString, completionRegion, treeNode, xmlnode); - Iterator regions = sdRegion.getRegions().iterator(); - String nameString = null; - while (regions.hasNext()) { - ITextRegion region = (ITextRegion) regions.next(); - if (region.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { - nameString = sdRegion.getText(region); - break; - } - } - if (nameString == null) { - for (int i = 0; i < directiveNames.length; i++) { - request.addProposal(new CustomCompletionProposal(directiveNames[i], request.getReplacementBeginPosition(), request.getReplacementLength(), directiveNames[i].length(), JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_GENERIC), directiveNames[i], null, null, XMLRelevanceConstants.R_JSP)); - } - } - } - - // bug115927 use original document position for all/any region - // templates - addTemplates(request, TemplateContextTypeIdsJSP.ALL, documentPosition); - return request; - } - - private JSPTemplateCompletionProcessor getTemplateCompletionProcessor() { - if (fTemplateProcessor == null) { - fTemplateProcessor = new JSPTemplateCompletionProcessor(); - } - return fTemplateProcessor; - } - - /** - * Adds templates to the list of proposals - * - * @param contentAssistRequest - * @param context - */ - private void addTemplates(ContentAssistRequest contentAssistRequest, String context) { - addTemplates(contentAssistRequest, context, contentAssistRequest.getReplacementBeginPosition()); - } - - /** - * Adds templates to the list of proposals - * - * @param contentAssistRequest - * @param context - */ - private void addTemplates(ContentAssistRequest contentAssistRequest, String context, int startOffset) { - if (contentAssistRequest == null) - return; - - // if already adding template proposals for a certain context type, do - // not add again - if (!fTemplateContexts.contains(context)) { - fTemplateContexts.add(context); - boolean useProposalList = !contentAssistRequest.shouldSeparate(); - - if (getTemplateCompletionProcessor() != null) { - getTemplateCompletionProcessor().setContextType(context); - ICompletionProposal[] proposals = getTemplateCompletionProcessor().computeCompletionProposals(fTextViewer, startOffset); - for (int i = 0; i < proposals.length; ++i) { - if (useProposalList) - contentAssistRequest.addProposal(proposals[i]); - else - contentAssistRequest.addMacro(proposals[i]); - } - } - } - } - - protected void addEntityProposals(ContentAssistRequest contentAssistRequest, int documentPosition, ITextRegion completionRegion, IDOMNode treeNode) { - // ignore - } - - protected void addTagInsertionProposals(ContentAssistRequest contentAssistRequest, int childPosition) { - addTemplates(contentAssistRequest, TemplateContextTypeIdsJSP.TAG); - - super.addTagInsertionProposals(contentAssistRequest, childPosition); - if (isInternalAdapter) - useEmbeddedResults = false; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java deleted file mode 100644 index 4664973fff..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPDummyContentAssistProcessor.java +++ /dev/null @@ -1,304 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.List; -import java.util.Properties; -import java.util.Vector; - -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.xml.core.internal.contentmodel.CMAttributeDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMContent; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNamedNodeMap; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.ui.internal.contentassist.AbstractContentAssistProcessor; -import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLContentModelGenerator; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -/** - * This class is a "null" version of AbstractContentAssistProcessor - * - * @plannedfor 1.0 - */ -public class JSPDummyContentAssistProcessor extends AbstractContentAssistProcessor { - protected void addAttributeNameProposals(ContentAssistRequest contentAssistRequest) { - super.addAttributeNameProposals(contentAssistRequest); - } - - protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) { - super.addAttributeValueProposals(contentAssistRequest); - } - - - protected void addCommentProposal(ContentAssistRequest contentAssistRequest) { - super.addCommentProposal(contentAssistRequest); - } - - - protected void addContent(List contentList, CMContent content) { - super.addContent(contentList, content); - } - - - protected void addDocTypeProposal(ContentAssistRequest contentAssistRequest) { - super.addDocTypeProposal(contentAssistRequest); - } - - - protected void addEmptyDocumentProposals(ContentAssistRequest contentAssistRequest) { - super.addEmptyDocumentProposals(contentAssistRequest); - } - - - protected void addEndTagNameProposals(ContentAssistRequest contentAssistRequest) { - super.addEndTagNameProposals(contentAssistRequest); - } - - - protected void addEndTagProposals(ContentAssistRequest contentAssistRequest) { - super.addEndTagProposals(contentAssistRequest); - } - - - protected void addEntityProposals(ContentAssistRequest contentAssistRequest, int documentPosition, ITextRegion completionRegion, IDOMNode treeNode) { - super.addEntityProposals(contentAssistRequest, documentPosition, completionRegion, treeNode); - } - - - protected void addEntityProposals(Vector proposals, Properties map, String key, int nodeOffset, IStructuredDocumentRegion parent, ITextRegion completionRegion) { - super.addEntityProposals(proposals, map, key, nodeOffset, parent, completionRegion); - } - - - protected void addPCDATAProposal(String nodeName, ContentAssistRequest contentAssistRequest) { - super.addPCDATAProposal(nodeName, contentAssistRequest); - } - - - protected void addStartDocumentProposals(ContentAssistRequest contentAssistRequest) { - super.addStartDocumentProposals(contentAssistRequest); - } - - - protected void addTagCloseProposals(ContentAssistRequest contentAssistRequest) { - super.addTagCloseProposals(contentAssistRequest); - } - - - protected void addTagInsertionProposals(ContentAssistRequest contentAssistRequest, int childPosition) { - super.addTagInsertionProposals(contentAssistRequest, childPosition); - } - - - protected void addTagNameProposals(ContentAssistRequest contentAssistRequest, int childPosition) { - super.addTagNameProposals(contentAssistRequest, childPosition); - } - - protected boolean attributeInList(IDOMNode node, Node parent, CMNode cmnode) { - return super.attributeInList(node, parent, cmnode); - } - - - protected boolean beginsWith(String aString, String prefix) { - return super.beginsWith(aString, prefix); - } - - - protected ContentAssistRequest computeAttributeProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeAttributeProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - - protected ContentAssistRequest computeAttributeValueProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeAttributeValueProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - - protected ContentAssistRequest computeCompletionProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode treeNode, IDOMNode xmlnode) { - return super.computeCompletionProposals(documentPosition, matchString, completionRegion, treeNode, xmlnode); - } - - - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) { - return super.computeCompletionProposals(viewer, documentOffset); - } - - - protected ContentAssistRequest computeContentProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeContentProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - - /** - * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, - * int) - */ - public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) { - return super.computeContextInformation(viewer, documentOffset); - } - - protected ContentAssistRequest computeEndTagOpenProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeEndTagOpenProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - - protected ICompletionProposal[] computeEntityReferenceProposals(int documentPosition, ITextRegion completionRegion, IDOMNode treeNode) { - return super.computeEntityReferenceProposals(documentPosition, completionRegion, treeNode); - } - - protected ContentAssistRequest computeEqualsProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeEqualsProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - protected ContentAssistRequest computeStartDocumentProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeStartDocumentProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - protected ContentAssistRequest computeTagCloseProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeTagCloseProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - protected ContentAssistRequest computeTagNameProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeTagNameProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - protected ContentAssistRequest computeTagOpenProposals(int documentPosition, String matchString, ITextRegion completionRegion, IDOMNode nodeAtOffset, IDOMNode node) { - return super.computeTagOpenProposals(documentPosition, matchString, completionRegion, nodeAtOffset, node); - } - - protected String getAdditionalInfo(CMNode parentOrOwner, CMNode cmnode) { - return super.getAdditionalInfo(parentOrOwner, cmnode); - } - - protected List getAvailableChildrenAtIndex(Element parent, int index, int validityChecking) { - return super.getAvailableChildrenAtIndex(parent, index, validityChecking); - } - - protected List getAvailableRootChildren(Document document, int childIndex) { - return super.getAvailableRootChildren(document, childIndex); - } - - protected CMElementDeclaration getCMElementDeclaration(Node node) { - return super.getCMElementDeclaration(node); - } - - public char[] getCompletionProposalAutoActivationCharacters() { - return super.getCompletionProposalAutoActivationCharacters(); - } - - protected ITextRegion getCompletionRegion(int offset, IStructuredDocumentRegion flatNode) { - return super.getCompletionRegion(offset, flatNode); - } - - protected ITextRegion getCompletionRegion(int documentPosition, Node domnode) { - return super.getCompletionRegion(documentPosition, domnode); - } - - public XMLContentModelGenerator getContentGenerator() { - return super.getContentGenerator(); - } - - public char[] getContextInformationAutoActivationCharacters() { - return super.getContextInformationAutoActivationCharacters(); - } - - public IContextInformationValidator getContextInformationValidator() { - return super.getContextInformationValidator(); - } - - protected int getElementPosition(Node child) { - return super.getElementPosition(child); - } - - /** - * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage() - */ - public String getErrorMessage() { - return super.getErrorMessage(); - } - - protected String getMatchString(IStructuredDocumentRegion parent, ITextRegion aRegion, int offset) { - return super.getMatchString(parent, aRegion, offset); - } - - protected ITextRegion getNameRegion(IStructuredDocumentRegion flatNode) { - return super.getNameRegion(flatNode); - } - - - protected List getPossibleDataTypeValues(Node node, CMAttributeDeclaration ad) { - return super.getPossibleDataTypeValues(node, ad); - } - - - protected String getRequiredName(Node parentOrOwner, CMNode cmnode) { - return super.getRequiredName(parentOrOwner, cmnode); - } - - protected String getRequiredText(Node parentOrOwner, CMAttributeDeclaration attrDecl) { - return super.getRequiredText(parentOrOwner, attrDecl); - } - - protected String getRequiredText(Node parentOrOwner, CMElementDeclaration elementDecl) { - return super.getRequiredText(parentOrOwner, elementDecl); - } - - protected List getValidChildElementDeclarations(Element parent, int childPosition, int kindOfAction) { - return super.getValidChildElementDeclarations(parent, childPosition, kindOfAction); - } - - protected void init() { - super.init(); - } - - protected boolean isCloseRegion(ITextRegion region) { - return super.isCloseRegion(region); - } - - protected boolean isNameRegion(ITextRegion region) { - return super.isNameRegion(region); - } - - protected boolean isQuote(String string) { - return super.isQuote(string); - } - - protected Properties mapToProperties(CMNamedNodeMap map) { - return super.mapToProperties(map); - } - - public void setErrorMessage(String errorMessage) { - super.setErrorMessage(errorMessage); - } - - protected void setErrorMessage(String errorMessage, String append) { - super.setErrorMessage(errorMessage, append); - } - - protected void setErrorMessage(String errorMessage, String prepend, String append) { - super.setErrorMessage(errorMessage, prepend, append); - } - - protected boolean stringsEqual(String a, String b) { - return super.stringsEqual(a, b); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELCompletionProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELCompletionProcessor.java deleted file mode 100644 index 0ef4b79b2b..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELCompletionProcessor.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; - -public class JSPELCompletionProcessor extends JSPCompletionProcessor { - protected JSPProposalCollector getProposalCollector(ICompilationUnit cu, JSPTranslation translation) { - return new JSPELProposalCollector(cu, translation); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELContentAssistProcessor.java deleted file mode 100644 index ad5ce00aa9..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELContentAssistProcessor.java +++ /dev/null @@ -1,149 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.CMDocumentImpl; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.provisional.TLDFunction; -import org.eclipse.jst.jsp.core.internal.java.jspel.ASTExpression; -import org.eclipse.jst.jsp.core.internal.java.jspel.ASTFunctionInvocation; -import org.eclipse.jst.jsp.core.internal.java.jspel.FindFunctionInvocationVisitor; -import org.eclipse.jst.jsp.core.internal.java.jspel.JSPELParser; -import org.eclipse.jst.jsp.core.internal.java.jspel.JSPELParserConstants; -import org.eclipse.jst.jsp.core.internal.java.jspel.JSPELParserTokenManager; -import org.eclipse.jst.jsp.core.internal.java.jspel.ParseException; -import org.eclipse.jst.jsp.core.internal.java.jspel.SimpleCharStream; -import org.eclipse.jst.jsp.core.internal.java.jspel.Token; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; -import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - -public class JSPELContentAssistProcessor extends JSPJavaContentAssistProcessor { - protected char elCompletionProposalAutoActivationCharacters[] = new char[]{'.', ':'}; - - protected JSPCompletionProcessor getJspCompletionProcessor() { - if (fJspCompletionProcessor == null) { - fJspCompletionProcessor = new JSPELCompletionProcessor(); - } - return fJspCompletionProcessor; - } - - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentPosition) { - - - // get results from JSP completion processor - fJspCompletionProcessor = getJspCompletionProcessor(); - ICompletionProposal[] results = fJspCompletionProcessor.computeCompletionProposals(viewer, documentPosition); - fErrorMessage = fJspCompletionProcessor.getErrorMessage(); - if (results.length == 0 && (fErrorMessage == null || fErrorMessage.length() == 0)) { - fErrorMessage = UNKNOWN_CONTEXT; - } - - IStructuredDocumentRegion flat = ContentAssistUtils.getStructuredDocumentRegion(viewer, documentPosition); - - if (flat != null) { - ITextRegion cursorRegion = flat.getRegionAtCharacterOffset(documentPosition); - if (DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE == cursorRegion.getType()) { - ITextRegionContainer container = (ITextRegionContainer) cursorRegion; - cursorRegion = container.getRegionAtCharacterOffset(documentPosition); - if (cursorRegion.getType() == DOMJSPRegionContexts.JSP_EL_CONTENT) { - String elText = container.getText(cursorRegion).trim(); - String prefix = getPrefix(documentPosition - container.getStartOffset(cursorRegion) - 1, elText); - if (null != prefix) { - List proposals = getFunctionProposals(prefix, (StructuredTextViewer) viewer, documentPosition); - results = new ICompletionProposal[proposals.size()]; - proposals.toArray(results); - } - } - } - } - - - return results; - } - - protected String getPrefix(int relativePosition, String elText) { - java.io.StringReader reader = new java.io.StringReader(elText); - JSPELParserTokenManager scanner = new JSPELParserTokenManager(new SimpleCharStream(reader, 1, 1)); - Token curToken = null, lastIdentifier = null; - while (JSPELParserConstants.EOF != (curToken = scanner.getNextToken()).kind) { - if (JSPELParserConstants.COLON == curToken.kind && curToken.endColumn == relativePosition && null != lastIdentifier) { - return (lastIdentifier.image); - } - - if (JSPELParserConstants.IDENTIFIER == curToken.kind) { - lastIdentifier = curToken; - } - else { - lastIdentifier = null; - } - } - return null; - } - - protected ASTFunctionInvocation getInvocation(int relativePosition, String elText) { - FindFunctionInvocationVisitor visitor = new FindFunctionInvocationVisitor(relativePosition); - JSPELParser parser = JSPELParser.createParser(elText); - try { - ASTExpression expression = parser.Expression(); - return (ASTFunctionInvocation) expression.jjtAccept(visitor, null); - } - catch (ParseException e) { /* parse exception = no completion */ - } - return (null); - } - - - public char[] getCompletionProposalAutoActivationCharacters() { - return elCompletionProposalAutoActivationCharacters; - } - - protected List getFunctionProposals(String prefix, StructuredTextViewer viewer, int offset) { - TLDCMDocumentManager docMgr = TaglibController.getTLDCMDocumentManager(viewer.getDocument()); - ArrayList completionList = new ArrayList(); - if (docMgr == null) - return null; - - Iterator taglibs = docMgr.getCMDocumentTrackers(offset).iterator(); - while (taglibs.hasNext()) { - TaglibTracker tracker = (TaglibTracker) taglibs.next(); - if (tracker.getPrefix().equals(prefix)) { - CMDocumentImpl doc = (CMDocumentImpl) tracker.getDocument(); - - List functions = doc.getFunctions(); - for (Iterator it = functions.iterator(); it.hasNext();) { - TLDFunction function = (TLDFunction) it.next(); - CustomCompletionProposal proposal = new CustomCompletionProposal(function.getName() + "()", //$NON-NLS-1$ - offset, 0, function.getName().length() + 1, null, function.getName() + " - " + function.getSignature(), null, null, 1); //$NON-NLS-1$ - - completionList.add(proposal); - } - } - } - return completionList; - } - - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELProposalCollector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELProposalCollector.java deleted file mode 100644 index 5aa3eb8894..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPELProposalCollector.java +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jdt.core.CompletionProposal; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.swt.graphics.Image; - -public class JSPELProposalCollector extends JSPProposalCollector { - - public JSPELProposalCollector(ICompilationUnit cu, JSPTranslation translation) { - super(cu, translation); - } - - protected IJavaCompletionProposal createJavaCompletionProposal(CompletionProposal proposal) { - JSPCompletionProposal jspProposal = null; - - if(null == proposal || null == proposal.getName()) - return(null); - - String rawName = new String(proposal.getName()); - String completion = null; - - if(proposal.getKind() == CompletionProposal.METHOD_REF && proposal.findParameterNames(null).length == 0) { - if(rawName.length() > 3 && rawName.startsWith("get")) { //$NON-NLS-1$ - completion = rawName.substring(3,4).toLowerCase() + rawName.substring(4, rawName.length()); - } else { - return null; - } - - // java offset - int offset = proposal.getReplaceStart() + 1; - - // replacement length - int length = proposal.getReplaceEnd() - offset + 1; - - // translate offset from Java > JSP - offset = getTranslation().getJspOffset(offset); - - // cursor position after must be calculated - int positionAfter = offset + completion.length(); - - // from java proposal - IJavaCompletionProposal javaProposal = super.createJavaCompletionProposal(proposal); - Image image = null; - String longDisplayString = javaProposal.getDisplayString(); - int fistSpaceIndex = longDisplayString.indexOf(' '); - String shortDisplayString = longDisplayString; - - if(fistSpaceIndex != -1) { - shortDisplayString = longDisplayString.substring(fistSpaceIndex); - } - - String displayString = completion + " " + shortDisplayString; //$NON-NLS-1$ - IContextInformation contextInformation = javaProposal.getContextInformation(); - String additionalInfo = javaProposal.getAdditionalProposalInfo(); - int relevance = javaProposal.getRelevance(); - - boolean updateLengthOnValidate = true; - - jspProposal = new JSPCompletionProposal(completion, offset, length, positionAfter, image, displayString, contextInformation, additionalInfo, relevance, updateLengthOnValidate); - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124483 - // set wrapped java proposal so additional info can be calculated on demand - jspProposal.setJavaCompletionProposal(javaProposal); - - return jspProposal; - } else { - return null; - } - } - -// protected void acceptMethod(char[] declaringTypePackageName, char[] declaringTypeName, char[] name, char[][] parameterPackageNames, char[][] parameterTypeNames, char[][] parameterNames, char[] returnTypePackageName, char[] returnTypeName, char[] completionName, int modifiers, int start, int end, int relevance) { -// String rawName = String.valueOf(name); -// if(parameterNames.length == 0 && rawName.length() > 3 && rawName.startsWith("get")) -// { -// String mangledName = rawName.substring(3,4).toLowerCase() + rawName.substring(4, rawName.length()); -// super.acceptField(declaringTypePackageName, declaringTypeName, mangledName.toCharArray(), returnTypePackageName, returnTypeName, mangledName.toCharArray(), modifiers, start, end, relevance); -// } -// } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPJavaContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPJavaContentAssistProcessor.java deleted file mode 100644 index 1e4b3981fe..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPJavaContentAssistProcessor.java +++ /dev/null @@ -1,305 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentExtension3; -import org.eclipse.jface.text.IDocumentPartitioner; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredPartitioning; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.ui.internal.IReleasable; -import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLRelevanceConstants; -import org.eclipse.wst.xml.ui.internal.util.SharedXMLEditorPluginImageHelper; - -/** - * @plannedfor 1.0 - */ -public class JSPJavaContentAssistProcessor implements IContentAssistProcessor, IReleasable { - /** - * Preference listener to keep track of changes to content assist - * preferences - */ - private class PreferenceListener implements IPropertyChangeListener { - public void propertyChange(PropertyChangeEvent event) { - String property = event.getProperty(); - IPreferenceStore store = getJavaPreferenceStore(); - - if (PreferenceConstants.CODEASSIST_AUTOACTIVATION.equals(property)) { - fAutoActivate = store.getBoolean(PreferenceConstants.CODEASSIST_AUTOACTIVATION); - } - else if (PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA.equals(property)) { - String autoCharacters = store.getString(PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA); - completionProposalAutoActivationCharacters = (autoCharacters != null) ? autoCharacters.toCharArray() : new char[0]; - } - } - } - - private boolean fAutoActivate = true; - protected char completionProposalAutoActivationCharacters[] = new char[]{'.'}; - protected char contextInformationAutoActivationCharacters[] = null; - protected static final String UNKNOWN_CONTEXT = JSPUIMessages.Content_Assist_not_availab_UI_; - protected String fErrorMessage = null; - protected JSPCompletionProcessor fJspCompletionProcessor = null; - private IPropertyChangeListener fJavaPreferenceListener; - - public JSPJavaContentAssistProcessor() { - super(); - } - - /** - * Return a list of proposed code completions based on the specified - * location within the document that corresponds to the current cursor - * position within the text-editor control. - * - * @param documentPosition - * a location within the document - * @return an array of code-assist items - */ - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentPosition) { - - IndexedRegion treeNode = ContentAssistUtils.getNodeAt(viewer, documentPosition); - - // get results from JSP completion processor - fJspCompletionProcessor = getJspCompletionProcessor(); - ICompletionProposal[] results = fJspCompletionProcessor.computeCompletionProposals(viewer, documentPosition); - fErrorMessage = fJspCompletionProcessor.getErrorMessage(); - if (results.length == 0 && (fErrorMessage == null || fErrorMessage.length() == 0)) { - fErrorMessage = UNKNOWN_CONTEXT; - } - - IDOMNode xNode = null; - IStructuredDocumentRegion flat = null; - if (treeNode instanceof IDOMNode) { - xNode = (IDOMNode) treeNode; - flat = xNode.getFirstStructuredDocumentRegion(); - if (flat != null && flat.getType() == DOMJSPRegionContexts.JSP_CONTENT) { - flat = flat.getPrevious(); - } - } - - // this is in case it's a <%@, it will be a region container... - ITextRegion openRegion = null; - if (flat != null && flat instanceof ITextRegionContainer) { - ITextRegionList v = ((ITextRegionContainer) flat).getRegions(); - if (v.size() > 0) - openRegion = v.get(0); - } - - // ADD CDATA PROPOSAL IF IT'S AN XML-JSP TAG - if (flat != null && flat.getType() != DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN && flat.getType() != DOMJSPRegionContexts.JSP_DECLARATION_OPEN && flat.getType() != DOMJSPRegionContexts.JSP_EXPRESSION_OPEN && flat.getType() != DOMRegionContext.BLOCK_TEXT && (openRegion != null && openRegion.getType() != DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN) && !inAttributeRegion(flat, documentPosition)) { - - // determine if cursor is before or after selected range - int adjustedDocPosition = documentPosition; - int realCaretPosition = viewer.getTextWidget().getCaretOffset(); - int selectionLength = viewer.getSelectedRange().y; - if (documentPosition > realCaretPosition) { - adjustedDocPosition -= selectionLength; - } - - CustomCompletionProposal cdataProposal = createCDATAProposal(adjustedDocPosition, selectionLength); - ICompletionProposal[] newResults = new ICompletionProposal[results.length + 1]; - System.arraycopy(results, 0, newResults, 0, results.length); - newResults[results.length] = cdataProposal; - results = newResults; - } - - // (pa) ** this is code in progress... - // add ending %> proposal for non closed JSP tags - // String tagText = flat.getText(); - // // TODO need a much better compare (using constants?) - // if(tagText.equals("<%") || tagText.equals("<%=") || tagText.equals("<%!")); - // { - // ICompletionProposal testah = ContentAssistUtils.computeJSPEndTagProposal(viewer,documentPosition, treeNode, "<%" , SharedXMLEditorPluginImageHelper.IMG_OBJ_TAG_GENERIC); - // if(testah != null) - // { - // ICompletionProposal[] newResults = new ICompletionProposal[results.length + 1]; - // System.arraycopy( results, 0, newResults, 0, results.length); - // newResults[results.length] = testah; - // results = newResults; - // } - // } - - return results; - } - - private CustomCompletionProposal createCDATAProposal(int adjustedDocPosition, int selectionLength) { - return new CustomCompletionProposal("<![CDATA[]]>", //$NON-NLS-1$ - adjustedDocPosition, selectionLength, // should be the selection length - 9, SharedXMLEditorPluginImageHelper.getImage(SharedXMLEditorPluginImageHelper.IMG_OBJ_CDATASECTION), - "CDATA Section", //$NON-NLS-1$ - null, null, XMLRelevanceConstants.R_CDATA); - } - - private boolean inAttributeRegion(IStructuredDocumentRegion flat, int documentPosition) { - ITextRegion attrContainer = flat.getRegionAtCharacterOffset(documentPosition); - if (attrContainer != null && attrContainer instanceof ITextRegionContainer) { - if (attrContainer.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - return true; - } - } - return false; - } - - /** - * Returns the characters which when entered by the user should - * automatically trigger the presentation of possible completions. - * - * @return the auto activation characters for completion proposal or - * <code>null</code> if no auto activation is desired - */ - public char[] getCompletionProposalAutoActivationCharacters() { - // if no listener has been created, preferenes have not been - // initialized - if (fJavaPreferenceListener == null) - initializePreferences(); - - if (fAutoActivate) - return completionProposalAutoActivationCharacters; - else - return null; - } - - /** - * Returns the characters which when entered by the user should - * automatically trigger the presentation of context information. - * - * @return the auto activation characters for presenting context - * information or <code>null</code> if no auto activation is - * desired - */ - public char[] getContextInformationAutoActivationCharacters() { - return contextInformationAutoActivationCharacters; - } - - /** - * Return the reason why computeProposals was not able to find any - * completions. - * - * @return an error message or null if no error occurred - */ - public String getErrorMessage() { - return fErrorMessage; - } - - /** - * @see ContentAssistAdapter#release() - */ - public void release() { - // remove listener on java preferences if we added one - if (fJavaPreferenceListener != null) { - getJavaPreferenceStore().removePropertyChangeListener(fJavaPreferenceListener); - } - - if (fJspCompletionProcessor != null) { - fJspCompletionProcessor.release(); - fJspCompletionProcessor = null; - } - } - - /** - * - */ - protected JSPCompletionProcessor getJspCompletionProcessor() { - if (fJspCompletionProcessor == null) { - fJspCompletionProcessor = new JSPCompletionProcessor(); - } - return fJspCompletionProcessor; - } - - /** - * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, - * int) - */ - public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) { - List results = new ArrayList(); - // need to compute context info here, if it's JSP, call java computer - IDocument doc = viewer.getDocument(); - IDocumentPartitioner dp = null; - if (doc instanceof IDocumentExtension3) { - dp = ((IDocumentExtension3) doc).getDocumentPartitioner(IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING); - } - if (dp != null) { - //IDocumentPartitioner dp = viewer.getDocument().getDocumentPartitioner(); - String type = dp.getPartition(documentOffset).getType(); - if (type == IJSPPartitions.JSP_DEFAULT || type == IJSPPartitions.JSP_CONTENT_JAVA) { - // get context info from completion results... - ICompletionProposal[] proposals = computeCompletionProposals(viewer, documentOffset); - for (int i = 0; i < proposals.length; i++) { - IContextInformation ci = proposals[i].getContextInformation(); - if (ci != null) - results.add(ci); - } - } - } - return (IContextInformation[]) results.toArray(new IContextInformation[results.size()]); - } - - /** - * Returns a validator used to determine when displayed context - * information should be dismissed. May only return <code>null</code> if - * the processor is incapable of computing context information. - * - * @return a context information validator, or <code>null</code> if the - * processor is incapable of computing context information - */ - public IContextInformationValidator getContextInformationValidator() { - return new JavaParameterListValidator(); - } - - /** - * Gets the java preference store. If this is the first time getting it, - * add a preference listener to it. - * - * @return IPreferenceStore - */ - private IPreferenceStore getJavaPreferenceStore() { - IPreferenceStore store = PreferenceConstants.getPreferenceStore(); - if (fJavaPreferenceListener == null) { - fJavaPreferenceListener = new PreferenceListener(); - store.addPropertyChangeListener(fJavaPreferenceListener); - } - return store; - } - - /** - * Initialize preference for content assist - */ - private void initializePreferences() { - IPreferenceStore store = getJavaPreferenceStore(); - - fAutoActivate = store.getBoolean(PreferenceConstants.CODEASSIST_AUTOACTIVATION); - String autoCharacters = store.getString(PreferenceConstants.CODEASSIST_AUTOACTIVATION_TRIGGERS_JAVA); - completionProposalAutoActivationCharacters = (autoCharacters != null) ? autoCharacters.toCharArray() : new char[0]; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPPropertyContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPPropertyContentAssistProcessor.java deleted file mode 100644 index 007744d872..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPPropertyContentAssistProcessor.java +++ /dev/null @@ -1,259 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - - - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImageHelper; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImages; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; -import org.eclipse.wst.xml.ui.internal.contentassist.XMLRelevanceConstants; -import org.eclipse.wst.xml.ui.internal.util.SharedXMLEditorPluginImageHelper; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * This class computes attribute value completion proposals for <jsp:[gs]etProperty> tags. - * @plannedfor 1.0 - */ -public class JSPPropertyContentAssistProcessor extends JSPDummyContentAssistProcessor { - public JSPPropertyContentAssistProcessor() { - super(); - } - - protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) { - IDOMNode node = (IDOMNode) contentAssistRequest.getNode(); - - // Find the attribute name for which this position should have a value - IStructuredDocumentRegion open = node.getFirstStructuredDocumentRegion(); - ITextRegionList openRegions = open.getRegions(); - int i = openRegions.indexOf(contentAssistRequest.getRegion()); - if (i < 0) - return; - - // get the attribute in question (first attr name to the left of the cursor) - ITextRegion attrNameRegion = null; - String attributeName = null; - while (i >= 0) { - attrNameRegion = openRegions.get(i--); - if (attrNameRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) - break; - } - if (attrNameRegion != null) - attributeName = open.getText(attrNameRegion); - - // determine get or set - ITextRegion tagNameRegion = null; - boolean isGetProperty = true; - for (int j = 0; j < openRegions.size(); j++) { - tagNameRegion = openRegions.get(j); - if (tagNameRegion.getType() == DOMRegionContext.XML_TAG_NAME && open.getText(tagNameRegion).trim().equals("jsp:setProperty")) { //$NON-NLS-1$ - isGetProperty = false; - break; - } - } - - String currentValue = null; - if (contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) - currentValue = contentAssistRequest.getText(); - else - currentValue = ""; //$NON-NLS-1$ - String matchString = null; - // fixups since the matchString computations don't care if there are quotes around the value - if (currentValue.length() > StringUtils.strip(currentValue).length() && (currentValue.startsWith("\"") || currentValue.startsWith("'")) && contentAssistRequest.getMatchString().length() > 0) //$NON-NLS-1$ //$NON-NLS-2$ - matchString = currentValue.substring(1, contentAssistRequest.getMatchString().length()); - else - matchString = currentValue.substring(0, contentAssistRequest.getMatchString().length()); - - // for now we ignore complicated values such as jsp embedded in an attribute - boolean existingComplicatedValue = contentAssistRequest.getRegion() != null && contentAssistRequest.getRegion() instanceof ITextRegionContainer; - if (existingComplicatedValue) { - contentAssistRequest.getProposals().clear(); - contentAssistRequest.getMacros().clear(); - } - else { - if (attributeName.equals(JSP11Namespace.ATTR_NAME_NAME)) { - addBeanNameProposals(contentAssistRequest, node, matchString); - } - else if (attributeName.equals(JSP11Namespace.ATTR_NAME_PROPERTY)) { - addBeanPropertyProposals(contentAssistRequest, node, isGetProperty, matchString); - } - } - } - - private void addBeanPropertyProposals(ContentAssistRequest contentAssistRequest, IDOMNode node, boolean isGetProperty, String matchString) { - // assumes that the node is the [gs]etProperty tag - String useBeanName = ((Element) node).getAttribute(JSP11Namespace.ATTR_NAME_NAME); - // properties can only be provided if a class/type/beanName has been declared - if (useBeanName != null && useBeanName.length() > 0) { - NodeList useBeans = node.getOwnerDocument().getElementsByTagName(JSP11Namespace.ElementName.USEBEAN); - if (useBeans != null) { - String typeName = null; - for (int j = 0; j < useBeans.getLength(); j++) { - if (useBeans.item(j).getNodeType() != Node.ELEMENT_NODE) - continue; - Element useBean = (Element) useBeans.item(j); - if (useBean instanceof IndexedRegion && ((IndexedRegion) useBean).getStartOffset() < node.getStartOffset()) { - if (useBean.getAttribute(JSP11Namespace.ATTR_NAME_ID).equals(useBeanName)) { - typeName = useBean.getAttribute(JSP11Namespace.ATTR_NAME_CLASS); - if (typeName == null || typeName.length() < 1) { - typeName = useBean.getAttribute(JSP11Namespace.ATTR_NAME_TYPE); - } - if (typeName == null || typeName.length() < 1) { - typeName = useBean.getAttribute(JSP11Namespace.ATTR_NAME_BEAN_NAME); - } - } - } - } - if (typeName != null && typeName.length() > 0) { - // find the class/type/beanName definition and obtain the list of properties - IBeanInfoProvider provider = new BeanInfoProvider(); - IResource resource = getResource(contentAssistRequest); - IJavaPropertyDescriptor[] descriptors = provider.getRuntimeProperties(resource, typeName); - CustomCompletionProposal proposal = null; - String displayString = ""; //$NON-NLS-1$ - for (int j = 0; j < descriptors.length; j++) { - IJavaPropertyDescriptor pd = descriptors[j]; - // check whether it's get or set kinda property - if (pd.getReadable() && isGetProperty || pd.getWriteable() && !isGetProperty) { - // filter attr value name - if (matchString.length() == 0 || pd.getName().toLowerCase().startsWith(matchString.toLowerCase())) { - displayString = pd.getDisplayName(); - if (pd.getDeclaredType() != null && pd.getDeclaredType().length() > 0) - displayString += " - " + pd.getDeclaredType(); //$NON-NLS-1$ - proposal = new CustomCompletionProposal("\"" + pd.getName() + "\"", //$NON-NLS-1$ //$NON-NLS-2$ - contentAssistRequest.getReplacementBeginPosition(), contentAssistRequest.getReplacementLength(), pd.getName().length() + 2, SharedXMLEditorPluginImageHelper.getImage(SharedXMLEditorPluginImageHelper.IMG_OBJ_ATTRIBUTE), - displayString, null, pd.getDeclaredType(), XMLRelevanceConstants.R_XML_ATTRIBUTE_VALUE); - contentAssistRequest.addProposal(proposal); - } - } - } - } - } - } - } - - private void addBeanNameProposals(ContentAssistRequest contentAssistRequest, IDOMNode node, String matchString) { - // will not catch useBeans specified using other than actual DOM Nodes - NodeList useBeans = node.getOwnerDocument().getElementsByTagName(JSP11Namespace.ElementName.USEBEAN); - if (useBeans != null) { - String id = ""; //$NON-NLS-1$ - String displayString = null; - String classOrType = null; - String imageName = JSPEditorPluginImages.IMG_OBJ_CLASS_OBJ; - for (int j = 0; j < useBeans.getLength(); j++) { - if (useBeans.item(j).getNodeType() != Node.ELEMENT_NODE) - continue; - Element useBean = (Element) useBeans.item(j); - if (useBean instanceof IndexedRegion && ((IndexedRegion) useBean).getStartOffset() < node.getStartOffset()) { - id = StringUtils.strip(useBean.getAttribute(JSP11Namespace.ATTR_NAME_ID)); - displayString = null; - classOrType = null; - imageName = JSPEditorPluginImages.IMG_OBJ_CLASS_OBJ; - // set the Image based on whether the class, type, or beanName attribute is present - classOrType = useBean.getAttribute(JSP11Namespace.ATTR_NAME_CLASS); - if (classOrType == null || classOrType.length() < 1) { - classOrType = useBean.getAttribute(JSP11Namespace.ATTR_NAME_TYPE); - imageName = JSPEditorPluginImages.IMG_OBJ_PUBLIC; - } - if (classOrType == null || classOrType.length() < 1) { - classOrType = useBean.getAttribute(JSP11Namespace.ATTR_NAME_BEAN_NAME); - imageName = JSPEditorPluginImages.IMG_OBJ_PUBLIC; - } - if (classOrType != null && classOrType.length() > 0) - displayString = id + " - " + classOrType; //$NON-NLS-1$ - else - displayString = id; - - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=2341 - if(id != null) { - // filter - if (matchString.length() == 0 || id.startsWith(matchString)) { - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + id + "\"", //$NON-NLS-1$ //$NON-NLS-2$ - contentAssistRequest.getReplacementBeginPosition(), - contentAssistRequest.getReplacementLength(), - id.length() + 2, - JSPEditorPluginImageHelper.getInstance().getImage(imageName), - displayString, - null, - null, - XMLRelevanceConstants.R_XML_ATTRIBUTE_VALUE); - contentAssistRequest.addProposal(proposal); - } - } - } - } - } - } - - /** - * Returns project request is in - * - * @param request - * @return - */ - private IResource getResource(ContentAssistRequest request) { - IResource resource = null; - String baselocation = null; - - if (request != null) { - IStructuredDocumentRegion region = request.getDocumentRegion(); - if (region != null) { - IDocument document = region.getParentDocument(); - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - baselocation = model.getBaseLocation(); - } - } finally { - if (model != null) - model.releaseFromRead(); - } - } - } - - if (baselocation != null) { - // copied from JSPTranslationAdapter#getJavaProject - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IPath filePath = new Path(baselocation); - IFile file = null; - - if (filePath.segmentCount() > 1) { - file = root.getFile(filePath); - } - if (file != null) { - resource = file.getProject(); - } - } - return resource; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPProposalCollector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPProposalCollector.java deleted file mode 100644 index 61e9cebd6b..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPProposalCollector.java +++ /dev/null @@ -1,219 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.eclipse.jdt.core.CompletionProposal; -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.ui.text.java.CompletionProposalCollector; -import org.eclipse.jdt.ui.text.java.CompletionProposalComparator; -import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.swt.graphics.Image; - -/** - * Passed into ICodeComplete#codeComplete(int offset, CompletionRequestor requestor). - * Adapts IJavaCompletionProposals to JSPCompletion proposals. - * This includes: - * - translating offsets - * - "fixing" up display strings - * - filtering some unwanted proposals - * - * @plannedfor 1.0 - */ -public class JSPProposalCollector extends CompletionProposalCollector { - - private JSPTranslation fTranslation; - private Comparator fComparator; - - public JSPProposalCollector(ICompilationUnit cu, JSPTranslation translation) { - super(cu); - - if(translation == null) - throw new IllegalArgumentException("JSPTranslation cannot be null"); //$NON-NLS-1$ - - fTranslation = translation; - } - - /** - * Ensures that we only return JSPCompletionProposals. - * @return an array of JSPCompletionProposals - */ - public JSPCompletionProposal[] getJSPCompletionProposals() { - List results = new ArrayList(); - IJavaCompletionProposal[] javaProposals = getJavaCompletionProposals(); - // need to filter out non JSPCompletionProposals - // because their offsets haven't been translated - for (int i = 0; i < javaProposals.length; i++) { - if(javaProposals[i] instanceof JSPCompletionProposal) - results.add(javaProposals[i]); - } - Collections.sort(results, getComparator()); - return (JSPCompletionProposal[])results.toArray(new JSPCompletionProposal[results.size()]); - } - - private Comparator getComparator() { - if(fComparator == null) - fComparator = new CompletionProposalComparator(); - return fComparator; - } - - /** - * Overridden to: - * - translate Java -> JSP offsets - * - fix cursor-position-after - * - fix mangled servlet name in display string - * - remove unwanted proposals (servlet constructor) - */ - protected IJavaCompletionProposal createJavaCompletionProposal(CompletionProposal proposal) { - - JSPCompletionProposal jspProposal = null; - - // ignore constructor proposals (they're not relevant for our JSP proposal list) - if(!proposal.isConstructor()) { - - if(proposal.getKind() == CompletionProposal.TYPE_REF) { - String signature = String.valueOf(proposal.getDeclarationSignature()); - String completion = String.valueOf(proposal.getCompletion()); - if(completion.indexOf(signature) != -1) { - jspProposal = createAutoImportProposal(proposal); - } - } - - // default behavior - if(jspProposal == null) - jspProposal = createJspProposal(proposal); - } - return jspProposal; - } - - - - private JSPCompletionProposal createAutoImportProposal(CompletionProposal proposal) { - - JSPCompletionProposal jspProposal = null; - - String signature = new String(proposal.getDeclarationSignature()); - String completion = new String(proposal.getCompletion()); - - // it's fully qualified so we should - // add an import statement - // create an autoimport proposal - String newCompletion = completion.replaceAll(signature + ".", ""); //$NON-NLS-1$ //$NON-NLS-2$ - - // java offset - int offset = proposal.getReplaceStart(); - // replacement length - int length = proposal.getReplaceEnd() - offset; - // translate offset from Java > JSP - offset = fTranslation.getJspOffset(offset); - // cursor position after must be calculated - int positionAfter = calculatePositionAfter(proposal, newCompletion, offset); - - // from java proposal - IJavaCompletionProposal javaProposal = super.createJavaCompletionProposal(proposal); - proposal.getDeclarationSignature(); - Image image = javaProposal.getImage(); - String displayString = javaProposal.getDisplayString(); - displayString = getTranslation().fixupMangledName(displayString); - IContextInformation contextInformation = javaProposal.getContextInformation(); - // don't do this, it's slow - // String additionalInfo = javaProposal.getAdditionalProposalInfo(); - int relevance = javaProposal.getRelevance(); - - boolean updateLengthOnValidate = true; - - jspProposal = new AutoImportProposal(completion, newCompletion, offset, length, positionAfter, image, displayString, contextInformation, null, relevance, updateLengthOnValidate); - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124483 - // set wrapped java proposal so additional info can be calculated on demand - jspProposal.setJavaCompletionProposal(javaProposal); - - return jspProposal; - } - - private JSPCompletionProposal createJspProposal(CompletionProposal proposal) { - - JSPCompletionProposal jspProposal; - String completion = String.valueOf(proposal.getCompletion()); - // java offset - int offset = proposal.getReplaceStart(); - // replacement length - int length = proposal.getReplaceEnd() - offset; - // translate offset from Java > JSP - offset = fTranslation.getJspOffset(offset); - // cursor position after must be calculated - int positionAfter = calculatePositionAfter(proposal, completion, offset); - - // from java proposal - IJavaCompletionProposal javaProposal = super.createJavaCompletionProposal(proposal); - proposal.getDeclarationSignature(); - Image image = javaProposal.getImage(); - String displayString = javaProposal.getDisplayString(); - displayString = getTranslation().fixupMangledName(displayString); - IContextInformation contextInformation = javaProposal.getContextInformation(); - // String additionalInfo = javaProposal.getAdditionalProposalInfo(); - int relevance = javaProposal.getRelevance(); - - boolean updateLengthOnValidate = true; - - jspProposal = new JSPCompletionProposal(completion, offset, length, positionAfter, image, displayString, contextInformation, null, relevance, updateLengthOnValidate); - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=124483 - // set wrapped java proposal so additional info can be calculated on demand - jspProposal.setJavaCompletionProposal(javaProposal); - - return jspProposal; - } - - /** - * Cacluates the where the cursor should be after applying this proposal. - * eg. method(|) if the method proposal chosen had params. - * - * @param proposal - * @param completion - * @param currentCursorOffset - * @return - */ - private int calculatePositionAfter(CompletionProposal proposal, String completion, int currentCursorOffset) { - // calculate cursor position after - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=118398 - //int positionAfter = currentCursorOffset+completion.length(); - int positionAfter = completion.length(); - - int kind = proposal.getKind(); - - // may need better logic here... - // put cursor inside parenthesis if there's params - // only checking for any kind of declaration - if(kind == CompletionProposal.ANONYMOUS_CLASS_DECLARATION || kind == CompletionProposal.METHOD_DECLARATION || kind == CompletionProposal.POTENTIAL_METHOD_DECLARATION || kind == CompletionProposal.METHOD_REF) { - String[] params = Signature.getParameterTypes(String.valueOf(proposal.getSignature())); - if(completion.length() > 0 && params.length > 0) - positionAfter--; - } - return positionAfter; - } - - static char[] getTypeTriggers() { - return TYPE_TRIGGERS; - } - - public JSPTranslation getTranslation() { - return fTranslation; - } - -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTaglibDirectiveContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTaglibDirectiveContentAssistProcessor.java deleted file mode 100644 index 9df78c2349..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTaglibDirectiveContentAssistProcessor.java +++ /dev/null @@ -1,389 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.util.FacetModuleCoreSupport; -import org.eclipse.jst.jsp.core.taglib.IJarRecord; -import org.eclipse.jst.jsp.core.taglib.ITLDRecord; -import org.eclipse.jst.jsp.core.taglib.ITagDirRecord; -import org.eclipse.jst.jsp.core.taglib.ITaglibDescriptor; -import org.eclipse.jst.jsp.core.taglib.ITaglibRecord; -import org.eclipse.jst.jsp.core.taglib.IURLRecord; -import org.eclipse.jst.jsp.core.taglib.TaglibIndex; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.swt.graphics.Image; -import org.eclipse.wst.common.uriresolver.internal.util.URIHelper; -import org.eclipse.wst.html.core.internal.contentmodel.JSP20Namespace; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceConstants; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; -import org.eclipse.wst.xml.ui.internal.editor.XMLEditorPluginImageHelper; -import org.eclipse.wst.xml.ui.internal.editor.XMLEditorPluginImages; -import org.w3c.dom.Node; - -/** - * @plannedfor 1.0 - */ -public class JSPTaglibDirectiveContentAssistProcessor extends JSPDummyContentAssistProcessor { - - public JSPTaglibDirectiveContentAssistProcessor() { - super(); - } - - String getSmallImageURL(ITaglibRecord taglibRecord) { - String url = null; - switch (taglibRecord.getRecordType()) { - case (ITaglibRecord.TLD) : { - ITLDRecord record = (ITLDRecord) taglibRecord; - IResource file = ResourcesPlugin.getWorkspace().getRoot().getFile(record.getPath()); - if (file.getLocation() != null && record.getDescriptor().getSmallIcon().length() > 0) { - url = "file:" + FacetModuleCoreSupport.resolve(file.getFullPath(), record.getDescriptor().getSmallIcon()); //$NON-NLS-1$ - } - } - break; - case (ITaglibRecord.JAR) : { - IJarRecord record = (IJarRecord) taglibRecord; - if (record.getDescriptor().getSmallIcon().length() > 0) { - // url = "file:" + - // URIHelper.normalize(record.getDescriptor().getSmallIcon(), - // record.getLocation().toString(), "/"); //$NON-NLS-1$ - } - } - break; - case (ITaglibRecord.TAGDIR) : { - } - break; - case (ITaglibRecord.URL) : { - IURLRecord record = (IURLRecord) taglibRecord; - if (record.getDescriptor().getSmallIcon().length() > 0) { - url = URIHelper.normalize(record.getDescriptor().getSmallIcon(), record.getURL().toString(), "/"); //$NON-NLS-1$ - } - } - break; - } - return url; - } - - - protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) { - IPath basePath = getBasePath(contentAssistRequest); - if (basePath == null) - return; - - IDOMNode node = (IDOMNode) contentAssistRequest.getNode(); - - // Find the attribute name for which this position should have a value - IStructuredDocumentRegion open = node.getFirstStructuredDocumentRegion(); - ITextRegionList openRegions = open.getRegions(); - int i = openRegions.indexOf(contentAssistRequest.getRegion()); - if (i < 0) - return; - ITextRegion nameRegion = null; - while (i >= 0) { - nameRegion = openRegions.get(i--); - if (nameRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) - break; - } - - String attributeName = null; - if (nameRegion != null) - attributeName = open.getText(nameRegion); - - String currentValue = null; - if (contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) - currentValue = contentAssistRequest.getText(); - else - currentValue = ""; //$NON-NLS-1$ - String matchString = null; - // fixups - int start = contentAssistRequest.getReplacementBeginPosition(); - int length = contentAssistRequest.getReplacementLength(); - if (currentValue.length() > StringUtils.strip(currentValue).length() && (currentValue.startsWith("\"") || currentValue.startsWith("'")) //$NON-NLS-1$ //$NON-NLS-2$ - && contentAssistRequest.getMatchString().length() > 0) { - matchString = currentValue.substring(1, contentAssistRequest.getMatchString().length()); - } - else - matchString = currentValue.substring(0, contentAssistRequest.getMatchString().length()); - boolean existingComplicatedValue = contentAssistRequest.getRegion() != null && contentAssistRequest.getRegion() instanceof ITextRegionContainer; - if (existingComplicatedValue) { - contentAssistRequest.getProposals().clear(); - contentAssistRequest.getMacros().clear(); - } - else { - String lowerCaseMatch = matchString.toLowerCase(Locale.US); - if (attributeName.equals(JSP11Namespace.ATTR_NAME_URI)) { - ITaglibRecord[] availableTaglibRecords = TaglibIndex.getAvailableTaglibRecords(basePath); - /* - * a simple enough way to remove duplicates (resolution at - * runtime would be nondeterministic anyway) - */ - Map uriToRecords = new HashMap(); - for (int taglibRecordNumber = 0; taglibRecordNumber < availableTaglibRecords.length; taglibRecordNumber++) { - ITaglibRecord taglibRecord = availableTaglibRecords[taglibRecordNumber]; - ITaglibDescriptor descriptor = taglibRecord.getDescriptor(); - String uri = null; - switch (taglibRecord.getRecordType()) { - case ITaglibRecord.URL : - uri = descriptor.getURI(); - uriToRecords.put(uri, taglibRecord); - break; - case ITaglibRecord.JAR : { - IPath location = ((IJarRecord) taglibRecord).getLocation(); - IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(location); - IPath localContextRoot = FacetModuleCoreSupport.getWebContentRootPath(ResourcesPlugin.getWorkspace().getRoot().getProject(basePath.segment(0))); - for (int fileNumber = 0; fileNumber < files.length; fileNumber++) { - if (localContextRoot.isPrefixOf(files[fileNumber].getFullPath())) { - uri = IPath.SEPARATOR + files[fileNumber].getFullPath().removeFirstSegments(localContextRoot.segmentCount()).toString(); - uriToRecords.put(uri, taglibRecord); - } - else { - uri = FacetModuleCoreSupport.getRuntimePath(files[fileNumber].getFullPath()).toString(); - uriToRecords.put(uri, taglibRecord); - } - } - break; - } - case ITaglibRecord.TLD : { - IPath path = ((ITLDRecord) taglibRecord).getPath(); - IPath localContextRoot = FacetModuleCoreSupport.getWebContentRootPath(ResourcesPlugin.getWorkspace().getRoot().getProject(basePath.segment(0))); - if (localContextRoot.isPrefixOf(path)) { - uri = IPath.SEPARATOR + path.removeFirstSegments(localContextRoot.segmentCount()).toString(); - uriToRecords.put(uri, taglibRecord); - } - else { - uri = FacetModuleCoreSupport.getRuntimePath(path).toString(); - uriToRecords.put(uri, taglibRecord); - } - break; - } - } - } - /* - * use the records and their descriptors to construct - * proposals - */ - Object[] uris = uriToRecords.keySet().toArray(); - for (int uriNumber = 0; uriNumber < uris.length; uriNumber++) { - String uri = uris[uriNumber].toString(); - ITaglibRecord taglibRecord = (ITaglibRecord) uriToRecords.get(uri); - ITaglibDescriptor descriptor = (taglibRecord).getDescriptor(); - if (uri != null && uri.length() > 0 && (matchString.length() == 0 || uri.toLowerCase(Locale.US).startsWith(lowerCaseMatch))) { - String url = getSmallImageURL(taglibRecord); - ImageDescriptor imageDescriptor = JSPUIPlugin.getInstance().getImageRegistry().getDescriptor(url); - if (imageDescriptor == null && url != null) { - URL imageURL; - try { - imageURL = new URL(url); - imageDescriptor = ImageDescriptor.createFromURL(imageURL); - JSPUIPlugin.getInstance().getImageRegistry().put(url, imageDescriptor); - } - catch (MalformedURLException e) { - Logger.logException(e); - } - } - String additionalInfo = descriptor.getDescription() + "<br/>" + descriptor.getTlibVersion(); - Image image = null; - try { - image = JSPUIPlugin.getInstance().getImageRegistry().get(url); - } - catch (Exception e) { - Logger.logException(e); - } - if (image == null) { - image = XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ATTRIBUTE); - } - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + uri + "\"", start, length, uri.length() + 2, image, uri, null, additionalInfo, IRelevanceConstants.R_NONE); - contentAssistRequest.addProposal(proposal); - } - } - } - else if (attributeName.equals(JSP20Namespace.ATTR_NAME_TAGDIR)) { - ITaglibRecord[] availableTaglibRecords = TaglibIndex.getAvailableTaglibRecords(basePath); - /* - * a simple enough way to remove duplicates (resolution at - * runtime would be nondeterministic anyway) - */ - Map uriToRecords = new HashMap(); - for (int taglibRecordNumber = 0; taglibRecordNumber < availableTaglibRecords.length; taglibRecordNumber++) { - ITaglibRecord taglibRecord = availableTaglibRecords[taglibRecordNumber]; - String uri = null; - if (taglibRecord.getRecordType() == ITaglibRecord.TAGDIR) { - IPath path = ((ITagDirRecord) taglibRecord).getPath(); - IPath localContextRoot = TaglibIndex.getContextRoot(basePath); - if (localContextRoot.isPrefixOf(path)) { - uri = IPath.SEPARATOR + path.removeFirstSegments(localContextRoot.segmentCount()).toString(); - uriToRecords.put(uri, taglibRecord); - } - } - } - /* - * use the records and their descriptors to construct - * proposals - */ - Object[] uris = uriToRecords.keySet().toArray(); - for (int uriNumber = 0; uriNumber < uris.length; uriNumber++) { - String uri = uris[uriNumber].toString(); - ITaglibRecord taglibRecord = (ITaglibRecord) uriToRecords.get(uri); - ITaglibDescriptor descriptor = (taglibRecord).getDescriptor(); - if (uri != null && uri.length() > 0 && (matchString.length() == 0 || uri.toLowerCase(Locale.US).startsWith(lowerCaseMatch))) { - String url = getSmallImageURL(taglibRecord); - ImageDescriptor imageDescriptor = null; - if (url != null) { - imageDescriptor = JSPUIPlugin.getInstance().getImageRegistry().getDescriptor(url); - } - if (imageDescriptor == null && url != null) { - URL imageURL; - try { - imageURL = new URL(url); - imageDescriptor = ImageDescriptor.createFromURL(imageURL); - JSPUIPlugin.getInstance().getImageRegistry().put(url, imageDescriptor); - } - catch (MalformedURLException e) { - Logger.logException(e); - } - } - String additionalInfo = descriptor.getDescription() + "<br/>" + descriptor.getTlibVersion(); - Image image = null; - try { - image = JSPUIPlugin.getInstance().getImageRegistry().get(url); - } - catch (Exception e) { - Logger.logException(e); - } - if (image == null) { - image = XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ATTRIBUTE); - } - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + uri + "\"", start, length, uri.length() + 2, image, uri, null, additionalInfo, IRelevanceConstants.R_NONE); - contentAssistRequest.addProposal(proposal); - } - } - } - else if (attributeName.equals(JSP11Namespace.ATTR_NAME_PREFIX)) { - Node uriAttr = node.getAttributes().getNamedItem(JSP11Namespace.ATTR_NAME_URI); - String uri = null; - if (uriAttr != null) { - uri = uriAttr.getNodeValue(); - ITaglibRecord[] availableTaglibRecords = TaglibIndex.getAvailableTaglibRecords(basePath); - Map prefixMap = new HashMap(); - for (int taglibrecordNumber = 0; taglibrecordNumber < availableTaglibRecords.length; taglibrecordNumber++) { - ITaglibDescriptor descriptor = availableTaglibRecords[taglibrecordNumber].getDescriptor(); - if (descriptor != null && descriptor.getURI() != null && descriptor.getURI().toLowerCase(Locale.US).equals(uri.toLowerCase(Locale.US))) { - String shortName = descriptor.getShortName().trim(); - if (shortName.length() > 0) { - boolean valid = true; - for (int character = 0; character < shortName.length(); character++) { - valid = valid && !Character.isWhitespace(shortName.charAt(character)); - } - if (valid) { - prefixMap.put(shortName, descriptor); - } - } - } - } - Object prefixes[] = prefixMap.keySet().toArray(); - for (int j = 0; j < prefixes.length; j++) { - String prefix = (String) prefixes[j]; - ITaglibDescriptor descriptor = (ITaglibDescriptor) prefixMap.get(prefix); - Image image = XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ATTRIBUTE); - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + prefix + "\"", start, length, prefix.length() + 2, image, prefix, null, descriptor.getDescription(), IRelevanceConstants.R_NONE); - contentAssistRequest.addProposal(proposal); - } - } - else { - Node dirAttr = node.getAttributes().getNamedItem(JSP20Namespace.ATTR_NAME_TAGDIR); - if (dirAttr != null) { - String dir = dirAttr.getNodeValue(); - if (dir != null) { - ITaglibRecord record = TaglibIndex.resolve(basePath.toString(), dir, false); - if (record != null) { - ITaglibDescriptor descriptor = record.getDescriptor(); - if (descriptor != null) { - String shortName = descriptor.getShortName(); - - Image image = XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ATTRIBUTE); - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + shortName + "\"", start, length, shortName.length() + 2, image, shortName, null, descriptor.getDescription(), IRelevanceConstants.R_NONE); - contentAssistRequest.addProposal(proposal); - } - else { - if (dir.startsWith("/WEB-INF/")) { - dir = dir.substring(9); - } - String prefix = StringUtils.replace(dir, "/", "-"); - - Image image = XMLEditorPluginImageHelper.getInstance().getImage(XMLEditorPluginImages.IMG_OBJ_ATTRIBUTE); - CustomCompletionProposal proposal = new CustomCompletionProposal("\"" + prefix + "\"", start, length, prefix.length() + 2, image, prefix, null, descriptor.getDescription(), IRelevanceConstants.R_NONE); - contentAssistRequest.addProposal(proposal); - } - } - } - } - } - } - } - } - - /** - * Returns project request is in - * - * @param request - * @return - */ - private IPath getBasePath(ContentAssistRequest request) { - IPath baselocation = null; - - if (request != null) { - IStructuredDocumentRegion region = request.getDocumentRegion(); - if (region != null) { - IDocument document = region.getParentDocument(); - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - String location = model.getBaseLocation(); - if (location != null) { - baselocation = new Path(location); - } - } - } - finally { - if (model != null) - model.releaseFromRead(); - } - } - } - return baselocation; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTemplateCompletionProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTemplateCompletionProcessor.java deleted file mode 100644 index 753a206574..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPTemplateCompletionProcessor.java +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextSelection; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jface.text.templates.ContextTypeRegistry; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateCompletionProcessor; -import org.eclipse.jface.text.templates.TemplateContext; -import org.eclipse.jface.text.templates.TemplateContextType; -import org.eclipse.jface.text.templates.TemplateException; -import org.eclipse.jface.text.templates.TemplateProposal; -import org.eclipse.jface.text.templates.persistence.TemplateStore; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImageHelper; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImages; -import org.eclipse.swt.graphics.Image; - -/** - * Completion processor for JSP Templates. Most of the work is already done by - * the JSP Content Assist processor, so by the time the - * JSPTemplateCompletionProcessor is asked for content assist proposals, the - * jsp content assist processor has already set the context type for - * templates. - */ -class JSPTemplateCompletionProcessor extends TemplateCompletionProcessor { - private static final class ProposalComparator implements Comparator { - public int compare(Object o1, Object o2) { - return ((TemplateProposal) o2).getRelevance() - ((TemplateProposal) o1).getRelevance(); - } - } - - private static final Comparator fgProposalComparator = new ProposalComparator(); - private String fContextTypeId = null; - - /* - * Copied from super class except instead of calling createContext(viewer, - * region) call createContext(viewer, region, offset) instead - */ - public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) { - - ITextSelection selection = (ITextSelection) viewer.getSelectionProvider().getSelection(); - - // adjust offset to end of normalized selection - if (selection.getOffset() == offset) - offset = selection.getOffset() + selection.getLength(); - - String prefix = extractPrefix(viewer, offset); - Region region = new Region(offset - prefix.length(), prefix.length()); - TemplateContext context = createContext(viewer, region, offset); - if (context == null) - return new ICompletionProposal[0]; - - // name of the selection variables {line, word}_selection - context.setVariable("selection", selection.getText()); // //$NON-NLS-1$ - - Template[] templates = getTemplates(context.getContextType().getId()); - - List matches = new ArrayList(); - for (int i = 0; i < templates.length; i++) { - Template template = templates[i]; - try { - context.getContextType().validate(template.getPattern()); - } - catch (TemplateException e) { - continue; - } - if (template.matches(prefix, context.getContextType().getId())) - matches.add(createProposal(template, context, (IRegion) region, getRelevance(template, prefix))); - } - - Collections.sort(matches, fgProposalComparator); - - return (ICompletionProposal[]) matches.toArray(new ICompletionProposal[matches.size()]); - } - - /** - * Creates a concrete template context for the given region in the - * document. This involves finding out which context type is valid at the - * given location, and then creating a context of this type. The default - * implementation returns a <code>SmartReplaceTemplateContext</code> for - * the context type at the given location. This takes the offset at which - * content assist was invoked into consideration. - * - * @param viewer - * the viewer for which the context is created - * @param region - * the region into <code>document</code> for which the - * context is created - * @param offset - * the original offset where content assist was invoked - * @return a template context that can handle template insertion at the - * given location, or <code>null</code> - */ - private TemplateContext createContext(ITextViewer viewer, IRegion region, int offset) { - // pretty much same code as super.createContext except create - // SmartReplaceTemplateContext - TemplateContextType contextType = getContextType(viewer, region); - if (contextType != null) { - IDocument document = viewer.getDocument(); - return new ReplaceNameTemplateContext(contextType, document, region.getOffset(), region.getLength(), offset); - } - return null; - } - - protected ICompletionProposal createProposal(Template template, TemplateContext context, IRegion region, int relevance) { - return new CustomTemplateProposal(template, context, region, getImage(template), relevance); - } - - protected TemplateContextType getContextType(ITextViewer viewer, IRegion region) { - TemplateContextType type = null; - - ContextTypeRegistry registry = getTemplateContextRegistry(); - if (registry != null) - type = registry.getContextType(fContextTypeId); - - return type; - } - - protected Image getImage(Template template) { - // just return the same image for now - return JSPEditorPluginImageHelper.getInstance().getImage(JSPEditorPluginImages.IMG_OBJ_TAG_JSP); - } - - private ContextTypeRegistry getTemplateContextRegistry() { - return JSPUIPlugin.getDefault().getTemplateContextRegistry(); - } - - protected Template[] getTemplates(String contextTypeId) { - Template templates[] = null; - - TemplateStore store = getTemplateStore(); - if (store != null) - templates = store.getTemplates(contextTypeId); - - return templates; - } - - private TemplateStore getTemplateStore() { - return JSPUIPlugin.getDefault().getTemplateStore(); - } - - void setContextType(String contextTypeId) { - fContextTypeId = contextTypeId; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPUseBeanContentAssistProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPUseBeanContentAssistProcessor.java deleted file mode 100644 index 120986d363..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JSPUseBeanContentAssistProcessor.java +++ /dev/null @@ -1,173 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - - - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionContainer; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.contentassist.ContentAssistRequest; - -/** - * @plannedfor 1.0 - */ -public class JSPUseBeanContentAssistProcessor extends JSPDummyContentAssistProcessor { - - public JSPUseBeanContentAssistProcessor() { - super(); - } - - protected void addAttributeValueProposals(ContentAssistRequest contentAssistRequest) { - - IDOMNode node = (IDOMNode) contentAssistRequest.getNode(); - - // Find the attribute name for which this position should have a value - IStructuredDocumentRegion open = node.getFirstStructuredDocumentRegion(); - ITextRegionList openRegions = open.getRegions(); - int i = openRegions.indexOf(contentAssistRequest.getRegion()); - if (i < 0) - return; - ITextRegion nameRegion = null; - while (i >= 0) { - nameRegion = openRegions.get(i--); - if (nameRegion.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) - break; - } - - String attributeName = null; - if (nameRegion != null) - attributeName = open.getText(nameRegion); - - String currentValue = null; - if (contentAssistRequest.getRegion().getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) - currentValue = contentAssistRequest.getText(); - else - currentValue = ""; //$NON-NLS-1$ - String matchString = null; - // fixups - int start = contentAssistRequest.getReplacementBeginPosition(); - int length = contentAssistRequest.getReplacementLength(); - if (currentValue.length() > StringUtils.strip(currentValue).length() && (currentValue.startsWith("\"") || currentValue.startsWith("'")) //$NON-NLS-1$ //$NON-NLS-2$ - && contentAssistRequest.getMatchString().length() > 0) { - matchString = currentValue.substring(1, contentAssistRequest.getMatchString().length()); - start++; - length = matchString.length(); - } else - matchString = currentValue.substring(0, contentAssistRequest.getMatchString().length()); - boolean existingComplicatedValue = contentAssistRequest.getRegion() != null && contentAssistRequest.getRegion() instanceof ITextRegionContainer; - if (existingComplicatedValue) { - contentAssistRequest.getProposals().clear(); - contentAssistRequest.getMacros().clear(); - } else { - if (attributeName.equals(JSP11Namespace.ATTR_NAME_CLASS)) { - // class is the concrete implementation class - IResource resource = getResource(contentAssistRequest); - ICompletionProposal[] classProposals = JavaTypeFinder.getClassProposals(resource, start, length); - if (classProposals != null) { - for (int j = 0; j < classProposals.length; j++) { - JavaTypeCompletionProposal proposal = (JavaTypeCompletionProposal) classProposals[j]; - if (matchString.length() == 0 || proposal.getQualifiedName().toLowerCase().startsWith(matchString.toLowerCase()) || proposal.getShortName().toLowerCase().startsWith(matchString.toLowerCase())) - contentAssistRequest.addProposal(proposal); - } - } - } else if (attributeName.equals(JSP11Namespace.ATTR_NAME_TYPE)) { - // type is the more general type for the bean - // which means it may be an interface - IResource resource = getResource(contentAssistRequest); - ICompletionProposal[] typeProposals = JavaTypeFinder.getTypeProposals(resource, start, length); - if (typeProposals != null) { - for (int j = 0; j < typeProposals.length; j++) { - JavaTypeCompletionProposal proposal = (JavaTypeCompletionProposal) typeProposals[j]; - if (matchString.length() == 0 || proposal.getQualifiedName().toLowerCase().startsWith(matchString.toLowerCase()) || proposal.getShortName().toLowerCase().startsWith(matchString.toLowerCase())) - contentAssistRequest.addProposal(proposal); - } - } - } else if (attributeName.equals(JSP11Namespace.ATTR_NAME_BEAN_NAME)) { - IResource resource = getResource(contentAssistRequest); - ICompletionProposal[] beanNameProposals = JavaTypeFinder.getBeanProposals(resource, start, length); - if (beanNameProposals != null) { - for (int j = 0; j < beanNameProposals.length; j++) { - if (beanNameProposals[j] instanceof CustomCompletionProposal) { - JavaTypeCompletionProposal proposal = (JavaTypeCompletionProposal) beanNameProposals[j]; - if (matchString.length() == 0 || proposal.getDisplayString().toLowerCase().startsWith(matchString.toLowerCase())) - contentAssistRequest.addProposal(proposal); - } else if (beanNameProposals[j] instanceof JavaTypeCompletionProposal) { - JavaTypeCompletionProposal proposal = (JavaTypeCompletionProposal) beanNameProposals[j]; - if (matchString.length() == 0 || proposal.getQualifiedName().toLowerCase().startsWith(matchString.toLowerCase()) || proposal.getShortName().toLowerCase().startsWith(matchString.toLowerCase())) - contentAssistRequest.addProposal(proposal); - } - } - } - } - } - } - - /** - * Returns project request is in - * - * @param request - * @return - */ - private IResource getResource(ContentAssistRequest request) { - IResource resource = null; - String baselocation = null; - - if (request != null) { - IStructuredDocumentRegion region = request.getDocumentRegion(); - if (region != null) { - IDocument document = region.getParentDocument(); - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - baselocation = model.getBaseLocation(); - } - } finally { - if (model != null) - model.releaseFromRead(); - } - } - } - - if (baselocation != null) { - // copied from JSPTranslationAdapter#getJavaProject - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - IPath filePath = new Path(baselocation); - IFile file = null; - - if (filePath.segmentCount() > 1) { - file = root.getFile(filePath); - } - if (file != null) { - resource = file.getProject(); - } - } - return resource; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaParameterListValidator.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaParameterListValidator.java deleted file mode 100644 index 633a4c24bd..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaParameterListValidator.java +++ /dev/null @@ -1,228 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jface.text.Assert; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.TextPresentation; -import org.eclipse.jface.text.contentassist.IContextInformation; -import org.eclipse.jface.text.contentassist.IContextInformationPresenter; -import org.eclipse.jface.text.contentassist.IContextInformationValidator; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyleRange; - - -/** - * @plannedfor 1.0 - */ -public class JavaParameterListValidator implements IContextInformationValidator, IContextInformationPresenter { - - private int fPosition; - private ITextViewer fViewer; - private IContextInformation fInformation; - - private int fCurrentParameter; - - /** - * @see IContextInformationValidator#install(IContextInformation, - * ITextViewer, int) - * @see IContextInformationPresenter#install(IContextInformation, - * ITextViewer, int) - */ - public void install(IContextInformation info, ITextViewer viewer, int documentPosition) { - fPosition = documentPosition; - fViewer = viewer; - fInformation = info; - - fCurrentParameter = -1; - } - - private int getCommentEnd(IDocument d, int pos, int end) throws BadLocationException { - while (pos < end) { - char curr = d.getChar(pos); - pos++; - if (curr == '*') { - if (pos < end && d.getChar(pos) == '/') { - return pos + 1; - } - } - } - return end; - } - - private int getStringEnd(IDocument d, int pos, int end, char ch) throws BadLocationException { - while (pos < end) { - char curr = d.getChar(pos); - pos++; - if (curr == '\\') { - // ignore escaped characters - pos++; - } - else if (curr == ch) { - return pos; - } - } - return end; - } - - private int getCharCount(IDocument document, int start, int end, char increment, char decrement, boolean considerNesting) throws BadLocationException { - - Assert.isTrue((increment != 0 || decrement != 0) && increment != decrement); - - int nestingLevel = 0; - int charCount = 0; - while (start < end) { - char curr = document.getChar(start++); - switch (curr) { - case '/' : - if (start < end) { - char next = document.getChar(start); - if (next == '*') { - // a comment starts, advance to the comment end - start = getCommentEnd(document, start + 1, end); - } - else if (next == '/') { - // '//'-comment: nothing to do anymore on this - // line - start = end; - } - } - break; - case '*' : - if (start < end) { - char next = document.getChar(start); - if (next == '/') { - // we have been in a comment: forget what we read - // before - charCount = 0; - ++start; - } - } - break; - case '"' : - case '\'' : - start = getStringEnd(document, start, end, curr); - break; - default : - - if (considerNesting) { - - if ('(' == curr) - ++nestingLevel; - else if (')' == curr) - --nestingLevel; - - if (nestingLevel != 0) - break; - } - - if (increment != 0) { - if (curr == increment) - ++charCount; - } - - if (decrement != 0) { - if (curr == decrement) - --charCount; - } - } - } - - return charCount; - } - - /** - * @see IContextInformationValidator#isContextInformationValid(int) - */ - public boolean isContextInformationValid(int position) { - - try { - if (position < fPosition) - return false; - - IDocument document = fViewer.getDocument(); - IRegion line = document.getLineInformationOfOffset(fPosition); - - if (position < line.getOffset() || position >= document.getLength()) - return false; - - return (getCharCount(document, fPosition, position, '(', ')', false) >= 0); - - } - catch (BadLocationException x) { - return false; - } - } - - /** - * @see IContextInformationPresenter#updatePresentation(int, - * TextPresentation) - */ - public boolean updatePresentation(int position, TextPresentation presentation) { - - int currentParameter = -1; - - try { - currentParameter = getCharCount(fViewer.getDocument(), fPosition, position, ',', (char) 0, true); - } - catch (BadLocationException x) { - return false; - } - - if (fCurrentParameter != -1) { - if (currentParameter == fCurrentParameter) - return false; - } - - if (fInformation == null) - return false; - - presentation.clear(); - fCurrentParameter = currentParameter; - - String s = fInformation.getInformationDisplayString(); - int start = 0; - int occurrences = 0; - while (occurrences < fCurrentParameter) { - int found = s.indexOf(',', start); - if (found == -1) - break; - start = found + 1; - ++occurrences; - } - - if (occurrences < fCurrentParameter) { - presentation.addStyleRange(new StyleRange(0, s.length(), null, null, SWT.NORMAL)); - return true; - } - - if (start == -1) - start = 0; - - int end = s.indexOf(',', start); - if (end == -1) - end = s.length(); - - if (start > 0) - presentation.addStyleRange(new StyleRange(0, start, null, null, SWT.NORMAL)); - - if (end > start) - presentation.addStyleRange(new StyleRange(start, end - start, null, null, SWT.BOLD)); - - if (end < s.length()) - presentation.addStyleRange(new StyleRange(end, s.length() - end, null, null, SWT.NORMAL)); - - return true; - } -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeCompletionProposal.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeCompletionProposal.java deleted file mode 100644 index 1ba8e64b0f..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeCompletionProposal.java +++ /dev/null @@ -1,300 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - - - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.JSP12Namespace; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.swt.graphics.Image; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceCompletionProposal; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - -/** - * An implementation of ICompletionProposal whose values can be - * read after creation. - * - * @plannedfor 1.0 - */ -public class JavaTypeCompletionProposal extends CustomCompletionProposal implements IRelevanceCompletionProposal { - - private int fCursorPosition = 0; - private String fLocalDisplayString; - private String fShortName; - private String fQualifiedName; - private String fContainerName; - - public JavaTypeCompletionProposal(String replacementString, int replacementOffset, int replacementLength, String qualifiedName, Image image, String typeName, String containerName, int relevence, boolean updateReplacementLengthOnValidate) { - super(replacementString, replacementOffset, replacementLength, qualifiedName.length() + 2, image, - (containerName != null && containerName.length() > 0) ? typeName + " - " + containerName : typeName, null, null, relevence, true); //$NON-NLS-1$ - // CMVC 243817, superclass was comparing incorrect display string in validate method... - //super(replacementString, replacementOffset, replacementLength, image, (containerName != null && containerName.length() > 0)? typeName + " - " + containerName:typeName/*qualifiedName*/, relevence); - fShortName = typeName; - fQualifiedName = qualifiedName; - fContainerName = containerName; - fCursorPosition = fQualifiedName.length() + 2; - //fProposalInfo = proposalInfo; - if (containerName != null && containerName.length() > 0) - fLocalDisplayString = typeName + " - " + containerName; //$NON-NLS-1$ - else - fLocalDisplayString = typeName; - } - - public String getDisplayString() { - return fLocalDisplayString; - } - - public int getCursorPosition() { - return fCursorPosition; - } - - public void setCursorPosition(int cursorPosition) { - super.setCursorPosition(cursorPosition); - fCursorPosition = cursorPosition; - } - - public String getQualifiedName() { - return fQualifiedName; - } - - public String getAdditionalProposalInfo() { - // String info = super.getAdditionalProposalInfo(); - // if (info == null || info.length() == 0 && fProposalInfo != null) - // return fProposalInfo.getInfo(); - // return info; - return null; // unexplained NPE - } - - public String getShortName() { - return fShortName; - } - - protected String getImport(IStructuredDocumentRegion flatNode) { - ITextRegionList regions = flatNode.getRegions(); - String importSpec = null; - boolean isImport = false; - for (int i = 0; i < regions.size(); i++) { - ITextRegion region = regions.get(i); - if (region.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { - if (flatNode.getText(region).equals(JSP11Namespace.ATTR_NAME_IMPORT)) { - isImport = true; - } - else { - isImport = false; - } - } - else if (isImport && region.getType() == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) { - importSpec = flatNode.getText(region); - } - } - return importSpec; - } - - /** - * Add an import page directive for the current type name - */ - protected int applyImport(IStructuredDocument model) { - // if the type is in the default package or java.lang, skip it - if (fContainerName == null || fContainerName.length() == 0 || fContainerName.equals("java.lang")) //$NON-NLS-1$ - return 0; - // collect page directives and store their import values - List imports = new ArrayList(); - IStructuredDocumentRegion node = model.getFirstStructuredDocumentRegion(); - - // use the last position of a page directive as a hint as to where to add - // a new one - int hint = 0; - // watch for jsp:root so that we use the right XML/JSP format for the directive - boolean useXML = false; - - while (node != null) { - // Can't just look for all StructuredDocumentRegions starting with JSP_DIRECTIVE_OPEN - // since the XML form is required, too - ITextRegionList regions = node.getRegions(); - if (regions.size() > 1) { - ITextRegion name = regions.get(1); - // verify that this is a JSP directive - if (name.getType() == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { - // verify that this is a *page* directive - if (node.getText(name).equals(JSP11Namespace.ATTR_NAME_PAGE) || node.getText(name).equals(JSP12Namespace.ElementName.DIRECTIVE_PAGE)) { - if (node.getEndOffset() < getReplacementOffset()) - hint = node.getEndOffset(); - String importSpec = getImport(node); - if (importSpec != null) { - imports.add(importSpec); - } - } - } - else { - // if this is a jsp:root tag, use the XML form - useXML = useXML || name.getType() == DOMJSPRegionContexts.JSP_ROOT_TAG_NAME; - } - } - node = node.getNext(); - } - - // evaluate requirements for a "new" import directive - boolean needsImport = !importHandles(fQualifiedName, imports); - int adjustmentLength = 0; - // insert "new" import directive - if (needsImport) { - String directive = null; - - // vary the XML behavior - if (useXML) { - directive = "<jsp:directive.page import=\"" + fQualifiedName + "\"/>"; //$NON-NLS-1$ //$NON-NLS-2$ - } - else { - directive = "<%@ page import=\"" + fQualifiedName + "\" %>"; //$NON-NLS-1$ //$NON-NLS-2$ - } - - try { - IRegion line = model.getLineInformationOfOffset(hint); - boolean prependNewLine = line.getOffset() + line.getLength() == hint; - boolean appendNewLine = hint == 0; - if (prependNewLine) - directive = model.getLineDelimiter() + directive; - if (appendNewLine) - directive = directive + model.getLineDelimiter(); - adjustmentLength = directive.length(); - } - catch (BadLocationException e) { - // ignore - } - - try { - model.replace(hint, 0, directive); - - } - catch (BadLocationException e) { - // Not that we should ever get a BLE, but if so, our - // replacement offset from the Content Assist call should - // work - try { - model.replace(getReplacementOffset(), 0, directive); - adjustmentLength = directive.length(); - } - catch (BadLocationException e2) { - // now what? - } - } - } - return adjustmentLength; - } - - /** - * See if the import specification is a wildcard import, and if so, that - * it applies to the given type. - */ - protected boolean isWildcardMatch(String importSpec, String type) { - int specLength = importSpec.length(); - if (importSpec.endsWith("*") && specLength > 2 && type.length() >= specLength) { //$NON-NLS-1$ - // pull out the package name including the final '.' - String container = importSpec.substring(0, specLength - 1); - // verify that the type is in the container's hierarchy and that - // there are no other package separators afterwards - if (type.startsWith(container) && type.indexOf('.', specLength - 1) < 0) { - // container matches - return true; - } - } - return false; - } - - protected boolean importHandles(String type, List listOfImports) { - Iterator imports = listOfImports.iterator(); - while (imports.hasNext()) { - String importSpec = StringUtils.strip(imports.next().toString()); - if (importSpec.equals(type) || isWildcardMatch(importSpec, type)) - return true; - } - return false; - } - - public void apply(IDocument document, char trigger, int offset) { - // If we have a parsed IStructuredDocument, insert the short name instead of the - // fully qualified name and a import page directive if - // needed. Do the import first so the cursor goes to the right location - // and we don't surprise the user. - - boolean addShortForm = false; //document instanceof IStructuredDocument && fContainerName != null && fContainerName.length() > 0; - if (addShortForm) { - setReplacementString('"' + fShortName + '"'); - int importLength = applyImport((IStructuredDocument) document); - setReplacementOffset(getReplacementOffset() + importLength); - } - - setCursorPosition(getReplacementString().length()); - super.apply(document, trigger, offset); - - } - - /* - * @see org.eclipse.jface.text.contentassist.ICompletionProposalExtension1#apply(org.eclipse.jface.text.ITextViewer, char, int, int) - */ - public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) { - // CMVC 243815 - // (pa) this is overridden to get around replacement length modification - // which is done in the super (since eclipse 2.1) - apply(viewer.getDocument(), trigger, offset); - } - - // code is borrowed from JavaCompletionProposal - protected boolean startsWith(IDocument document, int offset, String word) { - int wordLength = word == null ? 0 : word.length(); - if (offset > getReplacementOffset() + wordLength) - return false; - - try { - int length = offset - getReplacementOffset(); - // CMVC 243817 - // slightly modified to be a little more flexible for attribute value string matching.. - String start = StringUtils.stripQuotes(document.get(getReplacementOffset(), length)); - return word.toLowerCase().startsWith(start.toLowerCase()) || fQualifiedName.toLowerCase().startsWith(start.toLowerCase()); - //return word.substring(0, length).equalsIgnoreCase(start); - } - catch (BadLocationException x) { - // ignore - } - - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal#validate(org.eclipse.jface.text.IDocument, int, org.eclipse.jface.text.DocumentEvent) - // */ - // public boolean validate(IDocument document, int offset, org.eclipse.jface.text.DocumentEvent event) { - // return super.validate(document, offset, event); - // } - /* (non-Javadoc) - * @see org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposal#selected(org.eclipse.jface.text.ITextViewer, boolean) - */ - public void selected(ITextViewer viewer, boolean smartToggle) { - // (pa) we currently don't use smart toggle... - super.selected(viewer, false); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeFinder.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeFinder.java deleted file mode 100644 index f11c3b1c10..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeFinder.java +++ /dev/null @@ -1,134 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - - - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IJavaProject; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jdt.core.search.IJavaSearchConstants; -import org.eclipse.jdt.core.search.IJavaSearchScope; -import org.eclipse.jdt.core.search.SearchEngine; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jface.text.contentassist.ICompletionProposal; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.wst.common.uriresolver.internal.util.URIHelper; -import org.eclipse.wst.sse.ui.internal.contentassist.CustomCompletionProposal; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceConstants; - -/** - * @plannedfor 1.0 - */ -public class JavaTypeFinder { - - public static ICompletionProposal[] getBeanProposals(IResource resource, int replacementStart, int replacementLength) { - ICompletionProposal[] typeProposals = getTypeProposals(resource, replacementStart, replacementLength); - ICompletionProposal[] serialProposals = getSerializedProposals(resource, replacementStart, replacementLength); - ICompletionProposal[] beanProposals = new ICompletionProposal[typeProposals.length + serialProposals.length]; - - int i; - for (i = 0; i < serialProposals.length; i++) { - beanProposals[i] = serialProposals[i]; - } - for (i = serialProposals.length; i < serialProposals.length + typeProposals.length; i++) { - beanProposals[i] = typeProposals[i - serialProposals.length]; - } - return beanProposals; - } - - private static void getMembers(IContainer container, List membersList) { - try { - IResource[] members = container.members(true); - if (members != null) { - for (int i = 0; i < members.length; i++) { - if (members[i].getType() == IResource.FILE) - membersList.add(members[i]); - else if (members[i].getType() == IResource.FOLDER) - getMembers((IContainer) members[i], membersList); - } - } - } - catch (CoreException e) { - // do nothing - } - } - - private static ICompletionProposal[] getSerializedProposals(IResource resource, int replacementStart, int replacementLength) { - List names = new ArrayList(); - List resources = new ArrayList(); - getMembers(resource.getProject(), resources); - IResource memberResource = null; - for (int i = 0; i < resources.size(); i++) { - memberResource = (IResource) resources.get(i); - if (memberResource.getType() == IResource.FILE && memberResource.getName().endsWith(".ser")) { //$NON-NLS-1$ - String path = URIHelper.normalize(memberResource.getFullPath().toString(), resource.getFullPath().toString(), resource.getProject().getFullPath().toString()); - if (path != null) { - names.add(new CustomCompletionProposal("\"" + path + "\"", //$NON-NLS-1$ //$NON-NLS-2$ - replacementStart, replacementLength, path.length() + 2, null, path, null, null, IRelevanceConstants.R_NONE)); - } - } - } - return (ICompletionProposal[]) names.toArray(new ICompletionProposal[names.size()]); - } - - /** - * - * @param resource - * @param replacementStart - * @param replacementLength - * @param searchFor IJavaSearchConstants.TYPE, IJavaSearchConstants.CLASS - * @return - */ - private static ICompletionProposal[] findProposals(IResource resource, int replacementStart, int replacementLength, int searchFor, boolean ignoreAbstractClasses) { - - JavaTypeNameRequestor requestor = new JavaTypeNameRequestor(); - requestor.setJSPOffset(replacementStart); - requestor.setReplacementLength(replacementLength); - requestor.setIgnoreAbstractClasses(ignoreAbstractClasses); - - try { - IJavaElement[] elements = new IJavaElement[]{getJavaProject(resource)}; - IJavaSearchScope scope = SearchEngine.createJavaSearchScope(elements); - new SearchEngine().searchAllTypeNames(null, null, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_PREFIX_MATCH, searchFor, scope, requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null); - - } - catch (CoreException exc) { - Logger.logException(exc); - } - catch (Exception exc) { - // JavaModel - Logger.logException(exc); - } - return requestor.getProposals(); - } - - public static ICompletionProposal[] getTypeProposals(IResource resource, int replacementStart, int replacementLength) { - return findProposals(resource, replacementStart, replacementLength, IJavaSearchConstants.TYPE, false); - } - - public static ICompletionProposal[] getClassProposals(IResource resource, int replacementStart, int replacementLength) { - return findProposals(resource, replacementStart, replacementLength, IJavaSearchConstants.CLASS, true); - } - - private static IJavaProject getJavaProject(IResource resource) { - IProject proj = resource.getProject(); - IJavaProject javaProject = JavaCore.create(proj); - return javaProject; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeNameRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeNameRequestor.java deleted file mode 100644 index 61a2dd8157..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/JavaTypeNameRequestor.java +++ /dev/null @@ -1,121 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jdt.core.CompletionProposal; -import org.eclipse.jdt.core.Flags; -import org.eclipse.jdt.core.Signature; -import org.eclipse.jdt.core.search.TypeNameRequestor; -import org.eclipse.jdt.ui.text.java.CompletionProposalLabelProvider; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImageHelper; -import org.eclipse.swt.graphics.Image; -import org.eclipse.wst.sse.ui.internal.contentassist.IRelevanceConstants; - -/** - * Use w/ JDT search engine to find all type names. - * Creates proposals from matches reported. - * - * @plannedfor 1.0 - */ -public class JavaTypeNameRequestor extends TypeNameRequestor { - - private int fJSPOffset = -1; - private int fReplacementLength = -1; - private List fProposals = new ArrayList(); - private boolean fIgnoreAbstractClasses = false; - - private CompletionProposalLabelProvider fLabelProvider = new CompletionProposalLabelProvider(); - - public void acceptType(int modifiers, char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) { - - int offset = getJSPOffset(); - int length = getReplacementLength(); - - // somehow offset or length was set incorrectly - if(offset == -1 || length == -1) - return; - // ignore abstract classes? - if(ignoreAbstractClasses() && Flags.isAbstract(modifiers)) - return; - - Image image = calculateImage(modifiers); - - String containerNameString = new String(packageName); - String typeNameString = String.valueOf(simpleTypeName); - - // containername can be null - String fullName = concatenateName(containerNameString, typeNameString); - - String simpleName = Signature.getSimpleName(fullName); - StringBuffer buf = new StringBuffer(simpleName); - String typeQualifier = Signature.getQualifier(fullName); - if (typeQualifier.length() > 0) { - buf.append(" - "); //$NON-NLS-1$ - buf.append(typeQualifier); - } - - JavaTypeCompletionProposal proposal = new JavaTypeCompletionProposal(fullName, offset, length, fullName, image, typeNameString, typeQualifier, IRelevanceConstants.R_NONE, true); - proposal.setTriggerCharacters(JSPProposalCollector.getTypeTriggers()); - fProposals.add(proposal); - } - - - private Image calculateImage(int modifiers) { - CompletionProposal p = CompletionProposal.create(CompletionProposal.TYPE_REF, getJSPOffset()); - p.setFlags(modifiers); - - //https://bugs.eclipse.org/bugs/show_bug.cgi?id=102206 - char[] sig = new char[]{Signature.C_UNRESOLVED}; - p.setSignature(sig); - - ImageDescriptor descriptor = fLabelProvider.createImageDescriptor(p); - Image image = JSPEditorPluginImageHelper.getInstance().getImage(descriptor); - return image; - } - - /** - * Concatenates two names. Uses a dot for separation. Both strings can be - * empty or <code>null</code>. - */ - public String concatenateName(String name1, String name2) { - StringBuffer buf = new StringBuffer(); - if (name1 != null && name1.length() > 0) { - buf.append(name1); - } - if (name2 != null && name2.length() > 0) { - if (buf.length() > 0) { - buf.append('.'); - } - buf.append(name2); - } - return buf.toString(); - } - - int getJSPOffset() { - return fJSPOffset; - } - - void setJSPOffset(int offset) { - fJSPOffset = offset; - } - - int getReplacementLength() { - return fReplacementLength; - } - - void setReplacementLength(int replacementLength) { - fReplacementLength = replacementLength; - } - void setIgnoreAbstractClasses(boolean ignore) { - fIgnoreAbstractClasses = ignore; - } - boolean ignoreAbstractClasses() { - return fIgnoreAbstractClasses; - } - - JavaTypeCompletionProposal[] getProposals() { - return (JavaTypeCompletionProposal[])fProposals.toArray(new JavaTypeCompletionProposal[fProposals.size()]); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java deleted file mode 100644 index a53c8e0653..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/NoRegionContentAssistProcessorForJSP.java +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.contentassist.IContentAssistProcessor; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.wst.html.core.text.IHTMLPartitions; -import org.eclipse.wst.html.ui.internal.contentassist.NoRegionContentAssistProcessorForHTML; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.text.IStructuredPartitions; -import org.eclipse.wst.xml.core.text.IXMLPartitions; - -/** - * @plannedfor 1.0 - */ -public class NoRegionContentAssistProcessorForJSP extends NoRegionContentAssistProcessorForHTML { - - private String[] fJSPContexts = null; - - public NoRegionContentAssistProcessorForJSP() { - super(); - initJSPContexts(); - } - - /* - * @see org.eclipse.wst.html.ui.internal.contentassist.NoRegionContentAssistProcessorForHTML#initPartitionToProcessorMap() - */ - protected void initPartitionToProcessorMap() { - super.initPartitionToProcessorMap(); - IContentAssistProcessor jspContentAssistProcessor = new JSPContentAssistProcessor(); - - // JSP - addPartitionProcessor(IStructuredPartitions.DEFAULT_PARTITION, jspContentAssistProcessor); - addPartitionProcessor(IXMLPartitions.XML_DEFAULT, jspContentAssistProcessor); - addPartitionProcessor(IHTMLPartitions.HTML_DEFAULT, jspContentAssistProcessor); - addPartitionProcessor(IHTMLPartitions.HTML_COMMENT, jspContentAssistProcessor); - addPartitionProcessor(IJSPPartitions.JSP_DEFAULT, jspContentAssistProcessor); - addPartitionProcessor(IJSPPartitions.JSP_DIRECTIVE, jspContentAssistProcessor); - addPartitionProcessor(IJSPPartitions.JSP_CONTENT_DELIMITER, jspContentAssistProcessor); - addPartitionProcessor(IJSPPartitions.JSP_CONTENT_JAVASCRIPT, jspContentAssistProcessor); - - IContentAssistProcessor jspJavaContentAssistProcessor = new JSPJavaContentAssistProcessor(); - addPartitionProcessor(IJSPPartitions.JSP_CONTENT_JAVA, jspJavaContentAssistProcessor); - - } - - protected void initNameToProcessorMap() { - super.initNameToProcessorMap(); - JSPPropertyContentAssistProcessor jspPropertyCAP = new JSPPropertyContentAssistProcessor(); - addNameProcessor(JSP11Namespace.ElementName.SETPROPERTY, jspPropertyCAP); - addNameProcessor(JSP11Namespace.ElementName.GETPROPERTY, jspPropertyCAP); - addNameProcessor(JSP11Namespace.ElementName.USEBEAN, new JSPUseBeanContentAssistProcessor()); - } - - private void initJSPContexts() { - fJSPContexts = new String[]{DOMJSPRegionContexts.JSP_CLOSE, DOMJSPRegionContexts.JSP_CONTENT, DOMJSPRegionContexts.JSP_DECLARATION_OPEN, DOMJSPRegionContexts.JSP_EXPRESSION_OPEN, DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN}; - } - - /** - * Quick check to see if context (String) should map to - * JSPContentAssistProcessor. - * - * @param context - * @return if it's a JSP Region (for which we need JSP Content assist) - */ - private boolean isJSPRegion(IStructuredDocumentRegion sdRegion) { - String context = sdRegion.getType(); - for (int i = 0; i < fJSPContexts.length; i++) { - if (context == fJSPContexts[i]) - return true; - } - return false; - } - - protected IContentAssistProcessor guessContentAssistProcessor(ITextViewer viewer, int documentOffset) { - IContentAssistProcessor p = super.guessContentAssistProcessor(viewer, documentOffset); - if (p == null) { - IStructuredDocumentRegion sdRegion = ((IStructuredDocument) viewer.getDocument()).getRegionAtCharacterOffset(documentOffset); - if (isJSPRegion(sdRegion)) - p = getPartitionProcessor(IJSPPartitions.JSP_CONTENT_JAVA); - } - return p; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/ReplaceNameTemplateContext.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/ReplaceNameTemplateContext.java deleted file mode 100644 index 1f4e9d13bf..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentassist/ReplaceNameTemplateContext.java +++ /dev/null @@ -1,104 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentassist; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.templates.DocumentTemplateContext; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateBuffer; -import org.eclipse.jface.text.templates.TemplateContextType; -import org.eclipse.jface.text.templates.TemplateException; - -/** - * Just like DocumentTemplateContext except if an insert offset is passed in, - * during evaluation, the "prefix" before the template will be checked to see - * if it matches the template name. If so, overwrite the template name. - * Otherwise, just insert the template at the insert offset location (by not - * overwriting the prefix text) - */ -public class ReplaceNameTemplateContext extends DocumentTemplateContext { - private int fInsertOffset = -1; - - /** - * Creates a document template context. - * - * @param type - * the context type - * @param document - * the document this context applies to - * @param offset - * the offset of the document region - * @param length - * the length of the document region - */ - public ReplaceNameTemplateContext(TemplateContextType type, IDocument document, int offset, int length) { - this(type, document, new Position(offset, length)); - } - - /** - * Creates a document template context. The supplied <code>Position</code> - * will be queried to compute the <code>getStart</code> and - * <code>getEnd</code> methods, which will therefore answer updated - * position data if it is registered with the document. - * - * @param type - * the context type - * @param document - * the document this context applies to - * @param position - * the position describing the area of the document which forms - * the template context - * @since 3.1 - */ - public ReplaceNameTemplateContext(TemplateContextType type, IDocument document, Position position) { - super(type, document, position); - } - - /** - * Creates a document template context. - * - * @param type - * the context type - * @param document - * the document this context applies to - * @param offset - * the offset of the document region - * @param length - * the length of the document region - * @param insertOffset - * the offset of the document region where insert was - * originally requested - */ - public ReplaceNameTemplateContext(TemplateContextType type, IDocument document, int offset, int length, int insertOffset) { - this(type, document, new Position(offset, length)); - fInsertOffset = insertOffset; - } - - /* - * @see org.eclipse.jface.text.templates.TemplateContext#evaluate(org.eclipse.jface.text.templates.Template) - */ - public TemplateBuffer evaluate(Template template) throws BadLocationException, TemplateException { - TemplateBuffer buffer = super.evaluate(template); - if (buffer != null) { - if (fInsertOffset > -1 && fInsertOffset > getStart()) { - String prefix = getDocument().get(getStart(), fInsertOffset - getStart()); - if (!template.getName().startsWith(prefix)) { - // generate a new buffer that actually contains the - // text that was going to be overwritten - buffer = new TemplateBuffer(prefix + buffer.getString(), buffer.getVariables()); - } - } - } - return buffer; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/JSPFContentSettingsPropertyPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/JSPFContentSettingsPropertyPage.java deleted file mode 100644 index bb61592e35..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/JSPFContentSettingsPropertyPage.java +++ /dev/null @@ -1,254 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * David Schneider, david.schneider@unisys.com - [142500] WTP properties pages fonts don't follow Eclipse preferences - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentproperties.ui; - -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jst.jsp.core.internal.contentproperties.JSPFContentProperties; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.PropertyPage; - -/** - * JSP Fragment Property Page - */ -public class JSPFContentSettingsPropertyPage extends PropertyPage { - private static final String SELECT_NONE = JSPUIMessages.JSPFContentSettingsPropertyPage_0; - - // TODO: Figure out what to do with these strings/variables - private String[] fLanguages = {SELECT_NONE, "java", //$NON-NLS-1$ - "javascript"}; //$NON-NLS-1$ - private String[] fContentTypes = {SELECT_NONE, "application/xhtml+xml", //$NON-NLS-1$ - "application/xml", //$NON-NLS-1$ - "text/html", //$NON-NLS-1$ - "text/xml", //$NON-NLS-1$ - "text/css"}; //$NON-NLS-1$ - - private class ButtonListener extends SelectionAdapter { - public void widgetSelected(SelectionEvent e) { - boolean specific = fSpecificSetting.getSelection(); - updateButtons(specific); - } - } - - private Combo fLanguageCombo; - private Combo fContentTypeCombo; - private Button fValidateFragments; - Button fSpecificSetting; - private SelectionListener fSpecificListener; - - public JSPFContentSettingsPropertyPage() { - super(); - setDescription(JSPUIMessages.JSPFContentSettingsPropertyPage_1); - } - - private Composite createComposite(Composite parent, int numColumns) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = numColumns; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(GridData.FILL, GridData.FILL, true, false); - data.horizontalIndent = 0; - composite.setLayoutData(data); - - return composite; - } - - protected Control createContents(Composite parent) { - Composite propertyPage = createComposite(parent, 2); - - // fragment language control - Text languageLabel = new Text(propertyPage, SWT.READ_ONLY); - languageLabel.setText(JSPUIMessages.JSPFContentSettingsPropertyPage_2); - fLanguageCombo = new Combo(propertyPage, SWT.NONE); - GridData data = new GridData(GridData.FILL, GridData.FILL, true, false); - data.horizontalIndent = 0; - fLanguageCombo.setLayoutData(data); - fLanguageCombo.setItems(fLanguages); - - // fragment content type control - Text contentTypeLabel = new Text(propertyPage, SWT.READ_ONLY); - contentTypeLabel.setText(JSPUIMessages.JSPFContentSettingsPropertyPage_3); - fContentTypeCombo = new Combo(propertyPage, SWT.NONE); - data = new GridData(GridData.FILL, GridData.FILL, true, false); - data.horizontalIndent = 0; - fContentTypeCombo.setLayoutData(data); - fContentTypeCombo.setItems(fContentTypes); - - // create separator - Label label = new Label(propertyPage, SWT.SEPARATOR | SWT.HORIZONTAL); - data = new GridData(); - data.horizontalAlignment = GridData.FILL; - data.horizontalSpan = 2; - data.verticalSpan = 8; - label.setLayoutData(data); - - // specific setting - fSpecificSetting = new Button(propertyPage, SWT.CHECK | SWT.LEFT); - fSpecificSetting.setText(JSPUIMessages.JSPFContentSettingsPropertyPage_4); - data = new GridData(GridData.FILL, GridData.FILL, true, false); - data.horizontalSpan = 2; - fSpecificSetting.setLayoutData(data); - - fSpecificListener = new ButtonListener(); - fSpecificSetting.addSelectionListener(fSpecificListener); - - // validate file - fValidateFragments = new Button(propertyPage, SWT.CHECK | SWT.LEFT); - fValidateFragments.setText(JSPUIMessages.JSPFilesPreferencePage_1); - data = new GridData(GridData.FILL, GridData.FILL, true, false); - data.horizontalSpan = 2; - data.horizontalIndent = 5; - fValidateFragments.setLayoutData(data); - - initializeValues(); - - PlatformUI.getWorkbench().getHelpSystem().setHelp(propertyPage, IHelpContextIds.JSP_FRAGMENT_HELPID); - Dialog.applyDialogFont(parent); - return propertyPage; - } - - void updateButtons(boolean enabled) { - fSpecificSetting.setSelection(enabled); - fValidateFragments.setEnabled(enabled); - } - - /** - * Get the resource this properties page is for - * - * @return IResource for this properties page or null if there is no - * IResource - */ - private IResource getResource() { - IResource resource = null; - IAdaptable adaptable = getElement(); - if (adaptable instanceof IResource) { - resource = (IResource) adaptable; - } else if (adaptable != null) { - Object o = adaptable.getAdapter(IResource.class); - if (o instanceof IResource) { - resource = (IResource)o; - } - } - return resource; - } - - private void initializeValues() { - String language = JSPFContentProperties.getProperty(JSPFContentProperties.JSPLANGUAGE, getResource(), false); - if (language == null || language.length() == 0) { - // if null, use none - language = SELECT_NONE; - } - /* - * If item is already part of combo, select it. Otherwise, add to the - * combobox. - */ - int index = fLanguageCombo.indexOf(language); - if (index > -1) - fLanguageCombo.select(index); - else - fLanguageCombo.setText(language); - - String contentType = JSPFContentProperties.getProperty(JSPFContentProperties.JSPCONTENTTYPE, getResource(), false); - if (contentType == null || contentType.length() == 0) { - // if null, use none - contentType = SELECT_NONE; - } - /* - * If item is already part of combo, select it. Otherwise, add to the - * combobox. - */ - index = fContentTypeCombo.indexOf(contentType); - if (index > -1) - fContentTypeCombo.select(index); - else - fContentTypeCombo.setText(contentType); - - String validate = JSPFContentProperties.getProperty(JSPFContentProperties.VALIDATE_FRAGMENTS, getResource(), false); - String validate2 = JSPFContentProperties.getProperty(JSPFContentProperties.VALIDATE_FRAGMENTS, getResource(), true); - if (validate == null || validate.length() == 0) { - updateButtons(false); - fValidateFragments.setSelection(Boolean.valueOf(validate2).booleanValue()); - } - else { - updateButtons(true); - fValidateFragments.setSelection(Boolean.valueOf(validate).booleanValue()); - } - } - - protected void performDefaults() { - int index = fLanguageCombo.indexOf(SELECT_NONE); - if (index > -1) - fLanguageCombo.select(index); - - index = fContentTypeCombo.indexOf(SELECT_NONE); - if (index > -1) - fContentTypeCombo.select(index); - - updateButtons(false); - fValidateFragments.setSelection(true); - - super.performDefaults(); - } - - public boolean performOk() { - try { - // save the fragment language - String language = fLanguageCombo.getText(); - if (language == null || language.length() == 0 || language.equalsIgnoreCase(SELECT_NONE)) { - // if none, use null - language = null; - } - JSPFContentProperties.setProperty(JSPFContentProperties.JSPLANGUAGE, getResource(), language); - - // save fragment content type - String contentType = fContentTypeCombo.getText(); - if (contentType == null || contentType.length() == 0 || contentType.equalsIgnoreCase(SELECT_NONE)) { - // if none, use null - contentType = null; - } - JSPFContentProperties.setProperty(JSPFContentProperties.JSPCONTENTTYPE, getResource(), contentType); - - String validate = null; - if (fSpecificSetting.getSelection()) { - validate = Boolean.toString(fValidateFragments.getSelection()); - } - JSPFContentProperties.setProperty(JSPFContentProperties.VALIDATE_FRAGMENTS, getResource(), validate); - } - catch (CoreException e) { - // maybe in future, let user know there was a problem saving file - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - - return super.performOk(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/ProjectJSPFContentSettingsPropertyPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/ProjectJSPFContentSettingsPropertyPage.java deleted file mode 100644 index 31976b6591..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/contentproperties/ui/ProjectJSPFContentSettingsPropertyPage.java +++ /dev/null @@ -1,19 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.contentproperties.ui; - -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; - -public class ProjectJSPFContentSettingsPropertyPage extends JSPFContentSettingsPropertyPage { - public ProjectJSPFContentSettingsPropertyPage() { - setDescription(JSPUIMessages.ProjectJSPFContentSettingsPropertyPage_0); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/derived/SingleCharReader.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/derived/SingleCharReader.java deleted file mode 100644 index e198a2766a..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/derived/SingleCharReader.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.derived; - -import java.io.IOException; -import java.io.Reader; - -/* - * Copied from org.eclipse.jdt.internal.corext.javadoc.SingleCharReader. - * Modification was made to fix statement unnecessarily nested within else - * clause warning in read(..). - */ -public abstract class SingleCharReader extends Reader { - - /** - * @see Reader#read() - */ - public abstract int read() throws IOException; - - /** - * @see Reader#read(char[],int,int) - */ - public int read(char cbuf[], int off, int len) throws IOException { - int end = off + len; - for (int i = off; i < end; i++) { - int ch = read(); - if (ch == -1) { - if (i == off) { - return -1; - } - return i - off; - } - cbuf[i] = (char) ch; - } - return len; - } - - /** - * @see Reader#ready() - */ - public boolean ready() throws IOException { - return true; - } - - /** - * Gets the content as a String - */ - public String getString() throws IOException { - StringBuffer buf = new StringBuffer(); - int ch; - while ((ch = read()) != -1) { - buf.append((char) ch); - } - return buf.toString(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/ActionContributorJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/ActionContributorJSP.java deleted file mode 100644 index 4a9715e4a0..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/ActionContributorJSP.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.editor; - -import java.util.ResourceBundle; - -import org.eclipse.jdt.ui.actions.RefactorActionGroup; -import org.eclipse.jface.action.IMenuManager; -import org.eclipse.jface.action.MenuManager; -import org.eclipse.jst.jsp.ui.internal.IActionConstantsJSP; -import org.eclipse.jst.jsp.ui.internal.IActionDefinitionIdsJSP; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.RetargetTextEditorAction; -import org.eclipse.wst.html.ui.internal.edit.ui.ActionContributorHTML; -import org.eclipse.wst.sse.ui.internal.actions.StructuredTextEditorActionConstants; - -/** - * ActionContributorJSP - * - * This class should not be used inside multi page editor's - * ActionBarContributor, since cascaded init() call from the - * ActionBarContributor will causes exception and it leads to lose whole - * toolbars. - * - * Instead, use SourcePageActionContributor for source page contributor of - * multi page editor. - * - * Note that this class is still valid for single page editor. - */ -public class ActionContributorJSP extends ActionContributorHTML { - - private RetargetTextEditorAction renameElementAction = null; - private RetargetTextEditorAction moveElementAction = null; - private IMenuManager refactorMenu = null; - - private static final String[] EDITOR_IDS = {"org.eclipse.jst.jsp.core.jspsource.source", "org.eclipse.wst.sse.ui.StructuredTextEditor"}; //$NON-NLS-1$ //$NON-NLS-2$ - - public ActionContributorJSP() { - super(); - - ResourceBundle bundle = JSPUIMessages.getResourceBundle(); - this.renameElementAction = new RetargetTextEditorAction(bundle, IActionConstantsJSP.ACTION_NAME_RENAME_ELEMENT + StructuredTextEditorActionConstants.UNDERSCORE); - this.renameElementAction.setActionDefinitionId(IActionDefinitionIdsJSP.RENAME_ELEMENT); - PlatformUI.getWorkbench().getHelpSystem().setHelp(this.renameElementAction, IHelpContextIds.JSP_REFACTORRENAME_HELPID); - - this.moveElementAction = new RetargetTextEditorAction(bundle, IActionConstantsJSP.ACTION_NAME_MOVE_ELEMENT + StructuredTextEditorActionConstants.UNDERSCORE); - this.moveElementAction.setActionDefinitionId(IActionDefinitionIdsJSP.MOVE_ELEMENT); - PlatformUI.getWorkbench().getHelpSystem().setHelp(this.moveElementAction, IHelpContextIds.JSP_REFACTORMOVE_HELPID); - - // the refactor menu, add the menu itself to add all refactor actions - this.refactorMenu = new MenuManager(JSPUIMessages.ActionContributorJSP_0, RefactorActionGroup.MENU_ID); //$NON-NLS-1$ - refactorMenu.add(this.renameElementAction); - refactorMenu.add(this.moveElementAction); - } - - - protected String[] getExtensionIDs() { - return EDITOR_IDS; - } - - - protected void addToMenu(IMenuManager menu) { - super.addToMenu(menu); - - menu.insertAfter(IWorkbenchActionConstants.M_EDIT, this.refactorMenu); - } - - - public void setActiveEditor(IEditorPart activeEditor) { - - super.setActiveEditor(activeEditor); - this.renameElementAction.setAction(getAction(getTextEditor(getActiveEditorPart()), IActionConstantsJSP.ACTION_NAME_RENAME_ELEMENT)); - this.moveElementAction.setAction(getAction(getTextEditor(getActiveEditorPart()), IActionConstantsJSP.ACTION_NAME_MOVE_ELEMENT)); - } - - - public void setViewerSpecificContributionsEnabled(boolean enabled) { - - super.setViewerSpecificContributionsEnabled(enabled); - this.renameElementAction.setEnabled(enabled); - this.moveElementAction.setEnabled(enabled); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/IHelpContextIds.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/IHelpContextIds.java deleted file mode 100644 index 70193600cd..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/IHelpContextIds.java +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.editor; - -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; - -/** - * Help context ids for the JSP Source Editor. - * <p> - * This interface contains constants only; it is not intended to be - * implemented. - * </p> - * - */ -public interface IHelpContextIds { - // org.eclipse.jst.jsp.ui. - public static final String PREFIX = JSPUIPlugin.ID + "."; //$NON-NLS-1$ - - - // // figured out on the fly - // // JSP Source page editor - // public static final String JSP_SOURCEVIEW_HELPID = - // ContentTypeIdForJSP.ContentTypeID_JSP +"_source_HelpId"; //$NON-NLS-1$ - - // JSP Files Preference page - public static final String JSP_PREFWEBX_FILES_HELPID = PREFIX + "webx0050"; //$NON-NLS-1$ - // JSP Styles Preference page - public static final String JSP_PREFWEBX_STYLES_HELPID = PREFIX + "webx0051"; //$NON-NLS-1$ - // JSP Templates Preference page - public static final String JSP_PREFWEBX_TEMPLATES_HELPID = PREFIX + "webx0052"; //$NON-NLS-1$ - - - // JSP Fragment Property Page - public static final String JSP_FRAGMENT_HELPID = PREFIX + "jspf1000"; //$NON-NLS-1$ - - // JSP Source Editor Context Menu - // Refactor Rename - public static final String JSP_REFACTORRENAME_HELPID = PREFIX + "jspr0010"; //$NON-NLS-1$ - - // Refactor Move - public static final String JSP_REFACTORMOVE_HELPID = PREFIX + "jspr0020"; //$NON-NLS-1$ - - // JSP New File Wizard - Template Page - public static final String JSP_NEWWIZARD_TEMPLATE_HELPID = PREFIX + "jspw0010"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImageHelper.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImageHelper.java deleted file mode 100644 index d4ca9f36f4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImageHelper.java +++ /dev/null @@ -1,179 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.editor; - -import java.util.HashMap; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.resource.ImageRegistry; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.swt.graphics.Image; -import org.eclipse.ui.plugin.AbstractUIPlugin; - - -/** - * Helper class to handle images provided by this plug-in. - * - * NOTE: For internal use only. For images used externally, please use the - * Shared***ImageHelper class instead. - * - * @author amywu - */ -public class JSPEditorPluginImageHelper { - private final String PLUGINID = JSPUIPlugin.ID; - private static JSPEditorPluginImageHelper instance = null; - - // save a descriptor for each image - private HashMap fImageDescRegistry = null; - - /** - * Gets the instance. - * - * @return Returns a JSPEditorPluginImageHelper - */ - public synchronized static JSPEditorPluginImageHelper getInstance() { - if (instance == null) - instance = new JSPEditorPluginImageHelper(); - return instance; - } - - /** - * Retrieves the image associated with resource from the image registry. - * If the image cannot be retrieved, attempt to find and load the image at - * the location specified in resource. - * - * @param resource - * the image to retrieve - * @return Image the image associated with resource or null if one could - * not be found - */ - public Image getImage(String resource) { - Image image = getImageRegistry().get(resource); - if (image == null) { - // create an image - image = createImage(resource); - } - return image; - } - - /** - * Retrieves the Image associated with ImageDescriptor from the image - * descriptor registry. If the Image cannot be retrieved, it is created - * from the ImageDescriptor - * - * @param resource - * the image descriptor to retrieve - * @return Image the associated with the ImageDescriptor or - * the default "missing" image descriptor if one could not be - * found - */ - public Image getImage(ImageDescriptor descriptor) { - if (descriptor == null) - descriptor= ImageDescriptor.getMissingImageDescriptor(); - - Image result= (Image)getImageDescriptorRegistry().get(descriptor); - if (result != null) - return result; - - result= descriptor.createImage(); - if (result != null) - getImageDescriptorRegistry().put(descriptor, result); - return result; - } - - /** - * Retrieves the image descriptor associated with resource from the image - * descriptor registry. If the image descriptor cannot be retrieved, - * attempt to find and load the image descriptor at the location specified - * in resource. - * - * @param resource - * the image descriptor to retrieve - * @return ImageDescriptor the image descriptor assocated with resource or - * the default "missing" image descriptor if one could not be - * found - */ - public ImageDescriptor getImageDescriptor(String resource) { - ImageDescriptor imageDescriptor = null; - Object o = getImageDescriptorRegistry().get(resource); - if (o == null) { - //create a descriptor - imageDescriptor = createImageDescriptor(resource); - } - else { - imageDescriptor = (ImageDescriptor) o; - } - return imageDescriptor; - } - - /** - * Returns the image descriptor registry for this plugin. - * - * @return HashMap - image descriptor registry for this plugin - */ - private HashMap getImageDescriptorRegistry() { - if (fImageDescRegistry == null) - fImageDescRegistry = new HashMap(); - return fImageDescRegistry; - } - - /** - * Returns the image registry for this plugin. - * - * @return ImageRegistry - image registry for this plugin - */ - private ImageRegistry getImageRegistry() { - return JFaceResources.getImageRegistry(); - } - - /** - * Creates an image from the given resource and adds the image to the - * image registry. - * - * @param resource - * @return Image - */ - private Image createImage(String resource) { - ImageDescriptor desc = getImageDescriptor(resource); - Image image = null; - - if (desc != null) { - image = desc.createImage(); - // dont add the missing image descriptor image to the image registry - if (!desc.equals(ImageDescriptor.getMissingImageDescriptor())) - getImageRegistry().put(resource, image); - } - return image; - } - - /** - * Creates an image descriptor from the given imageFilePath and adds the - * image descriptor to the image descriptor registry. If an image - * descriptor could not be created, the default "missing" image descriptor - * is returned but not added to the image descriptor registry. - * - * @param imageFilePath - * @return ImageDescriptor image descriptor for imageFilePath or default - * "missing" image descriptor if resource could not be found - */ - private ImageDescriptor createImageDescriptor(String imageFilePath) { - ImageDescriptor imageDescriptor = AbstractUIPlugin.imageDescriptorFromPlugin(PLUGINID, imageFilePath); - if (imageDescriptor != null) { - getImageDescriptorRegistry().put(imageFilePath, imageDescriptor); - } - else { - imageDescriptor = ImageDescriptor.getMissingImageDescriptor(); - } - - return imageDescriptor; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImages.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImages.java deleted file mode 100644 index b8b26c1c98..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPEditorPluginImages.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.editor; - -/** - * Bundle of most images used by the JSP Editor plug-in. - */ -public class JSPEditorPluginImages { - public static final String IMG_OBJ_CLASS_OBJ = "icons/full/obj16/class_obj.gif"; //$NON-NLS-1$ - public static final String IMG_OBJ_TAG_GENERIC = "icons/full/obj16/tag-generic.gif"; //$NON-NLS-1$ - public static final String IMG_OBJ_TAG_JSP = "icons/full/obj16/tag-jsp.gif"; //$NON-NLS-1$ - public static final String IMG_OBJ_TAG_TEMPLATE = "icons/full/obj16/tag-template.gif"; //$NON-NLS-1$ - public static final String IMG_OBJ_PUBLIC = "icons/full/obj16/public.gif"; //$NON-NLS-1$ - - public static final String FIELD_PROTECTED_OBJ = "icons/full/obj16/field_protected_obj.gif"; //$NON-NLS-1$ - public static final String FIELD_PUBLIC_OBJ = "icons/full/obj16/field_public_obj.gif"; //$NON-NLS-1$ - public static final String FIELD_DEFAULT_OBJ= "icons/full/obj16/field_default_obj.gif"; //$NON-NLS-1$ - public static final String FIELD_PRIVATE_OBJ = "icons/full/obj16/field_private_obj.gif"; //$NON-NLS-1$ - - public static final String DEFAULT_CO = "icons/full/obj16/default_co.gif"; //$NON-NLS-1$ - public static final String PROTECTED_CO = "icons/full/obj16/protected_co.gif"; //$NON-NLS-1$ - public static final String PUBLIC_CO = "icons/full/obj16/public_co.gif"; //$NON-NLS-1$ - public static final String PRIVATE_CO = "icons/full/obj16/private_co.gif"; //$NON-NLS-1$ - - public static final String INNERCLASS_DEFAULT_OBJ= "icons/full/obj16/innerclass_default_obj.gif"; //$NON-NLS-1$ - public static final String INNERCLASS_PRIVATE_OBJ = "icons/full/obj16/innerclass_private_obj.gif"; //$NON-NLS-1$ - public static final String INNERCLASS_PROTECTED_OBJ = "icons/full/obj16/innerclass_protected_obj.gif"; //$NON-NLS-1$ - public static final String INNERCLASS_PUBLIC_OBJ = "icons/full/obj16/innerclass_public_obj.gif"; //$NON-NLS-1$ - - public static final String INNERINTERFACE_DEFAULT_OBJ = "icons/full/obj16/innerinterface_default_obj.gif"; //$NON-NLS-1$ - public static final String INNERINTERFACE_PRIVATE_OBJ = "icons/full/obj16/innerinterface_private_obj.gif"; //$NON-NLS-1$ - public static final String INNERINTERFACE_PROTECTED_OBJ = "icons/full/obj16/innerinterface_protected_obj.gif"; //$NON-NLS-1$ - public static final String INNERINTERFACE_PUBLIC_OBJ = "icons/full/obj16/innerinterface_public_obj.gif"; //$NON-NLS-1$ - - public static final String PACKAGE_OBJ = "icons/full/obj16/package_obj.gif"; //$NON-NLS-1$ - - public static final String LOCAL_VARIABLE_OBJ = "icons/full/obj16/localvariable_obj.gif"; //$NON-NLS-1$ - - public static final String IMG_OBJ_WIZBAN_NEWJSPFILE = "icons/full/wizban/newjspfile_wiz.png"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPSourceEditingTextTools.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPSourceEditingTextTools.java deleted file mode 100644 index ec15d5c1e3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/editor/JSPSourceEditingTextTools.java +++ /dev/null @@ -1,62 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.editor; - - - -import org.eclipse.jst.jsp.core.internal.document.PageDirectiveAdapter; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.JSP12Namespace; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.ui.internal.provisional.XMLSourceEditingTextTools; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -/** - * Implements ISourceEditingTextTools interface - */ -public class JSPSourceEditingTextTools extends XMLSourceEditingTextTools { - - public String getPageLanguage(Node node) { - String language = null; - Document doc = null; - if (node.getNodeType() == Node.DOCUMENT_NODE) { - doc = (Document) node; - } - else { - doc = node.getOwnerDocument(); - } - if (doc != null) { - if (doc instanceof IDOMDocument) { - PageDirectiveAdapter adapter = (PageDirectiveAdapter) ((IDOMDocument) doc).getAdapterFor(PageDirectiveAdapter.class); - if (adapter != null) - language = adapter.getLanguage(); - } - else { - // iterate through all of the page directives - NodeList pageDirectives = doc.getElementsByTagName(JSP12Namespace.ElementName.DIRECTIVE_PAGE); - for (int i = 0; i < pageDirectives.getLength(); i++) { - Element pageDirective = (Element) pageDirectives.item(i); - String langValue = pageDirective.getAttribute(JSP11Namespace.ATTR_NAME_LANGUAGE); - // last one to declare a language wins - if (langValue != null) - language = langValue; - } - } - } - // if no language was specified anywhere, assume Java - if (language == null) - language = JSP11Namespace.ATTR_VALUE_JAVA; - return language; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/FormattingStrategyJSPJava.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/FormattingStrategyJSPJava.java deleted file mode 100644 index 309b910297..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/format/FormattingStrategyJSPJava.java +++ /dev/null @@ -1,110 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.format; - -import java.util.LinkedList; -import java.util.Map; - -import org.eclipse.jdt.core.ICompilationUnit; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.core.ToolFactory; -import org.eclipse.jdt.core.formatter.CodeFormatter; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.jface.text.TypedPosition; -import org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy; -import org.eclipse.jface.text.formatter.FormattingContextProperties; -import org.eclipse.jface.text.formatter.IFormattingContext; -import org.eclipse.jst.jsp.core.internal.Logger; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationUtil; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.TextEdit; - - -public class FormattingStrategyJSPJava extends ContextBasedFormattingStrategy { - - /** Documents to be formatted by this strategy */ - private final LinkedList fDocuments = new LinkedList(); - /** Partitions to be formatted by this strategy */ - private final LinkedList fPartitions = new LinkedList(); - JSPTranslation translation = null; - - /** - * Creates a new java formatting strategy. - */ - public FormattingStrategyJSPJava() { - super(); - } - - /* - * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#format() - */ - public void format() { - super.format(); - - final IDocument document = (IDocument) fDocuments.removeFirst(); - final TypedPosition partition = (TypedPosition) fPartitions.removeFirst(); - - if (document != null && partition != null) { - try { - - JSPTranslationUtil translationUtil = new JSPTranslationUtil(document); - ICompilationUnit cu = translationUtil.getCompilationUnit(); - if (cu != null) { - String cuSource = cu.getSource(); - TextEdit textEdit = formatString(CodeFormatter.K_COMPILATION_UNIT, cuSource, 0, TextUtilities.getDefaultLineDelimiter(document), getPreferences()); - - TextEdit jspEdit = translationUtil.getTranslation().getJspEdit(textEdit); - if (jspEdit != null && jspEdit.hasChildren()) - jspEdit.apply(document); - } - - } - catch (MalformedTreeException exception) { - Logger.logException(exception); - } - catch (BadLocationException exception) { - // Can only happen on concurrent document modification - log - // and bail out - Logger.logException(exception); - } - catch (JavaModelException exception) { - Logger.logException(exception); - } - } - } - - /* - * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStarts(org.eclipse.jface.text.formatter.IFormattingContext) - */ - public void formatterStarts(final IFormattingContext context) { - super.formatterStarts(context); - - fPartitions.addLast(context.getProperty(FormattingContextProperties.CONTEXT_PARTITION)); - fDocuments.addLast(context.getProperty(FormattingContextProperties.CONTEXT_MEDIUM)); - } - - /* - * @see org.eclipse.jface.text.formatter.ContextBasedFormattingStrategy#formatterStops() - */ - public void formatterStops() { - super.formatterStops(); - - fPartitions.clear(); - fDocuments.clear(); - } - - public TextEdit formatString(int kind, String string, int indentationLevel, String lineSeparator, Map options) { - return ToolFactory.createCodeFormatter(options).format(kind, string, 0, string.length(), indentationLevel, lineSeparator); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileEditorInput.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileEditorInput.java deleted file mode 100644 index 4b50266650..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileEditorInput.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.io.File; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPathEditorInput; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.editors.text.ILocationProvider; -import org.eclipse.ui.model.IWorkbenchAdapter; - -/** - * EditorInput for external files. Copied from - * org.eclipse.ui.internal.editors.text.JavaFileEditorInput - */ -class ExternalFileEditorInput implements IEditorInput, ILocationProvider { - // copies of this class exist in: - // org.eclipse.wst.xml.ui.internal.hyperlink - // org.eclipse.wst.html.ui.internal.hyperlink - // org.eclipse.jst.jsp.ui.internal.hyperlink - - /** - * The workbench adapter which simply provides the label. - * - * @see Eclipse 3.1 - */ - private class WorkbenchAdapter implements IWorkbenchAdapter { - /* - * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object) - */ - public Object[] getChildren(Object o) { - return null; - } - - /* - * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object) - */ - public ImageDescriptor getImageDescriptor(Object object) { - return null; - } - - /* - * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object) - */ - public String getLabel(Object o) { - return ((ExternalFileEditorInput) o).getName(); - } - - /* - * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object) - */ - public Object getParent(Object o) { - return null; - } - } - - private File fFile; - private WorkbenchAdapter fWorkbenchAdapter = new WorkbenchAdapter(); - - public ExternalFileEditorInput(File file) { - super(); - fFile = file; - fWorkbenchAdapter = new WorkbenchAdapter(); - } - - /* - * @see org.eclipse.ui.IEditorInput#exists() - */ - public boolean exists() { - return fFile.exists(); - } - - /* - * @see org.eclipse.ui.IEditorInput#getImageDescriptor() - */ - public ImageDescriptor getImageDescriptor() { - return null; - } - - /* - * @see org.eclipse.ui.IEditorInput#getName() - */ - public String getName() { - return fFile.getName(); - } - - /* - * @see org.eclipse.ui.IEditorInput#getPersistable() - */ - public IPersistableElement getPersistable() { - return null; - } - - /* - * @see org.eclipse.ui.IEditorInput#getToolTipText() - */ - public String getToolTipText() { - return fFile.getAbsolutePath(); - } - - /* - * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) - */ - public Object getAdapter(Class adapter) { - if (ILocationProvider.class.equals(adapter)) - return this; - if (IWorkbenchAdapter.class.equals(adapter)) - return fWorkbenchAdapter; - return Platform.getAdapterManager().getAdapter(this, adapter); - } - - /* - * @see org.eclipse.ui.editors.text.ILocationProvider#getPath(java.lang.Object) - */ - public IPath getPath(Object element) { - if (element instanceof ExternalFileEditorInput) { - ExternalFileEditorInput input = (ExternalFileEditorInput) element; - return Path.fromOSString(input.fFile.getAbsolutePath()); - } - return null; - } - - /* - * @see org.eclipse.ui.IPathEditorInput#getPath() - * @since 3.1 - */ - public IPath getPath() { - return Path.fromOSString(fFile.getAbsolutePath()); - } - - /* - * @see java.lang.Object#equals(java.lang.Object) - */ - public boolean equals(Object o) { - if (o == this) - return true; - - if (o instanceof ExternalFileEditorInput) { - ExternalFileEditorInput input = (ExternalFileEditorInput) o; - return fFile.equals(input.fFile); - } - - if (o instanceof IPathEditorInput) { - IPathEditorInput input= (IPathEditorInput)o; - return getPath().equals(input.getPath()); - } - - return false; - } - - /* - * @see java.lang.Object#hashCode() - */ - public int hashCode() { - return fFile.hashCode(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileHyperlink.java deleted file mode 100644 index f25d93789f..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/ExternalFileHyperlink.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.io.File; - -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.ide.IDE; - -/** - * Hyperlink for external files. - */ -class ExternalFileHyperlink implements IHyperlink { - // copies of this class exist in: - // org.eclipse.wst.xml.ui.internal.hyperlink - // org.eclipse.wst.html.ui.internal.hyperlink - // org.eclipse.jst.jsp.ui.internal.hyperlink - - private IRegion fHyperlinkRegion; - private File fHyperlinkFile; - - public ExternalFileHyperlink(IRegion region, File file) { - fHyperlinkFile = file; - fHyperlinkRegion = region; - } - - public IRegion getHyperlinkRegion() { - return fHyperlinkRegion; - } - - public String getTypeLabel() { - return null; - } - - public String getHyperlinkText() { - return null; - } - - public void open() { - if (fHyperlinkFile != null) { - IEditorInput input = new ExternalFileEditorInput(fHyperlinkFile); - IEditorDescriptor descriptor; - try { - descriptor = IDE.getEditorDescriptor(input.getName(), true); - if (descriptor != null) { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, input, descriptor.getId(), true); - } - } - catch (PartInitException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlink.java deleted file mode 100644 index 539f95951c..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlink.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.ui.JavaUI; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorPart; - -/** - * Hyperlink for JSP Java elements - */ -class JSPJavaHyperlink implements IHyperlink { - private IRegion fRegion; - private IJavaElement fElement; - - public JSPJavaHyperlink(IRegion region, IJavaElement element) { - fRegion = region; - fElement = element; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkRegion() - */ - public IRegion getHyperlinkRegion() { - return fRegion; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel() - */ - public String getTypeLabel() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText() - */ - public String getHyperlinkText() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#open() - */ - public void open() { - try { - IEditorPart editor = JavaUI.openInEditor(fElement); - if (editor != null) { - JavaUI.revealInEditor(editor, fElement); - } - } - catch (Exception e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlinkDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlinkDetector.java deleted file mode 100644 index 846dee2b30..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/JSPJavaHyperlinkDetector.java +++ /dev/null @@ -1,256 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.Path; -import org.eclipse.jdt.core.IField; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.ILocalVariable; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.ISourceRange; -import org.eclipse.jdt.core.ISourceReference; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.util.URIResolver; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - -/** - * Detects hyperlinks in JSP Java content - */ -public class JSPJavaHyperlinkDetector extends AbstractHyperlinkDetector { - - private IHyperlink createHyperlink(IJavaElement element, IRegion region, IDocument document) { - IHyperlink link = null; - if (region != null) { - // open local variable in the JSP file... - if (element instanceof ISourceReference) { - IFile file = null; - int jspOffset = 0; - IStructuredModel sModel = null; - - // try to locate the file in the workspace - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (sModel != null) { - URIResolver resolver = sModel.getResolver(); - if (resolver != null) { - String uriString = resolver.getFileBaseLocation(); - file = getFile(uriString); - } - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - - // get Java range, translate coordinate to JSP - - try { - ISourceRange range = null; - IJSPTranslation jspTranslation = getJSPTranslation(document); - if (jspTranslation != null) { - // link to local variable definitions - if (element instanceof ILocalVariable) { - range = ((ILocalVariable) element).getNameRange(); - } - // linking to fields of the same compilation unit - else if (element.getElementType() == IJavaElement.FIELD) { - Object cu = ((IField) element).getCompilationUnit(); - if (cu != null && cu.equals(jspTranslation.getCompilationUnit())) - range = ((ISourceReference) element).getSourceRange(); - } - // linking to methods of the same compilation unit - else if (element.getElementType() == IJavaElement.METHOD) { - Object cu = ((IMethod) element).getCompilationUnit(); - if (cu != null && cu.equals(jspTranslation.getCompilationUnit())) - range = ((ISourceReference) element).getSourceRange(); - } - } - - if (range != null && file != null) { - jspOffset = jspTranslation.getJspOffset(range.getOffset()); - if (jspOffset >= 0) { - link = new WorkspaceFileHyperlink(region, file, new Region(jspOffset, range.getLength())); - } - } - } - catch (JavaModelException jme) { - Logger.log(Logger.WARNING_DEBUG, jme.getMessage(), jme); - } - } - if (link == null) { - link = new JSPJavaHyperlink(region, element); - } - } - return link; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlinkDetector#detectHyperlinks(org.eclipse.jface.text.ITextViewer, - * org.eclipse.jface.text.IRegion, boolean) - */ - public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { - List hyperlinks = new ArrayList(0); - - if (region != null && textViewer != null) { - IDocument document = textViewer.getDocument(); - - // check and make sure this is a valid Java type - JSPTranslation jspTranslation = getJSPTranslation(document); - if (jspTranslation != null) { - // check if we are in JSP Java content - int javaOffset = jspTranslation.getJavaOffset(region.getOffset()); - if (javaOffset > -1) { - // check that we are not in indirect Java content (like - // included files) - if (!jspTranslation.isIndirect(javaOffset)) { - // get Java elements - IJavaElement[] elements = jspTranslation.getElementsFromJspRange(region.getOffset(), region.getOffset() + region.getLength()); - if (elements != null && elements.length > 0) { - // create a JSPJavaHyperlink for each Java element - for (int i = 0; i < elements.length; ++i) { - IJavaElement element = elements[i]; - - // find hyperlink range for Java element - IRegion hyperlinkRegion = selectWord(document, region.getOffset()); - IHyperlink link = createHyperlink(element, hyperlinkRegion, document); - if (link != null) { - hyperlinks.add(link); - } - } - } - } - } - } - } - - if (hyperlinks.size() == 0) - return null; - return (IHyperlink[]) hyperlinks.toArray(new IHyperlink[0]); - } - - /** - * Returns an IFile from the given uri if possible, null if cannot find - * file from uri. - * - * @param fileString - * file system path - * @return returns IFile if fileString exists in the workspace - */ - private IFile getFile(String fileString) { - IFile file = null; - - if (fileString != null) { - Path filePath = new Path(fileString); - if (filePath.segmentCount() > 1 && ResourcesPlugin.getWorkspace().getRoot().getFile(filePath).exists()) { - return ResourcesPlugin.getWorkspace().getRoot().getFile(filePath); - } - IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(filePath); - for (int i = 0; i < files.length && file == null; i++) - if (files[i].exists()) - file = files[i]; - } - - return file; - } - - /** - * Get JSP translation object - * - * @return JSPTranslation if one exists, null otherwise - */ - private JSPTranslation getJSPTranslation(IDocument document) { - JSPTranslation translation = null; - - IDOMModel xmlModel = null; - try { - xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (xmlModel != null) { - IDOMDocument xmlDoc = xmlModel.getDocument(); - JSPTranslationAdapter adapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (adapter != null) { - translation = adapter.getJSPTranslation(); - } - } - } - finally { - if (xmlModel != null) - xmlModel.releaseFromRead(); - } - return translation; - } - - /** - * Java always selects word when defining region - * - * @param document - * @param anchor - * @return IRegion - */ - private IRegion selectWord(IDocument document, int anchor) { - - try { - int offset = anchor; - char c; - - while (offset >= 0) { - c = document.getChar(offset); - if (!Character.isJavaIdentifierPart(c)) - break; - --offset; - } - - int start = offset; - - offset = anchor; - int length = document.getLength(); - - while (offset < length) { - c = document.getChar(offset); - if (!Character.isJavaIdentifierPart(c)) - break; - ++offset; - } - - int end = offset; - - if (start == end) - return new Region(start, 0); - - return new Region(start + 1, end - start - 1); - - } - catch (BadLocationException x) { - return null; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibHyperlinkDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibHyperlinkDetector.java deleted file mode 100644 index 7b357ec1db..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibHyperlinkDetector.java +++ /dev/null @@ -1,324 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.io.File; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.TextUtilities; -import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jface.text.hyperlink.URLHyperlink; -import org.eclipse.jst.jsp.core.internal.contentmodel.TaglibController; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.CMElementDeclarationImpl; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TLDCMDocumentManager; -import org.eclipse.jst.jsp.core.internal.contentmodel.tld.TaglibTracker; -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.jst.jsp.core.internal.provisional.JSP12Namespace; -import org.eclipse.jst.jsp.core.taglib.ITLDRecord; -import org.eclipse.jst.jsp.core.taglib.ITaglibRecord; -import org.eclipse.jst.jsp.core.taglib.TaglibIndex; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredPartitioning; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.utils.StringUtils; -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.provisional.contentmodel.CMNodeWrapper; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMAttr; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; -import org.w3c.dom.Attr; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; - -/** - * Detects hyperlinks for taglibs. - */ -public class TaglibHyperlinkDetector extends AbstractHyperlinkDetector { - private final String HTTP_PROTOCOL = "http://";//$NON-NLS-1$ - private final String JAR_PROTOCOL = "jar:file:";//$NON-NLS-1$ - //private String URN_TAGDIR = "urn:jsptagdir:"; - private String URN_TLD = "urn:jsptld:"; - private String XMLNS = "xmlns:"; //$NON-NLS-1$ - - public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { - IHyperlink hyperlink = null; - - if (textViewer != null && region != null) { - IDocument doc = textViewer.getDocument(); - if (doc != null) { - try { - // check if jsp tag/directive first - ITypedRegion partition = TextUtilities.getPartition(doc, IStructuredPartitioning.DEFAULT_STRUCTURED_PARTITIONING, region.getOffset(), false); - if (partition != null && partition.getType() == IJSPPartitions.JSP_DIRECTIVE) { - // check if jsp taglib directive - Node currentNode = getCurrentNode(doc, region.getOffset()); - if (currentNode != null && currentNode.getNodeType() == Node.ELEMENT_NODE) { - if (JSP11Namespace.ElementName.DIRECTIVE_TAGLIB.equalsIgnoreCase(currentNode.getNodeName())) { - // get the uri attribute - Attr taglibNode = ((Element) currentNode).getAttributeNode(JSP11Namespace.ATTR_NAME_URI); - if (taglibNode != null) { - ITaglibRecord reference = TaglibIndex.resolve(getBaseLocationForTaglib(doc), taglibNode.getValue(), false); - // when using a tagdir - // (ITaglibRecord.TAGDIR), - // there's nothing to link to - if (reference != null) { - // handle taglibs - switch (reference.getRecordType()) { - case (ITaglibRecord.TLD) : { - ITLDRecord record = (ITLDRecord) reference; - String uriString = record.getPath().toString(); - IRegion hyperlinkRegion = getHyperlinkRegion(taglibNode); - hyperlink = createHyperlink(uriString, hyperlinkRegion, doc, taglibNode); - } - break; - case (ITaglibRecord.JAR) : - case (ITaglibRecord.URL) : { - IRegion hyperlinkRegion = getHyperlinkRegion(taglibNode); - hyperlink = new TaglibJarUriHyperlink(hyperlinkRegion, reference); - } - } - } - } - } - else if (JSP12Namespace.ElementName.ROOT.equalsIgnoreCase(currentNode.getNodeName())) { - NamedNodeMap attrs = currentNode.getAttributes(); - for (int i = 0; i < attrs.getLength(); i++) { - Attr attr = (Attr) attrs.item(i); - if (attr.getNodeName().startsWith(XMLNS)) { - String uri = StringUtils.strip(attr.getNodeValue()); - if (uri.startsWith(URN_TLD)) { - uri = uri.substring(URN_TLD.length()); - } - ITaglibRecord reference = TaglibIndex.resolve(getBaseLocationForTaglib(doc), uri, false); - // when using a tagdir - // (ITaglibRecord.TAGDIR), - // there's nothing to link to - if (reference != null) { - // handle taglibs - switch (reference.getRecordType()) { - case (ITaglibRecord.TLD) : { - ITLDRecord record = (ITLDRecord) reference; - String uriString = record.getPath().toString(); - IRegion hyperlinkRegion = getHyperlinkRegion(attr); - hyperlink = createHyperlink(uriString, hyperlinkRegion, doc, attr); - } - break; - case (ITaglibRecord.JAR) : - case (ITaglibRecord.URL) : { - IRegion hyperlinkRegion = getHyperlinkRegion(attr); - hyperlink = new TaglibJarUriHyperlink(hyperlinkRegion, reference); - } - } - } - } - } - } - else { - // custom tag to its TLD or tag file - TLDCMDocumentManager documentManager = TaglibController.getTLDCMDocumentManager(doc); - if (documentManager != null) { - List documentTrackers = documentManager.getCMDocumentTrackers(currentNode.getPrefix(), region.getOffset()); - for (int i = 0; i < documentTrackers.size(); i++) { - TaglibTracker tracker = (TaglibTracker) documentTrackers.get(i); - CMElementDeclaration decl = (CMElementDeclaration) tracker.getElements().getNamedItem(currentNode.getNodeName()); - if (decl != null) { - decl = (CMElementDeclaration) ((CMNodeWrapper) decl).getOriginNode(); - if (decl instanceof CMElementDeclarationImpl) { - String base = ((CMElementDeclarationImpl) decl).getLocationString(); - IRegion hyperlinkRegion = getHyperlinkRegion(currentNode); - hyperlink = createHyperlink(base, hyperlinkRegion, doc, currentNode); - } - } - } - } - } - } - } - } - catch (BadLocationException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } - if (hyperlink != null) - return new IHyperlink[]{hyperlink}; - return null; - } - - /** - * Get the base location from the current model (if within workspace, - * location is relative to workspace, otherwise, file system path) - */ - private String getBaseLocationForTaglib(IDocument document) { - String baseLoc = null; - - // get the base location from the current model - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (sModel != null) { - baseLoc = sModel.getBaseLocation(); - } - } - finally { - if (sModel != null) { - sModel.releaseFromRead(); - } - } - return baseLoc; - } - - // the below methods were copied from URIHyperlinkDetector - - private IRegion getHyperlinkRegion(Node node) { - IRegion hyperRegion = null; - - if (node != null) { - short nodeType = node.getNodeType(); - if (nodeType == Node.DOCUMENT_TYPE_NODE) { - // handle doc type node - IDOMNode docNode = (IDOMNode) node; - hyperRegion = new Region(docNode.getStartOffset(), docNode.getEndOffset() - docNode.getStartOffset()); - } - else if (nodeType == Node.ATTRIBUTE_NODE) { - // handle attribute nodes - IDOMAttr att = (IDOMAttr) node; - // do not include quotes in attribute value region - int regOffset = att.getValueRegionStartOffset(); - ITextRegion valueRegion = att.getValueRegion(); - if (valueRegion != null) { - int regLength = valueRegion.getTextLength(); - String attValue = att.getValueRegionText(); - if (StringUtils.isQuoted(attValue)) { - ++regOffset; - regLength = regLength - 2; - } - hyperRegion = new Region(regOffset, regLength); - } - } - if (nodeType == Node.ELEMENT_NODE) { - // handle doc type node - IDOMNode docNode = (IDOMNode) node; - hyperRegion = new Region(docNode.getStartOffset(), docNode.getFirstStructuredDocumentRegion().getTextLength()); - } - } - return hyperRegion; - } - - /** - * Returns an IFile from the given uri. - * - * @param fileString - * workspace-relative path to an existing file in the workspace - * @return returns existing IFile - */ - private IFile getFile(String fileString) { - /* - * Note at this point, fileString is already guaranteed to be pointing - * to an existing file in the workspace, so we can just call getFile. - */ - IPath path = new Path(fileString); - if (path.segmentCount() > 1) { - return ResourcesPlugin.getWorkspace().getRoot().getFile(path); - } - return null; - } - - /** - * Create the appropriate hyperlink - * - * @param uriString - * @param hyperlinkRegion - * @return IHyperlink - */ - private IHyperlink createHyperlink(String uriString, IRegion hyperlinkRegion, IDocument document, Node node) { - IHyperlink link = null; - - if (uriString != null) { - // try to locate the file in the workspace - IFile file = getFile(uriString); - - String temp = uriString.toLowerCase(); - if (temp.startsWith(HTTP_PROTOCOL)) { - // this is a URLHyperlink since this is a web address - link = new URLHyperlink(hyperlinkRegion, uriString); - } - else if (temp.startsWith(JAR_PROTOCOL)) { - // this is a URLFileHyperlink since this is a local address - try { - link = new URLFileHyperlink(hyperlinkRegion, new URL(uriString)); - } - catch (MalformedURLException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - else if (file != null && file.isAccessible()) { - // this is a WorkspaceFileHyperlink since file exists in - // workspace - link = new WorkspaceFileHyperlink(hyperlinkRegion, file); - } - else { - // this is an ExternalFileHyperlink since file does not exist - // in workspace - File externalFile = new File(uriString); - link = new ExternalFileHyperlink(hyperlinkRegion, externalFile); - } - } - - return link; - } - - /** - * Returns the node the cursor is currently on in the document. null if no - * node is selected - * - * @param offset - * @return Node either element, doctype, text, or null - */ - private Node getCurrentNode(IDocument document, int offset) { - // get the current node at the offset (returns either: element, - // doctype, text) - IndexedRegion inode = null; - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(document); - inode = sModel.getIndexedRegion(offset); - if (inode == null) - inode = sModel.getIndexedRegion(offset - 1); - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - - if (inode instanceof Node) { - return (Node) inode; - } - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarHyperlink.java deleted file mode 100644 index 676292616e..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarHyperlink.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.io.File; -import java.io.InputStream; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; - -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.ide.IDE; - -/** - * Hyperlink for taglib files in jars. - */ -class TaglibJarHyperlink implements IHyperlink { - static class ZipStorage implements IStorage { - File fFile = null; - String fEntryName = null; - - ZipStorage(File file, String entryName) { - fFile = file; - fEntryName = entryName; - } - - public InputStream getContents() throws CoreException { - InputStream stream = null; - try { - ZipFile file = new ZipFile(fFile); - ZipEntry entry = file.getEntry(fEntryName); - stream = file.getInputStream(entry); - } - catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, JSPUIPlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR, getFullPath().toString(), e)); - } - return stream; - } - - public IPath getFullPath() { - return new Path(fFile.getAbsolutePath() + IPath.SEPARATOR + fEntryName); - } - - public String getName() { - return fEntryName; - } - - public boolean isReadOnly() { - return true; - } - - public Object getAdapter(Class adapter) { - return null; - } - } - - private IRegion fRegion; - private IPath fZipFilePath; - - public TaglibJarHyperlink(IRegion region, IPath zipFilePath) { - fRegion = region; - fZipFilePath = zipFilePath; - } - - public IRegion getHyperlinkRegion() { - return fRegion; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel() - */ - public String getTypeLabel() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText() - */ - public String getHyperlinkText() { - // TODO Auto-generated method stub - return null; - } - - public void open() { - IEditorInput input = new URLFileHyperlink.StorageEditorInput(new ZipStorage(fZipFilePath.toFile(), "META-INF/taglib.tld")); //$NON-NLS-1$ - IEditorDescriptor descriptor; - try { - descriptor = IDE.getEditorDescriptor(input.getName()); - if (descriptor != null) { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, input, descriptor.getId(), true); - } - } - catch (PartInitException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarUriHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarUriHyperlink.java deleted file mode 100644 index 1cf7086ce4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/TaglibJarUriHyperlink.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.core.taglib.IJarRecord; -import org.eclipse.jst.jsp.core.taglib.ITaglibRecord; -import org.eclipse.jst.jsp.core.taglib.IURLRecord; - -/** - * Hyperlink for taglib files in jars or specified by urls. - */ -class TaglibJarUriHyperlink implements IHyperlink { - private IRegion fRegion; - private ITaglibRecord fTaglibRecord; - private IHyperlink fHyperlink; - - public TaglibJarUriHyperlink(IRegion region, ITaglibRecord record) { - fRegion = region; - fTaglibRecord = record; - } - - private IHyperlink getHyperlink() { - if (fHyperlink == null && fTaglibRecord != null) { - switch (fTaglibRecord.getRecordType()) { - case (ITaglibRecord.JAR) : { - IJarRecord record = (IJarRecord) fTaglibRecord; - fHyperlink = new TaglibJarHyperlink(fRegion, record.getLocation()); - } - break; - case (ITaglibRecord.URL) : { - IURLRecord record = (IURLRecord) fTaglibRecord; - fHyperlink = new URLFileHyperlink(fRegion, record.getURL()); - } - } - } - return fHyperlink; - } - - public IRegion getHyperlinkRegion() { - IRegion region = null; - - IHyperlink link = getHyperlink(); - if (link != null) { - region = link.getHyperlinkRegion(); - } - return region; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel() - */ - public String getTypeLabel() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText() - */ - public String getHyperlinkText() { - // TODO Auto-generated method stub - return null; - } - - public void open() { - IHyperlink link = getHyperlink(); - if (link != null) { - link.open(); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/URLFileHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/URLFileHyperlink.java deleted file mode 100644 index c7e08be5c8..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/URLFileHyperlink.java +++ /dev/null @@ -1,174 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import java.io.InputStream; -import java.net.URL; - -import org.eclipse.core.resources.IStorage; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Status; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IPersistableElement; -import org.eclipse.ui.IStorageEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.ide.IDE; - -/** - * Hyperlink for URLs (opens in read-only mode) - */ -class URLFileHyperlink implements IHyperlink { - // copies of this class exist in: - // org.eclipse.wst.xml.ui.internal.hyperlink - // org.eclipse.wst.html.ui.internal.hyperlink - // org.eclipse.jst.jsp.ui.internal.hyperlink - - static class StorageEditorInput implements IStorageEditorInput { - IStorage fStorage = null; - - StorageEditorInput(IStorage storage) { - fStorage = storage; - } - - public IStorage getStorage() throws CoreException { - return fStorage; - } - - public boolean exists() { - return fStorage != null; - } - - public boolean equals(Object obj) { - if (obj instanceof StorageEditorInput) { - return fStorage.equals(((StorageEditorInput) obj).fStorage); - } - return super.equals(obj); - } - - public ImageDescriptor getImageDescriptor() { - return null; - } - - public String getName() { - return fStorage.getName(); - } - - public IPersistableElement getPersistable() { - return null; - } - - public String getToolTipText() { - return fStorage.getFullPath() != null ? fStorage.getFullPath().toString() : fStorage.getName(); - } - - public Object getAdapter(Class adapter) { - return null; - } - } - - static class URLStorage implements IStorage { - URL fURL = null; - - URLStorage(URL url) { - fURL = url; - } - - public boolean equals(Object obj) { - if (obj instanceof URLStorage) { - return fURL.equals(((URLStorage) obj).fURL); - } - return super.equals(obj); - } - - public InputStream getContents() throws CoreException { - InputStream stream = null; - try { - stream = fURL.openStream(); - } - catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, JSPUIPlugin.getDefault().getBundle().getSymbolicName(), IStatus.ERROR, fURL.toString(), e)); - } - return stream; - } - - public IPath getFullPath() { - return new Path(fURL.toString()); - } - - public String getName() { - return new Path(fURL.getFile()).lastSegment(); - } - - public boolean isReadOnly() { - return true; - } - - public Object getAdapter(Class adapter) { - return null; - } - - } - - private IRegion fRegion; - private URL fURL; - - public URLFileHyperlink(IRegion region, URL url) { - fRegion = region; - fURL = url; - } - - public IRegion getHyperlinkRegion() { - return fRegion; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel() - */ - public String getTypeLabel() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText() - */ - public String getHyperlinkText() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#open() - */ - public void open() { - if (fURL != null) { - IEditorInput input = new StorageEditorInput(new URLStorage(fURL)); - IEditorDescriptor descriptor; - try { - descriptor = IDE.getEditorDescriptor(input.getName()); - if (descriptor != null) { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, input, descriptor.getId(), true); - } - } - catch (PartInitException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/WorkspaceFileHyperlink.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/WorkspaceFileHyperlink.java deleted file mode 100644 index 17aaa0a431..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/hyperlink/WorkspaceFileHyperlink.java +++ /dev/null @@ -1,79 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.hyperlink; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.hyperlink.IHyperlink; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.ide.IDE; -import org.eclipse.ui.texteditor.ITextEditor; - -/** - * Hyperlink for files within the workspace. (As long as there is an IFile, - * this can be used) Opens the default editor for the file. - */ -class WorkspaceFileHyperlink implements IHyperlink { - // copies of this class exist in: - // org.eclipse.wst.xml.ui.internal.hyperlink - // org.eclipse.wst.html.ui.internal.hyperlink - // org.eclipse.jst.jsp.ui.internal.hyperlink - - private IRegion fRegion; - private IFile fFile; - private IRegion fHighlightRange; - - public WorkspaceFileHyperlink(IRegion region, IFile file) { - fRegion = region; - fFile = file; - } - - public WorkspaceFileHyperlink(IRegion region, IFile file, IRegion range) { - fRegion = region; - fFile = file; - fHighlightRange = range; - } - - public IRegion getHyperlinkRegion() { - return fRegion; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getTypeLabel() - */ - public String getTypeLabel() { - // TODO Auto-generated method stub - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.hyperlink.IHyperlink#getHyperlinkText() - */ - public String getHyperlinkText() { - // TODO Auto-generated method stub - return null; - } - - public void open() { - if (fFile != null && fFile.exists()) { - try { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IEditorPart editor = IDE.openEditor(page, fFile, true); - // highlight range in editor if possible - if (fHighlightRange != null && editor instanceof ITextEditor) { - ((ITextEditor) editor).setHighlightRange(fHighlightRange.getOffset(), fHighlightRange.getLength(), true); - } - } - catch (PartInitException pie) { - Logger.log(Logger.WARNING_DEBUG, pie.getMessage(), pie); - } - } - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/BasicRefactorSearchRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/BasicRefactorSearchRequestor.java deleted file mode 100644 index fbeae08f0f..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/BasicRefactorSearchRequestor.java +++ /dev/null @@ -1,372 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Reader; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jdt.core.search.SearchRequestor; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.core.internal.java.search.JavaSearchDocumentDelegate; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.DocumentChange; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.osgi.util.NLS; -import org.eclipse.text.edits.MalformedTreeException; -import org.eclipse.text.edits.MultiTextEdit; -import org.eclipse.text.edits.ReplaceEdit; -import org.eclipse.text.edits.TextEdit; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.actions.WorkspaceModifyOperation; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.wst.sse.core.internal.document.DocumentReader; -import org.eclipse.wst.sse.core.internal.encoding.CodedStreamCreator; - -/** - * Creates document change(s) for an IJavaElement rename. - * Changes are created for every type "match" in the workspace - * @author pavery - */ -public class BasicRefactorSearchRequestor extends SearchRequestor { - - /** - * Workspace operation to perform save on model for updated documents. - * Should only be done on models not open in an editor. - */ - private class SaveJspFileOp extends WorkspaceModifyOperation { - - private IDocument fJSPDoc = null; - private IFile fJSPFile = null; - - public SaveJspFileOp(IFile jspFile, IDocument jspDoc) { - this.fJSPDoc = jspDoc; - this.fJSPFile = jspFile; - } - - protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { - - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3765 - // save file w/ no intermediate model creation - - CodedStreamCreator codedStreamCreator = new CodedStreamCreator(); - Reader reader = new DocumentReader(this.fJSPDoc); - codedStreamCreator.set(this.fJSPFile, reader); - - ByteArrayOutputStream codedByteStream = null; - InputStream codedStream = null; - try { - codedByteStream = codedStreamCreator.getCodedByteArrayOutputStream(); - codedStream = new ByteArrayInputStream(codedByteStream.toByteArray()); - if (this.fJSPFile.exists()) - this.fJSPFile.setContents(codedStream, true, true, null); - else - this.fJSPFile.create(codedStream, false, null); - - } catch (CoreException e) { - Logger.logException(e); - } catch (IOException e) { - Logger.logException(e); - } - finally { - try { - if(codedByteStream != null) - codedByteStream.close(); - if(codedStream != null) - codedStream.close(); - } - catch (IOException e){ - // unlikely - } - } - } - } - // end inner class SaveJspFileOp - - /** - * Change class that wraps a text edit on the jsp document - */ - private class RenameChange extends DocumentChange { - - private TextEdit fEdit = null; - private IFile fJSPFile = null; - private IDocument fJSPDoc = null; - private String fDescription = JSPUIMessages.BasicRefactorSearchRequestor_0; - - public RenameChange(IFile jspFile, IDocument jspDoc, TextEdit edit, String description) { - super(JSPUIMessages.BasicRefactorSearchRequestor_6, jspDoc); - this.fEdit = edit; - this.fJSPFile = jspFile; - this.fJSPDoc = jspDoc; - this.fDescription = description; - } - - public RefactoringStatus isValid(IProgressMonitor pm)throws CoreException { - return new RefactoringStatus(); - } - - public IDocument getPreviewDocument(IProgressMonitor pm) throws CoreException { - IDocument copyDoc = new Document(fJSPDoc.get()); - try { - fEdit.apply(copyDoc); - } - catch (MalformedTreeException e) { - // ignore - } - catch (BadLocationException e) { - // ignore - } - return copyDoc; - } - - public Change perform(IProgressMonitor pm) throws CoreException { - RenameChange undoChange = null; - try { - - if(!isOpenInEditor(this.fJSPDoc)) { - // apply edit to JSP doc AND save model - undoChange = new RenameChange(this.fJSPFile, this.fJSPDoc, this.fEdit.apply(fJSPDoc), this.fDescription); - saveFile(this.fJSPFile, this.fJSPDoc); - } - else { - // just apply edit to JSP document - undoChange = new RenameChange(this.fJSPFile, this.fJSPDoc, this.fEdit.apply(fJSPDoc), this.fDescription); - } - - } catch (MalformedTreeException e) { - Logger.logException(e); - } catch (BadLocationException e) { - Logger.logException(e); - } - return undoChange; - } - - /** - * Performed in an operation since it modifies resources in the workspace - * @param jspDoc - * @throws CoreException - */ - private void saveFile(IFile jspFile, IDocument jspDoc) { - - SaveJspFileOp op = new SaveJspFileOp(jspFile, jspDoc); - - try { - op.run(JSPSearchSupport.getInstance().getProgressMonitor()); - } catch (InvocationTargetException e) { - Logger.logException(e); - } catch (InterruptedException e) { - Logger.logException(e); - } - } - - /** - * Checks if a document is open in an editor - * @param jspDoc - * @return - */ - private boolean isOpenInEditor(IDocument jspDoc) { - IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows(); - IWorkbenchWindow w = null; - for (int i = 0; i < windows.length; i++) { - - w = windows[i]; - IWorkbenchPage page = w.getActivePage(); - if (page != null) { - - IEditorReference[] references = page.getEditorReferences(); - IEditorPart editor = null; - Object o = null; - IDocument doc = null; - for (int j = 0; j < references.length; j++) { - - editor = references[j].getEditor(true); - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3764 - // use adapter to get ITextEditor (for things like - // page designer) - o = editor.getAdapter(ITextEditor.class); - if (o != null && o instanceof ITextEditor) { - - doc = ((ITextEditor) o).getDocumentProvider().getDocument(editor.getEditorInput()); - if (doc != null && doc.equals(jspDoc)) { - return true; - } - } - } - } - } - return false; - } - - public String getName() { - return this.fDescription; - } - - public Object getModifiedElement() { - return getElement(); - } - } - // end inner class RenameChange - - - /** The type being renamed (the old type)*/ - IJavaElement fElement = null; - /** The new name of the type being renamed*/ - private String fNewName = ""; //$NON-NLS-1$ - /** maps a JSPSearchDocument path -> MultiTextEdit for the java file*/ - private HashMap fSearchDocPath2JavaEditMap = null; - - public BasicRefactorSearchRequestor(IJavaElement element, String newName) { - this.fNewName = newName; - this.fElement = element; - this.fSearchDocPath2JavaEditMap = new HashMap(); - } - - public IJavaElement getElement() { - return this.fElement; - } - - /** - * @return the new name for the Type - */ - public String getNewName() { - return this.fNewName; - } - - /** - * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch) - */ - public void acceptSearchMatch(SearchMatch javaMatch) throws CoreException { - - String matchDocumentPath = javaMatch.getResource().getFullPath().toString(); - SearchDocument searchDoc = JSPSearchSupport.getInstance().getSearchDocument(matchDocumentPath); - - if (searchDoc != null && searchDoc instanceof JavaSearchDocumentDelegate) { - - String renameText = getRenameText((JavaSearchDocumentDelegate)searchDoc, javaMatch); - - // add it for the correct document - addJavaEdit(searchDoc.getPath(), new ReplaceEdit(javaMatch.getOffset(), javaMatch.getLength(), renameText)); - } - } - - /** - * @param searchDoc - * @return - */ - protected String getRenameText(JavaSearchDocumentDelegate searchDoc, SearchMatch javaMatch) { - return getNewName(); - } - - /** - * Adds to the multi edit for a give java document. - * @param javaDocument - * @param javaEdit - */ - private void addJavaEdit(String searchDocPath, ReplaceEdit javaEdit) { - - Object o = this.fSearchDocPath2JavaEditMap.get(searchDocPath); - if(o != null) { - - MultiTextEdit multi = (MultiTextEdit)o; - multi.addChild(javaEdit); - } - else { - // use a multi edit so doc position offsets get updated automatically - // when adding multiple child edits - MultiTextEdit multi = new MultiTextEdit(); - multi.addChild(javaEdit); - this.fSearchDocPath2JavaEditMap.put(searchDocPath, multi); - } - } - - /** - * - * @return all JSP changes for the search matches for the given Type - */ - public Change[] getChanges() { - - JSPSearchSupport support = JSPSearchSupport.getInstance(); - List changes = new ArrayList(); - Iterator keys = fSearchDocPath2JavaEditMap.keySet().iterator(); - String searchDocPath = null; - SearchDocument delegate = null; - - while(keys.hasNext()) { - // create on the fly - searchDocPath = (String)keys.next(); - MultiTextEdit javaEdit = (MultiTextEdit)fSearchDocPath2JavaEditMap.get(searchDocPath); - delegate = support.getSearchDocument(searchDocPath); - - if(delegate != null && delegate instanceof JavaSearchDocumentDelegate) { - JavaSearchDocumentDelegate javaDelegate = (JavaSearchDocumentDelegate)delegate; - changes.add(createChange(javaDelegate, javaDelegate.getJspTranslation().getJspEdit(javaEdit))); - } - } - return (Change[])changes.toArray(new Change[changes.size()]); - } - - private Change createChange(JavaSearchDocumentDelegate searchDoc, TextEdit edit) { - - IDocument doc = searchDoc.getJspTranslation().getJspDocument(); - String file = searchDoc.getFile().getName(); - String description = getDescription(); - try { - // document lines are 0 based - String lineNumber = Integer.toString(doc.getLineOfOffset(edit.getOffset()) + 1); - description += " " + NLS.bind(JSPUIMessages.BasicRefactorSearchRequestor_1, new String[]{file, lineNumber}); //$NON-NLS-1$ - } - catch (BadLocationException e) { - Logger.logException(e); - } - return new RenameChange(searchDoc.getFile(), doc, edit, description); - } - - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3205 - // only relevant for IType refactorings - protected boolean isFullyQualified(String matchText) { - if(getElement() instanceof IType) { - String pkg = ((IType)getElement()).getPackageFragment().getElementName(); - return matchText.startsWith(pkg); - } - return false; - } - - /** - * Subclasses should override to better describe the change. - * @return - */ - protected String getDescription() { - return ""; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPJavaSelectionProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPJavaSelectionProvider.java deleted file mode 100644 index 08b6c96b45..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPJavaSelectionProvider.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2001, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextSelection; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - -class JSPJavaSelectionProvider { - static IJavaElement[] getSelection(ITextEditor textEditor) { - IJavaElement[] elements = null; - - IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); - ISelection selection = textEditor.getSelectionProvider().getSelection(); - if (selection instanceof ITextSelection) { - ITextSelection textSelection = (ITextSelection) selection; - // get the JSP translation object for this editor's document - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - try { - if (model instanceof IDOMModel) { - IDOMModel xmlModel = (IDOMModel)model; - IDOMDocument xmlDoc = xmlModel.getDocument(); - - JSPTranslationAdapter adapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (adapter != null) { - JSPTranslation translation = adapter.getJSPTranslation(); - elements = translation.getElementsFromJspRange(textSelection.getOffset(), textSelection.getOffset() + textSelection.getLength()); - } - } - } - finally { - if (model != null) - model.releaseFromRead(); - } - } - if (elements == null) { - elements = new IJavaElement[0]; - } - return elements; - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameChange.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameChange.java deleted file mode 100644 index eea4cac8c3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameChange.java +++ /dev/null @@ -1,67 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; - -/** - * @author pavery - */ -public class JSPMethodRenameChange extends Change { - - public static Change[] createChangesFor(IMethod method, String newName) { - JSPSearchSupport support = JSPSearchSupport.getInstance(); - - // should be handled by JSPIndexManager - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3036 - // support.indexWorkspaceAndWait(); - - BasicRefactorSearchRequestor requestor = new JSPMethodRenameRequestor(method, newName); - support.searchRunnable(method, new JSPSearchScope(), requestor); - - return requestor.getChanges(); - } - - public String getName() { - return JSPUIMessages.JSP_changes; //$NON-NLS-1$ - } - - public void initializeValidationData(IProgressMonitor pm) { - // pa_TODO implement - // must be implemented to decide correct value of isValid - } - - public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException { - // pa_TODO implement - // This method must ensure that the change object is still valid. - // This is in particular interesting when performing an undo change - // since the workspace could have changed since the undo change has - // been created. - return new RefactoringStatus(); - } - - public Change perform(IProgressMonitor pm) throws CoreException { - // pa_TODO return the "undo" change here - return null; - } - - public Object getModifiedElement() { - // pa_TODO Auto-generated method stub - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameParticipant.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameParticipant.java deleted file mode 100644 index 0e23beff8f..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameParticipant.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.CompositeChange; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; -import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; - -/** - * @author pavery - */ -public class JSPMethodRenameParticipant extends RenameParticipant { - - private IMethod fMethod = null; - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) - */ - protected boolean initialize(Object element) { - if(element instanceof IMethod) { - this.fMethod = (IMethod) element; - return true; - } - return false; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() - */ - public String getName() { - String name = ""; //$NON-NLS-1$ - if(this.fMethod != null) { - try { - name = this.fMethod.getSource(); - } catch (JavaModelException e) { - Logger.logException(e); - } - } - return name; - } - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) - */ - public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { - // TODO Auto-generated method stub - return null; - } - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) - */ - public Change createChange(IProgressMonitor pm) throws CoreException { - Change[] changes = JSPMethodRenameChange.createChangesFor(this.fMethod, getArguments().getNewName()); - CompositeChange multiChange = null; - if(changes.length > 0) - multiChange = new CompositeChange(JSPUIMessages.JSP_changes, changes); //$NON-NLS-1$ - return multiChange; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameRequestor.java deleted file mode 100644 index 428fe76e36..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMethodRenameRequestor.java +++ /dev/null @@ -1,47 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import java.text.MessageFormat; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jst.jsp.core.internal.java.search.JavaSearchDocumentDelegate; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; - -/** - * @author pavery - */ -public class JSPMethodRenameRequestor extends BasicRefactorSearchRequestor { - - public JSPMethodRenameRequestor(IJavaElement element, String newName) { - super(element, newName); - } - - protected String getRenameText(JavaSearchDocumentDelegate searchDoc, SearchMatch javaMatch) { - - String javaText = searchDoc.getJspTranslation().getJavaText(); - String methodText = javaText.substring(javaMatch.getOffset(), javaMatch.getOffset() + javaMatch.getLength()); - String methodSuffix = methodText.substring(methodText.indexOf("(")); //$NON-NLS-1$ - return getNewName() + methodSuffix; - } - - /* (non-Javadoc) - * @see org.eclipse.jst.jsp.ui.internal.java.refactoring.BasicRefactorSearchRequestor#getDescription() - */ - protected String getDescription() { - - String methodName = getElement().getElementName(); - String newName = getNewName(); - String description = MessageFormat.format(JSPUIMessages.BasicRefactorSearchRequestor_3, new String[]{methodName, newName}); //$NON-NLS-1$ - return description; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMoveElementActionDelegate.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMoveElementActionDelegate.java deleted file mode 100644 index e273dbd50b..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPMoveElementActionDelegate.java +++ /dev/null @@ -1,116 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.swt.widgets.Event; -import org.eclipse.ui.IActionDelegate2; -import org.eclipse.ui.IEditorActionDelegate; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; -import org.eclipse.wst.sse.ui.internal.util.PlatformStatusLineUtil; - -/** - * An action delegate that launches JDT move element wizard - * - * Still relies heavily on internal API - * will change post 3.0 with public move support - * https://bugs.eclipse.org/bugs/show_bug.cgi?id=61817 - */ -public class JSPMoveElementActionDelegate implements IEditorActionDelegate, IActionDelegate2, IViewActionDelegate { - //private IEditorPart fEditor; - - public void setActiveEditor(IAction action, IEditorPart targetEditor) { - //fEditor = targetEditor; - } - - public void dispose() { - // nulling out just in case - //fEditor = null; - } - - public void init(IAction action) { - if (action != null) { - action.setText(JSPUIMessages.MoveElement_label); - action.setToolTipText(JSPUIMessages.MoveElement_label); - } - } - - public void runWithEvent(IAction action, Event event) { - run(action); - } - - public void run(IAction action) { - - // no-op until we know how we're supposed to use this - // eclipse 3.2M5 - // public move support: https://bugs.eclipse.org/bugs/show_bug.cgi?id=61817 - -// IJavaElement[] elements = getSelectedElements(); -// if (elements.length > 0) { -// -// // need to check if it's movable -// try { -// JavaMoveProcessor processor = JavaMoveProcessor.create(getResources(elements), elements); -// -// Shell parent = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); -// MoveRefactoring refactoring = new MoveRefactoring(processor); -// -// RefactoringWizard wizard = createWizard(refactoring); -// -// /* -// * We want to get the shell from the refactoring dialog but -// * it's not known at this point, so we pass the wizard and -// * then, once the dialog is open, we will have access to its -// * shell. -// */ -// -// processor.setCreateTargetQueries(new CreateTargetQueries(wizard)); -// processor.setReorgQueries(new ReorgQueries(wizard)); -// // String openRefactoringWizMsg = -// // RefactoringMessages.getString("OpenRefactoringWizardAction.refactoring"); -// // //$NON-NLS-1$ -// String openRefactoringWizMsg = JSPUIMessages.MoveElementWizard; // "Move -// // the -// // selected -// // elements"; -// // //$NON-NLS-1$ -// new RefactoringStarter().activate(refactoring, wizard, parent, openRefactoringWizMsg, true); -// -// PlatformStatusLineUtil.clearStatusLine(); -// -// } -// catch (JavaModelException e) { -// Logger.logException(e); -// } -// } -// else { -// PlatformStatusLineUtil.displayErrorMessage(JSPUIMessages.JSPMoveElementAction_0); //$NON-NLS-1$ -// } - - } - - public void selectionChanged(IAction action, ISelection selection) { - PlatformStatusLineUtil.clearStatusLine(); - } - - public void init(IViewPart view) { - // do nothing - } - - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameChange.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameChange.java deleted file mode 100644 index c6b9d03462..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameChange.java +++ /dev/null @@ -1,68 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; - -/** - * @author pavery - */ -public class JSPPackageRenameChange extends Change { - - public static Change[] createChangesFor(IPackageFragment pkg, String newName) { - JSPSearchSupport support = JSPSearchSupport.getInstance(); - - // should be handled by JSPIndexManager - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3036 - //support.indexWorkspaceAndWait(); - - BasicRefactorSearchRequestor requestor = new JSPPackageRenameRequestor(pkg, newName); - support.searchRunnable(pkg, new JSPSearchScope(), requestor); - - return requestor.getChanges(); - } - - public String getName() { - return JSPUIMessages.JSP_changes; //$NON-NLS-1$ - } - - public void initializeValidationData(IProgressMonitor pm) { - // pa_TODO implement - // must be implemented to decide correct value of isValid - } - - public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException { - // pa_TODO implement - // This method must ensure that the change object is still valid. - // This is in particular interesting when performing an undo change - // since the workspace could have changed since the undo change has - // been created. - return new RefactoringStatus(); - } - - public Change perform(IProgressMonitor pm) throws CoreException { - // TODO return the "undo" change here - return null; - } - - public Object getModifiedElement() { - - //return this.pkg; - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameParticipant.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameParticipant.java deleted file mode 100644 index 6aed5ecf90..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameParticipant.java +++ /dev/null @@ -1,74 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.CompositeChange; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; -import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; - -/** - * Remember to change the plugin.xml file if the name of this class changes. - * - * @author pavery - */ -public class JSPPackageRenameParticipant extends RenameParticipant { - - private IPackageFragment fPkg = null; - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) - */ - protected boolean initialize(Object element) { - if(element instanceof IPackageFragment) { - this.fPkg = (IPackageFragment) element; - return true; - } - return false; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() - */ - public String getName() { - String name = ""; //$NON-NLS-1$ - if(this.fPkg != null) { - name = this.fPkg.getElementName(); - } - return name; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) - */ - public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { - // TODO Auto-generated method stub - return null; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) - */ - public Change createChange(IProgressMonitor pm) throws CoreException { - Change[] changes = JSPPackageRenameChange.createChangesFor(this.fPkg, getArguments().getNewName()); - CompositeChange multiChange = null; - if(changes.length > 0) - multiChange = new CompositeChange(JSPUIMessages.JSP_changes, changes); //$NON-NLS-1$ - return multiChange; - } - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameRequestor.java deleted file mode 100644 index da211bbd2c..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPPackageRenameRequestor.java +++ /dev/null @@ -1,41 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.osgi.util.NLS; - -/** - * Overrides get description - * @author pavery - */ -public class JSPPackageRenameRequestor extends BasicRefactorSearchRequestor { - - /** - * Element is the old package. newName is the new package name. - * @param element - * @param newName - */ - public JSPPackageRenameRequestor(IJavaElement element, String newName) { - super(element, newName); - } - - /* - * @see org.eclipse.jst.jsp.ui.internal.java.refactoring.BasicRefactorSearchRequestor#getDescription() - */ - protected String getDescription() { - String packageName = getElement().getElementName(); - String newName = getNewName(); - String description = NLS.bind(JSPUIMessages.BasicRefactorSearchRequestor_5, (new String[]{packageName, newName})); //$NON-NLS-1$ - return description; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPRenameElementActionDelegate.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPRenameElementActionDelegate.java deleted file mode 100644 index f487fc54a4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPRenameElementActionDelegate.java +++ /dev/null @@ -1,109 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IMethod; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.ui.refactoring.RenameSupport; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.swt.widgets.Event; -import org.eclipse.ui.IActionDelegate2; -import org.eclipse.ui.IEditorActionDelegate; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IViewActionDelegate; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.wst.sse.ui.internal.util.PlatformStatusLineUtil; - -/** - * An action delegate that launches JDT rename element wizard - */ -public class JSPRenameElementActionDelegate implements IEditorActionDelegate, IActionDelegate2, IViewActionDelegate { - private IEditorPart fEditor; - - public void setActiveEditor(IAction action, IEditorPart targetEditor) { - fEditor = targetEditor; - } - - public void dispose() { - // nulling out just in case - fEditor = null; - } - - public void init(IAction action) { - if (action != null) { - action.setText(JSPUIMessages.RenameElement_label); - action.setToolTipText(JSPUIMessages.RenameElement_label); - } - } - - public void runWithEvent(IAction action, Event event) { - run(action); - } - - public void run(IAction action) { - IJavaElement element = getSelectedElement(); - if(element != null) { - RenameSupport renameSupport = null; - try { - switch(element.getElementType()) { - case IJavaElement.TYPE: - renameSupport= RenameSupport.create((IType)element, element.getElementName(), RenameSupport.UPDATE_REFERENCES); - break; - case IJavaElement.METHOD: - renameSupport= RenameSupport.create((IMethod)element, element.getElementName(), RenameSupport.UPDATE_REFERENCES); - break; - case IJavaElement.PACKAGE_FRAGMENT: - renameSupport= RenameSupport.create((IPackageFragment)element, element.getElementName(), RenameSupport.UPDATE_REFERENCES); - break; - } - if(renameSupport != null) { - renameSupport.openDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); - PlatformStatusLineUtil.clearStatusLine(); - } - } - catch (CoreException e) { - Logger.logException(e); - } - } - else { - PlatformStatusLineUtil.displayErrorMessage(JSPUIMessages.JSPRenameElementAction_0); //$NON-NLS-1$ - PlatformStatusLineUtil.addOneTimeClearListener(); - } - } - - public void selectionChanged(IAction action, ISelection selection) { - PlatformStatusLineUtil.clearStatusLine(); - } - - public void init(IViewPart view) { - // do nothing - } - - private IJavaElement getSelectedElement() { - IJavaElement element = null; - if (fEditor instanceof ITextEditor) { - IJavaElement[] elements = JSPJavaSelectionProvider.getSelection((ITextEditor)fEditor); - if (elements.length == 1) - element = elements[0]; - } - return element; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveChange.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveChange.java deleted file mode 100644 index 0448544eea..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveChange.java +++ /dev/null @@ -1,66 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IType; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; - -/** - * @author pavery - */ -public class JSPTypeMoveChange extends Change { - - public static Change[] createChangesFor(IType type, String newName) { - - JSPSearchSupport support = JSPSearchSupport.getInstance(); - // should be handled by JSPIndexManager - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3036 - // support.indexWorkspaceAndWait(); - - JSPTypeMoveRequestor requestor = new JSPTypeMoveRequestor(type, newName); - support.searchRunnable(type, new JSPSearchScope(), requestor); - - return requestor.getChanges(); - } - - public String getName() { - return JSPUIMessages.JSP_changes; //$NON-NLS-1$ - } - - public void initializeValidationData(IProgressMonitor pm) { - // pa_TODO implement - // must be implemented to decide correct value of isValid - } - - public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException { - // pa_TODO implement - // This method must ensure that the change object is still valid. - // This is in particular interesting when performing an undo change - // since the workspace could have changed since the undo change has - // been created. - return new RefactoringStatus(); - } - - public Change perform(IProgressMonitor pm) throws CoreException { - // TODO return the "undo" change here - return null; - } - - public Object getModifiedElement() { - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveParticipant.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveParticipant.java deleted file mode 100644 index 312efe3e68..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveParticipant.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IPackageFragment; -import org.eclipse.jdt.core.IType; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.CompositeChange; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; -import org.eclipse.ltk.core.refactoring.participants.MoveParticipant; - -/** - * @author pavery - */ -public class JSPTypeMoveParticipant extends MoveParticipant { - - IType fType = null; - - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) - */ - protected boolean initialize(Object element) { - - if(element instanceof IType) { - this.fType = (IType)element; - return true; - } - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() - */ - public String getName() { - - String name = ""; //$NON-NLS-1$ - if(this.fType != null) - name = this.fType.getElementName(); - return name; - } - - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) - */ - public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { - // TODO Auto-generated method stub - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) - */ - public Change createChange(IProgressMonitor pm) throws CoreException { - - if(pm != null && pm.isCanceled()) - return null; - - CompositeChange multiChange = null; - Object dest = getArguments().getDestination(); - - if(dest instanceof IPackageFragment) { - Change[] changes = JSPTypeMoveChange.createChangesFor(fType, ((IPackageFragment)dest).getElementName()); - if(changes.length > 0) - multiChange = new CompositeChange(JSPUIMessages.JSP_changes, changes); //$NON-NLS-1$ - } - return multiChange; - } - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveRequestor.java deleted file mode 100644 index 4953031ba3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeMoveRequestor.java +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import java.text.MessageFormat; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.search.JavaSearchDocumentDelegate; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; - -/** - * @author pavery - */ -public class JSPTypeMoveRequestor extends BasicRefactorSearchRequestor { - - /** - * @param element - * @param newName - */ - public JSPTypeMoveRequestor(IJavaElement element, String newPackage) { - super(element, newPackage); - } - - protected String getRenameText(JavaSearchDocumentDelegate searchDoc, SearchMatch javaMatch) { - - String renameText = getElement().getElementName(); - - JSPTranslation trans = searchDoc.getJspTranslation(); - String matchText = trans.getJavaText().substring(javaMatch.getOffset(), javaMatch.getOffset() + javaMatch.getLength()); - - // if it's an import or jsp:useBean, we need to add the package name as well - if(trans.isImport(javaMatch.getOffset()) || trans.isUseBean(javaMatch.getOffset()) || isFullyQualified(matchText)) { - if(!getNewName().equals("")) //$NON-NLS-1$ - // getNewName() is the pkg name - renameText = getNewName() + "." + renameText; //$NON-NLS-1$ - } - return renameText; - } - - /* (non-Javadoc) - * @see org.eclipse.jst.jsp.ui.internal.java.refactoring.BasicRefactorSearchRequestor#getDescription() - */ - protected String getDescription() { - - String typeName = getElement().getElementName(); - String newName = getNewName(); - String description = MessageFormat.format(JSPUIMessages.BasicRefactorSearchRequestor_2, new String[]{typeName, newName}); //$NON-NLS-1$ - return description; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameChange.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameChange.java deleted file mode 100644 index e59baf5b49..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameChange.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IType; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; - - -/** - * @author pavery - */ -public class JSPTypeRenameChange extends Change { - - public static Change[] createChangesFor(IType type, String newName) { - JSPSearchSupport support = JSPSearchSupport.getInstance(); - - // should be handled by JSPIndexManager - // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=3036 - // support.indexWorkspaceAndWait(); - - - JSPTypeRenameRequestor requestor = new JSPTypeRenameRequestor(type, newName); - support.searchRunnable(type, new JSPSearchScope(), requestor); - - return requestor.getChanges(); - } - - public String getName() { - return JSPUIMessages.JSP_changes; //$NON-NLS-1$ - } - - public void initializeValidationData(IProgressMonitor pm) { - // pa_TODO implement - // must be implemented to decide correct value of isValid - } - - public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException { - // pa_TODO implement - // This method must ensure that the change object is still valid. - // This is in particular interesting when performing an undo change - // since the workspace could have changed since the undo change has - // been created. - return new RefactoringStatus(); - } - - public Change perform(IProgressMonitor pm) throws CoreException { - // TODO return the "undo" change here - return null; - } - - public Object getModifiedElement() { - // TODO Auto-generated method stub - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameParticipant.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameParticipant.java deleted file mode 100644 index 2332069899..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameParticipant.java +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.CompositeChange; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; -import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; - -/** - * Remember to change the plugin.xml file if the name of this class changes. - * - * @author pavery - */ -public class JSPTypeRenameParticipant extends RenameParticipant { - - private IType fType = null; - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#initialize(java.lang.Object) - */ - protected boolean initialize(Object element) { - if(element instanceof IType) { - this.fType = (IType) element; - return true; - } - return false; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#getName() - */ - public String getName() { - String name = ""; //$NON-NLS-1$ - if(this.fType != null) { - try { - name = this.fType.getSource(); - } catch (JavaModelException e) { - Logger.logException(e); - } - } - return name; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#checkConditions(org.eclipse.core.runtime.IProgressMonitor, org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext) - */ - public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { - // TODO Auto-generated method stub - return null; - } - - /** - * @see org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant#createChange(org.eclipse.core.runtime.IProgressMonitor) - */ - public Change createChange(IProgressMonitor pm) throws CoreException { - Change[] changes = JSPTypeRenameChange.createChangesFor(fType, getArguments().getNewName()); - CompositeChange multiChange = null; - if(changes.length > 0) - multiChange = new CompositeChange(JSPUIMessages.JSP_changes, changes); //$NON-NLS-1$ - return multiChange; - } - - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameRequestor.java deleted file mode 100644 index cff180cd57..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/refactoring/JSPTypeRenameRequestor.java +++ /dev/null @@ -1,63 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.refactoring; - -import java.text.MessageFormat; - -import org.eclipse.jdt.core.IType; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.search.JavaSearchDocumentDelegate; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; - -/** - * Creates document change(s) for a type rename. - * Changes are created for every type "match" in the workspace - * @author pavery - */ -public class JSPTypeRenameRequestor extends BasicRefactorSearchRequestor { - - public JSPTypeRenameRequestor(IType type, String newName) { - super(type, newName); - } - - private IType getType() { - return (IType)getElement(); - } - - protected String getRenameText(JavaSearchDocumentDelegate searchDoc, SearchMatch javaMatch) { - - String renameText = getNewName(); - - String pkg = getType().getPackageFragment().getElementName(); - JSPTranslation trans = searchDoc.getJspTranslation(); - String matchText = trans.getJavaText().substring(javaMatch.getOffset(), javaMatch.getOffset() + javaMatch.getLength()); - - // if it's an import or jsp:useBean or fully qualified type, we need to add the package name as well - if(trans.isImport(javaMatch.getOffset()) || /*trans.isUseBean(javaMatch.getOffset()) ||*/ isFullyQualified(matchText)) { - if(!pkg.equals("")) //$NON-NLS-1$ - renameText = pkg + "." + renameText; //$NON-NLS-1$ - } - return renameText; - } - - - /* (non-Javadoc) - * @see org.eclipse.jst.jsp.ui.internal.java.refactoring.BasicRefactorSearchRequestor#getDescription() - */ - protected String getDescription() { - - String typeName = getElement().getElementName(); - String newName = getNewName(); - String description = MessageFormat.format(JSPUIMessages.BasicRefactorSearchRequestor_4, new String[]{typeName, newName}); //$NON-NLS-1$ - return description; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/BasicJSPSearchRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/BasicJSPSearchRequestor.java deleted file mode 100644 index 1acb7befe0..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/BasicJSPSearchRequestor.java +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jdt.core.search.SearchMatch; -import org.eclipse.jdt.core.search.SearchParticipant; -import org.eclipse.jdt.core.search.SearchRequestor; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.core.internal.java.search.JavaSearchDocumentDelegate; - -/** - * Accepts matches from JSPSearchSupport.search(...) request. - * Adapts the results from java to JSP and displays in the SearchResultView. - * - * @author pavery - */ -public class BasicJSPSearchRequestor extends SearchRequestor { - - // for debugging - private static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspsearch"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - - /** - * Maps java search coordinates to corresponding JSP coordinates. - * Adds the matches to the Search Results view. - * @see org.eclipse.jdt.core.search.SearchRequestor#acceptSearchMatch(org.eclipse.jdt.core.search.SearchMatch) - */ - public void acceptSearchMatch(SearchMatch match) throws CoreException { - - if(JSPSearchSupport.getInstance().isCanceled()) - return; - - String matchDocumentPath = match.getResource().getFullPath().toString(); - SearchDocument searchDoc = JSPSearchSupport.getInstance().getSearchDocument(matchDocumentPath); - - if (searchDoc != null && searchDoc instanceof JavaSearchDocumentDelegate) { - JavaSearchDocumentDelegate javaSearchDoc = (JavaSearchDocumentDelegate)searchDoc; - int jspStart = javaSearchDoc.getJspOffset(match.getOffset()); - int jspEnd = javaSearchDoc.getJspOffset(match.getOffset() + match.getLength()); - - JSPTranslation trans = javaSearchDoc.getJspTranslation(); - String jspText = trans.getJspText(); - String javaText = javaSearchDoc.getJavaText(); - - if (DEBUG) - displayDebugInfo(match, jspStart, jspEnd, jspText, javaText); - - if (jspStart > -1 && jspEnd > -1) - addSearchMatch(new Document(trans.getJspText()), javaSearchDoc.getFile(), jspStart, jspEnd, jspText); - } - } - - /** - * @param searchDoc - * @param jspStart - * @param jspEnd - * @param jspTranslation - * @param jspText - * @throws CoreException - */ - protected void addSearchMatch(IDocument jspDocument, IFile jspFile, int jspStart, int jspEnd, String jspText) { - // implement in subclass - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jdt.core.search.SearchRequestor#beginReporting() - */ - public void beginReporting() { - - if (DEBUG) - System.out.println("JSP Search requestor: beginReporting()"); //$NON-NLS-1$ - } - - /** - * @see org.eclipse.jdt.core.search.SearchRequestor#endReporting() - */ - public void endReporting() { - - if (DEBUG) - System.out.println("JSP Search requestor: endReporting()"); //$NON-NLS-1$ - } - - /** - * @see org.eclipse.jdt.core.search.SearchRequestor#enterParticipant(org.eclipse.jdt.core.search.SearchParticipant) - */ - public void enterParticipant(SearchParticipant participant) { - - if (DEBUG) - System.out.println("JSP Search requestor: enterParticipant()"); //$NON-NLS-1$ - } - - /** - * @see org.eclipse.jdt.core.search.SearchRequestor#exitParticipant(org.eclipse.jdt.core.search.SearchParticipant) - */ - public void exitParticipant(SearchParticipant participant) { - - if (DEBUG) - System.out.println("JSP Search requestor: exitParticipant()"); //$NON-NLS-1$ - } - - /** - * For debug. - * @param origMatch - * @param jspStart - * @param jspEnd - * @param jspText - * @param javaText - */ - private void displayDebugInfo(SearchMatch origMatch, int jspStart, int jspEnd, String jspText, String javaText) { - - if (origMatch == null || jspStart == -1 || jspEnd == -1 || jspEnd < jspStart || jspText == null || javaText == null) - return; - - System.out.println("+-----------------------------------------+"); //$NON-NLS-1$ - System.out.println("accept possible match [jspDoc: " + origMatch.getResource().getFullPath().toOSString() + " " + origMatch.getOffset() + ":" + origMatch.getOffset() + origMatch.getLength() + "]?"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - System.out.println("match info:"); //$NON-NLS-1$ - System.out.println("the java text is:" + javaText.substring(origMatch.getOffset(), origMatch.getOffset() + origMatch.getLength())); //$NON-NLS-1$ - System.out.println("java search match translates to jsp coords [start: " + jspStart + " end:" + jspEnd + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - System.out.println(" the jsp text is:" + jspText.substring(jspStart, jspEnd)); //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesActionDelegate.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesActionDelegate.java deleted file mode 100644 index 2eaeec0af6..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesActionDelegate.java +++ /dev/null @@ -1,40 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.java.search; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.wst.html.ui.internal.search.HTMLFindOccurrencesProcessor; -import org.eclipse.wst.sse.ui.internal.search.FindOccurrencesActionDelegate; - -/** - * Sets up FindOccurrencesActionDelegate for jsp find occurrences processors - */ -public class JSPFindOccurrencesActionDelegate extends FindOccurrencesActionDelegate { - private List fProcessors; - - protected List getProcessors() { - if (fProcessors == null) { - fProcessors = new ArrayList(); - HTMLFindOccurrencesProcessor htmlProcessor = new HTMLFindOccurrencesProcessor(); - fProcessors.add(htmlProcessor); -// temporary, workaround to disable function, since using the function -// can easily cause deadlock to occur. -// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=103662 -// JSPFindOccurrencesProcessor jspProcessor = new JSPFindOccurrencesProcessor(); -// fProcessors.add(jspProcessor); - } - return fProcessors; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesProcessor.java deleted file mode 100644 index 1de8c3dd27..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPFindOccurrencesProcessor.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.java.search; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextSelection; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.core.text.IJSPPartitions; -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.ui.internal.search.FindOccurrencesProcessor; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - -/** - * Configures a FindOccurrencesProcessor with JSP partitions and regions - */ -public class JSPFindOccurrencesProcessor extends FindOccurrencesProcessor { - - protected String[] getPartitionTypes() { - return new String[]{IJSPPartitions.JSP_DEFAULT, IJSPPartitions.JSP_CONTENT_JAVA}; - } - - protected String[] getRegionTypes() { - return new String[]{DOMRegionContext.BLOCK_TEXT, DOMJSPRegionContexts.JSP_CONTENT}; - } - - protected ISearchQuery getSearchQuery(IFile file, IStructuredDocument document, String regionText, String regionType, ITextSelection textSelection) { - return new JSPSearchQuery(file, getJavaElement(document, textSelection)); - } - - private IJavaElement getJavaElement(IDocument document, ITextSelection textSelection) { - IJavaElement[] elements = getJavaElementsForCurrentSelection(document, textSelection); - return elements.length > 0 ? elements[0] : null; - } - - /** - * uses JSPTranslation to get currently selected Java elements. - * - * @return currently selected IJavaElements - */ - private IJavaElement[] getJavaElementsForCurrentSelection(IDocument document, ITextSelection selection) { - IJavaElement[] elements = new IJavaElement[0]; - // get JSP translation object for this viewer's document - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - try { - if (model != null && model instanceof IDOMModel) { - IDOMDocument xmlDoc = ((IDOMModel) model).getDocument(); - JSPTranslationAdapter adapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (adapter != null) { - JSPTranslation translation = adapter.getJSPTranslation(); - - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=102211 - elements = translation.getElementsFromJspRange(selection.getOffset(), selection.getOffset() + selection.getLength()); - } - } - } - finally { - if (model != null) - model.releaseFromRead(); - } - return elements; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPOccurrencesSearchResult.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPOccurrencesSearchResult.java deleted file mode 100644 index f1d4f8e4db..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPOccurrencesSearchResult.java +++ /dev/null @@ -1,29 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search; - -import org.eclipse.search.ui.ISearchQuery; -import org.eclipse.search.ui.text.Match; -import org.eclipse.wst.sse.ui.internal.search.OccurrencesSearchResult; - -/** - * @author pavery - */ -public class JSPOccurrencesSearchResult extends OccurrencesSearchResult { - - public JSPOccurrencesSearchResult(ISearchQuery query) { - super(query); - } - - public Match[] getMatches() { - return ((JSPSearchQuery)getQuery()).getMatches(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchQuery.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchQuery.java deleted file mode 100644 index af8ca1127a..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchQuery.java +++ /dev/null @@ -1,117 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.SearchDocument; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.osgi.util.NLS; -import org.eclipse.search.ui.ISearchResult; -import org.eclipse.wst.sse.ui.internal.search.BasicSearchQuery; - -/** - * Implementation of <code>ISearchQuery</code> for <code>IJavaElement</code>s in JSP files. - * - * @author pavery - */ -public class JSPSearchQuery extends BasicSearchQuery { - - /** the IJavaElement we are searching for in the file **/ - private IJavaElement fElement = null; - - public JSPSearchQuery(IFile file, IJavaElement element) { - super(file); - this.fElement = element; - } - - public IJavaElement getJavaElement() { - return this.fElement; - } - - // for access by inner class - public JSPSearchQuery getInstance() { - return this; - } - - protected IStatus doQuery() { - - clearMatches(); - - IStatus status = Status.OK_STATUS; - try { - JSPSearchSupport support = JSPSearchSupport.getInstance(); - // index the file - SearchDocument delegate = support.addJspFile(getFile()); - - String scopePath = delegate.getPath(); - JSPSearchScope singleFileScope = new JSPSearchScope(new String[]{getFile().getFullPath().toString(), scopePath}); - - // perform a searchs - // by passing in this jsp search query, requstor can add matches - support.searchRunnable(getJavaElement(), singleFileScope, new JSPSingleFileSearchRequestor(getInstance())); - } - catch (Exception e){ - status = new Status(IStatus.ERROR, "org.eclipse.wst.sse.ui", IStatus.OK, "", null); //$NON-NLS-1$ //$NON-NLS-2$ - } - return status; - } - - /** - * @see org.eclipse.search.ui.ISearchQuery#getLabel() - */ - public String getLabel() { - String[] args = {getSearchText(), getOccurrencesCountText(), getFilename()}; - return NLS.bind(JSPUIMessages.OccurrencesSearchQuery_0, args); - } - - private String getFilename() { - String filename = JSPUIMessages.OccurrencesSearchQuery_2; - if(getFile() != null) - filename = getFile().getName(); - return filename; - } - - private String getOccurrencesCountText() { - String count = ""; //$NON-NLS-1$ - // pa_TODO make dynamic - return count; - } - - protected String getSearchText() { - return fElement.getElementName(); - } - - public boolean canRerun() { - - return false; - } - - /** - * @see org.eclipse.search.ui.ISearchQuery#canRunInBackground() - */ - public boolean canRunInBackground() { - return true; - } - - /** - * @see org.eclipse.search.ui.ISearchQuery#getSearchResult() - */ - public ISearchResult getSearchResult() { - - return new JSPOccurrencesSearchResult(this); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchRequestor.java deleted file mode 100644 index 2cb4ae19d2..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSearchRequestor.java +++ /dev/null @@ -1,81 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search; - -import java.util.HashMap; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jdt.ui.search.ISearchRequestor; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.search.ui.NewSearchUI; -import org.eclipse.search.ui.text.Match; - - -/** - * @author pavery - */ -public class JSPSearchRequestor extends BasicJSPSearchRequestor { - - private ISearchRequestor fJavaRequestor = null; - - public JSPSearchRequestor() { - super(); - } - - public JSPSearchRequestor(ISearchRequestor javaRequestor) { - // need to report matches to javaRequestor - this.fJavaRequestor = javaRequestor; - } - - - protected void addSearchMatch(IDocument jspDocument, IFile jspFile, int jspStart, int jspEnd, String jspText) { - - if(!jspFile.exists()) - return; - - int lineNumber = -1; - try { - lineNumber = jspDocument.getLineOfOffset(jspStart); - } catch (BadLocationException e) { - Logger.logException("offset: " + Integer.toString(jspStart), e); //$NON-NLS-1$ - } - createSearchMarker(jspFile, jspStart, jspEnd, lineNumber); - - if(this.fJavaRequestor != null) { - Match match = new Match(jspFile, jspStart, jspEnd - jspStart); - this.fJavaRequestor.reportMatch(match); - } - } - - /** - * @param jspFile - * @param jspStart - * @param jspEnd - */ - private void createSearchMarker(IFile jspFile, int jspStart, int jspEnd, int lineNumber) { - - try { - IMarker marker = jspFile.createMarker(NewSearchUI.SEARCH_MARKER); - HashMap attributes = new HashMap(4); - attributes.put(IMarker.CHAR_START, new Integer(jspStart)); - attributes.put(IMarker.CHAR_END, new Integer(jspEnd)); - attributes.put(IMarker.LINE_NUMBER, new Integer(lineNumber)); - marker.setAttributes(attributes); - - } catch (CoreException e) { - Logger.logException(e); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSingleFileSearchRequestor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSingleFileSearchRequestor.java deleted file mode 100644 index ce0792bdc2..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/JSPSingleFileSearchRequestor.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search; - -import org.eclipse.core.resources.IFile; -import org.eclipse.jface.text.IDocument; - - -/** - * <p> - * Special requestor that adds search results for single file search - * (Used for JSPFindOccurrences action). - * It groups each match as it's own result. - * </p> - * - * @author pavery - */ -public class JSPSingleFileSearchRequestor extends BasicJSPSearchRequestor { - - private JSPSearchQuery fQuery = null; - - public JSPSingleFileSearchRequestor(JSPSearchQuery query) { - this.fQuery = query; - } - - protected void addSearchMatch(IDocument jspDocument, IFile jspFile, int jspStart, int jspEnd, String jspText) { - // add match to JSP query... - this.fQuery.addMatch(jspDocument, jspStart, jspEnd); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPMatchPresentation.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPMatchPresentation.java deleted file mode 100644 index 74b1a26c91..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPMatchPresentation.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search.ui; - -import org.eclipse.jdt.ui.search.IMatchPresentation; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.search.ui.text.Match; -import org.eclipse.ui.PartInitException; -import org.eclipse.wst.sse.ui.internal.search.BasicSearchLabelProvider; - -/** - * @author pavery - */ -public class JSPMatchPresentation implements IMatchPresentation { - - /** - * @see org.eclipse.jdt.ui.search.IMatchPresentation#createLabelProvider() - */ - public ILabelProvider createLabelProvider() { - return new BasicSearchLabelProvider(); - } - - /* (non-Javadoc) - * @see org.eclipse.jdt.ui.search.IMatchPresentation#showMatch(org.eclipse.search.ui.text.Match, int, int, boolean) - */ - public void showMatch(Match match, int currentOffset, int currentLength, boolean activate) throws PartInitException { - // pa_TODO implement -// Object obj = match.getElement(); - // show match in JSP editor - if(activate) { - // use show in target? - } - else { - // just select - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPQueryParticipant.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPQueryParticipant.java deleted file mode 100644 index c257ee9ceb..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/java/search/ui/JSPQueryParticipant.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.java.search.ui; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.search.SearchPattern; -import org.eclipse.jdt.core.search.SearchRequestor; -import org.eclipse.jdt.ui.search.ElementQuerySpecification; -import org.eclipse.jdt.ui.search.IMatchPresentation; -import org.eclipse.jdt.ui.search.IQueryParticipant; -import org.eclipse.jdt.ui.search.ISearchRequestor; -import org.eclipse.jdt.ui.search.PatternQuerySpecification; -import org.eclipse.jdt.ui.search.QuerySpecification; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchScope; -import org.eclipse.jst.jsp.core.internal.java.search.JSPSearchSupport; -import org.eclipse.jst.jsp.ui.internal.java.search.JSPSearchRequestor; - -/** - * @author pavery - */ -public class JSPQueryParticipant implements IQueryParticipant { - - // for debugging - private static final boolean DEBUG; - static { - String value= Platform.getDebugOption("org.eclipse.jst.jsp.core/debug/jspsearch"); //$NON-NLS-1$ - DEBUG= value != null && value.equalsIgnoreCase("true"); //$NON-NLS-1$ - } - /** - * @see org.eclipse.jdt.ui.search.IQueryParticipant#search(org.eclipse.jdt.ui.search.ISearchRequestor, org.eclipse.jdt.ui.search.QuerySpecification, org.eclipse.core.runtime.IProgressMonitor) - */ - public void search(ISearchRequestor requestor, QuerySpecification querySpecification, IProgressMonitor monitor) throws CoreException { - - //indexIfNeeded(); - - // do search based on the particular Java query - if(querySpecification instanceof ElementQuerySpecification) { - // element search (eg. from global find references in Java file) - ElementQuerySpecification elementQuery = (ElementQuerySpecification)querySpecification; - IJavaElement element = elementQuery.getElement(); - - if(DEBUG) - System.out.println("JSP Query Participant searching on ELEMENT: " + element); //$NON-NLS-1$ - - SearchRequestor jspRequestor = new JSPSearchRequestor(requestor); - - // pa_TODO need to adapt JavaSearchScope to a JSPSearchScope - JSPSearchSupport.getInstance().search(element, new JSPSearchScope(), jspRequestor); - - } - else if(querySpecification instanceof PatternQuerySpecification) { - - // pattern search (eg. from Java search page) - PatternQuerySpecification patternQuery = (PatternQuerySpecification)querySpecification; - String pattern = patternQuery.getPattern(); - - if(DEBUG) - System.out.println("JSP Query Participant searching on PATTERN: " + pattern); //$NON-NLS-1$ - - SearchRequestor jspRequestor = new JSPSearchRequestor(requestor); - - JSPSearchSupport.getInstance().search(pattern, - new JSPSearchScope(), - patternQuery.getSearchFor(), - patternQuery.getLimitTo(), - SearchPattern.R_PATTERN_MATCH, - false, - jspRequestor); - } - } - - /** - * @see org.eclipse.jdt.ui.search.IQueryParticipant#estimateTicks(org.eclipse.jdt.ui.search.QuerySpecification) - */ - public int estimateTicks(QuerySpecification data) { - // pa_TODO use project file counter from JSPSearchSupport... - return 0; - } - - /** - * @see org.eclipse.jdt.ui.search.IQueryParticipant#getUIParticipant() - */ - public IMatchPresentation getUIParticipant() { - return new JSPMatchPresentation(); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java deleted file mode 100644 index 441664e112..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceInitializer.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.preferences; - -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -/** - * Sets default values for JSP UI preferences - */ -public class JSPUIPreferenceInitializer extends AbstractPreferenceInitializer { - - /* - * (non-Javadoc) - * - * @see org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences() - */ - public void initializeDefaultPreferences() { - IPreferenceStore store = JSPUIPlugin.getDefault().getPreferenceStore(); - - // setting the same as HTML - store.setDefault(JSPUIPreferenceNames.AUTO_PROPOSE, true); - store.setDefault(JSPUIPreferenceNames.AUTO_PROPOSE_CODE, "<=");//$NON-NLS-1$ - - // JSP Style Preferences - String NOBACKGROUNDBOLD = " | null | false"; //$NON-NLS-1$ - String JUSTITALIC = " | null | false | true"; //$NON-NLS-1$ - String styleValue = ColorHelper.getColorString(127, 0, 127) + NOBACKGROUNDBOLD; - store.setDefault(IStyleConstantsXML.TAG_ATTRIBUTE_NAME, styleValue); - - styleValue = ColorHelper.getColorString(42, 0, 255) + JUSTITALIC; - store.setDefault(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE, styleValue); - - styleValue = "null" + NOBACKGROUNDBOLD; //$NON-NLS-1$ - - // specified value is black; leaving as widget default - store.setDefault(IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS, styleValue); - - styleValue = ColorHelper.getColorString(63, 95, 191) + NOBACKGROUNDBOLD; - store.setDefault(IStyleConstantsXML.COMMENT_BORDER, styleValue); - store.setDefault(IStyleConstantsXML.COMMENT_TEXT, styleValue); - - styleValue = ColorHelper.getColorString(0, 128, 128) + NOBACKGROUNDBOLD; - store.setDefault(IStyleConstantsXML.TAG_BORDER, styleValue); - - styleValue = ColorHelper.getColorString(63, 127, 127) + NOBACKGROUNDBOLD; - store.setDefault(IStyleConstantsXML.TAG_NAME, styleValue); - - styleValue = ColorHelper.getColorString(191, 95, 63) + NOBACKGROUNDBOLD; - store.setDefault(IStyleConstantsHTML.SCRIPT_AREA_BORDER, styleValue); - - styleValue = "null" + NOBACKGROUNDBOLD; //$NON-NLS-1$ - store.setDefault(IStyleConstantsJSP.JSP_CONTENT, styleValue); - - // set default new jsp file template to use in new file wizard - /* - * Need to find template name that goes with default template id (name - * may change for differnt language) - */ - String templateName = ""; //$NON-NLS-1$ - Template template = JSPUIPlugin.getDefault().getTemplateStore().findTemplateById("org.eclipse.jst.jsp.ui.templates.jsphtml"); //$NON-NLS-1$ - if (template != null) - templateName = template.getName(); - store.setDefault(JSPUIPreferenceNames.NEW_FILE_TEMPLATE_NAME, templateName); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java deleted file mode 100644 index c185063249..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/JSPUIPreferenceNames.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences; - -/** - * Preference keys for JSP UI - */ -public class JSPUIPreferenceNames { - /** - * A named preference that controls if code assist gets auto activated. - * <p> - * Value is of type <code>Boolean</code>. - * </p> - */ - public static final String AUTO_PROPOSE = getAutoProposeKey(); - - private static String getAutoProposeKey() { - return "autoPropose";//$NON-NLS-1$ - } - - /** - * A named preference that holds the characters that auto activate code - * assist. - * <p> - * Value is of type <code>String</code>. All characters that trigger - * auto code assist. - * </p> - */ - public static final String AUTO_PROPOSE_CODE = getAutoProposeCodeKey(); - - private static String getAutoProposeCodeKey() { - return "autoProposeCode";//$NON-NLS-1$ - } - - /** - * The key to store customized templates. - * <p> - * Value is of type <code>String</code>. - * </p> - */ - public static final String TEMPLATES_KEY = getTemplatesKey(); - - private static String getTemplatesKey() { - return "org.eclipse.wst.sse.ui.custom_templates"; //$NON-NLS-1$ - } - - /** - * The key to store the last template name used in new JSP file wizard. - * Template name is stored instead of template id because user-created - * templates do not have template ids. - * <p> - * Value is of type <code>String</code>. - * </p> - */ - public static final String NEW_FILE_TEMPLATE_NAME = "newFileTemplateName"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPColorPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPColorPage.java deleted file mode 100644 index 2dd5a4c75b..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPColorPage.java +++ /dev/null @@ -1,170 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004,2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.Iterator; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IModelManager; -import org.eclipse.wst.sse.ui.internal.preferences.OverlayPreferenceStore; -import org.eclipse.wst.sse.ui.internal.preferences.OverlayPreferenceStore.OverlayKey; -import org.eclipse.wst.sse.ui.internal.preferences.ui.StyledTextColorPicker; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.preferences.XMLColorPage; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -/** - * @deprecated - */ -public class JSPColorPage extends XMLColorPage { - - /** - * Overridden to set up StyledTextColorPicker differently - */ - protected void createContentsForPicker(Composite parent) { - // create the color picker - fPicker = new JSPStyledTextColorPicker(parent, SWT.NULL); - GridData data = new GridData(GridData.FILL_BOTH); - fPicker.setLayoutData(data); - - fPicker.setPreferenceStore(fOverlayStore); - setupPicker(fPicker); - - fPicker.setText(getSampleText()); - } - - /** - * Set up all the style preference keys in the overlay store - */ - protected OverlayKey[] createOverlayStoreKeys() { - ArrayList overlayKeys = new ArrayList(); - - ArrayList styleList = new ArrayList(); - initStyleList(styleList); - Iterator i = styleList.iterator(); - while (i.hasNext()) { - overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, (String)i.next())); - } - - OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()]; - overlayKeys.toArray(keys); - return keys; - } - - public String getSampleText() { - return JSPUIMessages.Sample_JSP_doc; //$NON-NLS-1$ = "<%@ page \n\tlanguage=\"java\" \n\tcontentType=\"text/html; charset=ISO-8859-1\"\n%>\n<jsp:include flush=\"true\" page=\"titleBar.jsp\"/>\n\n<%-- Use below tags ONLY for JSP 1.1 --%>\n<%\n\tSystem.out.println(\"Welcome!\");\n%>\n<%-- Use below tags ONLY for JSP 1.2 --%>\n<jsp:scriptlet>\n\tSystem.out.println(\"Welcome!\");\n</jsp:scriptlet>" - } - - protected void initContextStyleMap(Dictionary contextStyleMap) { - - initCommonContextStyleMap(contextStyleMap); - contextStyleMap.remove(DOMRegionContext.XML_CONTENT); // leave content between tags alone - contextStyleMap.remove(DOMRegionContext.XML_DECLARATION_OPEN); // xml/html specific - contextStyleMap.remove(DOMRegionContext.XML_DECLARATION_CLOSE); // xml/html specific - contextStyleMap.remove(DOMRegionContext.XML_ELEMENT_DECLARATION); // xml/html specific - contextStyleMap.remove(DOMRegionContext.XML_ELEMENT_DECL_CLOSE); // xml/html specific - - // contextStyleMap.put(XMLJSPRegionContexts.JSP_CONTENT, HTMLColorManager.SCRIPT_AREA); - // contextStyleMap.put(XMLJSPRegionContexts.BLOCK_TEXT, HTMLColorManager.SCRIPT_AREA); - contextStyleMap.put(DOMJSPRegionContexts.JSP_DECLARATION_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_EXPRESSION_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_CLOSE, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - - contextStyleMap.put(DOMJSPRegionContexts.JSP_CONTENT, IStyleConstantsJSP.JSP_CONTENT); - - contextStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_NAME, IStyleConstantsXML.TAG_NAME); - contextStyleMap.put(DOMJSPRegionContexts.JSP_ROOT_TAG_NAME, IStyleConstantsXML.TAG_NAME); - contextStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_OPEN, IStyleConstantsXML.COMMENT_BORDER); - contextStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_TEXT, IStyleConstantsXML.COMMENT_TEXT); - contextStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_CLOSE, IStyleConstantsXML.COMMENT_BORDER); - - contextStyleMap.put(DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_DQUOTE, IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - contextStyleMap.put(DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_SQUOTE, IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - } - - protected void initDescriptions(Dictionary descriptions) { - initCommonDescriptions(descriptions); - descriptions.remove(IStyleConstantsXML.XML_CONTENT); // leave content between tags alone - descriptions.remove(IStyleConstantsXML.DECL_BORDER); // xml/html specific - descriptions.put(IStyleConstantsHTML.SCRIPT_AREA_BORDER, JSPUIMessages.JSP_Delimiters_UI_); //$NON-NLS-1$ = "JSP Delimiters" - descriptions.put(IStyleConstantsJSP.JSP_CONTENT, JSPUIMessages.JSPColorPage_jsp_content); - } - - protected void initStyleList(ArrayList list) { - initCommonStyleList(list); - list.remove(IStyleConstantsXML.XML_CONTENT); // leave content between tags alone - list.remove(IStyleConstantsXML.DECL_BORDER); // xml/html specific - list.add(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - list.add(IStyleConstantsJSP.JSP_CONTENT); - } - - protected void setupPicker(StyledTextColorPicker picker) { - IModelManager mmanager = StructuredModelManager.getModelManager(); - picker.setParser(mmanager.createStructuredDocumentFor(ContentTypeIdForJSP.ContentTypeID_JSP).getParser()); - - // create descriptions for highlighting types - Dictionary descriptions = new Hashtable(); - initDescriptions(descriptions); - - // map region types to highlighting types - Dictionary contextStyleMap = new Hashtable(); - initContextStyleMap(contextStyleMap); - - ArrayList styleList = new ArrayList(); - initStyleList(styleList); - - picker.setContextStyleMap(contextStyleMap); - picker.setDescriptions(descriptions); - picker.setStyleList(styleList); - - } - /* (non-Javadoc) - * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) - */ - protected Control createContents(Composite parent) { - - Control c = super.createContents(parent); - PlatformUI.getWorkbench().getHelpSystem().setHelp(c, IHelpContextIds.JSP_PREFWEBX_STYLES_HELPID); - return c; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() - */ - protected IPreferenceStore doGetPreferenceStore() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - /* (non-Javadoc) - * @see org.eclipse.wst.sse.ui.preferences.ui.AbstractColorPage#savePreferences() - */ - protected void savePreferences() { - JSPUIPlugin.getDefault().savePluginPreferences(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPFilesPreferencePage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPFilesPreferencePage.java deleted file mode 100644 index ffd71b7b69..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPFilesPreferencePage.java +++ /dev/null @@ -1,122 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Preferences; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.core.internal.preferences.JSPCorePreferenceNames; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Group; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.html.ui.internal.preferences.ui.HTMLFilesPreferencePage; - -public class JSPFilesPreferencePage extends HTMLFilesPreferencePage { - private Button fValidateFragments; - - protected Preferences getModelPreferences() { - return JSPCorePlugin.getDefault().getPluginPreferences(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() - */ - protected IPreferenceStore doGetPreferenceStore() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - - protected void doSavePreferenceStore() { - JSPCorePlugin.getDefault().savePluginPreferences(); // model - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) - */ - protected Control createContents(Composite parent) { - Control c = super.createContents(parent); - - Group g = createGroup((Composite) c, 1); - g.setText(JSPUIMessages.JSPFilesPreferencePage_0); - fValidateFragments = createCheckBox(g, JSPUIMessages.JSPFilesPreferencePage_1); - boolean validateFragments = getModelPreferences().getBoolean(JSPCorePreferenceNames.VALIDATE_FRAGMENTS); - fValidateFragments.setSelection(validateFragments); - - PlatformUI.getWorkbench().getHelpSystem().setHelp(c, IHelpContextIds.JSP_PREFWEBX_FILES_HELPID); - - setSize((Composite)c); - return c; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.html.ui.preferences.ui.HTMLFilesPreferencePage#createContentsForLoadingGroup(org.eclipse.swt.widgets.Composite) - */ - protected void createContentsForLoadingGroup(Composite parent) { - // no loading preferences - } - - protected IContentType getContentType() { - return Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.html.ui.preferences.ui.HTMLFilesPreferencePage#initializeValuesForLoadingGroup() - */ - protected void initializeValuesForLoadingGroup() { - // no loading preferences - } - - protected void performDefaults() { - super.performDefaults(); - - boolean validateFragments = getModelPreferences().getDefaultBoolean(JSPCorePreferenceNames.VALIDATE_FRAGMENTS); - fValidateFragments.setSelection(validateFragments); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.html.ui.preferences.ui.HTMLFilesPreferencePage#performDefaultsForLoadingGroup() - */ - protected void performDefaultsForLoadingGroup() { - // no loading preferences - } - - protected void storeValues() { - boolean validateFragments = fValidateFragments.getSelection(); - getModelPreferences().setValue(JSPCorePreferenceNames.VALIDATE_FRAGMENTS, validateFragments); - super.storeValues(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.html.ui.preferences.ui.HTMLFilesPreferencePage#storeValuesForLoadingGroup() - */ - protected void storeValuesForLoadingGroup() { - // no loading preferences - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java deleted file mode 100644 index ca9c5c8acf..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSourcePreferencePage.java +++ /dev/null @@ -1,115 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.ScrolledComposite; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.dialogs.PreferenceLinkArea; -import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; - -public class JSPSourcePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - public void init(IWorkbench workbench) { - // do nothing - } - - protected Control createContents(Composite parent) { - Composite composite = createScrolledComposite(parent); - - Text label = new Text(composite, SWT.READ_ONLY); - label.setText(JSPUIMessages.JSPSourcePreferencePage_0); - GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - data.horizontalIndent = 0; - label.setLayoutData(data); - - PreferenceLinkArea fileEditorsArea = new PreferenceLinkArea(composite, SWT.NONE, "org.eclipse.wst.html.ui.preferences.source", JSPUIMessages.JSPSourcePreferencePage_1,//$NON-NLS-1$ - (IWorkbenchPreferenceContainer) getContainer(), null); - - data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - data.horizontalIndent = 5; - fileEditorsArea.getControl().setLayoutData(data); - - PreferenceLinkArea contentTypeArea = new PreferenceLinkArea(composite, SWT.NONE, "org.eclipse.wst.sse.ui.preferences.xml.source", JSPUIMessages.JSPSourcePreferencePage_2,//$NON-NLS-1$ - (IWorkbenchPreferenceContainer) getContainer(), null); - - data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); - data.horizontalIndent = 5; - contentTypeArea.getControl().setLayoutData(data); - - setSize(composite); - return composite; - } - - private Composite createScrolledComposite(Composite parent) { - // create scrollbars for this parent when needed - final ScrolledComposite sc1 = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL); - sc1.setLayoutData(new GridData(GridData.FILL_BOTH)); - Composite composite = createComposite(sc1); - sc1.setContent(composite); - - // not calling setSize for composite will result in a blank composite, - // so calling it here initially - // setSize actually needs to be called after all controls are created, - // so scrolledComposite - // has correct minSize - setSize(composite); - return composite; - } - - private void setSize(Composite composite) { - if (composite != null) { - // Note: The font is set here in anticipation that the class inheriting - // this base class may add widgets to the dialog. setSize - // is assumed to be called just before we go live. - applyDialogFont(composite); - Point minSize = composite.computeSize(SWT.DEFAULT, SWT.DEFAULT); - composite.setSize(minSize); - // set scrollbar composite's min size so page is expandable but - // has scrollbars when needed - if (composite.getParent() instanceof ScrolledComposite) { - ScrolledComposite sc1 = (ScrolledComposite) composite.getParent(); - sc1.setMinSize(minSize); - sc1.setExpandHorizontal(true); - sc1.setExpandVertical(true); - } - } - } - - private Composite createComposite(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(GridData.FILL); - data.horizontalIndent = 0; - data.verticalAlignment = GridData.FILL; - data.horizontalAlignment = GridData.FILL; - composite.setLayoutData(data); - - composite.setFont(parent.getFont()); - return composite; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPStyledTextColorPicker.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPStyledTextColorPicker.java deleted file mode 100644 index 19bd809d7c..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPStyledTextColorPicker.java +++ /dev/null @@ -1,42 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.wst.sse.ui.internal.preferences.ui.StyledTextColorPicker; - -/** -* Overrides StyledTextColorPicker for special enablement behavior -* for JSPContent (only background settable) -**/ -public class JSPStyledTextColorPicker extends StyledTextColorPicker { - - public JSPStyledTextColorPicker(Composite parent, int style) { - super(parent, style); - } - - /** - * Activate controls based on the given local color type. - * Overridden to disable foreground color, bold. - */ - protected void activate(String namedStyle) { - super.activate(namedStyle); - - if(namedStyle == IStyleConstantsJSP.JSP_CONTENT) { - fForeground.setEnabled(false); - fBold.setEnabled(false); - if (showItalic) - fItalic.setEnabled(false); - fForegroundLabel.setEnabled(false); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSyntaxColoringPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSyntaxColoringPage.java deleted file mode 100644 index d7d8138bb8..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPSyntaxColoringPage.java +++ /dev/null @@ -1,854 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.jface.preference.ColorSelector; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.ListViewer; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.StructuredViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerComparator; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.swt.SWT; -import org.eclipse.swt.accessibility.ACC; -import org.eclipse.swt.accessibility.AccessibleAdapter; -import org.eclipse.swt.accessibility.AccessibleEvent; -import org.eclipse.swt.custom.SashForm; -import org.eclipse.swt.custom.StyleRange; -import org.eclipse.swt.custom.StyledText; -import org.eclipse.swt.events.KeyEvent; -import org.eclipse.swt.events.KeyListener; -import org.eclipse.swt.events.MouseEvent; -import org.eclipse.swt.events.MouseListener; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.events.TraverseEvent; -import org.eclipse.swt.events.TraverseListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.PreferencesUtil; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList; -import org.eclipse.wst.sse.ui.internal.SSEUIMessages; -import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; -import org.eclipse.wst.sse.ui.internal.preferences.OverlayPreferenceStore; -import org.eclipse.wst.sse.ui.internal.preferences.OverlayPreferenceStore.OverlayKey; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper; -import org.eclipse.wst.sse.ui.internal.util.EditorUtility; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.XMLUIMessages; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -import com.ibm.icu.text.Collator; - -/** - * A preference page to configure our XML syntax color. It resembles the JDT - * and CDT pages far more than our original color page while retaining the - * extra "click-to-find" functionality. - */ -public final class JSPSyntaxColoringPage extends PreferencePage implements IWorkbenchPreferencePage { - - private Button fBold; - private Label fForegroundLabel; - private Label fBackgroundLabel; - private Button fClearStyle; - private Map fContextToStyleMap; - private Color fDefaultForeground = null; - private Color fDefaultBackground = null; - private IStructuredDocument fDocument; - private ColorSelector fForegroundColorEditor; - private ColorSelector fBackgroundColorEditor; - private Button fItalic; - private OverlayPreferenceStore fOverlayStore; - private Button fStrike; - private Collection fStylePreferenceKeys; - private StructuredViewer fStylesViewer = null; - private Map fStyleToDescriptionMap; - private StyledText fText; - private Button fUnderline; - - - // activate controls based on the given local color type - private void activate(String namedStyle) { - Color foreground = fDefaultForeground; - Color background = fDefaultBackground; - if (namedStyle == null) { - fClearStyle.setEnabled(false); - fBold.setEnabled(false); - fItalic.setEnabled(false); - fStrike.setEnabled(false); - fUnderline.setEnabled(false); - fForegroundLabel.setEnabled(false); - fBackgroundLabel.setEnabled(false); - fForegroundColorEditor.setEnabled(false); - fBackgroundColorEditor.setEnabled(false); - fBold.setSelection(false); - fItalic.setSelection(false); - fStrike.setSelection(false); - fUnderline.setSelection(false); - } - else { - TextAttribute attribute = getAttributeFor(namedStyle); - fClearStyle.setEnabled(true); - boolean enableBackgroundOnly = IStyleConstantsJSP.JSP_CONTENT.equals(namedStyle); - fBold.setEnabled(!enableBackgroundOnly); - fItalic.setEnabled(!enableBackgroundOnly); - fStrike.setEnabled(!enableBackgroundOnly); - fUnderline.setEnabled(!enableBackgroundOnly); - fForegroundLabel.setEnabled(!enableBackgroundOnly); - fForegroundColorEditor.setEnabled(!enableBackgroundOnly); - fBackgroundLabel.setEnabled(true); - fBackgroundColorEditor.setEnabled(true); - fBold.setSelection((attribute.getStyle() & SWT.BOLD) != 0); - fItalic.setSelection((attribute.getStyle() & SWT.ITALIC) != 0); - fStrike.setSelection((attribute.getStyle() & TextAttribute.STRIKETHROUGH) != 0); - fUnderline.setSelection((attribute.getStyle() & TextAttribute.UNDERLINE) != 0); - if (attribute.getForeground() != null) { - foreground = attribute.getForeground(); - } - if (attribute.getBackground() != null) { - background = attribute.getBackground(); - } - } - - fForegroundColorEditor.setColorValue(foreground.getRGB()); - fBackgroundColorEditor.setColorValue(background.getRGB()); - } - - /** - * Color the text in the sample area according to the current preferences - */ - void applyStyles() { - if (fText == null || fText.isDisposed()) - return; - IStructuredDocumentRegion documentRegion = fDocument.getFirstStructuredDocumentRegion(); - while (documentRegion != null) { - ITextRegionList regions = documentRegion.getRegions(); - for (int i = 0; i < regions.size(); i++) { - ITextRegion currentRegion = regions.get(i); - // lookup the local coloring type and apply it - String namedStyle = (String) fContextToStyleMap.get(currentRegion.getType()); - if (namedStyle == null) - continue; - TextAttribute attribute = getAttributeFor(namedStyle); - if (attribute == null) - continue; - StyleRange style = new StyleRange(documentRegion.getStartOffset(currentRegion), currentRegion.getTextLength(), attribute.getForeground(), attribute.getBackground(), attribute.getStyle()); - style.strikeout = (attribute.getStyle() & TextAttribute.STRIKETHROUGH) != 0; - style.underline = (attribute.getStyle() & TextAttribute.UNDERLINE) != 0; - fText.setStyleRange(style); - } - documentRegion = documentRegion.getNext(); - } - } - - Button createCheckbox(Composite parent, String label) { - Button button = new Button(parent, SWT.CHECK); - button.setText(label); - button.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); - return button; - } - - /** - * Creates composite control and sets the default layout data. - */ - private Composite createComposite(Composite parent, int numColumns) { - Composite composite = new Composite(parent, SWT.NULL); - - // GridLayout - GridLayout layout = new GridLayout(); - layout.numColumns = numColumns; - layout.makeColumnsEqualWidth = false; - layout.marginHeight = 0; - layout.marginWidth = 0; - composite.setLayout(layout); - - // GridData - GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); - composite.setLayoutData(data); - return composite; - } - - protected Control createContents(final Composite parent) { - initializeDialogUnits(parent); - - fDefaultForeground = parent.getDisplay().getSystemColor(SWT.COLOR_LIST_FOREGROUND); - fDefaultBackground = parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND); - Composite pageComponent = createComposite(parent, 2); - PlatformUI.getWorkbench().getHelpSystem().setHelp(pageComponent, IHelpContextIds.JSP_PREFWEBX_STYLES_HELPID); - - Link link = new Link(pageComponent, SWT.WRAP); - link.setText(SSEUIMessages.SyntaxColoring_Link); - link.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - PreferencesUtil.createPreferenceDialogOn(parent.getShell(), e.text, null, null); - } - }); - - GridData linkData= new GridData(SWT.FILL, SWT.BEGINNING, true, false, 2, 1); - linkData.widthHint= 150; // only expand further if anyone else requires it - link.setLayoutData(linkData); - - new Label(pageComponent, SWT.NONE).setLayoutData(new GridData()); - new Label(pageComponent, SWT.NONE).setLayoutData(new GridData()); - - SashForm editor = new SashForm(pageComponent, SWT.VERTICAL); - GridData gridData2 = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData2.horizontalSpan = 2; - editor.setLayoutData(gridData2); - SashForm top = new SashForm(editor, SWT.HORIZONTAL); - Composite styleEditor = createComposite(top, 1); - ((GridLayout) styleEditor.getLayout()).marginRight = 5; - ((GridLayout) styleEditor.getLayout()).marginLeft = 0; - createLabel(styleEditor, JSPUIMessages.SyntaxColoringPage_0); - fStylesViewer = createStylesViewer(styleEditor); - GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData.horizontalIndent = 0; - Iterator iterator = fStyleToDescriptionMap.values().iterator(); - while (iterator.hasNext()) { - gridData.widthHint = Math.max(gridData.widthHint, convertWidthInCharsToPixels(iterator.next().toString().length())); - } - gridData.heightHint = convertHeightInCharsToPixels(5); - fStylesViewer.getControl().setLayoutData(gridData); - - Composite editingComposite = createComposite(top, 1); - ((GridLayout) styleEditor.getLayout()).marginLeft = 5; - createLabel(editingComposite, ""); //$NON-NLS-1$ - Button enabler = createCheckbox(editingComposite, JSPUIMessages.SyntaxColoringPage_2); - enabler.setEnabled(false); - enabler.setSelection(true); - Composite editControls = createComposite(editingComposite, 2); - ((GridLayout) editControls.getLayout()).marginLeft = 20; - - fForegroundLabel = createLabel(editControls, SSEUIMessages.Foreground_UI_); - ((GridData) fForegroundLabel.getLayoutData()).verticalAlignment = SWT.CENTER; - fForegroundLabel.setEnabled(false); - - fForegroundColorEditor = new ColorSelector(editControls); - Button fForegroundColor = fForegroundColorEditor.getButton(); - GridData gd = new GridData(SWT.BEGINNING, SWT.FILL, false, false); - fForegroundColor.setLayoutData(gd); - fForegroundColorEditor.setEnabled(false); - - fBackgroundLabel = createLabel(editControls, SSEUIMessages.Background_UI_); - ((GridData) fBackgroundLabel.getLayoutData()).verticalAlignment = SWT.CENTER; - fBackgroundLabel.setEnabled(false); - - fBackgroundColorEditor = new ColorSelector(editControls); - Button fBackgroundColor = fBackgroundColorEditor.getButton(); - gd = new GridData(SWT.BEGINNING, SWT.FILL, false, false); - fBackgroundColor.setLayoutData(gd); - fBackgroundColorEditor.setEnabled(false); - - fBold = createCheckbox(editControls, JSPUIMessages.SyntaxColoringPage_3); - fBold.setEnabled(false); - ((GridData) fBold.getLayoutData()).horizontalSpan = 2; - fItalic = createCheckbox(editControls, JSPUIMessages.SyntaxColoringPage_4); - fItalic.setEnabled(false); - ((GridData) fItalic.getLayoutData()).horizontalSpan = 2; - fStrike = createCheckbox(editControls, JSPUIMessages.SyntaxColoringPage_5); - fStrike.setEnabled(false); - ((GridData) fStrike.getLayoutData()).horizontalSpan = 2; - fUnderline = createCheckbox(editControls, JSPUIMessages.SyntaxColoringPage_6); - fUnderline.setEnabled(false); - ((GridData) fUnderline.getLayoutData()).horizontalSpan = 2; - fClearStyle = new Button(editingComposite, SWT.PUSH); - fClearStyle.setText(SSEUIMessages.Restore_Default_UI_); //$NON-NLS-1$ = "Restore Default" - fClearStyle.setLayoutData(new GridData(SWT.BEGINNING)); - ((GridData) fClearStyle.getLayoutData()).horizontalIndent = 20; - fClearStyle.setEnabled(false); - - Composite sampleArea = createComposite(editor, 1); - - ((GridLayout) sampleArea.getLayout()).marginLeft = 5; - ((GridLayout) sampleArea.getLayout()).marginTop = 5; - createLabel(sampleArea, SSEUIMessages.Sample_text__UI_); //$NON-NLS-1$ = "&Sample text:" - SourceViewer viewer = new SourceViewer(sampleArea, null, SWT.BORDER | SWT.LEFT_TO_RIGHT | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.READ_ONLY); - fText = viewer.getTextWidget(); - GridData gridData3 = new GridData(SWT.FILL, SWT.FILL, true, true); - gridData3.widthHint = convertWidthInCharsToPixels(20); - gridData3.heightHint = convertHeightInCharsToPixels(5); - gridData3.horizontalSpan = 2; - fText.setLayoutData(gridData3); - fText.setEditable(false); - fText.setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$ - fText.addKeyListener(getTextKeyListener()); - fText.addSelectionListener(getTextSelectionListener()); - fText.addMouseListener(getTextMouseListener()); - fText.addTraverseListener(getTraverseListener()); - setAccessible(fText, SSEUIMessages.Sample_text__UI_); - fDocument = StructuredModelManager.getModelManager().createStructuredDocumentFor(ContentTypeIdForJSP.ContentTypeID_JSP); - fDocument.set(getExampleText()); - viewer.setDocument(fDocument); - - top.setWeights(new int[]{1, 1}); - editor.setWeights(new int[]{1, 1}); - PlatformUI.getWorkbench().getHelpSystem().setHelp(pageComponent, IHelpContextIds.JSP_PREFWEBX_STYLES_HELPID); - - fStylesViewer.setInput(getStylePreferenceKeys()); - - applyStyles(); - - fStylesViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent event) { - if (!event.getSelection().isEmpty()) { - Object o = ((IStructuredSelection) event.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - activate(namedStyle); - if (namedStyle == null) - return; - } - } - }); - - fForegroundColorEditor.addListener(new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(ColorSelector.PROP_COLORCHANGE)) { - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[0]; - // open color dialog to get new color - String newValue = ColorHelper.toRGBString(fForegroundColorEditor.getColorValue()); - - if (!newValue.equals(oldValue)) { - stylePrefs[0] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - } - } - } - } - }); - - fBackgroundColorEditor.addListener(new IPropertyChangeListener() { - public void propertyChange(PropertyChangeEvent event) { - if (event.getProperty().equals(ColorSelector.PROP_COLORCHANGE)) { - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[1]; - // open color dialog to get new color - String newValue = ColorHelper.toRGBString(fBackgroundColorEditor.getColorValue()); - - if (!newValue.equals(oldValue)) { - stylePrefs[1] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - activate(namedStyle); - } - } - } - } - }); - - fBold.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - super.widgetSelected(e); - // get current (newly old) style - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[2]; - String newValue = String.valueOf(fBold.getSelection()); - if (!newValue.equals(oldValue)) { - stylePrefs[2] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - } - } - } - }); - - fItalic.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - super.widgetSelected(e); - // get current (newly old) style - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[3]; - String newValue = String.valueOf(fItalic.getSelection()); - if (!newValue.equals(oldValue)) { - stylePrefs[3] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - } - } - } - }); - - fStrike.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - super.widgetSelected(e); - // get current (newly old) style - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[4]; - String newValue = String.valueOf(fStrike.getSelection()); - if (!newValue.equals(oldValue)) { - stylePrefs[4] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - } - } - } - }); - - fUnderline.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - super.widgetSelected(e); - // get current (newly old) style - Object o = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement(); - String namedStyle = o.toString(); - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - String oldValue = stylePrefs[5]; - String newValue = String.valueOf(fUnderline.getSelection()); - if (!newValue.equals(oldValue)) { - stylePrefs[5] = newValue; - String newPrefString = ColorHelper.packStylePreferences(stylePrefs); - getOverlayStore().setValue(namedStyle, newPrefString); - applyStyles(); - fText.redraw(); - } - } - } - }); - - fClearStyle.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - if (fStylesViewer.getSelection().isEmpty()) - return; - String namedStyle = ((IStructuredSelection) fStylesViewer.getSelection()).getFirstElement().toString(); - getOverlayStore().setToDefault(namedStyle); - applyStyles(); - fText.redraw(); - activate(namedStyle); - } - }); - - return pageComponent; - } - - private Label createLabel(Composite parent, String text) { - Label label = new Label(parent, SWT.WRAP); - label.setText(text); - GridData data = new GridData(SWT.FILL, SWT.FILL, false, false); - label.setLayoutData(data); - label.setBackground(parent.getBackground()); - return label; - } - - // protected Label createDescriptionLabel(Composite parent) { - // return null; - // } - - /** - * Set up all the style preference keys in the overlay store - */ - private OverlayKey[] createOverlayStoreKeys() { - List overlayKeys = new ArrayList(); - - Iterator i = getStylePreferenceKeys().iterator(); - while (i.hasNext()) { - overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, (String) i.next())); - } - - OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()]; - overlayKeys.toArray(keys); - return keys; - } - - /** - * Creates the List viewer where we see the various syntax element display - * names--would it ever be a Tree like JDT's? - * - * @param parent - * @return - */ - private StructuredViewer createStylesViewer(Composite parent) { - StructuredViewer stylesViewer = new ListViewer(parent, SWT.SINGLE | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); - stylesViewer.setComparator(new ViewerComparator(Collator.getInstance())); - stylesViewer.setLabelProvider(new LabelProvider() { - public String getText(Object element) { - Object description = fStyleToDescriptionMap.get(element); - if (description != null) - return description.toString(); - return super.getText(element); - } - }); - stylesViewer.setContentProvider(new ITreeContentProvider() { - public void dispose() { - } - - public Object[] getChildren(Object parentElement) { - return getStylePreferenceKeys().toArray(); - } - - public Object[] getElements(Object inputElement) { - return getChildren(inputElement); - } - - public Object getParent(Object element) { - return getStylePreferenceKeys(); - } - - public boolean hasChildren(Object element) { - return false; - } - - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - } - }); - return stylesViewer; - } - - public void dispose() { - if (fOverlayStore != null) { - fOverlayStore.stop(); - } - super.dispose(); - } - - protected IPreferenceStore doGetPreferenceStore() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - - private TextAttribute getAttributeFor(String namedStyle) { - TextAttribute ta = new TextAttribute(fDefaultForeground, fDefaultBackground, SWT.NORMAL); - - if (namedStyle != null && fOverlayStore != null) { - // note: "namedStyle" *is* the preference key - String prefString = getOverlayStore().getString(namedStyle); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - RGB foreground = ColorHelper.toRGB(stylePrefs[0]); - RGB background = ColorHelper.toRGB(stylePrefs[1]); - - int fontModifier = SWT.NORMAL; - - if (stylePrefs.length > 2) { - boolean on = Boolean.valueOf(stylePrefs[2]).booleanValue(); - if (on) - fontModifier = fontModifier | SWT.BOLD; - } - if (stylePrefs.length > 3) { - boolean on = Boolean.valueOf(stylePrefs[3]).booleanValue(); - if (on) - fontModifier = fontModifier | SWT.ITALIC; - } - if (stylePrefs.length > 4) { - boolean on = Boolean.valueOf(stylePrefs[4]).booleanValue(); - if (on) - fontModifier = fontModifier | TextAttribute.STRIKETHROUGH; - } - if (stylePrefs.length > 5) { - boolean on = Boolean.valueOf(stylePrefs[5]).booleanValue(); - if (on) - fontModifier = fontModifier | TextAttribute.UNDERLINE; - } - - ta = new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, fontModifier); - } - } - return ta; - } - - private String getExampleText() { - return JSPUIMessages.Sample_JSP_doc; - } - - private String getNamedStyleAtOffset(int offset) { - // ensure the offset is clean - if (offset >= fDocument.getLength()) - return getNamedStyleAtOffset(fDocument.getLength() - 1); - else if (offset < 0) - return getNamedStyleAtOffset(0); - IStructuredDocumentRegion documentRegion = fDocument.getFirstStructuredDocumentRegion(); - while (documentRegion != null && !documentRegion.containsOffset(offset)) { - documentRegion = documentRegion.getNext(); - } - if (documentRegion != null) { - // find the ITextRegion's Context at this offset - ITextRegion interest = documentRegion.getRegionAtCharacterOffset(offset); - if (interest == null) - return null; - if (offset > documentRegion.getTextEndOffset(interest)) - return null; - String regionContext = interest.getType(); - if (regionContext == null) - return null; - // find the named style (internal/selectable name) for that - // context - String namedStyle = (String) fContextToStyleMap.get(regionContext); - if (namedStyle != null) { - return namedStyle; - } - } - return null; - } - - private OverlayPreferenceStore getOverlayStore() { - return fOverlayStore; - } - - private Collection getStylePreferenceKeys() { - if (fStylePreferenceKeys == null) { - List styles = new ArrayList(); - styles.add(IStyleConstantsXML.TAG_BORDER); - styles.add(IStyleConstantsXML.TAG_NAME); - styles.add(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - styles.add(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - styles.add(IStyleConstantsXML.COMMENT_BORDER); - styles.add(IStyleConstantsXML.COMMENT_TEXT); - styles.add(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - styles.add(IStyleConstantsJSP.JSP_CONTENT); - fStylePreferenceKeys = styles; - } - return fStylePreferenceKeys; - } - - private KeyListener getTextKeyListener() { - return new KeyListener() { - public void keyPressed(KeyEvent e) { - if (e.widget instanceof StyledText) { - int x = ((StyledText) e.widget).getCaretOffset(); - selectColorAtOffset(x); - } - } - - public void keyReleased(KeyEvent e) { - if (e.widget instanceof StyledText) { - int x = ((StyledText) e.widget).getCaretOffset(); - selectColorAtOffset(x); - } - } - }; - } - - private MouseListener getTextMouseListener() { - return new MouseListener() { - public void mouseDoubleClick(MouseEvent e) { - } - - public void mouseDown(MouseEvent e) { - } - - public void mouseUp(MouseEvent e) { - if (e.widget instanceof StyledText) { - int x = ((StyledText) e.widget).getCaretOffset(); - selectColorAtOffset(x); - } - } - }; - } - - private SelectionListener getTextSelectionListener() { - return new SelectionListener() { - public void widgetDefaultSelected(SelectionEvent e) { - selectColorAtOffset(e.x); - if (e.widget instanceof StyledText) { - ((StyledText) e.widget).setSelection(e.x); - } - } - - public void widgetSelected(SelectionEvent e) { - selectColorAtOffset(e.x); - if (e.widget instanceof StyledText) { - ((StyledText) e.widget).setSelection(e.x); - } - } - }; - } - - private TraverseListener getTraverseListener() { - return new TraverseListener() { - /** - * @see org.eclipse.swt.events.TraverseListener#keyTraversed(TraverseEvent) - */ - public void keyTraversed(TraverseEvent e) { - if (e.widget instanceof StyledText) { - if ((e.detail == SWT.TRAVERSE_TAB_NEXT) || (e.detail == SWT.TRAVERSE_TAB_PREVIOUS)) - e.doit = true; - } - } - }; - } - - public void init(IWorkbench workbench) { - setDescription(SSEUIMessages.SyntaxColoring_Description); - - fStyleToDescriptionMap = new HashMap(); - fContextToStyleMap = new HashMap(); - - initStyleToDescriptionMap(); - initRegionContextToStyleMap(); - - fOverlayStore = new OverlayPreferenceStore(getPreferenceStore(), createOverlayStoreKeys()); - fOverlayStore.load(); - fOverlayStore.start(); - } - - private void initRegionContextToStyleMap() { - fContextToStyleMap.put(DOMRegionContext.XML_COMMENT_OPEN, IStyleConstantsXML.COMMENT_BORDER); - fContextToStyleMap.put(DOMRegionContext.XML_COMMENT_TEXT, IStyleConstantsXML.COMMENT_TEXT); - fContextToStyleMap.put(DOMRegionContext.XML_COMMENT_CLOSE, IStyleConstantsXML.COMMENT_BORDER); - - fContextToStyleMap.put(DOMRegionContext.XML_TAG_OPEN, IStyleConstantsXML.TAG_BORDER); - fContextToStyleMap.put(DOMRegionContext.XML_END_TAG_OPEN, IStyleConstantsXML.TAG_BORDER); - fContextToStyleMap.put(DOMRegionContext.XML_TAG_NAME, IStyleConstantsXML.TAG_NAME); - fContextToStyleMap.put(DOMRegionContext.XML_TAG_ATTRIBUTE_NAME, IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - fContextToStyleMap.put(DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE, IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - fContextToStyleMap.put(DOMRegionContext.XML_TAG_CLOSE, IStyleConstantsXML.TAG_BORDER); - fContextToStyleMap.put(DOMRegionContext.XML_EMPTY_TAG_CLOSE, IStyleConstantsXML.TAG_BORDER); - - fContextToStyleMap.put(DOMRegionContext.XML_CHAR_REFERENCE, IStyleConstantsXML.ENTITY_REFERENCE); - fContextToStyleMap.put(DOMRegionContext.XML_ENTITY_REFERENCE, IStyleConstantsXML.ENTITY_REFERENCE); - fContextToStyleMap.put(DOMRegionContext.XML_PE_REFERENCE, IStyleConstantsXML.ENTITY_REFERENCE); - - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_DECLARATION_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_EXPRESSION_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_CLOSE, IStyleConstantsHTML.SCRIPT_AREA_BORDER); - - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_CONTENT, IStyleConstantsJSP.JSP_CONTENT); - - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_DIRECTIVE_NAME, IStyleConstantsXML.TAG_NAME); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_ROOT_TAG_NAME, IStyleConstantsXML.TAG_NAME); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_OPEN, IStyleConstantsXML.COMMENT_BORDER); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_TEXT, IStyleConstantsXML.COMMENT_TEXT); - fContextToStyleMap.put(DOMJSPRegionContexts.JSP_COMMENT_CLOSE, IStyleConstantsXML.COMMENT_BORDER); - - fContextToStyleMap.put(DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_DQUOTE, IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - fContextToStyleMap.put(DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_SQUOTE, IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - } - - private void initStyleToDescriptionMap() { - fStyleToDescriptionMap.put(IStyleConstantsXML.COMMENT_BORDER, XMLUIMessages.Comment_Delimiters_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.COMMENT_TEXT, XMLUIMessages.Comment_Content_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.TAG_BORDER, XMLUIMessages.Tag_Delimiters_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.TAG_NAME, XMLUIMessages.Tag_Names_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.TAG_ATTRIBUTE_NAME, XMLUIMessages.Attribute_Names_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE, XMLUIMessages.Attribute_Values_UI_); // = - fStyleToDescriptionMap.put(IStyleConstantsXML.ENTITY_REFERENCE, XMLUIMessages.Entity_Reference_UI_); //$NON-NLS-1$ = "Entity References" - fStyleToDescriptionMap.put(IStyleConstantsHTML.SCRIPT_AREA_BORDER, JSPUIMessages.JSP_Delimiters_UI_); //$NON-NLS-1$ = "JSP Delimiters" - fStyleToDescriptionMap.put(IStyleConstantsJSP.JSP_CONTENT, JSPUIMessages.JSPColorPage_jsp_content); - } - - protected void performDefaults() { - super.performDefaults(); - getOverlayStore().loadDefaults(); - applyStyles(); - fStylesViewer.setSelection(StructuredSelection.EMPTY); - activate(null); - fText.redraw(); - } - - public boolean performOk() { - getOverlayStore().propagate(); - - JSPUIPlugin.getDefault().savePluginPreferences(); - SSEUIPlugin.getDefault().savePluginPreferences(); - return true; - } - - private void selectColorAtOffset(int offset) { - String namedStyle = getNamedStyleAtOffset(offset); - if (namedStyle != null) { - fStylesViewer.setSelection(new StructuredSelection(namedStyle)); - fStylesViewer.reveal(namedStyle); - } - else { - fStylesViewer.setSelection(StructuredSelection.EMPTY); - } - activate(namedStyle); - } - - /** - * Specifically set the reporting name of a control for accessibility - */ - private void setAccessible(Control control, String name) { - if (control == null) - return; - final String n = name; - control.getAccessible().addAccessibleListener(new AccessibleAdapter() { - public void getName(AccessibleEvent e) { - if (e.childID == ACC.CHILDID_SELF) - e.result = n; - } - }); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPTemplatePreferencePage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPTemplatePreferencePage.java deleted file mode 100644 index 9d637a9d27..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/preferences/ui/JSPTemplatePreferencePage.java +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.preferences.ui; - -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.contentassist.ContentAssistant; -import org.eclipse.jface.text.contentassist.IContentAssistant; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.source.SourceViewerConfiguration; -import org.eclipse.jface.text.templates.ContextTypeRegistry; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.window.Window; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.ui.StructuredTextViewerConfigurationJSP; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.templates.TemplatePreferencePage; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration; -import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; - - -/** - * Preference page for JSP templates - */ -public class JSPTemplatePreferencePage extends TemplatePreferencePage { - class JSPEditTemplateDialog extends EditTemplateDialog { - public JSPEditTemplateDialog(Shell parent, Template template, boolean edit, boolean isNameModifiable, ContextTypeRegistry registry) { - super(parent, template, edit, isNameModifiable, registry); - } - - protected SourceViewer createViewer(Composite parent) { SourceViewerConfiguration sourceViewerConfiguration = new StructuredTextViewerConfiguration() { - StructuredTextViewerConfiguration baseConfiguration = new StructuredTextViewerConfigurationJSP(); - - public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { - return baseConfiguration.getConfiguredContentTypes(sourceViewer); - } - - public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { - return baseConfiguration.getLineStyleProviders(sourceViewer, partitionType); - } - - public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) { - ContentAssistant assistant = new ContentAssistant(); - assistant.enableAutoActivation(true); - assistant.enableAutoInsert(true); - assistant.setContentAssistProcessor(getTemplateProcessor(), IDocument.DEFAULT_CONTENT_TYPE); - return assistant; - } - }; - return doCreateViewer(parent, sourceViewerConfiguration); -} - } - - public JSPTemplatePreferencePage() { - JSPUIPlugin jspEditorPlugin = JSPUIPlugin.getDefault(); - - setPreferenceStore(jspEditorPlugin.getPreferenceStore()); - setTemplateStore(jspEditorPlugin.getTemplateStore()); - setContextTypeRegistry(jspEditorPlugin.getTemplateContextRegistry()); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.preference.IPreferencePage#performOk() - */ - public boolean performOk() { - boolean ok = super.performOk(); - JSPUIPlugin.getDefault().savePluginPreferences(); - return ok; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#isShowFormatterSetting() - */ - protected boolean isShowFormatterSetting() { - // template formatting has not been implemented - return false; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) - */ - protected Control createContents(Composite ancestor) { - Control c = super.createContents(ancestor); - PlatformUI.getWorkbench().getHelpSystem().setHelp(c, IHelpContextIds.JSP_PREFWEBX_TEMPLATES_HELPID); - return c; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.ui.texteditor.templates.TemplatePreferencePage#createViewer(org.eclipse.swt.widgets.Composite) - */ - protected SourceViewer createViewer(Composite parent) { - SourceViewerConfiguration sourceViewerConfiguration = new StructuredTextViewerConfiguration() { - StructuredTextViewerConfiguration baseConfiguration = new StructuredTextViewerConfigurationJSP(); - - public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { - return baseConfiguration.getConfiguredContentTypes(sourceViewer); - } - - public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { - return baseConfiguration.getLineStyleProviders(sourceViewer, partitionType); - } - }; - return doCreateViewer(parent, sourceViewerConfiguration); - } - - SourceViewer doCreateViewer(Composite parent, SourceViewerConfiguration viewerConfiguration) { - SourceViewer viewer = null; - String contentTypeID = ContentTypeIdForJSP.ContentTypeID_JSP; - viewer = new StructuredTextViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - ((StructuredTextViewer) viewer).getTextWidget().setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$ - IStructuredModel scratchModel = StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(contentTypeID); - IDocument document = scratchModel.getStructuredDocument(); - viewer.configure(viewerConfiguration); - viewer.setDocument(document); - return viewer; - } - - /** - * Creates the edit dialog. Subclasses may override this method to provide - * a custom dialog. - * - * @param template - * the template being edited - * @param edit - * whether the dialog should be editable - * @param isNameModifiable - * whether the template name may be modified - * @return the created or modified template, or <code>null</code> if the - * edition failed - * @since 3.1 - */ - protected Template editTemplate(Template template, boolean edit, boolean isNameModifiable) { - EditTemplateDialog dialog = new JSPEditTemplateDialog(getShell(), template, edit, isNameModifiable, getContextTypeRegistry()); - if (dialog.open() == Window.OK) { - return dialog.getTemplate(); - } - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionAnnotationModelChanges.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionAnnotationModelChanges.java deleted file mode 100644 index f1a58f1ef2..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionAnnotationModelChanges.java +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import java.util.Map; - -import org.eclipse.jface.text.source.Annotation; -import org.w3c.dom.Node; - -/** - * Contains a set of projection model additions/deletions/modifications - */ -class ProjectionAnnotationModelChanges { - // copies of this class located in: - // org.eclipse.wst.xml.ui.internal.projection - // org.eclipse.wst.css.ui.internal.projection - // org.eclipse.wst.html.ui.internal.projection - // org.eclipse.jst.jsp.ui.internal.projection - private Node fNode; - private Annotation[] fDeletions; - private Map fAdditions; - private Annotation[] fModifications; - - public ProjectionAnnotationModelChanges(Node node, Annotation[] deletions, Map additions, Annotation[] modifications) { - fNode = node; - fDeletions = deletions; - fAdditions = additions; - fModifications = modifications; - } - - public Map getAdditions() { - return fAdditions; - } - - public Annotation[] getDeletions() { - return fDeletions; - } - - public Annotation[] getModifications() { - return fModifications; - } - - public Node getNode() { - return fNode; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryHTML.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryHTML.java deleted file mode 100644 index d632a8996e..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryHTML.java +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Tom Turrell-Croft, left@ultrasis.com - [174307] Enable folding for div tags in JSP and HTML files - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.eclipse.jface.text.source.Annotation; -import org.eclipse.jface.text.source.projection.ProjectionViewer; -import org.eclipse.wst.html.core.internal.provisional.HTML40Namespace; -import org.eclipse.wst.sse.core.internal.provisional.AbstractAdapterFactory; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.w3c.dom.Node; - -public class ProjectionModelNodeAdapterFactoryHTML extends AbstractAdapterFactory { - // copies of this class located in: - // org.eclipse.wst.html.ui.internal.projection - // org.eclipse.jst.jsp.ui.internal.projection - - /** - * List of projection viewers currently associated with this projection - * model node adapter factory. - */ - private HashMap fProjectionViewers; - - public ProjectionModelNodeAdapterFactoryHTML(Object adapterKey, boolean registerAdapters) { - super(adapterKey, registerAdapters); - } - - public ProjectionModelNodeAdapterFactoryHTML(Object adapterKey) { - super(adapterKey); - } - - public ProjectionModelNodeAdapterFactoryHTML() { - this(ProjectionModelNodeAdapterHTML.class); - } - - /** - * Actually creates an adapter for the parent of target if target is the - * "adapt-able" node - */ - protected INodeAdapter createAdapter(INodeNotifier target) { - if ((isActive()) && (target instanceof Node) && ((Node) target).getNodeType() == Node.ELEMENT_NODE) { - Node node = (Node) target; - if (isNodeProjectable(node)) { - - // actually work with the parent node to listen for add, - // delete events - Node parent = node.getParentNode(); - if (parent instanceof INodeNotifier) { - INodeNotifier parentNotifier = (INodeNotifier) parent; - ProjectionModelNodeAdapterHTML parentAdapter = (ProjectionModelNodeAdapterHTML) parentNotifier.getExistingAdapter(ProjectionModelNodeAdapterHTML.class); - if (parentAdapter == null) { - // create a new adapter for parent - parentAdapter = new ProjectionModelNodeAdapterHTML(this); - parentNotifier.addAdapter(parentAdapter); - } - // call update on parent because a new node has just been - // added - parentAdapter.updateAdapter(parent); - } - } - } - - return null; - } - - /** - * Returns true if node is a node type able to fold - * - * @param node - * @return boolean true if node is projectable, false otherwise - */ - boolean isNodeProjectable(Node node) { - if (node.getNodeType() == Node.ELEMENT_NODE) { - String tagName = node.getNodeName(); - // node is only projectable if it is head, body, script, style, - // table, ul, ol and div tags - if (HTML40Namespace.ElementName.HEAD.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.BODY.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.SCRIPT.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.STYLE.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.TABLE.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.UL.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.OL.equalsIgnoreCase(tagName) || HTML40Namespace.ElementName.DIV.equalsIgnoreCase(tagName)) - return true; - } - return false; - } - - /** - * Return true if this factory is currently actively managing projection - * - * @return - */ - boolean isActive() { - return (fProjectionViewers != null && !fProjectionViewers.isEmpty()); - } - - /** - * Updates projection annotation model if document is not in flux. - * Otherwise, queues up the changes to be applied when document is ready. - * - * @param node - * @param deletions - * @param additions - * @param modifications - */ - void queueAnnotationModelChanges(Node node, Annotation[] deletions, Map additions, Annotation[] modifications) { - queueAnnotationModelChanges(node, deletions, additions, modifications, null); - } - - /** - * Updates projection annotation model for a specific projection viewer if - * document is not in flux. Otherwise, queues up the changes to be applied - * when document is ready. - * - * @param node - * @param deletions - * @param additions - * @param modifications - * @param viewer - */ - void queueAnnotationModelChanges(Node node, Annotation[] deletions, Map additions, Annotation[] modifications, ProjectionViewer viewer) { - // create a change object for latest change and add to queue - ProjectionAnnotationModelChanges newChange = new ProjectionAnnotationModelChanges(node, deletions, additions, modifications); - if (fProjectionViewers != null) { - if (viewer != null) { - ProjectionViewerInformation info = (ProjectionViewerInformation) fProjectionViewers.get(viewer); - if (info != null) { - info.queueAnnotationModelChanges(newChange); - } - } - else { - Iterator infos = fProjectionViewers.values().iterator(); - while (infos.hasNext()) { - ProjectionViewerInformation info = (ProjectionViewerInformation) infos.next(); - info.queueAnnotationModelChanges(newChange); - } - } - } - } - - public void release() { - // go through every projectionviewer and call - // removeProjectionViewer(viewer); - if (fProjectionViewers != null) { - Iterator infos = fProjectionViewers.values().iterator(); - while (infos.hasNext()) { - ProjectionViewerInformation info = (ProjectionViewerInformation) infos.next(); - info.dispose(); - infos.remove(); - } - fProjectionViewers = null; - } - super.release(); - } - - /** - * Adds viewer to list of projection viewers this factory is associated - * with - * - * @param viewer - - * assumes viewer's document and projection annotation model - * are not null - */ - void addProjectionViewer(ProjectionViewer viewer) { - // remove old entry if it exists - removeProjectionViewer(viewer); - - if (fProjectionViewers == null) { - fProjectionViewers = new HashMap(); - } - - // create new object containing projection viewer and its info - ProjectionViewerInformation info = new ProjectionViewerInformation(viewer); - fProjectionViewers.put(viewer, info); - info.initialize(); - } - - /** - * Removes the given viewer from the list of projection viewers this - * factor is associated with - * - * @param viewer - */ - void removeProjectionViewer(ProjectionViewer viewer) { - if (fProjectionViewers != null) { - // remove entry from list of viewers - ProjectionViewerInformation info = (ProjectionViewerInformation) fProjectionViewers.remove(viewer); - if (info != null) { - info.dispose(); - } - // if removing last projection viewer, clear out everything - if (fProjectionViewers.isEmpty()) { - fProjectionViewers = null; - } - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryJSP.java deleted file mode 100644 index 322f89a449..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterFactoryJSP.java +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import org.eclipse.jst.jsp.core.internal.provisional.JSP11Namespace; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.w3c.dom.Node; - -public class ProjectionModelNodeAdapterFactoryJSP extends ProjectionModelNodeAdapterFactoryHTML { - public ProjectionModelNodeAdapterFactoryJSP() { - this(ProjectionModelNodeAdapterJSP.class); - } - - public ProjectionModelNodeAdapterFactoryJSP(Object adapterKey, boolean registerAdapters) { - super(adapterKey, registerAdapters); - } - - public ProjectionModelNodeAdapterFactoryJSP(Object adapterKey) { - super(adapterKey); - } - - /** - * Actually creates an adapter for the parent of target if target is the - * "adapt-able" node - */ - protected INodeAdapter createAdapter(INodeNotifier target) { - if ((isActive()) && (target instanceof Node) && ((Node) target).getNodeType() == Node.ELEMENT_NODE) { - Node node = (Node) target; - if (isNodeProjectable(node)) { - - // actually work with the parent node to listen for add, - // delete events - Node parent = node.getParentNode(); - if (parent instanceof INodeNotifier) { - INodeNotifier parentNotifier = (INodeNotifier) parent; - ProjectionModelNodeAdapterJSP parentAdapter = (ProjectionModelNodeAdapterJSP) parentNotifier.getExistingAdapter(ProjectionModelNodeAdapterJSP.class); - if (parentAdapter == null) { - // create a new adapter for parent - parentAdapter = new ProjectionModelNodeAdapterJSP(this); - parentNotifier.addAdapter(parentAdapter); - } - // call update on parent because a new node has just been - // added - parentAdapter.updateAdapter(parent); - } - } - } - - return null; - } - - /** - * Returns true if node is a node type able to fold - * - * @param node - * @return boolean true if node is projectable, false otherwise - */ - boolean isNodeProjectable(Node node) { - if (node.getNodeType() == Node.ELEMENT_NODE) { - String tagName = node.getNodeName(); - // node is only projectable if it is jsp scriptlet tag - if (JSP11Namespace.ElementName.SCRIPTLET.equalsIgnoreCase(tagName)) - return true; - } - return false; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterHTML.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterHTML.java deleted file mode 100644 index 8cf43ad284..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterHTML.java +++ /dev/null @@ -1,291 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.text.Position; -import org.eclipse.jface.text.source.projection.ProjectionAnnotation; -import org.eclipse.jface.text.source.projection.ProjectionViewer; -import org.eclipse.swt.graphics.FontMetrics; -import org.eclipse.swt.graphics.GC; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.widgets.Canvas; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.w3c.dom.Node; - -/** - * Updates projection annotation model with projection annotations for this - * adapter node's children - */ -public class ProjectionModelNodeAdapterHTML implements INodeAdapter { - // copies of this class located in: - // org.eclipse.wst.html.ui.internal.projection - // org.eclipse.jst.jsp.ui.internal.projection - private final static boolean debugProjectionPerf = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.html.ui/projectionperf")); //$NON-NLS-1$ //$NON-NLS-2$ - - private class TagProjectionAnnotation extends ProjectionAnnotation { - private boolean fIsVisible = false; /* workaround for BUG85874 */ - private Node fNode; - - public TagProjectionAnnotation(Node node, boolean isCollapsed) { - super(isCollapsed); - fNode = node; - } - - public Node getNode() { - return fNode; - } - - public void setNode(Node node) { - fNode = node; - } - - /** - * Does not paint hidden annotations. Annotations are hidden when they - * only span one line. - * - * @see ProjectionAnnotation#paint(org.eclipse.swt.graphics.GC, - * org.eclipse.swt.widgets.Canvas, - * org.eclipse.swt.graphics.Rectangle) - */ - public void paint(GC gc, Canvas canvas, Rectangle rectangle) { - /* workaround for BUG85874 */ - /* - * only need to check annotations that are expanded because hidden - * annotations should never have been given the chance to - * collapse. - */ - if (!isCollapsed()) { - // working with rectangle, so line height - FontMetrics metrics = gc.getFontMetrics(); - if (metrics != null) { - // do not draw annotations that only span one line and - // mark them as not visible - if ((rectangle.height / metrics.getHeight()) <= 1) { - fIsVisible = false; - return; - } - } - } - fIsVisible = true; - super.paint(gc, canvas, rectangle); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.source.projection.ProjectionAnnotation#markCollapsed() - */ - public void markCollapsed() { - /* workaround for BUG85874 */ - // do not mark collapsed if annotation is not visible - if (fIsVisible) - super.markCollapsed(); - } - } - - // copies of this class located in: - // org.eclipse.wst.html.ui.internal.projection - // org.eclipse.jst.jsp.ui.internal.projection - - ProjectionModelNodeAdapterFactoryHTML fAdapterFactory; - private Map fTagAnnotations = new HashMap(); - - public ProjectionModelNodeAdapterHTML(ProjectionModelNodeAdapterFactoryHTML factory) { - fAdapterFactory = factory; - } - - /** - * Create a projection position from the given node. Able to get - * projection position if node isNodeProjectable. - * - * @param node - * @return null if no projection position possible, a Position otherwise - */ - private Position createProjectionPosition(Node node) { - Position pos = null; - if (fAdapterFactory.isNodeProjectable(node) && node instanceof IndexedRegion) { - // IDocument document = - // fAdapterFactory.getProjectionViewer().getDocument(); - // if (document != null) { - IndexedRegion inode = (IndexedRegion) node; - int start = inode.getStartOffset(); - int end = inode.getEndOffset(); - if (start >= 0 && start < end) { - // region-based - // extra line when collapsed, but no region - // increase when add newline - pos = new Position(start, end - start); - // try { - // // line-based - // // extra line when collapsed, but no region - // // increase when add newline - // IRegion startLineRegion = - // document.getLineInformationOfOffset(start); - // IRegion endLineRegion = - // document.getLineInformationOfOffset(end); - // int startOffset = startLineRegion.getOffset(); - // int endOffset = endLineRegion.getOffset() + - // endLineRegion.getLength(); - // if (endOffset > startOffset) { - // pos = new Position(startOffset, endOffset - - // startOffset); - // } - // - // // line-based - // // no extra line when collapsed, but region increase - // // when add newline - // int startLine = document.getLineOfOffset(start); - // int endLine = document.getLineOfOffset(end); - // if (endLine + 1 < document.getNumberOfLines()) { - // int offset = document.getLineOffset(startLine); - // int endOffset = document.getLineOffset(endLine + 1); - // pos = new Position(offset, endOffset - offset); - // } - // } - // catch (BadLocationException x) { - // Logger.log(Logger.WARNING_DEBUG, null, x); - // } - } - } - // } - return pos; - } - - /** - * Find TagProjectionAnnotation for node in the current list of projection - * annotations for this adapter - * - * @param node - * @return TagProjectionAnnotation - */ - private TagProjectionAnnotation getExistingAnnotation(Node node) { - TagProjectionAnnotation anno = null; - - if ((node != null) && (!fTagAnnotations.isEmpty())) { - Iterator it = fTagAnnotations.keySet().iterator(); - while (it.hasNext() && anno == null) { - TagProjectionAnnotation a = (TagProjectionAnnotation) it.next(); - Node n = a.getNode(); - if (node.equals(n)) { - anno = a; - } - } - } - return anno; - } - - public boolean isAdapterForType(Object type) { - return type == ProjectionModelNodeAdapterHTML.class; - } - - public void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) { - // check if folding is even enabled, if not, just ignore notifyChanged - // events - if (!fAdapterFactory.isActive()) { - return; - } - - if ((eventType == INodeNotifier.STRUCTURE_CHANGED) && (notifier instanceof Node)) { - updateAdapter((Node) notifier); - } - } - - /** - * Update the projection annotation of all the nodes that are children of - * node - * - * @param node - */ - void updateAdapter(Node node) { - updateAdapter(node, null); - } - - /** - * Update the projection annotation of all the nodes that are children of - * node and adds all projection annotations to viewer (for newly added - * viewers) - * - * @param node - * @param viewer - */ - void updateAdapter(Node node, ProjectionViewer viewer) { - long start = System.currentTimeMillis(); - - Map additions = new HashMap(); - Map projectionAnnotations = new HashMap(); - - // go through immediate child nodes and figure out projection - // model annotations - if (node != null) { - Node childNode = node.getFirstChild(); - while (childNode != null) { - Position newPos = createProjectionPosition(childNode); - if (newPos != null) { - TagProjectionAnnotation newAnnotation = new TagProjectionAnnotation(childNode, false); - TagProjectionAnnotation existing = getExistingAnnotation(childNode); - if (existing == null) { - // add to map containing all annotations for this - // adapter - projectionAnnotations.put(newAnnotation, newPos); - // add to map containing annotations to add - additions.put(newAnnotation, newPos); - } - else { - // add to map containing all annotations for this - // adapter - projectionAnnotations.put(existing, newPos); - // remove from map containing annotations to delete - fTagAnnotations.remove(existing); - } - } - childNode = childNode.getNextSibling(); - } - - // in the end, want to delete anything leftover in old list, add - // everything in additions, and update everything in - // projectionAnnotations - ProjectionAnnotation[] oldList = null; - if (!fTagAnnotations.isEmpty()) { - oldList = (ProjectionAnnotation[]) fTagAnnotations.keySet().toArray(new ProjectionAnnotation[0]); - } - ProjectionAnnotation[] modifyList = null; - if (!projectionAnnotations.isEmpty()) { - modifyList = (ProjectionAnnotation[]) projectionAnnotations.keySet().toArray(new ProjectionAnnotation[0]); - } - - // specifically add all annotations to viewer - if (viewer != null && !projectionAnnotations.isEmpty()) { - fAdapterFactory.queueAnnotationModelChanges(node, null, projectionAnnotations, null, viewer); - } - - // only update when there is something to update - if ((oldList != null && oldList.length > 0) || (!additions.isEmpty()) || (modifyList != null && modifyList.length > 0)) - fAdapterFactory.queueAnnotationModelChanges(node, oldList, additions, modifyList); - } - - // save new list of annotations - fTagAnnotations = projectionAnnotations; - - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - String nodeName = node != null ? node.getNodeName() : "null"; //$NON-NLS-1$ - System.out.println("ProjectionModelNodeAdapterHTML.updateAdapter (" + nodeName + "):" + (end - start)); //$NON-NLS-1$ //$NON-NLS-2$ - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterJSP.java deleted file mode 100644 index a195368688..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionModelNodeAdapterJSP.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -/** - * Updates projection annotation model with projection annotations for this - * adapter node's children - */ -public class ProjectionModelNodeAdapterJSP extends ProjectionModelNodeAdapterHTML { - public ProjectionModelNodeAdapterJSP(ProjectionModelNodeAdapterFactoryJSP factory) { - super(factory); - } - - public boolean isAdapterForType(Object type) { - return type == ProjectionModelNodeAdapterJSP.class; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionViewerInformation.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionViewerInformation.java deleted file mode 100644 index 5f84d1cc2e..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/ProjectionViewerInformation.java +++ /dev/null @@ -1,196 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.text.DocumentEvent; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentExtension; -import org.eclipse.jface.text.IDocumentListener; -import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel; -import org.eclipse.jface.text.source.projection.ProjectionViewer; -import org.eclipse.jst.jsp.ui.internal.Logger; - -/** - * Contains information about a projection viewer and also manages updating - * the viewer's projection annotation model - */ -class ProjectionViewerInformation { - // copies of this class located in: - // org.eclipse.wst.xml.ui.internal.projection - // org.eclipse.wst.css.ui.internal.projection - // org.eclipse.wst.html.ui.internal.projection - // org.eclipse.jst.jsp.ui.internal.projection - - /** - * Listens to document to be aware of when to update the projection - * annotation model. - */ - private class DocumentListener implements IDocumentListener { - private ProjectionViewerInformation fInfo; - - public DocumentListener(ProjectionViewerInformation info) { - fInfo = info; - } - - public void documentAboutToBeChanged(DocumentEvent event) { - IDocument document = event.getDocument(); - if (fInfo.getDocument() == document) { - fInfo.setIsDocumentChanging(true); - } - } - - public void documentChanged(DocumentEvent event) { - // register a post notification replace so that projection - // annotation model will be updated after all documentChanged - // listeners have been notified - IDocument document = event.getDocument(); - if (document instanceof IDocumentExtension && fInfo.getDocument() == document) { - if (fInfo.hasChangesQueued()) - ((IDocumentExtension) document).registerPostNotificationReplace(this, new PostDocumentChangedListener(fInfo)); - } - } - } - - /** - * Essentially a post document changed listener because it is called after - * documentchanged has been fired. - */ - private class PostDocumentChangedListener implements IDocumentExtension.IReplace { - private ProjectionViewerInformation fInfo; - - public PostDocumentChangedListener(ProjectionViewerInformation info) { - fInfo = info; - } - - public void perform(IDocument document, IDocumentListener owner) { - fInfo.applyAnnotationModelChanges(); - fInfo.setIsDocumentChanging(false); - } - } - - /** - * Projection annotation model current associated with this projection - * viewer - */ - private ProjectionAnnotationModel fProjectionAnnotationModel; - /** - * Document currently associated with this projection viewer - */ - private IDocument fDocument; - /** - * Listener to fProjectionViewer's document - */ - private IDocumentListener fDocumentListener; - /** - * Indicates whether or not document is in the middle of changing - */ - private boolean fIsDocumentChanging = false; - /** - * List of projection annotation model changes that need to be applied - */ - private List fQueuedAnnotationChanges; - - public ProjectionViewerInformation(ProjectionViewer viewer) { - fDocument = viewer.getDocument(); - fProjectionAnnotationModel = viewer.getProjectionAnnotationModel(); - } - - IDocument getDocument() { - return fDocument; - } - - private List getQueuedAnnotationChanges() { - if (fQueuedAnnotationChanges == null) { - fQueuedAnnotationChanges = new ArrayList(); - } - return fQueuedAnnotationChanges; - } - - void setIsDocumentChanging(boolean changing) { - fIsDocumentChanging = changing; - } - - private boolean isDocumentChanging() { - return fIsDocumentChanging; - } - - /** - * Applies the pending projection annotation model changes to the - * projection annotation model. - */ - void applyAnnotationModelChanges() { - List queuedChanges = getQueuedAnnotationChanges(); - // go through all the pending annotation changes and apply - // them to - // the projection annotation model - while (!queuedChanges.isEmpty()) { - ProjectionAnnotationModelChanges changes = (ProjectionAnnotationModelChanges) queuedChanges.remove(0); - try { - fProjectionAnnotationModel.modifyAnnotations(changes.getDeletions(), changes.getAdditions(), changes.getModifications()); - } - catch (Exception e) { - // if anything goes wrong, log it be continue - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } - - /** - * Returns true if there are annotation changes queued up, false otherwise - * - * @return boolean - */ - boolean hasChangesQueued() { - return !getQueuedAnnotationChanges().isEmpty(); - } - - /** - * Updates projection annotation model if document is not in flux. - * Otherwise, queues up the changes to be applied when document is ready. - */ - public void queueAnnotationModelChanges(ProjectionAnnotationModelChanges newChange) { - /* - * future_TODO: maybe improve by checking if annotation projection - * model change already exists for node. if so, throw out old change. - */ - getQueuedAnnotationChanges().add(newChange); - - // if document isn't changing, go ahead and apply it - if (!isDocumentChanging()) { - applyAnnotationModelChanges(); - } - } - - public void initialize() { - // add document listener - if (fDocumentListener == null) { - fDocumentListener = new DocumentListener(this); - } - getDocument().addDocumentListener(fDocumentListener); - } - - public void dispose() { - // remove document listener - if (fDocumentListener != null) { - getDocument().removeDocumentListener(fDocumentListener); - } - - // clear out list of queued changes since it may no longer - // be accurate - if (fQueuedAnnotationChanges != null) { - fQueuedAnnotationChanges.clear(); - fQueuedAnnotationChanges = null; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/StructuredTextFoldingProviderJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/StructuredTextFoldingProviderJSP.java deleted file mode 100644 index d4208c3ac3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/projection/StructuredTextFoldingProviderJSP.java +++ /dev/null @@ -1,423 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.projection; - -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITextInputListener; -import org.eclipse.jface.text.source.projection.IProjectionListener; -import org.eclipse.jface.text.source.projection.ProjectionViewer; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.PropagatingAdapter; -import org.eclipse.wst.sse.core.internal.model.FactoryRegistry; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.ui.internal.projection.IStructuredTextFoldingProvider; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -/** - * Updates the projection model of a structured model for JSP. - */ -public class StructuredTextFoldingProviderJSP implements IStructuredTextFoldingProvider, IProjectionListener, ITextInputListener { - private final static boolean debugProjectionPerf = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.jst.jsp.ui/projectionperf")); //$NON-NLS-1$ //$NON-NLS-2$ - - private IDocument fDocument; - private ProjectionViewer fViewer; - private boolean fProjectionNeedsToBeEnabled = false; - /** - * Maximum number of child nodes to add adapters to (limit for performance - * sake) - */ - private final int MAX_CHILDREN = 10; - /** - * Maximum number of sibling nodes to add adapters to (limit for - * performance sake) - */ - private final int MAX_SIBLINGS = 1000; - - /** - * Adds an adapter to node and its children - * - * @param node - * @param childLevel - */ - private void addAdapterToNodeAndChildren(Node node, int childLevel) { - // stop adding initial adapters MAX_CHILDREN levels deep for - // performance sake - if (node instanceof INodeNotifier && childLevel < MAX_CHILDREN) { - INodeNotifier notifier = (INodeNotifier) node; - - // try and get the adapter for the current node and update the - // adapter with projection information - ProjectionModelNodeAdapterJSP adapter = (ProjectionModelNodeAdapterJSP) notifier.getExistingAdapter(ProjectionModelNodeAdapterJSP.class); - if (adapter != null) { - adapter.updateAdapter(node, fViewer); - } - else { - // just call getadapter so the adapter is created and - // automatically initialized - notifier.getAdapterFor(ProjectionModelNodeAdapterJSP.class); - } - ProjectionModelNodeAdapterHTML adapter2 = (ProjectionModelNodeAdapterHTML) notifier.getExistingAdapter(ProjectionModelNodeAdapterHTML.class); - if (adapter2 != null) { - adapter2.updateAdapter(node); - } - else { - // just call getadapter so the adapter is created and - // automatically initialized - notifier.getAdapterFor(ProjectionModelNodeAdapterHTML.class); - } - int siblingLevel = 0; - Node nextChild = node.getFirstChild(); - while (nextChild != null && siblingLevel < MAX_SIBLINGS) { - Node childNode = nextChild; - nextChild = childNode.getNextSibling(); - - addAdapterToNodeAndChildren(childNode, childLevel + 1); - ++siblingLevel; - } - } - } - - /** - * Goes through every node and adds an adapter onto each for tracking - * purposes - */ - private void addAllAdapters() { - long start = System.currentTimeMillis(); - - if (fDocument != null) { - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (sModel != null) { - int startOffset = 0; - IndexedRegion startNode = sModel.getIndexedRegion(startOffset); - if (startNode instanceof Node) { - int siblingLevel = 0; - Node nextSibling = (Node) startNode; - while (nextSibling != null && siblingLevel < MAX_SIBLINGS) { - Node currentNode = nextSibling; - nextSibling = currentNode.getNextSibling(); - - addAdapterToNodeAndChildren(currentNode, 0); - ++siblingLevel; - } - } - } - } - finally { - if (sModel != null) { - sModel.releaseFromRead(); - } - } - } - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - System.out.println("StructuredTextFoldingProviderJSP.addAllAdapters: " + (end - start)); //$NON-NLS-1$ - } - } - - /** - * Get the ProjectionModelNodeAdapterFactoryHTML to use with this - * provider. - * - * @return ProjectionModelNodeAdapterFactoryHTML - */ - private ProjectionModelNodeAdapterFactoryHTML getAdapterFactoryHTML(boolean createIfNeeded) { - long start = System.currentTimeMillis(); - - ProjectionModelNodeAdapterFactoryHTML factory = null; - if (fDocument != null) { - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (sModel != null) { - FactoryRegistry factoryRegistry = sModel.getFactoryRegistry(); - - // getting the projectionmodelnodeadapter for the first - // time - // so do some initializing - if (!factoryRegistry.contains(ProjectionModelNodeAdapterHTML.class) && createIfNeeded) { - ProjectionModelNodeAdapterFactoryHTML newFactory = new ProjectionModelNodeAdapterFactoryHTML(); - - // add factory to factory registry - factoryRegistry.addFactory(newFactory); - - // add factory to propogating adapter - IDOMModel domModel = (IDOMModel) sModel; - Document document = domModel.getDocument(); - PropagatingAdapter propagatingAdapter = (PropagatingAdapter) ((INodeNotifier) document).getAdapterFor(PropagatingAdapter.class); - if (propagatingAdapter != null) { - propagatingAdapter.addAdaptOnCreateFactory(newFactory); - } - } - - // try and get the factory - factory = (ProjectionModelNodeAdapterFactoryHTML) factoryRegistry.getFactoryFor(ProjectionModelNodeAdapterHTML.class); - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - } - - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - System.out.println("StructuredTextFoldingProviderJSP.getAdapterFactoryHTML: " + (end - start)); //$NON-NLS-1$ - } - return factory; - } - - /** - * Get the ProjectionModelNodeAdapterFactoryJSP to use with this provider. - * - * @return ProjectionModelNodeAdapterFactoryJSP - */ - private ProjectionModelNodeAdapterFactoryJSP getAdapterFactoryJSP(boolean createIfNeeded) { - long start = System.currentTimeMillis(); - - ProjectionModelNodeAdapterFactoryJSP factory = null; - if (fDocument != null) { - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (sModel != null) { - FactoryRegistry factoryRegistry = sModel.getFactoryRegistry(); - - // getting the projectionmodelnodeadapter for the first - // time - // so do some initializing - if (!factoryRegistry.contains(ProjectionModelNodeAdapterJSP.class) && createIfNeeded) { - ProjectionModelNodeAdapterFactoryJSP newFactory = new ProjectionModelNodeAdapterFactoryJSP(); - - // add factory to factory registry - factoryRegistry.addFactory(newFactory); - - // add factory to propogating adapter - IDOMModel domModel = (IDOMModel) sModel; - Document document = domModel.getDocument(); - PropagatingAdapter propagatingAdapter = (PropagatingAdapter) ((INodeNotifier) document).getAdapterFor(PropagatingAdapter.class); - if (propagatingAdapter != null) { - propagatingAdapter.addAdaptOnCreateFactory(newFactory); - } - } - - // try and get the factory - factory = (ProjectionModelNodeAdapterFactoryJSP) factoryRegistry.getFactoryFor(ProjectionModelNodeAdapterJSP.class); - } - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - } - - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - System.out.println("StructuredTextFoldingProviderJSP.getAdapterFactoryJSP: " + (end - start)); //$NON-NLS-1$ - } - return factory; - } - - /** - * Initialize this provider with the correct document. Assumes projection - * is enabled. (otherwise, only install would have been called) - */ - public void initialize() { - if (!isInstalled()) - return; - - long start = System.currentTimeMillis(); - // clear out old info - projectionDisabled(); - - fDocument = fViewer.getDocument(); - - // set projection viewer on new document's adapter factory - if (fViewer.getProjectionAnnotationModel() != null) { - ProjectionModelNodeAdapterFactoryJSP factory = getAdapterFactoryJSP(true); - if (factory != null) { - factory.addProjectionViewer(fViewer); - } - ProjectionModelNodeAdapterFactoryHTML factory2 = getAdapterFactoryHTML(true); - if (factory2 != null) { - factory2.addProjectionViewer(fViewer); - } - - try { - // https://bugs.eclipse.org/bugs/show_bug.cgi?id=198304 - // disable redraw while adding all adapters - fViewer.setRedraw(false); - addAllAdapters(); - } - finally { - fViewer.setRedraw(true); - } - } - fProjectionNeedsToBeEnabled = false; - - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - System.out.println("StructuredTextFoldingProviderJSP.initialize: " + (end - start)); //$NON-NLS-1$ - } - } - - /** - * Associate a ProjectionViewer with this IStructuredTextFoldingProvider - * - * @param viewer - - * assumes not null - */ - public void install(ProjectionViewer viewer) { - // uninstall before trying to install new viewer - if (isInstalled()) { - uninstall(); - } - fViewer = viewer; - fViewer.addProjectionListener(this); - fViewer.addTextInputListener(this); - } - - private boolean isInstalled() { - return fViewer != null; - } - - public void projectionDisabled() { - ProjectionModelNodeAdapterFactoryJSP factory = getAdapterFactoryJSP(false); - if (factory != null) { - factory.removeProjectionViewer(fViewer); - } - ProjectionModelNodeAdapterFactoryHTML factory2 = getAdapterFactoryHTML(false); - if (factory2 != null) { - factory2.removeProjectionViewer(fViewer); - } - - // clear out all annotations - if (fViewer.getProjectionAnnotationModel() != null) - fViewer.getProjectionAnnotationModel().removeAllAnnotations(); - - removeAllAdapters(); - - fDocument = null; - fProjectionNeedsToBeEnabled = false; - } - - public void projectionEnabled() { - initialize(); - } - - /** - * Removes an adapter from node and its children - * - * @param node - * @param level - */ - private void removeAdapterFromNodeAndChildren(Node node, int level) { - if (node instanceof INodeNotifier) { - INodeNotifier notifier = (INodeNotifier) node; - - // try and get the adapter for the current node and remove it - INodeAdapter adapter = notifier.getExistingAdapter(ProjectionModelNodeAdapterJSP.class); - if (adapter != null) { - notifier.removeAdapter(adapter); - } - - INodeAdapter adapter2 = notifier.getExistingAdapter(ProjectionModelNodeAdapterHTML.class); - if (adapter2 != null) { - notifier.removeAdapter(adapter2); - } - - Node nextChild = node.getFirstChild(); - while (nextChild != null) { - Node childNode = nextChild; - nextChild = childNode.getNextSibling(); - - removeAdapterFromNodeAndChildren(childNode, level + 1); - } - } - } - - /** - * Goes through every node and removes adapter from each for cleanup - * purposes - */ - private void removeAllAdapters() { - long start = System.currentTimeMillis(); - - if (fDocument != null) { - IStructuredModel sModel = null; - try { - sModel = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (sModel != null) { - int startOffset = 0; - IndexedRegion startNode = sModel.getIndexedRegion(startOffset); - if (startNode instanceof Node) { - Node nextSibling = (Node) startNode; - while (nextSibling != null) { - Node currentNode = nextSibling; - nextSibling = currentNode.getNextSibling(); - - removeAdapterFromNodeAndChildren(currentNode, 0); - } - } - } - } - finally { - if (sModel != null) { - sModel.releaseFromRead(); - } - } - } - - if (debugProjectionPerf) { - long end = System.currentTimeMillis(); - System.out.println("StructuredTextFoldingProviderJSP.addAllAdapters: " + (end - start)); //$NON-NLS-1$ - } - } - - public void inputDocumentAboutToBeChanged(IDocument oldInput, IDocument newInput) { - // if folding is enabled and new document is going to be a totally - // different document, disable projection - if (fDocument != null && fDocument != newInput) { - // disable projection and disconnect everything - projectionDisabled(); - fProjectionNeedsToBeEnabled = true; - } - } - - public void inputDocumentChanged(IDocument oldInput, IDocument newInput) { - // if projection was previously enabled before input document changed - // and new document is different than old document - if (fProjectionNeedsToBeEnabled && fDocument == null && newInput != null) { - projectionEnabled(); - fProjectionNeedsToBeEnabled = false; - } - } - - /** - * Disconnect this IStructuredTextFoldingProvider from projection viewer - */ - public void uninstall() { - if (isInstalled()) { - projectionDisabled(); - - fViewer.removeProjectionListener(this); - fViewer.removeTextInputListener(this); - fViewer = null; - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/registry/AdapterFactoryProviderForJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/registry/AdapterFactoryProviderForJSP.java deleted file mode 100644 index 0ad8b15a7a..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/registry/AdapterFactoryProviderForJSP.java +++ /dev/null @@ -1,73 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.registry; - -import org.eclipse.jst.jsp.core.internal.modelhandler.ModelHandlerForJSP; -import org.eclipse.wst.html.ui.internal.contentoutline.JFaceNodeAdapterFactoryForHTML; -import org.eclipse.wst.sse.core.internal.PropagatingAdapter; -import org.eclipse.wst.sse.core.internal.ltk.modelhandler.IDocumentTypeHandler; -import org.eclipse.wst.sse.core.internal.model.FactoryRegistry; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.ui.internal.contentoutline.IJFaceNodeAdapter; -import org.eclipse.wst.sse.ui.internal.provisional.registry.AdapterFactoryProvider; -import org.eclipse.wst.sse.ui.internal.util.Assert; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - -public class AdapterFactoryProviderForJSP implements AdapterFactoryProvider { - - /* - * @see AdapterFactoryProvider#addAdapterFactories(IStructuredModel) - */ - public void addAdapterFactories(IStructuredModel structuredModel) { - // these are the main factories, on model's factory registry - addContentBasedFactories(structuredModel); - // ------- - // Must update/add to propagating adapters here too - addPropagatingAdapters(structuredModel); - } - - protected void addContentBasedFactories(IStructuredModel structuredModel) { - FactoryRegistry factoryRegistry = structuredModel.getFactoryRegistry(); - Assert.isNotNull(factoryRegistry, "Program Error: client caller must ensure model has factory registry"); //$NON-NLS-1$ - INodeAdapterFactory factory = null; - factory = factoryRegistry.getFactoryFor(IJFaceNodeAdapter.class); - if (factory == null) { - factory = new JFaceNodeAdapterFactoryForHTML(IJFaceNodeAdapter.class, true); - factoryRegistry.addFactory(factory); - } - - ModelHandlerForJSP.ensureTranslationAdapterFactory(structuredModel); - } - - protected void addPropagatingAdapters(IStructuredModel structuredModel) { - - if (structuredModel instanceof IDOMModel) { - IDOMModel xmlModel = (IDOMModel) structuredModel; - IDOMDocument document = xmlModel.getDocument(); - PropagatingAdapter propagatingAdapter = (PropagatingAdapter) document.getAdapterFor(PropagatingAdapter.class); - if (propagatingAdapter != null) { - // what to do? - } - } - } - - /* - * @see AdapterFactoryProvider#isFor(ContentTypeDescription) - */ - public boolean isFor(IDocumentTypeHandler contentTypeDescription) { - return (contentTypeDescription instanceof ModelHandlerForJSP); - } - - public void reinitializeFactories(IStructuredModel structuredModel) { - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/IStyleConstantsJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/IStyleConstantsJSP.java deleted file mode 100644 index 2b81bf80d4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/IStyleConstantsJSP.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.eclipse.jst.jsp.ui.internal.style; - -public interface IStyleConstantsJSP { - public static final String JSP_CONTENT = "jsp_content"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/LineStyleProviderForJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/LineStyleProviderForJSP.java deleted file mode 100644 index d0418cfb41..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/LineStyleProviderForJSP.java +++ /dev/null @@ -1,224 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.sse.ui.internal.provisional.style.AbstractLineStyleProvider; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -public class LineStyleProviderForJSP extends AbstractLineStyleProvider implements LineStyleProvider{ - - private String fLanguage = null; - - // private static final String JAVA = "java"; //$NON-NLS-1$ - // private static final String[] JAVASCRIPT_LANGUAGE_KEYS = new String[] { - // "javascript", "javascript1.0", "javascript1.1_3", "javascript1.2", - // "javascript1.3", "javascript1.4", "javascript1.5", "javascript1.6", - // "jscript", "sashscript" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - // //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ - // //$NON-NLS-9$ //$NON-NLS-10$ - - public LineStyleProviderForJSP() { - super(); - } - - protected TextAttribute getAttributeFor(ITextRegion region) { - /** - * a method to centralize all the "sytle rules" for regions - */ - TextAttribute result = null; - // not sure why this is coming through null, but just to catch it - if (region == null) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.CDATA_TEXT); - } - else { - - if (result == null) { - String type = region.getType(); - if ((type == DOMJSPRegionContexts.JSP_SCRIPTLET_OPEN) || (type == DOMJSPRegionContexts.JSP_DECLARATION_OPEN) || (type == DOMJSPRegionContexts.JSP_EXPRESSION_OPEN) || (type == DOMJSPRegionContexts.JSP_DIRECTIVE_OPEN) || (type == DOMJSPRegionContexts.JSP_DIRECTIVE_CLOSE) || (type == DOMJSPRegionContexts.JSP_CLOSE)) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - } - else if (type == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME || type == DOMJSPRegionContexts.JSP_ROOT_TAG_NAME) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_NAME); - } - else if ((type == DOMJSPRegionContexts.JSP_COMMENT_OPEN) || (type == DOMJSPRegionContexts.JSP_COMMENT_CLOSE)) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.COMMENT_BORDER); - } - else if (type == DOMJSPRegionContexts.JSP_COMMENT_TEXT) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.COMMENT_TEXT); - } - // ============ These are in common with XML --- (for XML form - // of tags) - // Note: this assume's this provider is only called for - // true JSP Nodes. If its called for others, then this will - // cause their tag names to be highlighted too! - // Further checks could be done to prevent that, but doesn't - // seem worth it, since if adpaters factories are working - // right, - // then wouldn't be needed. - else if (type == DOMRegionContext.XML_TAG_NAME) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_NAME); - } - else if ((type == DOMRegionContext.XML_TAG_OPEN) || (type == DOMRegionContext.XML_END_TAG_OPEN) || (type == DOMRegionContext.XML_TAG_CLOSE) || (type == DOMRegionContext.XML_EMPTY_TAG_CLOSE)) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_BORDER); - } - else if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_NAME) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - } - else if ((type == DOMRegionContext.XML_TAG_ATTRIBUTE_VALUE) || (type == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || (type == DOMJSPRegionContexts.XML_TAG_ATTRIBUTE_VALUE_SQUOTE)) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - } - else if (type == DOMRegionContext.XML_TAG_ATTRIBUTE_EQUALS) { - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS); - } - - // DMW: added 9/1/2002 Undefined color may need addjustment :) - else if (type == DOMRegionContext.UNDEFINED) - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.XML_CONTENT); - - else if (type == DOMRegionContext.WHITE_SPACE) - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.XML_CONTENT); - // DMW added 8/30/2002 -- should provide JSP specific - // preference for "custom tag content" (both tag dependent, - // BLOCKED_TEXT, and not, XML CONTENT) - else if (type == DOMRegionContext.XML_CONTENT) - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.XML_CONTENT); - else if (type == DOMRegionContext.BLOCK_TEXT) - result = (TextAttribute) getTextAttributes().get(IStyleConstantsXML.CDATA_TEXT); - } - } - // default, return null to signal "not handled" - // in which case, other factories should be tried - return result; - } - - - protected IPreferenceStore getColorPreferences() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - - protected void loadColors() { - addTextAttribute(IStyleConstantsXML.TAG_NAME); - addTextAttribute(IStyleConstantsXML.TAG_BORDER); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS); - addTextAttribute(IStyleConstantsXML.COMMENT_BORDER); - addTextAttribute(IStyleConstantsXML.COMMENT_TEXT); - addTextAttribute(IStyleConstantsXML.CDATA_BORDER); - addTextAttribute(IStyleConstantsXML.CDATA_TEXT); - addTextAttribute(IStyleConstantsXML.DECL_BORDER); - addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID); - addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF); - addTextAttribute(IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF); - addTextAttribute(IStyleConstantsXML.DOCTYPE_NAME); - addTextAttribute(IStyleConstantsXML.PI_CONTENT); - addTextAttribute(IStyleConstantsXML.PI_BORDER); - addTextAttribute(IStyleConstantsXML.XML_CONTENT); - addTextAttribute(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - } - - protected void handlePropertyChange(PropertyChangeEvent event) { - String styleKey = null; - - if (event != null) { - String prefKey = event.getProperty(); - // check if preference changed is a style preference - if (IStyleConstantsXML.TAG_NAME.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_NAME; - } - else if (IStyleConstantsXML.TAG_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_BORDER; - } - else if (IStyleConstantsXML.TAG_ATTRIBUTE_NAME.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_NAME; - } - else if (IStyleConstantsXML.TAG_ATTRIBUTE_VALUE.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_VALUE; - } - else if (IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_EQUALS; - } - else if (IStyleConstantsXML.COMMENT_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsXML.COMMENT_BORDER; - } - else if (IStyleConstantsXML.COMMENT_TEXT.equals(prefKey)) { - styleKey = IStyleConstantsXML.COMMENT_TEXT; - } - else if (IStyleConstantsXML.CDATA_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsXML.CDATA_BORDER; - } - else if (IStyleConstantsXML.CDATA_TEXT.equals(prefKey)) { - styleKey = IStyleConstantsXML.CDATA_TEXT; - } - else if (IStyleConstantsXML.DECL_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsXML.DECL_BORDER; - } - else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID.equals(prefKey)) { - styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID; - } - else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF.equals(prefKey)) { - styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_PUBREF; - } - else if (IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF.equals(prefKey)) { - styleKey = IStyleConstantsXML.DOCTYPE_EXTERNAL_ID_SYSREF; - } - else if (IStyleConstantsXML.DOCTYPE_NAME.equals(prefKey)) { - styleKey = IStyleConstantsXML.DOCTYPE_NAME; - } - else if (IStyleConstantsXML.PI_CONTENT.equals(prefKey)) { - styleKey = IStyleConstantsXML.PI_CONTENT; - } - else if (IStyleConstantsXML.PI_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsXML.PI_BORDER; - } - else if (IStyleConstantsXML.XML_CONTENT.equals(prefKey)) { - styleKey = IStyleConstantsXML.XML_CONTENT; - } - else if (IStyleConstantsHTML.SCRIPT_AREA_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsHTML.SCRIPT_AREA_BORDER; - } - } - - if (styleKey != null) { - // overwrite style preference with new value - addTextAttribute(styleKey); - super.handlePropertyChange(event); - } - } - - /** - * Returns the language. - * - * @return String - */ - public String getLanguage() { - return fLanguage; - } - - /** - * Sets the language. - * - * @param language - * The language to set - */ - public void setLanguage(String language) { - this.fLanguage = language; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/IStyleConstantsJSPJava.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/IStyleConstantsJSPJava.java deleted file mode 100644 index 8ff7724075..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/IStyleConstantsJSPJava.java +++ /dev/null @@ -1,20 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.style.java; - -public interface IStyleConstantsJSPJava { - String JAVA_KEYWORD = "keyword"; //$NON-NLS-1$ - String JAVA_SINGLE_LINE_COMMENT = "single_line_comment"; //$NON-NLS-1$ - String JAVA_STRING = "string"; //$NON-NLS-1$ - String JAVA_DEFAULT = "default"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaCodeScanner.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaCodeScanner.java deleted file mode 100644 index 6c95b1352d..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaCodeScanner.java +++ /dev/null @@ -1,106 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.java; - - - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.text.rules.EndOfLineRule; -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.MultiLineRule; -import org.eclipse.jface.text.rules.SingleLineRule; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.text.rules.WordRule; - -/** - * A Java code scanner. - */ -class JavaCodeScanner extends org.eclipse.jface.text.rules.RuleBasedScanner { - private IToken fKeywordToken; - private IToken fTypeToken; - private IToken fStringToken; - private IToken fSingleLineCommentToken; - private IToken fDefaultToken; - - private static String[] fgKeywords = {"abstract", //$NON-NLS-1$ - "break", //$NON-NLS-1$ - "case", "catch", "class", "continue", //$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "default", "do", //$NON-NLS-2$//$NON-NLS-1$ - "else", "extends", //$NON-NLS-2$//$NON-NLS-1$ - "final", "finally", "for", //$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "if", "implements", "import", "instanceof", "interface", //$NON-NLS-5$//$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "native", "new", //$NON-NLS-2$//$NON-NLS-1$ - "package", "private", "protected", "public", //$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "return", //$NON-NLS-1$ - "static", "super", "switch", "synchronized", //$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "this", "throw", "throws", "transient", "try", //$NON-NLS-5$//$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - "volatile", //$NON-NLS-1$ - "while", //$NON-NLS-1$ - "strictfp",//$NON-NLS-1$ - }; - private static String[] fgTypes = {"void", "boolean", "char", "byte", "short", "int", "long", "float", "double"};//$NON-NLS-9$//$NON-NLS-8$//$NON-NLS-7$//$NON-NLS-6$//$NON-NLS-5$//$NON-NLS-4$//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - private static String[] fgConstants = {"false", "null", "true"};//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$ - - /** - * Creates a Java code scanner - */ - public JavaCodeScanner() { - super(); - } - - public void initializeRules() { - List rules = new ArrayList(); - - // Add rule for multiple line comments. - rules.add(new MultiLineRule("/*", "*/", fSingleLineCommentToken));//$NON-NLS-1$ //$NON-NLS-2$ - - // Add rule for single line comments. - rules.add(new EndOfLineRule("//", fSingleLineCommentToken));//$NON-NLS-1$ - - // Add rule for strings and character constants. - rules.add(new SingleLineRule("\"", "\"", fStringToken, '\\'));//$NON-NLS-2$//$NON-NLS-1$ - rules.add(new SingleLineRule("'", "'", fStringToken, '\\'));//$NON-NLS-2$//$NON-NLS-1$ - - // Add generic whitespace rule. - //rules.add(new WhitespaceRule(new JavaWhitespaceDetector())); - - // Add word rule for keywords, types, and constants. - WordRule wordRule = new WordRule(new JavaWordDetector(), fDefaultToken); - for (int i = 0; i < fgKeywords.length; i++) - wordRule.addWord(fgKeywords[i], fKeywordToken); - for (int i = 0; i < fgTypes.length; i++) - wordRule.addWord(fgTypes[i], fTypeToken); - for (int i = 0; i < fgConstants.length; i++) - wordRule.addWord(fgConstants[i], fTypeToken); - rules.add(wordRule); - - - IRule[] result = new IRule[rules.size()]; - rules.toArray(result); - setRules(result); - } - - public void setTokenData(String tokenKey, Object data) { - if (tokenKey == IStyleConstantsJSPJava.JAVA_KEYWORD) { - fKeywordToken = new Token(data); - fTypeToken = new Token(data); - } else if (tokenKey == IStyleConstantsJSPJava.JAVA_STRING) { - fStringToken = new Token(data); - } else if (tokenKey == IStyleConstantsJSPJava.JAVA_SINGLE_LINE_COMMENT) { - fSingleLineCommentToken = new Token(data); - } else if (tokenKey == IStyleConstantsJSPJava.JAVA_DEFAULT) { - fDefaultToken = new Token(data); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaColorProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaColorProvider.java deleted file mode 100644 index d0a2386717..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaColorProvider.java +++ /dev/null @@ -1,82 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.java; - -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceConverter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.RGB; - -/** - * Colors used in the Java editor - */ -public class JavaColorProvider { - - // people should not be setting these, even though they are currently not final - public static RGB MULTI_LINE_COMMENT = new RGB(128, 0, 0); - public static RGB SINGLE_LINE_COMMENT = new RGB(128, 128, 0); - public static RGB KEYWORD = new RGB(0, 0, 128); - public static RGB TYPE = new RGB(0, 0, 128); - public static RGB STRING = new RGB(0, 128, 0); - public static RGB DEFAULT = new RGB(0, 0, 0); - public static RGB JAVADOC_KEYWORD = new RGB(0, 128, 0); - public static RGB JAVADOC_TAG = new RGB(128, 128, 128); - public static RGB JAVADOC_LINK = new RGB(128, 128, 128); - public static RGB JAVADOC_DEFAULT = new RGB(0, 128, 128); - - public static int MULTI_LINE_COMMENT_BOLD = SWT.NORMAL; - public static int SINGLE_LINE_COMMENT_BOLD = SWT.NORMAL; - public static int KEYWORD_BOLD = SWT.BOLD; - public static int TYPE_BOLD = SWT.BOLD; - public static int STRING_BOLD = SWT.NORMAL; - public static int DEFAULT_BOLD = SWT.NORMAL; - public static int JAVADOC_KEYWORD_BOLD = SWT.BOLD; - public static int JAVADOC_TAG_BOLD = SWT.NORMAL; - public static int JAVADOC_LINK_BOLD = SWT.NORMAL; - public static int JAVADOC_DEFAULT_BOLD = SWT.NORMAL; - - private static JavaColorProvider fInstance = null; - - public static JavaColorProvider getInstance() { - if (fInstance == null) { - fInstance = new JavaColorProvider(); - } - return fInstance; - } - - /** - * Use colors from JDT plugin - */ - public void loadJavaColors() { - IPreferenceStore jdtStore = PreferenceConstants.getPreferenceStore(); - MULTI_LINE_COMMENT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_COLOR); - SINGLE_LINE_COMMENT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR); - KEYWORD = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); - TYPE = KEYWORD; - STRING = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_STRING_COLOR); - DEFAULT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); - JAVADOC_KEYWORD = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_KEYWORD_COLOR); - JAVADOC_TAG = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_TAG_COLOR); - JAVADOC_LINK = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_LINKS_COLOR); - JAVADOC_DEFAULT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_DEFAULT_COLOR); - - MULTI_LINE_COMMENT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NORMAL; - SINGLE_LINE_COMMENT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NORMAL; - KEYWORD_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD) ? SWT.BOLD : SWT.NORMAL; - TYPE_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD) ? SWT.BOLD : SWT.NORMAL; - STRING_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_STRING_BOLD) ? SWT.BOLD : SWT.NORMAL; - DEFAULT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_TAG_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_TAG_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_LINK_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_LINKS_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_DEFAULT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_DEFAULT_BOLD) ? SWT.BOLD : SWT.NORMAL; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWhitespaceDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWhitespaceDetector.java deleted file mode 100644 index 663c81a8ea..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWhitespaceDetector.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.java; - - - -/** - * A java aware white space detector. - */ -public class JavaWhitespaceDetector implements org.eclipse.jface.text.rules.IWhitespaceDetector { - - /** - * @see org.eclipse.jface.text.rules.IWhitespaceDetector#isWhitespace - */ - public boolean isWhitespace(char c) { - return Character.isWhitespace(c); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWordDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWordDetector.java deleted file mode 100644 index 80f6378984..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/JavaWordDetector.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.java; - - -/** - * A Java aware word detector. - */ -public class JavaWordDetector implements org.eclipse.jface.text.rules.IWordDetector { - - /** - * @see org.eclipse.jface.text.rules.IWordDetector#isWordIdentifierPart - */ - public boolean isWordPart(char c) { - return Character.isJavaIdentifierPart(c); - } - - /** - * @see org.eclipse.jface.text.rules.IWordDetector#isWordIdentifierStart - */ - public boolean isWordStart(char c) { - return Character.isJavaIdentifierStart(c); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java deleted file mode 100644 index b7e63a72a4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/java/LineStyleProviderForJava.java +++ /dev/null @@ -1,428 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.java; - -import java.util.Collection; -import java.util.HashMap; - -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceConverter; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyleRange; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper; -import org.eclipse.wst.sse.ui.internal.provisional.style.Highlighter; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; -import org.eclipse.wst.sse.ui.internal.util.EditorUtility; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -// Note: many of the methods in this class were based on (or copied from) those -// found in the example Java Editor -public class LineStyleProviderForJava implements LineStyleProvider{ - private class PropertyChangeListener implements IPropertyChangeListener { - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - // have to do it this way so others can override the method - handlePropertyChange(event); - } - } - - private IDocument fDocument; - private Highlighter fHighlighter; - private boolean fIsInitialized = false; - private PropertyChangeListener fPreferenceListener = new PropertyChangeListener(); - /** The scanner it uses */ - private JavaCodeScanner fScanner; - /** Contains all text attributes pretaining to this line style provider */ - private HashMap fTextAttributes = null; - - public LineStyleProviderForJava() { - super(); - fScanner = new JavaCodeScanner(); - } - - /** - * Adds style information to the given text presentation. - * - * @param presentation the text presentation to be extended - * @param offset the offset of the range to be styled - * @param length the length of the range to be styled - * @param attr the attribute describing the style of the range to be styled - */ - private void addRange(Collection presentation, int offset, int length, TextAttribute attr) { - // support for user defined backgroud for JSP scriptlet regions - TextAttribute ta = (TextAttribute)getTextAttributes().get(IStyleConstantsJSP.JSP_CONTENT); - Color bgColor = ta.getBackground(); - if (bgColor == null) - bgColor = attr.getBackground(); - StyleRange result = new StyleRange(offset, length, attr.getForeground(), bgColor, attr.getStyle()); - if((attr.getStyle() & TextAttribute.STRIKETHROUGH) != 0) { - result.strikeout = true; - } - if((attr.getStyle() & TextAttribute.UNDERLINE) != 0) { - result.underline = true; - } - presentation.add(result); - } - - /** - * Looks up the colorKey in the preference store and adds the style - * information to list of TextAttributes - * - * @param colorKey - */ - private void addTextAttribute(String colorKey) { - if (getColorPreferences() != null) { - String prefString = getColorPreferences().getString(colorKey); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - RGB foreground = ColorHelper.toRGB(stylePrefs[0]); - RGB background = ColorHelper.toRGB(stylePrefs[1]); - boolean bold = Boolean.valueOf(stylePrefs[2]).booleanValue(); - boolean italic = Boolean.valueOf(stylePrefs[3]).booleanValue(); - boolean strikethrough = Boolean.valueOf(stylePrefs[4]).booleanValue(); - boolean underline = Boolean.valueOf(stylePrefs[5]).booleanValue(); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italic) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - TextAttribute createTextAttribute = createTextAttribute(foreground, background, style); - getTextAttributes().put(colorKey, createTextAttribute); - } - } - } - - /** - * Looks up the colorKey in the preference store and adds the style - * information to list of TextAttributes - * - * @param colorKey - */ - private void addJavaTextAttribute(String colorKey) { - IPreferenceStore store = getJavaColorPreferences(); - if (store != null && colorKey != null) { - TextAttribute ta = null; - if (colorKey == IStyleConstantsJSPJava.JAVA_KEYWORD) { - // keyword - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } else if (colorKey == IStyleConstantsJSPJava.JAVA_STRING) { - // string - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_STRING_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_STRING_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_STRING_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_STRING_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_STRING_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } else if (colorKey == IStyleConstantsJSPJava.JAVA_SINGLE_LINE_COMMENT) { - // single line comment - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } else if (colorKey == IStyleConstantsJSPJava.JAVA_DEFAULT) { - // default - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } - if (ta != null) { - getTextAttributes().put(colorKey, ta); - fScanner.setTokenData(colorKey, ta); - } - } - } - - private TextAttribute createTextAttribute(RGB foreground, RGB background, int style) { - return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, style); - } - - /** - * Returns the hashtable containing all the text attributes for this line - * style provider. Lazily creates a hashtable if one has not already been - * created. - * - * @return - */ - private HashMap getTextAttributes() { - if (fTextAttributes == null) { - fTextAttributes = new HashMap(); - loadColors(); - } - return fTextAttributes; - } - - /** - * Returns a text attribute encoded in the given token. If the token's - * data is not <code>null</code> and a text attribute it is assumed that - * it is the encoded text attribute. It returns the default text attribute - * if there is no encoded text attribute found. - * - * @param token the token whose text attribute is to be determined - * @return the token's text attribute - */ - private TextAttribute getTokenTextAttribute(IToken token) { - TextAttribute ta = null; - - Object data = token.getData(); - if (data instanceof TextAttribute) - ta = (TextAttribute)data; - else { - ta = (TextAttribute)getTextAttributes().get(IStyleConstantsJSPJava.JAVA_DEFAULT); - } - return ta; - } - - public void init(IStructuredDocument document, Highlighter highlighter) { - fDocument = document; - fHighlighter = highlighter; - - if (fIsInitialized) - return; - - registerPreferenceListener(); - - fIsInitialized = true; - } - - private void loadColors() { - addTextAttribute(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - addTextAttribute(IStyleConstantsJSP.JSP_CONTENT); - - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_KEYWORD); - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_STRING); - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_SINGLE_LINE_COMMENT); - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_DEFAULT); - - fScanner.initializeRules(); - } - - protected void handlePropertyChange(PropertyChangeEvent event) { - String styleKey = null; - String javaStyleKey = null; - - if (event != null) { - String prefKey = event.getProperty(); - // check if preference changed is a style preference - if (IStyleConstantsHTML.SCRIPT_AREA_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsHTML.SCRIPT_AREA_BORDER; - } - else if (IStyleConstantsXML.TAG_ATTRIBUTE_NAME.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_NAME; - } - else if (IStyleConstantsXML.TAG_ATTRIBUTE_VALUE.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_VALUE; - } else if (IStyleConstantsJSP.JSP_CONTENT.equals(prefKey)) { - styleKey = IStyleConstantsJSP.JSP_CONTENT; - } else if (PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD.equals(prefKey))|| (PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPJava.JAVA_KEYWORD; - } else if (PreferenceConstants.EDITOR_STRING_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_STRING_BOLD.equals(prefKey))|| (PreferenceConstants.EDITOR_STRING_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPJava.JAVA_STRING; - } else if (PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD.equals(prefKey))|| (PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPJava.JAVA_SINGLE_LINE_COMMENT; - } else if (PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD.equals(prefKey))|| (PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPJava.JAVA_DEFAULT; - } - } - - if (styleKey != null) { - // overwrite style preference with new value - addTextAttribute(styleKey); - } - if (javaStyleKey != null) { - // overwrite style preference with new value - addJavaTextAttribute(javaStyleKey); - fScanner.initializeRules(); - } - if (styleKey != null || javaStyleKey != null) { - // force a full update of the text viewer - fHighlighter.refreshDisplay(); - } - } - - public boolean prepareRegions(ITypedRegion typedRegion, int ssssrequestedStart, int ssssrequestedLength, Collection holdResults) { - boolean result = true; - try { - // ideally, eventually, we'll have a "virtualDocument" we can - // refer to, but for now ... we'll simple rescan the one region. - // use simple adjustment (since "sub-content" starts at 0 - int offsetAdjustment = typedRegion.getOffset(); - String content = fDocument.get(typedRegion.getOffset(), typedRegion.getLength()); - IDocument document = new Document(content); - - int lastStart = 0; - int length = 0; - IToken lastToken = Token.UNDEFINED; - - int remainingLength = typedRegion.getLength(); - fScanner.setRange(document, lastStart, remainingLength); - - while (true) { - IToken token = fScanner.nextToken(); - - if (token.isEOF()) { - if (!lastToken.isUndefined() && length != 0) - addRange(holdResults, lastStart + offsetAdjustment, length, getTokenTextAttribute(lastToken)); - break; - } - - if (token.isWhitespace()) { - length += fScanner.getTokenLength(); - continue; - } - - if (lastToken.isUndefined()) { - lastToken = token; - length += fScanner.getTokenLength(); - continue; - } - - if (token != lastToken) { - addRange(holdResults, lastStart + offsetAdjustment, length, getTokenTextAttribute(lastToken)); - lastToken = token; - lastStart = fScanner.getTokenOffset(); - length = fScanner.getTokenLength(); - continue; - } - - length += fScanner.getTokenLength(); - } - } - catch (BadLocationException e) { - // shouldn't happen, but we don't want it to stop other highlighting, if it does. - result = false; - } - return result; - } - - private void registerPreferenceListener() { - getColorPreferences().addPropertyChangeListener(fPreferenceListener); - getJavaColorPreferences().addPropertyChangeListener(fPreferenceListener); - } - - public void release() { - unregisterPreferenceManager(); - if (fTextAttributes != null) { - fTextAttributes.clear(); - fTextAttributes = null; - } - fIsInitialized = false; - } - - private void unregisterPreferenceManager() { - getColorPreferences().removePropertyChangeListener(fPreferenceListener); - getJavaColorPreferences().removePropertyChangeListener(fPreferenceListener); - } - - private IPreferenceStore getColorPreferences() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - - private IPreferenceStore getJavaColorPreferences() { - return PreferenceConstants.getPreferenceStore(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/IStyleConstantsJSPEL.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/IStyleConstantsJSPEL.java deleted file mode 100644 index b2c4829842..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/IStyleConstantsJSPEL.java +++ /dev/null @@ -1,18 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * Jens Lukowski/Innoopract - initial renaming/restructuring - *******************************************************************************/ - -package org.eclipse.jst.jsp.ui.internal.style.jspel; - -public interface IStyleConstantsJSPEL { - String EL_KEYWORD = "keyword"; //$NON-NLS-1$ - String EL_DEFAULT = "default"; //$NON-NLS-1$ -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELCodeScanner.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELCodeScanner.java deleted file mode 100644 index 7534b9bfd9..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELCodeScanner.java +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.jspel; - - - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.text.rules.IRule; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.text.rules.WhitespaceRule; -import org.eclipse.jface.text.rules.WordRule; - -/** - * A Java code scanner. - */ -public class JSPELCodeScanner extends org.eclipse.jface.text.rules.RuleBasedScanner { - private IToken fKeywordToken; - private IToken fTypeToken; - private IToken fDefaultToken; - - private static String[] fgKeywords = { - "and", //$NON-NLS-1$ - "did", //$NON-NLS-1$ - "div", //$NON-NLS-1$ - "empty", //$NON-NLS-1$ - "eq", //$NON-NLS-1$ - "ge", //$NON-NLS-1$ - "gt", //$NON-NLS-1$ - "or", //$NON-NLS-1$ - "le", //$NON-NLS-1$ - "lt", //$NON-NLS-1$ - "mod", //$NON-NLS-1$ - "ne", //$NON-NLS-1$ - "not" //$NON-NLS-1$ - }; - private static String[] fgConstants = {"false", "true"};//$NON-NLS-2$//$NON-NLS-1$ - - /** - * Creates a Java code scanner - */ - public JSPELCodeScanner() { - super(); - } - - public void initializeRules() { - List rules = new ArrayList(); - - // Add generic whitespace rule. - rules.add(new WhitespaceRule(new JSPELWhitespaceDetector())); - - // Add word rule for keywords, types, and constants. - WordRule wordRule = new WordRule(new JSPELWordDetector(), fDefaultToken); - for (int i = 0; i < fgKeywords.length; i++) - wordRule.addWord(fgKeywords[i], fKeywordToken); - for (int i = 0; i < fgConstants.length; i++) - wordRule.addWord(fgConstants[i], fTypeToken); - rules.add(wordRule); - - IRule[] result = new IRule[rules.size()]; - rules.toArray(result); - setRules(result); - } - - public void setTokenData(String tokenKey, Object data) { - if (tokenKey == IStyleConstantsJSPEL.EL_KEYWORD) { - fKeywordToken = new Token(data); - fTypeToken = new Token(data); - } else if (tokenKey == IStyleConstantsJSPEL.EL_DEFAULT) { - fDefaultToken = new Token(data); - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELColorProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELColorProvider.java deleted file mode 100644 index 01178a2da1..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELColorProvider.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.jspel; - -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceConverter; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.RGB; - -/** - * Colors used in the Java editor - */ -public class JSPELColorProvider { - - // people should not be setting these, even though they are currently not final - public static RGB MULTI_LINE_COMMENT = new RGB(128, 0, 0); - public static RGB SINGLE_LINE_COMMENT = new RGB(128, 128, 0); - public static RGB KEYWORD = new RGB(0, 0, 128); - public static RGB TYPE = new RGB(0, 0, 128); - public static RGB STRING = new RGB(0, 128, 0); - public static RGB DEFAULT = new RGB(0, 0, 0); - public static RGB JAVADOC_KEYWORD = new RGB(0, 128, 0); - public static RGB JAVADOC_TAG = new RGB(128, 128, 128); - public static RGB JAVADOC_LINK = new RGB(128, 128, 128); - public static RGB JAVADOC_DEFAULT = new RGB(0, 128, 128); - - public static int MULTI_LINE_COMMENT_BOLD = SWT.NORMAL; - public static int SINGLE_LINE_COMMENT_BOLD = SWT.NORMAL; - public static int KEYWORD_BOLD = SWT.BOLD; - public static int TYPE_BOLD = SWT.BOLD; - public static int STRING_BOLD = SWT.NORMAL; - public static int DEFAULT_BOLD = SWT.NORMAL; - public static int JAVADOC_KEYWORD_BOLD = SWT.BOLD; - public static int JAVADOC_TAG_BOLD = SWT.NORMAL; - public static int JAVADOC_LINK_BOLD = SWT.NORMAL; - public static int JAVADOC_DEFAULT_BOLD = SWT.NORMAL; - - /** - * @deprecated all editors use same - */ - public static RGB EDITOR_BACKGROUND = new RGB(255, 255, 255); - /** - * @deprecated all editors use same - */ - public static boolean EDITOR_CURRENT_LINE = true; - /** - * @deprecated all editors use same - */ - public static RGB EDITOR_CURRENT_LINE_COLOR = new RGB(128, 128, 128); - - private static JSPELColorProvider fInstance = null; - - public static JSPELColorProvider getInstance() { - if (fInstance == null) { - fInstance = new JSPELColorProvider(); - } - return fInstance; - } - - /** - * Use colors from JDT plugin - */ - public void loadJavaColors() { - - IPreferenceStore jdtStore = PreferenceConstants.getPreferenceStore(); - MULTI_LINE_COMMENT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_COLOR); - SINGLE_LINE_COMMENT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_COLOR); - KEYWORD = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); - TYPE = KEYWORD; - STRING = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_STRING_COLOR); - DEFAULT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); - JAVADOC_KEYWORD = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_KEYWORD_COLOR); - JAVADOC_TAG = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_TAG_COLOR); - JAVADOC_LINK = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_LINKS_COLOR); - JAVADOC_DEFAULT = PreferenceConverter.getColor(jdtStore, PreferenceConstants.EDITOR_JAVADOC_DEFAULT_COLOR); - - MULTI_LINE_COMMENT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_MULTI_LINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NORMAL; - SINGLE_LINE_COMMENT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_SINGLE_LINE_COMMENT_BOLD) ? SWT.BOLD : SWT.NORMAL; - KEYWORD_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD) ? SWT.BOLD : SWT.NORMAL; - TYPE_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD) ? SWT.BOLD : SWT.NORMAL; - STRING_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_STRING_BOLD) ? SWT.BOLD : SWT.NORMAL; - DEFAULT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_TAG_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_TAG_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_LINK_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_LINKS_BOLD) ? SWT.BOLD : SWT.NORMAL; - JAVADOC_DEFAULT_BOLD = jdtStore.getBoolean(PreferenceConstants.EDITOR_JAVADOC_DEFAULT_BOLD) ? SWT.BOLD : SWT.NORMAL; - -// EDITOR_BACKGROUND = new RGB(255, 255, 255); - -// IPreferenceStore sseStore = SSEUIPlugin.getDefault().getPreferenceStore(); -// EDITOR_CURRENT_LINE = sseStore.getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE); -// EDITOR_CURRENT_LINE_COLOR = PreferenceConverter.getColor(sseStore, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWhitespaceDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWhitespaceDetector.java deleted file mode 100644 index e8997007e4..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWhitespaceDetector.java +++ /dev/null @@ -1,26 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.jspel; - - - -/** - * A java aware white space detector. - */ -public class JSPELWhitespaceDetector implements org.eclipse.jface.text.rules.IWhitespaceDetector { - - /** - * @see org.eclipse.jface.text.rules.IWhitespaceDetector#isWhitespace - */ - public boolean isWhitespace(char c) { - return Character.isWhitespace(c); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWordDetector.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWordDetector.java deleted file mode 100644 index a10a7ab0da..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/JSPELWordDetector.java +++ /dev/null @@ -1,32 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.jspel; - - -/** - * A Java aware word detector. - */ -public class JSPELWordDetector implements org.eclipse.jface.text.rules.IWordDetector { - - /** - * @see org.eclipse.jface.text.rules.IWordDetector#isWordIdentifierPart - */ - public boolean isWordPart(char c) { - return Character.isJavaIdentifierPart(c); - } - - /** - * @see org.eclipse.jface.text.rules.IWordDetector#isWordIdentifierStart - */ - public boolean isWordStart(char c) { - return Character.isJavaIdentifierStart(c); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java deleted file mode 100644 index 4acabe5893..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/style/jspel/LineStyleProviderForJSPEL.java +++ /dev/null @@ -1,376 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.style.jspel; - -import java.util.Collection; -import java.util.HashMap; - -import org.eclipse.jdt.ui.PreferenceConstants; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferenceConverter; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.ITypedRegion; -import org.eclipse.jface.text.TextAttribute; -import org.eclipse.jface.text.rules.IToken; -import org.eclipse.jface.text.rules.Token; -import org.eclipse.jface.util.IPropertyChangeListener; -import org.eclipse.jface.util.PropertyChangeEvent; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.style.IStyleConstantsJSP; -import org.eclipse.jst.jsp.ui.internal.style.java.IStyleConstantsJSPJava; -import org.eclipse.swt.SWT; -import org.eclipse.swt.custom.StyleRange; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Display; -import org.eclipse.wst.html.ui.internal.style.IStyleConstantsHTML; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.ui.internal.preferences.ui.ColorHelper; -import org.eclipse.wst.sse.ui.internal.provisional.style.Highlighter; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; -import org.eclipse.wst.sse.ui.internal.util.EditorUtility; -import org.eclipse.wst.xml.ui.internal.style.IStyleConstantsXML; - -// Note: many of the methods in this class were based on (or copied from) -// those -// found in the example Java Editor -public class LineStyleProviderForJSPEL implements LineStyleProvider { - private class PropertyChangeListener implements IPropertyChangeListener { - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) - */ - public void propertyChange(PropertyChangeEvent event) { - // have to do it this way so others can override the method - handlePropertyChange(event); - } - } - - private IDocument fDocument; - private Highlighter fHighlighter; - private boolean fIsInitialized = false; - private PropertyChangeListener fPreferenceListener = new PropertyChangeListener(); - /** The scanner it uses */ - private JSPELCodeScanner fScanner; - /** Contains all text attributes pretaining to this line style provider */ - private HashMap fTextAttributes = null; - - public LineStyleProviderForJSPEL() { - super(); - fScanner = new JSPELCodeScanner(); - } - - /** - * Adds style information to the given text presentation. - * - * @param presentation - * the text presentation to be extended - * @param offset - * the offset of the range to be styled - * @param length - * the length of the range to be styled - * @param attr - * the attribute describing the style of the range to be styled - */ - private void addRange(Collection presentation, int offset, int length, TextAttribute attr) { - // support for user defined backgroud for JSP scriptlet regions - String styleString = JSPUIPlugin.getDefault().getPreferenceStore().getString(IStyleConstantsJSP.JSP_CONTENT); - String[] prefs = ColorHelper.unpackStylePreferences(styleString); - Color bgColor = (prefs != null && prefs.length == 3 && prefs[1].startsWith("#") && Display.getCurrent() != null) //$NON-NLS-1$ - ? new Color(Display.getCurrent(), ColorHelper.toRGB(prefs[1])) : attr.getBackground(); - - presentation.add(new StyleRange(offset, length, attr.getForeground(), bgColor, attr.getStyle())); - } - - /** - * Looks up the colorKey in the preference store and adds the style - * information to list of TextAttributes - * - * @param colorKey - */ - private void addTextAttribute(String colorKey) { - if (getColorPreferences() != null) { - String prefString = getColorPreferences().getString(colorKey); - String[] stylePrefs = ColorHelper.unpackStylePreferences(prefString); - if (stylePrefs != null) { - RGB foreground = ColorHelper.toRGB(stylePrefs[0]); - RGB background = ColorHelper.toRGB(stylePrefs[1]); - boolean bold = Boolean.valueOf(stylePrefs[2]).booleanValue(); - boolean italic = Boolean.valueOf(stylePrefs[3]).booleanValue(); - boolean strikethrough = Boolean.valueOf(stylePrefs[4]).booleanValue(); - boolean underline = Boolean.valueOf(stylePrefs[5]).booleanValue(); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italic) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - TextAttribute createTextAttribute = createTextAttribute(foreground, background, style); - getTextAttributes().put(colorKey, createTextAttribute); - } - } - } - - /** - * Looks up the colorKey in the preference store and adds the style - * information to list of TextAttributes - * - * @param colorKey - */ - private void addJavaTextAttribute(String colorKey) { - IPreferenceStore store = getJavaColorPreferences(); - if (store != null && colorKey != null) { - TextAttribute ta = null; - if (colorKey == IStyleConstantsJSPEL.EL_KEYWORD) { - // keyword - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_KEYWORD_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } else if (colorKey == IStyleConstantsJSPEL.EL_DEFAULT) { - // default - RGB foreground = PreferenceConverter.getColor(store, PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR); - boolean bold = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD); - boolean italics = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC); - boolean strikethrough = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_STRIKETHROUGH); - boolean underline = store.getBoolean(PreferenceConstants.EDITOR_JAVA_DEFAULT_UNDERLINE); - int style = SWT.NORMAL; - if (bold) { - style = style | SWT.BOLD; - } - if (italics) { - style = style | SWT.ITALIC; - } - if (strikethrough) { - style = style | TextAttribute.STRIKETHROUGH; - } - if (underline) { - style = style | TextAttribute.UNDERLINE; - } - - ta = createTextAttribute(foreground, null, style); - } - if (ta != null) { - getTextAttributes().put(colorKey, ta); - fScanner.setTokenData(colorKey, ta); - } - } - } - - private TextAttribute createTextAttribute(RGB foreground, RGB background, int style) { - return new TextAttribute((foreground != null) ? EditorUtility.getColor(foreground) : null, (background != null) ? EditorUtility.getColor(background) : null, style); - } - - /** - * Returns the hashtable containing all the text attributes for this line - * style provider. Lazily creates a hashtable if one has not already been - * created. - * - * @return - */ - private HashMap getTextAttributes() { - if (fTextAttributes == null) { - fTextAttributes = new HashMap(); - loadColors(); - } - return fTextAttributes; - } - - /** - * Returns a text attribute encoded in the given token. If the token's - * data is not <code>null</code> and a text attribute it is assumed that - * it is the encoded text attribute. It returns the default text attribute - * if there is no encoded text attribute found. - * - * @param token - * the token whose text attribute is to be determined - * @return the token's text attribute - */ - private TextAttribute getTokenTextAttribute(IToken token) { - TextAttribute ta = null; - - Object data = token.getData(); - if (data instanceof TextAttribute) - ta = (TextAttribute) data; - else { - ta = (TextAttribute) getTextAttributes().get(IStyleConstantsJSPJava.JAVA_DEFAULT); - } - return ta; - } - - public void init(IStructuredDocument document, Highlighter highlighter) { - fDocument = document; - fHighlighter = highlighter; - - if (fIsInitialized) - return; - - registerPreferenceListener(); - - fIsInitialized = true; - } - - private void loadColors() { - addTextAttribute(IStyleConstantsHTML.SCRIPT_AREA_BORDER); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_NAME); - addTextAttribute(IStyleConstantsXML.TAG_ATTRIBUTE_VALUE); - - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_KEYWORD); - addJavaTextAttribute(IStyleConstantsJSPJava.JAVA_DEFAULT); - - fScanner.initializeRules(); - } - - protected void handlePropertyChange(PropertyChangeEvent event) { - String styleKey = null; - String javaStyleKey = null; - - if (event != null) { - String prefKey = event.getProperty(); - // check if preference changed is a style preference - if (IStyleConstantsHTML.SCRIPT_AREA_BORDER.equals(prefKey)) { - styleKey = IStyleConstantsHTML.SCRIPT_AREA_BORDER; - } else if (IStyleConstantsXML.TAG_ATTRIBUTE_NAME.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_NAME; - } else if (IStyleConstantsXML.TAG_ATTRIBUTE_VALUE.equals(prefKey)) { - styleKey = IStyleConstantsXML.TAG_ATTRIBUTE_VALUE; - } else if (PreferenceConstants.EDITOR_JAVA_KEYWORD_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_JAVA_KEYWORD_BOLD.equals(prefKey)) || (PreferenceConstants.EDITOR_JAVA_KEYWORD_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPEL.EL_KEYWORD; - } else if (PreferenceConstants.EDITOR_JAVA_DEFAULT_COLOR.equals(prefKey) || (PreferenceConstants.EDITOR_JAVA_DEFAULT_BOLD.equals(prefKey)) || (PreferenceConstants.EDITOR_JAVA_DEFAULT_ITALIC.equals(prefKey))) { - javaStyleKey = IStyleConstantsJSPEL.EL_DEFAULT; - } - } - - if (styleKey != null) { - // overwrite style preference with new value - addTextAttribute(styleKey); - } - if (javaStyleKey != null) { - // overwrite style preference with new value - addJavaTextAttribute(javaStyleKey); - fScanner.initializeRules(); - } - if (styleKey != null || javaStyleKey != null) { - // force a full update of the text viewer - fHighlighter.refreshDisplay(); - } - } - - public boolean prepareRegions(ITypedRegion typedRegion, int ssssrequestedStart, int ssssrequestedLength, Collection holdResults) { - boolean result = true; - try { - // ideally, eventually, we'll have a "virtualDocument" we can - // refer to, but for now ... we'll simple rescan the one region. - // use simple adjustment (since "sub-content" starts at 0 - int offsetAdjustment = typedRegion.getOffset(); - String content = fDocument.get(typedRegion.getOffset(), typedRegion.getLength()); - IDocument document = new Document(content); - - int lastStart = 0; - int length = 0; - IToken lastToken = Token.UNDEFINED; - - int remainingLength = typedRegion.getLength(); - fScanner.setRange(document, lastStart, remainingLength); - - while (true) { - - IToken token = fScanner.nextToken(); - - if (token.isEOF()) { - if (!lastToken.isUndefined() && length != 0) - addRange(holdResults, lastStart + offsetAdjustment, length, getTokenTextAttribute(lastToken)); - break; - } - - if (token.isWhitespace()) { - length += fScanner.getTokenLength(); - continue; - } - - if (lastToken.isUndefined()) { - lastToken = token; - length += fScanner.getTokenLength(); - continue; - } - - if (token != lastToken) { - addRange(holdResults, lastStart + offsetAdjustment, length, getTokenTextAttribute(lastToken)); - lastToken = token; - lastStart = fScanner.getTokenOffset(); - length = fScanner.getTokenLength(); - continue; - } - - length += fScanner.getTokenLength(); - } - } catch (BadLocationException e) { - // shouldn't happen, but we don't want it to stop other - // highlighting, if it does. - result = false; - } - return result; - } - - private void registerPreferenceListener() { - getColorPreferences().addPropertyChangeListener(fPreferenceListener); - getJavaColorPreferences().addPropertyChangeListener(fPreferenceListener); - } - - public void release() { - unRegisterPreferenceManager(); - if (fTextAttributes != null) { - fTextAttributes.clear(); - fTextAttributes = null; - } - fIsInitialized = false; - } - - private void unRegisterPreferenceManager() { - getColorPreferences().removePropertyChangeListener(fPreferenceListener); - getJavaColorPreferences().removePropertyChangeListener(fPreferenceListener); - } - - private IPreferenceStore getColorPreferences() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } - - private IPreferenceStore getJavaColorPreferences() { - return PreferenceConstants.getPreferenceStore(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/HTMLPrinter.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/HTMLPrinter.java deleted file mode 100644 index a4503962b1..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/HTMLPrinter.java +++ /dev/null @@ -1,216 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - - -import java.io.IOException; -import java.io.Reader; -import java.net.URL; - -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.swt.SWT; -import org.eclipse.swt.SWTError; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.widgets.Display; - - -/** - * Provides a set of convenience methods for creating HTML pages. - * - * Based on org.eclipse.jdt.internal.ui.text.HTMLPrinter - */ -class HTMLPrinter { - - static RGB BG_COLOR_RGB = null; - - static { - final Display display = Display.getDefault(); - if (display != null && !display.isDisposed()) { - try { - display.asyncExec(new Runnable() { - /* - * @see java.lang.Runnable#run() - */ - public void run() { - BG_COLOR_RGB = display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB(); - } - }); - } - catch (SWTError err) { - // see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=45294 - if (err.code != SWT.ERROR_DEVICE_DISPOSED) - throw err; - } - } - } - - private HTMLPrinter() { - // nothing - } - - private static String replace(String text, char c, String s) { - - int previous = 0; - int current = text.indexOf(c, previous); - - if (current == -1) - return text; - - StringBuffer buffer = new StringBuffer(); - while (current > -1) { - buffer.append(text.substring(previous, current)); - buffer.append(s); - previous = current + 1; - current = text.indexOf(c, previous); - } - buffer.append(text.substring(previous)); - - return buffer.toString(); - } - - public static String convertToHTMLContent(String content) { - content = replace(content, '&', "&"); //$NON-NLS-1$ - content = replace(content, '"', """); //$NON-NLS-1$ - content = replace(content, '<', "<"); //$NON-NLS-1$ - return replace(content, '>', ">"); //$NON-NLS-1$ - } - - static String read(Reader rd) { - - StringBuffer buffer = new StringBuffer(); - char[] readBuffer = new char[2048]; - - try { - int n = rd.read(readBuffer); - while (n > 0) { - buffer.append(readBuffer, 0, n); - n = rd.read(readBuffer); - } - return buffer.toString(); - } - catch (IOException x) { - // never expected - Logger.log(Logger.WARNING_DEBUG, x.getMessage(), x); - } - - return null; - } - - public static void insertPageProlog(StringBuffer buffer, int position, RGB bgRGB, URL styleSheetURL) { - - if (bgRGB == null) - insertPageProlog(buffer, position, styleSheetURL); - else { - StringBuffer pageProlog = new StringBuffer(300); - - pageProlog.append("<html>"); //$NON-NLS-1$ - - appendStyleSheetLink(pageProlog, styleSheetURL); - - pageProlog.append("<body text=\"#000000\" bgcolor=\""); //$NON-NLS-1$ - appendColor(pageProlog, bgRGB); - pageProlog.append("\"><font size=-1>"); //$NON-NLS-1$ - - buffer.insert(position, pageProlog.toString()); - } - } - - public static void insertPageProlog(StringBuffer buffer, int position, RGB bgRGB) { - if (bgRGB == null) - insertPageProlog(buffer, position); - else { - StringBuffer pageProlog = new StringBuffer(60); - pageProlog.append("<html><body text=\"#000000\" bgcolor=\""); //$NON-NLS-1$ - appendColor(pageProlog, bgRGB); - pageProlog.append("\"><font size=-1>"); //$NON-NLS-1$ - buffer.insert(position, pageProlog.toString()); - } - } - - private static void appendStyleSheetLink(StringBuffer buffer, URL styleSheetURL) { - if (styleSheetURL == null) - return; - - buffer.append("<head>"); //$NON-NLS-1$ - - buffer.append("<LINK REL=\"stylesheet\" HREF= \""); //$NON-NLS-1$ - buffer.append(styleSheetURL); - buffer.append("\" CHARSET=\"ISO-8859-1\" TYPE=\"text/css\">"); //$NON-NLS-1$ - - buffer.append("</head>"); //$NON-NLS-1$ - } - - private static void appendColor(StringBuffer buffer, RGB rgb) { - buffer.append('#'); - buffer.append(Integer.toHexString(rgb.red)); - buffer.append(Integer.toHexString(rgb.green)); - buffer.append(Integer.toHexString(rgb.blue)); - } - - public static void insertPageProlog(StringBuffer buffer, int position) { - insertPageProlog(buffer, position, getBgColor()); - } - - public static void insertPageProlog(StringBuffer buffer, int position, URL styleSheetURL) { - insertPageProlog(buffer, position, getBgColor(), styleSheetURL); - } - - private static RGB getBgColor() { - if (BG_COLOR_RGB != null) - return BG_COLOR_RGB; - // RGB value of info bg color on WindowsXP - return new RGB(255, 255, 225); - } - - public static void addPageProlog(StringBuffer buffer) { - insertPageProlog(buffer, buffer.length()); - } - - public static void addPageEpilog(StringBuffer buffer) { - buffer.append("</font></body></html>"); //$NON-NLS-1$ - } - - public static void startBulletList(StringBuffer buffer) { - buffer.append("<ul>"); //$NON-NLS-1$ - } - - public static void endBulletList(StringBuffer buffer) { - buffer.append("</ul>"); //$NON-NLS-1$ - } - - public static void addBullet(StringBuffer buffer, String bullet) { - if (bullet != null) { - buffer.append("<li>"); //$NON-NLS-1$ - buffer.append(bullet); - buffer.append("</li>"); //$NON-NLS-1$ - } - } - - public static void addSmallHeader(StringBuffer buffer, String header) { - if (header != null) { - buffer.append("<h5>"); //$NON-NLS-1$ - buffer.append(header); - buffer.append("</h5>"); //$NON-NLS-1$ - } - } - - public static void addParagraph(StringBuffer buffer, String paragraph) { - if (paragraph != null) { - buffer.append("<p>"); //$NON-NLS-1$ - buffer.append(paragraph); - } - } - - public static void addParagraph(StringBuffer buffer, Reader paragraphReader) { - if (paragraphReader != null) - addParagraph(buffer, read(paragraphReader)); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPInformationProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPInformationProvider.java deleted file mode 100644 index 327371b954..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPInformationProvider.java +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextHover; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.information.IInformationProvider; -import org.eclipse.jface.text.information.IInformationProviderExtension; -import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; - -/** - * Provides context help for JSP tags (Show tooltip description) - * - * @deprecated StructuredTextViewerConfiguration creates the appropriate - * information provider - */ -public class JSPInformationProvider implements IInformationProvider, IInformationProviderExtension { - private ITextHover fTextHover = null; - - public JSPInformationProvider() { - fTextHover = SSEUIPlugin.getDefault().getTextHoverManager().createBestMatchHover(new JSPTagInfoHoverProcessor()); - } - - public IRegion getSubject(ITextViewer textViewer, int offset) { - return fTextHover.getHoverRegion(textViewer, offset); - } - - public String getInformation(ITextViewer textViewer, IRegion subject) { - return (String) getInformation2(textViewer, subject); - } - - public Object getInformation2(ITextViewer textViewer, IRegion subject) { - return fTextHover.getHoverInfo(textViewer, subject); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocHoverProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocHoverProcessor.java deleted file mode 100644 index 88c609327f..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocHoverProcessor.java +++ /dev/null @@ -1,144 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - -import java.io.Reader; - -import org.eclipse.jdt.core.IJavaElement; -import org.eclipse.jdt.core.IMember; -import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.ui.JavaElementLabels; -import org.eclipse.jdt.ui.JavadocContentAccess; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jst.jsp.core.internal.java.IJSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslation; -import org.eclipse.jst.jsp.core.internal.java.JSPTranslationAdapter; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.ui.internal.taginfo.AbstractHoverProcessor; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; - -/** - * Provides javadoc hover help documentation for java code inside JSPs - */ -public class JSPJavaJavadocHoverProcessor extends AbstractHoverProcessor { - /* - * Bulk of the work was copied from - * org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover - */ - private final long LABEL_FLAGS = JavaElementLabels.ALL_FULLY_QUALIFIED | JavaElementLabels.M_PRE_RETURNTYPE | JavaElementLabels.M_PARAMETER_TYPES | JavaElementLabels.M_PARAMETER_NAMES | JavaElementLabels.M_EXCEPTIONS | JavaElementLabels.F_PRE_TYPE_SIGNATURE | JavaElementLabels.M_PRE_TYPE_PARAMETERS | JavaElementLabels.T_TYPE_PARAMETERS | JavaElementLabels.USE_RESOLVED; - private final long LOCAL_VARIABLE_FLAGS = LABEL_FLAGS & ~JavaElementLabels.F_FULLY_QUALIFIED | JavaElementLabels.F_POST_QUALIFIED; - - private String getHoverInfo(IJavaElement[] result) { - StringBuffer buffer = new StringBuffer(); - int nResults = result.length; - if (nResults == 0) - return null; - - if (nResults > 1) { - - for (int i = 0; i < result.length; i++) { - HTMLPrinter.startBulletList(buffer); - IJavaElement curr = result[i]; - if (curr instanceof IMember || curr.getElementType() == IJavaElement.LOCAL_VARIABLE) - HTMLPrinter.addBullet(buffer, getInfoText(curr)); - HTMLPrinter.endBulletList(buffer); - } - - } - else { - - IJavaElement curr = result[0]; - if (curr instanceof IMember) { - IMember member = (IMember) curr; - HTMLPrinter.addSmallHeader(buffer, getInfoText(member)); - Reader reader; - try { - reader = JavadocContentAccess.getHTMLContentReader(member, true, true); - } - catch (JavaModelException ex) { - return null; - } - if (reader != null) { - HTMLPrinter.addParagraph(buffer, reader); - } - } - else if (curr.getElementType() == IJavaElement.LOCAL_VARIABLE || curr.getElementType() == IJavaElement.TYPE_PARAMETER) - HTMLPrinter.addSmallHeader(buffer, getInfoText(curr)); - } - - if (buffer.length() > 0) { - HTMLPrinter.insertPageProlog(buffer, 0); - HTMLPrinter.addPageEpilog(buffer); - return buffer.toString(); - } - - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer, - * org.eclipse.jface.text.IRegion) - */ - public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) { - // get JSP translation object for this viewer's document - IDOMModel xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(textViewer.getDocument()); - try { - if (xmlModel != null) { - IDOMDocument xmlDoc = xmlModel.getDocument(); - JSPTranslationAdapter adapter = (JSPTranslationAdapter) xmlDoc.getAdapterFor(IJSPTranslation.class); - if (adapter != null) { - JSPTranslation translation = adapter.getJSPTranslation(); - - IJavaElement[] result = translation.getElementsFromJspRange(hoverRegion.getOffset(), hoverRegion.getOffset() + hoverRegion.getLength()); - return translation.fixupMangledName(getHoverInfo(result)); - } - } - } - finally { - if (xmlModel != null) - xmlModel.releaseFromRead(); - } - return null; - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.jface.text.ITextHover#getHoverRegion(org.eclipse.jface.text.ITextViewer, - * int) - */ - public IRegion getHoverRegion(ITextViewer textViewer, int offset) { - return JavaWordFinder.findWord(textViewer.getDocument(), offset); - } - - private String getInfoText(IJavaElement member) { - long flags = member.getElementType() == IJavaElement.LOCAL_VARIABLE ? LOCAL_VARIABLE_FLAGS : LABEL_FLAGS; - String label = JavaElementLabels.getElementLabel(member, flags); - StringBuffer buf = new StringBuffer(); - for (int i = 0; i < label.length(); i++) { - char ch = label.charAt(i); - if (ch == '<') { - buf.append("<"); //$NON-NLS-1$ - } - else if (ch == '>') { - buf.append(">"); //$NON-NLS-1$ - } - else { - buf.append(ch); - } - } - return buf.toString(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocInformationProvider.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocInformationProvider.java deleted file mode 100644 index 6aa06f1c8e..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPJavaJavadocInformationProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006, 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextHover; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.jface.text.information.IInformationProvider; -import org.eclipse.jface.text.information.IInformationProviderExtension; -import org.eclipse.wst.sse.ui.internal.SSEUIPlugin; - -/** - * Provides javadoc context information for java code inside JSPs (Shows - * tooltip description) - * - * @deprecated StructuredTextViewerConfiguration creates the appropriate - * information provider - */ -public class JSPJavaJavadocInformationProvider implements IInformationProvider, IInformationProviderExtension { - private ITextHover fTextHover = null; - - public JSPJavaJavadocInformationProvider() { - fTextHover = SSEUIPlugin.getDefault().getTextHoverManager().createBestMatchHover(new JSPJavaJavadocHoverProcessor()); - } - - public IRegion getSubject(ITextViewer textViewer, int offset) { - return fTextHover.getHoverRegion(textViewer, offset); - } - - public String getInformation(ITextViewer textViewer, IRegion subject) { - return (String) getInformation2(textViewer, subject); - } - - public Object getInformation2(ITextViewer textViewer, IRegion subject) { - return fTextHover.getHoverInfo(textViewer, subject); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPTagInfoHoverProcessor.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPTagInfoHoverProcessor.java deleted file mode 100644 index 9c2a7c2224..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JSPTagInfoHoverProcessor.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - - - -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.wst.html.ui.internal.taginfo.HTMLTagInfoHoverProcessor; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode; - -/** - * Provides hover help documentation for JSP tags - */ -public class JSPTagInfoHoverProcessor extends HTMLTagInfoHoverProcessor { - - protected String computeRegionHelp(IndexedRegion treeNode, IDOMNode parentNode, IStructuredDocumentRegion flatNode, ITextRegion region) { - String result = null; - - if (region == null) - return null; - - String regionType = region.getType(); - if (regionType == DOMJSPRegionContexts.JSP_DIRECTIVE_NAME) { - result = computeJSPDirHelp((IDOMNode) treeNode, parentNode, flatNode, region); - } - else - result = super.computeRegionHelp(treeNode, parentNode, flatNode, region); - - return result; - } - - /** - * Computes the hover help for the jsp directive name - * for now, treat jsp directives like any other tag name - */ - protected String computeJSPDirHelp(IDOMNode xmlnode, IDOMNode parentNode, IStructuredDocumentRegion flatNode, ITextRegion region) { - return computeTagNameHelp(xmlnode, parentNode, flatNode, region); - } - -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JavaWordFinder.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JavaWordFinder.java deleted file mode 100644 index 5b5109e875..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/taginfo/JavaWordFinder.java +++ /dev/null @@ -1,69 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.taginfo; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.Region; - -/** - * Copied from org.eclipse.jdt.internal.ui.text.JavaWordFinder - */ -class JavaWordFinder { - - public static IRegion findWord(IDocument document, int offset) { - - int start= -1; - int end= -1; - - - try { - - int pos= offset; - char c; - - while (pos >= 0) { - c= document.getChar(pos); - if (!Character.isJavaIdentifierPart(c)) - break; - --pos; - } - - start= pos; - - pos= offset; - int length= document.getLength(); - - while (pos < length) { - c= document.getChar(pos); - if (!Character.isJavaIdentifierPart(c)) - break; - ++pos; - } - - end= pos; - - } catch (BadLocationException x) { - } - - if (start > -1 && end > -1) { - if (start == offset && end == offset) - return new Region(offset, 0); - else if (start == offset) - return new Region(start, end - start); - else - return new Region(start + 1, end - start - 1); - } - - return null; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/EncodingTemplateVariableResolverJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/EncodingTemplateVariableResolverJSP.java deleted file mode 100644 index 23b1058209..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/EncodingTemplateVariableResolverJSP.java +++ /dev/null @@ -1,38 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.templates; - -import org.eclipse.jface.text.templates.SimpleTemplateVariableResolver; -import org.eclipse.jface.text.templates.TemplateContext; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.wst.sse.core.internal.encoding.CommonEncodingPreferenceNames; - - -public class EncodingTemplateVariableResolverJSP extends SimpleTemplateVariableResolver { - private static final String ENCODING_TYPE = getEncodingType(); - - private static String getEncodingType() { - return "encoding"; //$NON-NLS-1$ - } - - /** - * Creates a new encoding variable - */ - public EncodingTemplateVariableResolverJSP() { - super(ENCODING_TYPE, JSPUIMessages.Creating_files_encoding); - } - - protected String resolve(TemplateContext context) { - return JSPCorePlugin.getDefault().getPluginPreferences().getString(CommonEncodingPreferenceNames.OUTPUT_CODESET); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeIdsJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeIdsJSP.java deleted file mode 100644 index 8e5d9e3743..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeIdsJSP.java +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - * - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.templates; - - -public class TemplateContextTypeIdsJSP { - - public static final String ALL = getAll(); - - public static final String ATTRIBUTE = getAttribute(); - - public static final String ATTRIBUTE_VALUE = getAttributeValue(); - - public static final String NEW = getNew(); - - public static final String TAG = getTag(); - - private static String getAll() { - return getPrefix() + "_all"; //$NON-NLS-1$ - } - - private static String getAttribute() { - return getPrefix() + "_attribute"; //$NON-NLS-1$ - } - - private static String getAttributeValue() { - return getPrefix() + "_attribute_value"; //$NON-NLS-1$ - } - - private static String getNew() { - return getPrefix() + "_new"; //$NON-NLS-1$ - } - - private static String getPrefix() { - return "jsp"; //$NON-NLS-1$ - } - - private static String getTag() { - return getPrefix() + "_tag"; //$NON-NLS-1$ - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeJSP.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeJSP.java deleted file mode 100644 index 60e19e7a34..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/templates/TemplateContextTypeJSP.java +++ /dev/null @@ -1,33 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.templates; - -import org.eclipse.jface.text.templates.GlobalTemplateVariables; -import org.eclipse.jface.text.templates.TemplateContextType; - -/** - * Base class for JSP template context types. Templates of this context type - * apply to any place within JSP content type. - */ -public class TemplateContextTypeJSP extends TemplateContextType { - public TemplateContextTypeJSP() { - super(); - addResolver(new GlobalTemplateVariables.Cursor()); - addResolver(new GlobalTemplateVariables.Date()); - addResolver(new GlobalTemplateVariables.Dollar()); - addResolver(new GlobalTemplateVariables.LineSelection()); - addResolver(new GlobalTemplateVariables.Time()); - addResolver(new GlobalTemplateVariables.User()); - addResolver(new GlobalTemplateVariables.WordSelection()); - addResolver(new GlobalTemplateVariables.Year()); - addResolver(new EncodingTemplateVariableResolverJSP()); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JSPDocumentRegionEdgeMatcher.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JSPDocumentRegionEdgeMatcher.java deleted file mode 100644 index 267439d02a..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JSPDocumentRegionEdgeMatcher.java +++ /dev/null @@ -1,28 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.text; - -import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts; -import org.eclipse.wst.sse.ui.internal.text.DocumentRegionEdgeMatcher; -import org.eclipse.wst.xml.core.internal.regions.DOMRegionContext; - -public class JSPDocumentRegionEdgeMatcher extends DocumentRegionEdgeMatcher { - - protected final static char[] BRACKETS = {'{', '}', '(', ')', '[', ']'}; - - /** - * @param validContexts - * @param nextMatcher - */ - public JSPDocumentRegionEdgeMatcher() { - super(new String[]{DOMRegionContext.XML_TAG_NAME, DOMRegionContext.XML_COMMENT_TEXT, DOMJSPRegionContexts.JSP_COMMENT_TEXT, DOMJSPRegionContexts.JSP_DIRECTIVE_NAME, DOMJSPRegionContexts.JSP_ROOT_TAG_NAME, DOMRegionContext.XML_CDATA_TEXT, DOMRegionContext.XML_PI_OPEN, DOMRegionContext.XML_PI_CONTENT}, new JavaPairMatcher(BRACKETS)); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaCodeReader.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaCodeReader.java deleted file mode 100644 index 4b80238b04..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaCodeReader.java +++ /dev/null @@ -1,246 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.text; - -import java.io.IOException; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jst.jsp.ui.internal.derived.SingleCharReader; - - -/** - * Reads from a document either forwards or backwards. May be configured to - * skip comments and strings. - * - * Copied from org.eclipse.jdt.internal.ui.text so we don't have to - * depend on the org.eclipse.jdt.ui plugin. - * - * No modifications were made. - */ -class JavaCodeReader extends SingleCharReader { - - /** The EOF character */ - public static final int EOF = -1; - - private boolean fSkipComments = false; - private boolean fSkipStrings = false; - private boolean fForward = false; - - private IDocument fDocument; - private int fOffset; - - private int fEnd = -1; - private int fCachedLineNumber = -1; - private int fCachedLineOffset = -1; - - - public JavaCodeReader() { - } - - /** - * Returns the offset of the last read character. Should only be called after read has been called. - */ - public int getOffset() { - return fForward ? fOffset - 1 : fOffset; - } - - public void configureForwardReader(IDocument document, int offset, int length, boolean skipComments, boolean skipStrings) throws IOException { - fDocument = document; - fOffset = offset; - fSkipComments = skipComments; - fSkipStrings = skipStrings; - - fForward = true; - fEnd = Math.min(fDocument.getLength(), fOffset + length); - } - - public void configureBackwardReader(IDocument document, int offset, boolean skipComments, boolean skipStrings) throws IOException { - fDocument = document; - fOffset = offset; - fSkipComments = skipComments; - fSkipStrings = skipStrings; - - fForward = false; - try { - fCachedLineNumber = fDocument.getLineOfOffset(fOffset); - } - catch (BadLocationException x) { - throw new IOException(x.getMessage()); - } - } - - /* - * @see Reader#close() - */ - public void close() throws IOException { - fDocument = null; - } - - /* - * @see SingleCharReader#read() - */ - public int read() throws IOException { - try { - return fForward ? readForwards() : readBackwards(); - } - catch (BadLocationException x) { - throw new IOException(x.getMessage()); - } - } - - private void gotoCommentEnd() throws BadLocationException { - while (fOffset < fEnd) { - char current = fDocument.getChar(fOffset++); - if (current == '*') { - if (fOffset < fEnd && fDocument.getChar(fOffset) == '/') { - ++fOffset; - return; - } - } - } - } - - private void gotoStringEnd(char delimiter) throws BadLocationException { - while (fOffset < fEnd) { - char current = fDocument.getChar(fOffset++); - if (current == '\\') { - // ignore escaped characters - ++fOffset; - } - else if (current == delimiter) { - return; - } - } - } - - private void gotoLineEnd() throws BadLocationException { - int line = fDocument.getLineOfOffset(fOffset); - fOffset = fDocument.getLineOffset(line + 1); - } - - private int readForwards() throws BadLocationException { - while (fOffset < fEnd) { - char current = fDocument.getChar(fOffset++); - - switch (current) { - case '/' : - - if (fSkipComments && fOffset < fEnd) { - char next = fDocument.getChar(fOffset); - if (next == '*') { - // a comment starts, advance to the comment end - ++fOffset; - gotoCommentEnd(); - continue; - } - else if (next == '/') { - // '//'-comment starts, advance to the line end - gotoLineEnd(); - continue; - } - } - - return current; - - case '"' : - case '\'' : - - if (fSkipStrings) { - gotoStringEnd(current); - continue; - } - - return current; - } - - return current; - } - - return EOF; - } - - private void handleSingleLineComment() throws BadLocationException { - int line = fDocument.getLineOfOffset(fOffset); - if (line < fCachedLineNumber) { - fCachedLineNumber = line; - fCachedLineOffset = fDocument.getLineOffset(line); - int offset = fOffset; - while (fCachedLineOffset < offset) { - char current = fDocument.getChar(offset--); - if (current == '/' && fCachedLineOffset <= offset && fDocument.getChar(offset) == '/') { - fOffset = offset; - return; - } - } - } - } - - private void gotoCommentStart() throws BadLocationException { - while (0 < fOffset) { - char current = fDocument.getChar(fOffset--); - if (current == '*' && 0 <= fOffset && fDocument.getChar(fOffset) == '/') - return; - } - } - - private void gotoStringStart(char delimiter) throws BadLocationException { - while (0 < fOffset) { - char current = fDocument.getChar(fOffset); - if (current == delimiter) { - if (!(0 <= fOffset && fDocument.getChar(fOffset - 1) == '\\')) - return; - } - --fOffset; - } - } - - private int readBackwards() throws BadLocationException { - - while (0 < fOffset) { - --fOffset; - - handleSingleLineComment(); - - char current = fDocument.getChar(fOffset); - switch (current) { - case '/' : - - if (fSkipComments && fOffset > 1) { - char next = fDocument.getChar(fOffset - 1); - if (next == '*') { - // a comment ends, advance to the comment start - fOffset -= 2; - gotoCommentStart(); - continue; - } - } - - return current; - - case '"' : - case '\'' : - - if (fSkipStrings) { - --fOffset; - gotoStringStart(current); - continue; - } - - return current; - } - - return current; - } - - return EOF; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaPairMatcher.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaPairMatcher.java deleted file mode 100644 index 106ffdb205..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/text/JavaPairMatcher.java +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.text; - -import java.io.IOException; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.Region; -import org.eclipse.jface.text.source.ICharacterPairMatcher; - - -/** - * Helper class for match pairs of characters. - * - * Copied from org.eclipse.jdt.internal.ui.text so we don't have to - * depend on the org.eclipse.jdt.ui plugin. - * - * No modifications were made. - */ -class JavaPairMatcher implements ICharacterPairMatcher { - - protected char[] fPairs; - protected IDocument fDocument; - protected int fOffset; - - protected int fStartPos; - protected int fEndPos; - protected int fAnchor; - - protected JavaCodeReader fReader = new JavaCodeReader(); - - - public JavaPairMatcher(char[] pairs) { - fPairs = pairs; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.text.source.ICharacterPairMatcher#match(org.eclipse.jface.text.IDocument, int) - */ - public IRegion match(IDocument document, int offset) { - - fOffset = offset; - - if (fOffset < 0) - return null; - - fDocument = document; - - if (fDocument != null && matchPairsAt() && fStartPos != fEndPos) - return new Region(fStartPos, fEndPos - fStartPos + 1); - - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.text.source.ICharacterPairMatcher#getAnchor() - */ - public int getAnchor() { - return fAnchor; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.text.source.ICharacterPairMatcher#dispose() - */ - public void dispose() { - clear(); - fDocument = null; - fReader = null; - } - - /* - * @see org.eclipse.jface.text.source.ICharacterPairMatcher#clear() - */ - public void clear() { - if (fReader != null) { - try { - fReader.close(); - } - catch (IOException x) { - // ignore - } - } - } - - protected boolean matchPairsAt() { - - int i; - int pairIndex1 = fPairs.length; - int pairIndex2 = fPairs.length; - - fStartPos = -1; - fEndPos = -1; - - // get the chars preceding and following the start position - try { - - char prevChar = fDocument.getChar(Math.max(fOffset - 1, 0)); - // modified behavior for http://dev.eclipse.org/bugs/show_bug.cgi?id=16879 - // char nextChar= fDocument.getChar(fOffset); - - // search for opening peer character next to the activation point - for (i = 0; i < fPairs.length; i = i + 2) { - // if (nextChar == fPairs[i]) { - // fStartPos= fOffset; - // pairIndex1= i; - // } else - if (prevChar == fPairs[i]) { - fStartPos = fOffset - 1; - pairIndex1 = i; - } - } - - // search for closing peer character next to the activation point - for (i = 1; i < fPairs.length; i = i + 2) { - if (prevChar == fPairs[i]) { - fEndPos = fOffset - 1; - pairIndex2 = i; - } - // else if (nextChar == fPairs[i]) { - // fEndPos= fOffset; - // pairIndex2= i; - // } - } - - if (fEndPos > -1) { - fAnchor = RIGHT; - fStartPos = searchForOpeningPeer(fEndPos, fPairs[pairIndex2 - 1], fPairs[pairIndex2], fDocument); - if (fStartPos > -1) - return true; - else - fEndPos = -1; - } - else if (fStartPos > -1) { - fAnchor = LEFT; - fEndPos = searchForClosingPeer(fStartPos, fPairs[pairIndex1], fPairs[pairIndex1 + 1], fDocument); - if (fEndPos > -1) - return true; - else - fStartPos = -1; - } - - } - catch (BadLocationException x) { - } - catch (IOException x) { - } - - return false; - } - - protected int searchForClosingPeer(int offset, int openingPeer, int closingPeer, IDocument document) throws IOException { - - fReader.configureForwardReader(document, offset + 1, document.getLength(), true, true); - - int stack = 1; - int c = fReader.read(); - while (c != JavaCodeReader.EOF) { - if (c == openingPeer && c != closingPeer) - stack++; - else if (c == closingPeer) - stack--; - - if (stack == 0) - return fReader.getOffset(); - - c = fReader.read(); - } - - return -1; - } - - protected int searchForOpeningPeer(int offset, int openingPeer, int closingPeer, IDocument document) throws IOException { - - fReader.configureBackwardReader(document, offset, true, true); - - int stack = 1; - int c = fReader.read(); - while (c != JavaCodeReader.EOF) { - if (c == closingPeer && c != openingPeer) - stack++; - else if (c == openingPeer) - stack--; - - if (stack == 0) - return fReader.getOffset(); - - c = fReader.read(); - } - - return -1; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/HTMLValidationReporter.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/HTMLValidationReporter.java deleted file mode 100644 index 3633ad6e21..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/HTMLValidationReporter.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.validation; - -import org.eclipse.core.resources.IFile; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.validate.ValidationMessage; -import org.eclipse.wst.sse.core.internal.validate.ValidationReporter; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; -import org.eclipse.wst.validation.internal.provisional.core.IReporter; -import org.eclipse.wst.validation.internal.provisional.core.IValidator; - -/* - * Copied from jsp.core's HTMLValidationReporter - */ -class HTMLValidationReporter implements ValidationReporter { - private IValidator owner = null; - private IReporter reporter = null; - private IFile file = null; - private IStructuredModel model = null; - - /** - */ - public HTMLValidationReporter(IValidator owner, IReporter reporter, IFile file, IStructuredModel model) { - super(); - this.owner = owner; - this.reporter = reporter; - this.file = file; - this.model = model; - } - - /** - */ - void clear() { - if (this.file == null) - return; - - if (this.reporter != null) { - this.reporter.removeAllMessages(this.owner, this.file); - } - } - - public void report(ValidationMessage message) { - if (message == null) - return; - if (this.file == null) - return; - - IMessage mes = translateMessage(message); - - if (this.reporter != null) { - this.reporter.addMessage(this.owner, mes); - } - } - - /** - * Translate ValidationMessage to IMessage and generate result log - */ - private IMessage translateMessage(ValidationMessage message) { - int severity = IMessage.LOW_SEVERITY; - switch (message.getSeverity()) { - case ValidationMessage.ERROR : - severity = IMessage.HIGH_SEVERITY; - break; - case ValidationMessage.WARNING : - severity = IMessage.NORMAL_SEVERITY; - break; - default : - break; - } - - IMessage mes = new LocalizedMessage(severity, message.getMessage(), this.file); - mes.setOffset(message.getOffset()); - mes.setLength(message.getLength()); - if (this.model != null) { - IStructuredDocument flatModel = this.model.getStructuredDocument(); - if (flatModel != null) { - int line = flatModel.getLineOfOffset(message.getOffset()); - mes.setLineNo(line + 1); - } - } - - return mes; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPActionSourceValidator.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPActionSourceValidator.java deleted file mode 100644 index 0ab20f968e..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPActionSourceValidator.java +++ /dev/null @@ -1,269 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.validation; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.filebuffers.ITextFileBuffer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.core.runtime.content.IContentDescription; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jst.jsp.core.internal.contentproperties.JSPFContentProperties; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.validation.JSPActionValidator; -import org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.FileBufferModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator; -import org.eclipse.wst.validation.internal.ConfigurationManager; -import org.eclipse.wst.validation.internal.ProjectConfiguration; -import org.eclipse.wst.validation.internal.ValidationConfiguration; -import org.eclipse.wst.validation.internal.ValidationRegistryReader; -import org.eclipse.wst.validation.internal.provisional.core.IReporter; -import org.eclipse.wst.validation.internal.provisional.core.IValidationContext; - -/** - * Source validator (able to check partial document) that checks for: - - * missing required attributes & undefined attributes in jsp action tags such - * as jsp directives and jsp custom tags - */ -public class JSPActionSourceValidator extends JSPActionValidator implements ISourceValidator { - private IDocument fDocument; - private boolean fEnableSourceValidation; - private IContentType fJSPFContentType = null; - - public void connect(IDocument document) { - fDocument = document; - - // special checks to see source validation should really execute - IFile file = null; - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - String baseLocation = model.getBaseLocation(); - // The baseLocation may be a path on disk or relative to the - // workspace root. Don't translate on-disk paths to - // in-workspace resources. - IPath basePath = new Path(baseLocation); - if (basePath.segmentCount() > 1) { - file = ResourcesPlugin.getWorkspace().getRoot().getFile(basePath); - /* - * If the IFile doesn't exist, make sure it's not returned - */ - if (!file.exists()) - file = null; - } - } - } - finally { - if (model != null) { - model.releaseFromRead(); - } - } - fEnableSourceValidation = (file != null && isBatchValidatorPreferenceEnabled(file) && shouldValidate(file) && fragmentCheck(file)); - } - - public void disconnect(IDocument document) { - fDocument = null; - } - - public void validate(IRegion dirtyRegion, IValidationContext helper, IReporter reporter) { - if (helper == null || fDocument == null || !fEnableSourceValidation) - return; - - if ((reporter != null) && (reporter.isCancelled() == true)) { - throw new OperationCanceledException(); - } - - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (model == null) - return; - - try { - ITextFileBuffer fb = FileBufferModelManager.getInstance().getBuffer(fDocument); - if (fb == null) - return; - IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(fb.getLocation()); - if (file == null || !file.exists()) - return; - performValidation(file, reporter, model, dirtyRegion); - } - finally { - if (model != null) - model.releaseFromRead(); - } - } - - /** - * Gets current validation configuration based on current project (which - * is based on current document) or global configuration if project does - * not override - * - * @return ValidationConfiguration - */ - private ValidationConfiguration getValidationConfiguration(IFile file) { - ValidationConfiguration configuration = null; - if (file != null) { - IProject project = file.getProject(); - if (project != null) { - try { - ProjectConfiguration projectConfiguration = ConfigurationManager.getManager().getProjectConfiguration(project); - configuration = projectConfiguration; - if (projectConfiguration == null || projectConfiguration.useGlobalPreference()) { - configuration = ConfigurationManager.getManager().getGlobalConfiguration(); - } - } - catch (InvocationTargetException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } - - return configuration; - } - - /** - * Checks if validator is enabled according in Validation preferences - * - * @param vmd - * @return - */ - private boolean isBatchValidatorPreferenceEnabled(IFile file) { - if (file == null) { - return true; - } - - boolean enabled = true; - ValidationConfiguration configuration = getValidationConfiguration(file); - if (configuration != null) { - org.eclipse.wst.validation.internal.ValidatorMetaData metadata = ValidationRegistryReader.getReader().getValidatorMetaData(JSPContentValidator.class.getName()); - if (metadata != null) { - if (!configuration.isBuildEnabled(metadata) && !configuration.isManualEnabled(metadata)) - enabled = false; - } - } - return enabled; - } - - /** - * Checks if file is a jsp fragment or not. If so, check if the fragment - * should be validated or not. - * - * @param file - * Assumes shouldValidate was already called on file so it - * should not be null and does exist - * @return false if file is a fragment and it should not be validated, - * true otherwise - */ - private boolean fragmentCheck(IFile file) { - // copied from JSPValidator - boolean shouldValidate = true; - // quick check to see if this is possibly a jsp fragment - if (getJSPFContentType().isAssociatedWith(file.getName())) { - // get preference for validate jsp fragments - boolean shouldValidateFragments = Boolean.valueOf(JSPFContentProperties.getProperty(JSPFContentProperties.VALIDATE_FRAGMENTS, file, true)).booleanValue(); - /* - * if jsp fragments should not be validated, check if file is - * really jsp fragment - */ - if (!shouldValidateFragments) { - boolean isFragment = isFragment(file); - shouldValidate = !isFragment; - } - } - return shouldValidate; - } - - /** - * Determines if file is jsp fragment or not (does a deep, indepth check, - * looking into contents of file) - * - * @param file - * assumes file is not null and exists - * @return true if file is jsp fragment, false otherwise - */ - private boolean isFragment(IFile file) { - // copied from JSPValidator - boolean isFragment = false; - InputStream is = null; - try { - IContentDescription contentDescription = file.getContentDescription(); - // it can be null - if (contentDescription == null) { - is = file.getContents(); - contentDescription = Platform.getContentTypeManager().getDescriptionFor(is, file.getName(), new QualifiedName[]{IContentDescription.CHARSET}); - } - if (contentDescription != null) { - String fileCtId = contentDescription.getContentType().getId(); - isFragment = (fileCtId != null && ContentTypeIdForJSP.ContentTypeID_JSPFRAGMENT.equals(fileCtId)); - } - } - catch (IOException e) { - // ignore, assume it's invalid JSP - } - catch (CoreException e) { - // ignore, assume it's invalid JSP - } - finally { - // must close input stream in case others need it - if (is != null) - try { - is.close(); - } - catch (Exception e) { - // not sure how to recover at this point - } - } - return isFragment; - } - - private boolean shouldValidate(IFile file) { - // copied from JSPValidator - IResource resource = file; - do { - if (resource.isDerived() || resource.isTeamPrivateMember() || !resource.isAccessible() || resource.getName().charAt(0) == '.') { - return false; - } - resource = resource.getParent(); - } - while ((resource.getType() & IResource.PROJECT) == 0); - return true; - } - - /** - * Returns JSP fragment content type - * - * @return jspf content type - */ - private IContentType getJSPFContentType() { - // copied from JSPValidator - if (fJSPFContentType == null) { - fJSPFContentType = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSPFRAGMENT); - } - return fJSPFContentType; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPContentSourceValidator.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPContentSourceValidator.java deleted file mode 100644 index bfbd890f5c..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/JSPContentSourceValidator.java +++ /dev/null @@ -1,393 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.validation; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.InvocationTargetException; - -import org.eclipse.core.filebuffers.ITextFileBuffer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.OperationCanceledException; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.QualifiedName; -import org.eclipse.core.runtime.content.IContentDescription; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jst.jsp.core.internal.contentproperties.JSPFContentProperties; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.validation.JSPContentValidator; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.wst.html.core.internal.document.HTMLDocumentTypeConstants; -import org.eclipse.wst.html.core.internal.validate.HTMLValidationAdapterFactory; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.FileBufferModelManager; -import org.eclipse.wst.sse.core.internal.provisional.INodeAdapterFactory; -import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument; -import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion; -import org.eclipse.wst.sse.core.internal.validate.ValidationAdapter; -import org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator; -import org.eclipse.wst.validation.internal.ConfigurationManager; -import org.eclipse.wst.validation.internal.ProjectConfiguration; -import org.eclipse.wst.validation.internal.ValidationConfiguration; -import org.eclipse.wst.validation.internal.ValidationRegistryReader; -import org.eclipse.wst.validation.internal.core.Message; -import org.eclipse.wst.validation.internal.provisional.core.IMessage; -import org.eclipse.wst.validation.internal.provisional.core.IReporter; -import org.eclipse.wst.validation.internal.provisional.core.IValidationContext; -import org.eclipse.wst.xml.core.internal.document.DocumentTypeAdapter; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.w3c.dom.Text; - -/** - * Source validator for JSP content. This validator currently only validates - * html content in jsp. - */ -public class JSPContentSourceValidator extends JSPContentValidator implements ISourceValidator { - /* - * Most of this class was copied from the ISourceValidator aspects of - * html.ui's HTMLValidator - */ - private IDocument fDocument; - private boolean fEnableSourceValidation; - private IContentType fJSPFContentType = null; - - public void connect(IDocument document) { - fDocument = document; - - // special checks to see source validation should really execute - IFile file = null; - IStructuredModel model = null; - try { - model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - String baseLocation = model.getBaseLocation(); - // The baseLocation may be a path on disk or relative to the - // workspace root. Don't translate on-disk paths to - // in-workspace resources. - IPath basePath = new Path(baseLocation); - if (basePath.segmentCount() > 1) { - file = ResourcesPlugin.getWorkspace().getRoot().getFile(basePath); - /* - * If the IFile doesn't exist, make sure it's not returned - */ - if (!file.exists()) - file = null; - } - } - } - finally { - if (model != null) { - model.releaseFromRead(); - } - } - fEnableSourceValidation = (file != null && isBatchValidatorPreferenceEnabled(file) && shouldValidate(file) && fragmentCheck(file)); - } - - public void disconnect(IDocument document) { - fDocument = null; - } - - /** - * This validate call is for the ISourceValidator partial document - * validation approach - * - * @param dirtyRegion - * @param helper - * @param reporter - * @see org.eclipse.wst.sse.ui.internal.reconcile.validator.ISourceValidator - */ - public void validate(IRegion dirtyRegion, IValidationContext helper, IReporter reporter) { - if (helper == null || fDocument == null || !fEnableSourceValidation) - return; - - if ((reporter != null) && (reporter.isCancelled() == true)) { - throw new OperationCanceledException(); - } - - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - if (model == null) - return; // error - - try { - - IDOMDocument document = null; - if (model instanceof IDOMModel) { - document = ((IDOMModel) model).getDocument(); - } - - if (document == null || !hasHTMLFeature(document)) - return; // ignore - - ITextFileBuffer fb = FileBufferModelManager.getInstance().getBuffer(fDocument); - if (fb == null) - return; - - IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(fb.getLocation()); - if (file == null || !file.exists()) - return; - - // this will be the wrong region if it's Text (instead of Element) - // we don't know how to validate Text - IndexedRegion ir = getCoveringNode(dirtyRegion); // model.getIndexedRegion(dirtyRegion.getOffset()); - if (ir instanceof Text) { - while (ir != null && ir instanceof Text) { - // it's assumed that this gets the IndexedRegion to - // the right of the end offset - ir = model.getIndexedRegion(ir.getEndOffset()); - } - } - - if (ir instanceof INodeNotifier) { - - INodeAdapterFactory factory = HTMLValidationAdapterFactory.getInstance(); - ValidationAdapter adapter = (ValidationAdapter) factory.adapt((INodeNotifier) ir); - if (adapter == null) - return; // error - - if (reporter != null) { - HTMLValidationReporter rep = null; - rep = getReporter(reporter, file, (IDOMModel) model); - rep.clear(); - adapter.setReporter(rep); - - Message mess = new LocalizedMessage(IMessage.LOW_SEVERITY, file.getFullPath().toString().substring(1)); - reporter.displaySubtask(this, mess); - } - adapter.validate(ir); - } - } - finally { - if (model != null) - model.releaseFromRead(); - } - } - - private IndexedRegion getCoveringNode(IRegion dirtyRegion) { - - IndexedRegion largestRegion = null; - if (fDocument instanceof IStructuredDocument) { - IStructuredDocumentRegion[] regions = ((IStructuredDocument) fDocument).getStructuredDocumentRegions(dirtyRegion.getOffset(), dirtyRegion.getLength()); - largestRegion = getLargest(regions); - } - return largestRegion; - } - - private IndexedRegion getLargest(IStructuredDocumentRegion[] sdRegions) { - - if (sdRegions == null || sdRegions.length == 0) - return null; - - IndexedRegion currentLargest = getCorrespondingNode(sdRegions[0]); - for (int i = 0; i < sdRegions.length; i++) { - if (!sdRegions[i].isDeleted()) { - IndexedRegion corresponding = getCorrespondingNode(sdRegions[i]); - - if (currentLargest instanceof Text) - currentLargest = corresponding; - - if (corresponding != null) { - if (!(corresponding instanceof Text)) { - if (corresponding.getStartOffset() <= currentLargest.getStartOffset() && corresponding.getEndOffset() >= currentLargest.getEndOffset()) - currentLargest = corresponding; - } - } - - } - } - return currentLargest; - } - - protected IndexedRegion getCorrespondingNode(IStructuredDocumentRegion sdRegion) { - IStructuredModel sModel = StructuredModelManager.getModelManager().getExistingModelForRead(fDocument); - IndexedRegion indexedRegion = null; - try { - if (sModel != null) - indexedRegion = sModel.getIndexedRegion(sdRegion.getStart()); - } - finally { - if (sModel != null) - sModel.releaseFromRead(); - } - return indexedRegion; - } - - private boolean hasHTMLFeature(IDOMDocument document) { - DocumentTypeAdapter adapter = (DocumentTypeAdapter) document.getAdapterFor(DocumentTypeAdapter.class); - if (adapter == null) - return false; - return adapter.hasFeature(HTMLDocumentTypeConstants.HTML); - } - - private HTMLValidationReporter getReporter(IReporter reporter, IFile file, IDOMModel model) { - return new HTMLValidationReporter(this, reporter, file, model); - } - - /** - * Gets current validation configuration based on current project (which - * is based on current document) or global configuration if project does - * not override - * - * @return ValidationConfiguration - */ - private ValidationConfiguration getValidationConfiguration(IFile file) { - ValidationConfiguration configuration = null; - if (file != null) { - IProject project = file.getProject(); - if (project != null) { - try { - ProjectConfiguration projectConfiguration = ConfigurationManager.getManager().getProjectConfiguration(project); - configuration = projectConfiguration; - if (projectConfiguration == null || projectConfiguration.useGlobalPreference()) { - configuration = ConfigurationManager.getManager().getGlobalConfiguration(); - } - } - catch (InvocationTargetException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - } - - return configuration; - } - - /** - * Checks if validator is enabled according in Validation preferences - * - * @param vmd - * @return - */ - private boolean isBatchValidatorPreferenceEnabled(IFile file) { - if (file == null) { - return true; - } - - boolean enabled = true; - ValidationConfiguration configuration = getValidationConfiguration(file); - if (configuration != null) { - org.eclipse.wst.validation.internal.ValidatorMetaData metadata = ValidationRegistryReader.getReader().getValidatorMetaData(JSPContentValidator.class.getName()); - if (metadata != null) { - if (!configuration.isBuildEnabled(metadata) && !configuration.isManualEnabled(metadata)) - enabled = false; - } - } - return enabled; - } - - /** - * Checks if file is a jsp fragment or not. If so, check if the fragment - * should be validated or not. - * - * @param file - * Assumes shouldValidate was already called on file so it - * should not be null and does exist - * @return false if file is a fragment and it should not be validated, - * true otherwise - */ - private boolean fragmentCheck(IFile file) { - // copied from JSPValidator - boolean shouldValidate = true; - // quick check to see if this is possibly a jsp fragment - if (getJSPFContentType().isAssociatedWith(file.getName())) { - // get preference for validate jsp fragments - boolean shouldValidateFragments = Boolean.valueOf(JSPFContentProperties.getProperty(JSPFContentProperties.VALIDATE_FRAGMENTS, file, true)).booleanValue(); - /* - * if jsp fragments should not be validated, check if file is - * really jsp fragment - */ - if (!shouldValidateFragments) { - boolean isFragment = isFragment(file); - shouldValidate = !isFragment; - } - } - return shouldValidate; - } - - /** - * Determines if file is jsp fragment or not (does a deep, indepth check, - * looking into contents of file) - * - * @param file - * assumes file is not null and exists - * @return true if file is jsp fragment, false otherwise - */ - private boolean isFragment(IFile file) { - // copied from JSPValidator - boolean isFragment = false; - InputStream is = null; - try { - IContentDescription contentDescription = file.getContentDescription(); - // it can be null - if (contentDescription == null) { - is = file.getContents(); - contentDescription = Platform.getContentTypeManager().getDescriptionFor(is, file.getName(), new QualifiedName[]{IContentDescription.CHARSET}); - } - if (contentDescription != null) { - String fileCtId = contentDescription.getContentType().getId(); - isFragment = (fileCtId != null && ContentTypeIdForJSP.ContentTypeID_JSPFRAGMENT.equals(fileCtId)); - } - } - catch (IOException e) { - // ignore, assume it's invalid JSP - } - catch (CoreException e) { - // ignore, assume it's invalid JSP - } - finally { - // must close input stream in case others need it - if (is != null) - try { - is.close(); - } - catch (Exception e) { - // not sure how to recover at this point - } - } - return isFragment; - } - - private boolean shouldValidate(IFile file) { - // copied from JSPValidator - IResource resource = file; - do { - if (resource.isDerived() || resource.isTeamPrivateMember() || !resource.isAccessible() || resource.getName().charAt(0) == '.') { - return false; - } - resource = resource.getParent(); - } - while ((resource.getType() & IResource.PROJECT) == 0); - return true; - } - - /** - * Returns JSP fragment content type - * - * @return jspf content type - */ - private IContentType getJSPFContentType() { - // copied from JSPValidator - if (fJSPFContentType == null) { - fJSPFContentType = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSPFRAGMENT); - } - return fJSPFContentType; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/LocalizedMessage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/LocalizedMessage.java deleted file mode 100644 index 1686e37095..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/validation/LocalizedMessage.java +++ /dev/null @@ -1,61 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.validation; - -import java.util.Locale; - -import org.eclipse.core.resources.IResource; -import org.eclipse.wst.validation.internal.core.Message; - -/** - * Simple implementation of Message all validators in package can use. - */ -class LocalizedMessage extends Message { - private String _message = null; - - public LocalizedMessage(int severity, String messageText) { - this(severity, messageText, null); - } - - public LocalizedMessage(int severity, String messageText, IResource targetObject) { - this(severity, messageText, (Object) targetObject); - } - - public LocalizedMessage(int severity, String messageText, Object targetObject) { - super(null, severity, null); - setLocalizedMessage(messageText); - setTargetObject(targetObject); - } - - public void setLocalizedMessage(String message) { - _message = message; - } - - public String getLocalizedMessage() { - return _message; - } - - public String getText() { - return getLocalizedMessage(); - } - - public String getText(ClassLoader cl) { - return getLocalizedMessage(); - } - - public String getText(Locale l) { - return getLocalizedMessage(); - } - - public String getText(Locale l, ClassLoader cl) { - return getLocalizedMessage(); - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPFileWizardPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPFileWizardPage.java deleted file mode 100644 index 9c362555ea..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPFileWizardPage.java +++ /dev/null @@ -1,257 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2006 ,2007 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.wizard; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.Preferences; -import org.eclipse.core.runtime.content.IContentType; -import org.eclipse.jdt.core.JavaCore; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.core.internal.preferences.JSPCorePreferenceNames; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.core.internal.util.FacetModuleCoreSupport; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.osgi.util.NLS; -import org.eclipse.ui.dialogs.WizardNewFileCreationPage; - -class NewJSPFileWizardPage extends WizardNewFileCreationPage { - - private IContentType fContentType; - private List fValidExtensions = null; - - public NewJSPFileWizardPage(String pageName, IStructuredSelection selection) { - super(pageName, selection); - } - - /** - * This method is overriden to set the selected folder to web contents - * folder if the current selection is outside the web contents folder. - */ - protected void initialPopulateContainerNameField() { - super.initialPopulateContainerNameField(); - - IPath fullPath = getContainerFullPath(); - IProject project = getProjectFromPath(fullPath); - IPath webContentPath = getWebContentPath(project); - - if (webContentPath != null && !webContentPath.isPrefixOf(fullPath)) { - setContainerFullPath(webContentPath); - } - } - - /** - * This method is overriden to set additional validation specific to jsp - * files. - */ - protected boolean validatePage() { - setMessage(null); - setErrorMessage(null); - - if (!super.validatePage()) { - return false; - } - - String fileName = getFileName(); - IPath fullPath = getContainerFullPath(); - if ((fullPath != null) && (fullPath.isEmpty() == false) && (fileName != null)) { - // check that filename does not contain invalid extension - if (!extensionValidForContentType(fileName)) { - setErrorMessage(NLS.bind(JSPUIMessages._ERROR_FILENAME_MUST_END_JSP, getValidExtensions().toString())); - return false; - } - // no file extension specified so check adding default - // extension doesn't equal a file that already exists - if (fileName.lastIndexOf('.') == -1) { - String newFileName = addDefaultExtension(fileName); - IPath resourcePath = fullPath.append(newFileName); - - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IStatus result = workspace.validatePath(resourcePath.toString(), IResource.FOLDER); - if (!result.isOK()) { - // path invalid - setErrorMessage(result.getMessage()); - return false; - } - - if ((workspace.getRoot().getFolder(resourcePath).exists() || workspace.getRoot().getFile(resourcePath).exists())) { - setErrorMessage(JSPUIMessages.ResourceGroup_nameExists); - return false; - } - } - - // get the IProject for the selection path - IProject project = getProjectFromPath(fullPath); - if (project != null) { - if (!isJavaProject(project)) { - setMessage(JSPUIMessages._WARNING_FILE_MUST_BE_INSIDE_JAVA_PROJECT, WARNING); - } - // if inside web project, check if inside webContent folder - if (isDynamicWebProject(project)) { - // check that the path is inside the webContent folder - IPath webContentPath = getWebContentPath(project); - if (!webContentPath.isPrefixOf(fullPath)) { - setMessage(JSPUIMessages._WARNING_FOLDER_MUST_BE_INSIDE_WEB_CONTENT, WARNING); - } - } - } - } - - return true; - } - - /** - * Adds default extension to the filename - * - * @param filename - * @return - */ - String addDefaultExtension(String filename) { - StringBuffer newFileName = new StringBuffer(filename); - - Preferences preference = JSPCorePlugin.getDefault().getPluginPreferences(); - String ext = preference.getString(JSPCorePreferenceNames.DEFAULT_EXTENSION); - - newFileName.append("."); //$NON-NLS-1$ - newFileName.append(ext); - - return newFileName.toString(); - } - - /** - * Get content type associated with this new file wizard - * - * @return IContentType - */ - private IContentType getContentType() { - if (fContentType == null) - fContentType = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP); - return fContentType; - } - - /** - * Get list of valid extensions for JSP Content type - * - * @return - */ - private List getValidExtensions() { - if (fValidExtensions == null) { - IContentType type = getContentType(); - fValidExtensions = new ArrayList(Arrays.asList(type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC))); - } - return fValidExtensions; - } - - /** - * Verifies if fileName is valid name for content type. Takes base content - * type into consideration. - * - * @param fileName - * @return true if extension is valid for this content type - */ - private boolean extensionValidForContentType(String fileName) { - boolean valid = false; - - IContentType type = getContentType(); - // there is currently an extension - if (fileName.lastIndexOf('.') != -1) { - // check what content types are associated with current extension - IContentType[] types = Platform.getContentTypeManager().findContentTypesFor(fileName); - int i = 0; - while (i < types.length && !valid) { - valid = types[i].isKindOf(type); - ++i; - } - } - else - valid = true; // no extension so valid - return valid; - } - - /** - * Returns the project that contains the specified path - * - * @param path - * the path which project is needed - * @return IProject object. If path is <code>null</code> the return - * value is also <code>null</code>. - */ - private IProject getProjectFromPath(IPath path) { - IWorkspace workspace = ResourcesPlugin.getWorkspace(); - IProject project = null; - - if (path != null) { - if (workspace.validatePath(path.toString(), IResource.PROJECT).isOK()) { - project = workspace.getRoot().getProject(path.toString()); - } - else { - project = workspace.getRoot().getFile(path).getProject(); - } - } - - return project; - } - - /** - * Checks if the specified project is a web project. - * - * @param project - * project to be checked - * @return true if the project is web project, otherwise false - */ - private boolean isDynamicWebProject(IProject project) { - boolean is = FacetModuleCoreSupport.isDynamicWebProject(project); - return is; - } - - /** - * Checks if the specified project is a type of java project. - * - * @param project - * project to be checked (cannot be null) - * @return true if the project is a type of java project, otherwise false - */ - private boolean isJavaProject(IProject project) { - boolean isJava = false; - try { - isJava = project.hasNature(JavaCore.NATURE_ID); - } - catch (CoreException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - - return isJava; - } - - /** - * Returns the web contents folder of the specified project - * - * @param project - * the project which web contents path is needed - * @return IPath of the web contents folder - */ - private IPath getWebContentPath(IProject project) { - IPath path = FacetModuleCoreSupport.getWebContentRootPath(project); - return path; - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPTemplatesWizardPage.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPTemplatesWizardPage.java deleted file mode 100644 index edde79b2c1..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPTemplatesWizardPage.java +++ /dev/null @@ -1,505 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.wizard; - -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.preference.PreferenceDialog; -import org.eclipse.jface.resource.JFaceResources; -import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.jface.text.source.SourceViewer; -import org.eclipse.jface.text.source.SourceViewerConfiguration; -import org.eclipse.jface.text.templates.DocumentTemplateContext; -import org.eclipse.jface.text.templates.Template; -import org.eclipse.jface.text.templates.TemplateBuffer; -import org.eclipse.jface.text.templates.TemplateContext; -import org.eclipse.jface.text.templates.TemplateContextType; -import org.eclipse.jface.text.templates.persistence.TemplateStore; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredContentProvider; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.ITableLabelProvider; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.TableViewer; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.jst.jsp.core.internal.provisional.contenttype.ContentTypeIdForJSP; -import org.eclipse.jst.jsp.ui.StructuredTextViewerConfigurationJSP; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.jst.jsp.ui.internal.editor.IHelpContextIds; -import org.eclipse.jst.jsp.ui.internal.preferences.JSPUIPreferenceNames; -import org.eclipse.jst.jsp.ui.internal.templates.TemplateContextTypeIdsJSP; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ControlAdapter; -import org.eclipse.swt.events.ControlEvent; -import org.eclipse.swt.events.SelectionAdapter; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.graphics.Rectangle; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Link; -import org.eclipse.swt.widgets.Table; -import org.eclipse.swt.widgets.TableColumn; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.PreferencesUtil; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.sse.ui.StructuredTextViewerConfiguration; -import org.eclipse.wst.sse.ui.internal.StructuredTextViewer; -import org.eclipse.wst.sse.ui.internal.provisional.style.LineStyleProvider; - -/** - * Templates page in new file wizard. Allows users to select a new file - * template to be applied in new file. - * - */ -public class NewJSPTemplatesWizardPage extends WizardPage { - - /** - * Content provider for templates - */ - private class TemplateContentProvider implements IStructuredContentProvider { - /** The template store. */ - private TemplateStore fStore; - - /* - * @see IContentProvider#dispose() - */ - public void dispose() { - fStore = null; - } - - /* - * @see IStructuredContentProvider#getElements(Object) - */ - public Object[] getElements(Object input) { - return fStore.getTemplates(TemplateContextTypeIdsJSP.NEW); - } - - /* - * @see IContentProvider#inputChanged(Viewer, Object, Object) - */ - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - fStore = (TemplateStore) newInput; - } - } - - /** - * Label provider for templates. - */ - private class TemplateLabelProvider extends LabelProvider implements ITableLabelProvider { - - /* - * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, - * int) - */ - public Image getColumnImage(Object element, int columnIndex) { - return null; - } - - /* - * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, - * int) - */ - public String getColumnText(Object element, int columnIndex) { - Template template = (Template) element; - - switch (columnIndex) { - case 0 : - return template.getName(); - case 1 : - return template.getDescription(); - default : - return ""; //$NON-NLS-1$ - } - } - } - - /** Last selected template name */ - private String fLastSelectedTemplateName; - /** The viewer displays the pattern of selected template. */ - private SourceViewer fPatternViewer; - /** The table presenting the templates. */ - private TableViewer fTableViewer; - /** Template store used by this wizard page */ - private TemplateStore fTemplateStore; - /** Checkbox for using templates. */ - private Button fUseTemplateButton; - - public NewJSPTemplatesWizardPage() { - super("NewJSPTemplatesWizardPage", JSPUIMessages.NewJSPTemplatesWizardPage_0, null); //$NON-NLS-1$ - setDescription(JSPUIMessages.NewJSPTemplatesWizardPage_1); - } - - /** - * Correctly resizes the table so no phantom columns appear - * - * @param parent - * the parent control - * @param buttons - * the buttons - * @param table - * the table - * @param column1 - * the first column - * @param column2 - * the second column - * @param column3 - * the third column - */ - private void configureTableResizing(final Composite parent, final Table table, final TableColumn column1, final TableColumn column2) { - parent.addControlListener(new ControlAdapter() { - public void controlResized(ControlEvent e) { - Rectangle area = parent.getClientArea(); - Point preferredSize = table.computeSize(SWT.DEFAULT, SWT.DEFAULT); - int width = area.width - 2 * table.getBorderWidth(); - if (preferredSize.y > area.height) { - // Subtract the scrollbar width from the total column - // width - // if a vertical scrollbar will be required - Point vBarSize = table.getVerticalBar().getSize(); - width -= vBarSize.x; - } - - Point oldSize = table.getSize(); - if (oldSize.x > width) { - // table is getting smaller so make the columns - // smaller first and then resize the table to - // match the client area width - column1.setWidth(width / 2); - column2.setWidth(width / 2); - table.setSize(width, area.height); - } - else { - // table is getting bigger so make the table - // bigger first and then make the columns wider - // to match the client area width - table.setSize(width, area.height); - column1.setWidth(width / 2); - column2.setWidth(width / 2); - } - } - }); - } - - public void createControl(Composite ancestor) { - Composite parent = new Composite(ancestor, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - parent.setLayout(layout); - - // create checkbox for user to use JSP Template - fUseTemplateButton = new Button(parent, SWT.CHECK); - fUseTemplateButton.setText(JSPUIMessages.NewJSPTemplatesWizardPage_4); - GridData data = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); - fUseTemplateButton.setLayoutData(data); - fUseTemplateButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - enableTemplates(); - } - }); - - // create composite for Templates table - Composite innerParent = new Composite(parent, SWT.NONE); - GridLayout innerLayout = new GridLayout(); - innerLayout.numColumns = 2; - innerLayout.marginHeight = 0; - innerLayout.marginWidth = 0; - innerParent.setLayout(innerLayout); - GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); - innerParent.setLayoutData(gd); - - // Create linked text to just to templates preference page - Link link = new Link(innerParent, SWT.NONE); - link.setText(JSPUIMessages.NewJSPTemplatesWizardPage_6); - data = new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1); - link.setLayoutData(data); - link.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - linkClicked(); - } - }); - - // create table that displays templates - Table table = new Table(innerParent, SWT.BORDER | SWT.FULL_SELECTION); - - data = new GridData(GridData.FILL_BOTH); - data.widthHint = convertWidthInCharsToPixels(2); - data.heightHint = convertHeightInCharsToPixels(10); - data.horizontalSpan = 2; - table.setLayoutData(data); - table.setHeaderVisible(true); - table.setLinesVisible(true); - TableLayout tableLayout = new TableLayout(); - table.setLayout(tableLayout); - - TableColumn column1 = new TableColumn(table, SWT.NONE); - column1.setText(JSPUIMessages.NewJSPTemplatesWizardPage_2); - - TableColumn column2 = new TableColumn(table, SWT.NONE); - column2.setText(JSPUIMessages.NewJSPTemplatesWizardPage_3); - - fTableViewer = new TableViewer(table); - fTableViewer.setLabelProvider(new TemplateLabelProvider()); - fTableViewer.setContentProvider(new TemplateContentProvider()); - - fTableViewer.setSorter(new ViewerSorter() { - public int compare(Viewer viewer, Object object1, Object object2) { - if ((object1 instanceof Template) && (object2 instanceof Template)) { - Template left = (Template) object1; - Template right = (Template) object2; - int result = left.getName().compareToIgnoreCase(right.getName()); - if (result != 0) - return result; - return left.getDescription().compareToIgnoreCase(right.getDescription()); - } - return super.compare(viewer, object1, object2); - } - - public boolean isSorterProperty(Object element, String property) { - return true; - } - }); - - fTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) { - updateViewerInput(); - } - }); - - // create viewer that displays currently selected template's contents - fPatternViewer = doCreateViewer(parent); - - fTemplateStore = JSPUIPlugin.getDefault().getTemplateStore(); - fTableViewer.setInput(fTemplateStore); - - configureTableResizing(innerParent, table, column1, column2); - loadLastSavedPreferences(); - - PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.JSP_NEWWIZARD_TEMPLATE_HELPID); - Dialog.applyDialogFont(parent); - setControl(parent); - } - - /** - * Creates, configures and returns a source viewer to present the template - * pattern on the preference page. Clients may override to provide a - * custom source viewer featuring e.g. syntax coloring. - * - * @param parent - * the parent control - * @return a configured source viewer - */ - private SourceViewer createViewer(Composite parent) { - SourceViewerConfiguration sourceViewerConfiguration = new StructuredTextViewerConfiguration() { - StructuredTextViewerConfiguration baseConfiguration = new StructuredTextViewerConfigurationJSP(); - - public String[] getConfiguredContentTypes(ISourceViewer sourceViewer) { - return baseConfiguration.getConfiguredContentTypes(sourceViewer); - } - - public LineStyleProvider[] getLineStyleProviders(ISourceViewer sourceViewer, String partitionType) { - return baseConfiguration.getLineStyleProviders(sourceViewer, partitionType); - } - }; - SourceViewer viewer = new StructuredTextViewer(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL); - ((StructuredTextViewer) viewer).getTextWidget().setFont(JFaceResources.getFont("org.eclipse.wst.sse.ui.textfont")); //$NON-NLS-1$ - IStructuredModel scratchModel = StructuredModelManager.getModelManager().createUnManagedStructuredModelFor(ContentTypeIdForJSP.ContentTypeID_JSP); - IDocument document = scratchModel.getStructuredDocument(); - viewer.configure(sourceViewerConfiguration); - viewer.setDocument(document); - return viewer; - } - - private SourceViewer doCreateViewer(Composite parent) { - Label label = new Label(parent, SWT.NONE); - label.setText(JSPUIMessages.NewJSPTemplatesWizardPage_5); - GridData data = new GridData(); - data.horizontalSpan = 2; - label.setLayoutData(data); - - SourceViewer viewer = createViewer(parent); - viewer.setEditable(false); - - Control control = viewer.getControl(); - data = new GridData(GridData.FILL_BOTH); - data.horizontalSpan = 2; - data.heightHint = convertHeightInCharsToPixels(5); - control.setLayoutData(data); - - return viewer; - } - - /** - * Enable/disable controls in page based on fUseTemplateButton's current - * state. - */ - void enableTemplates() { - boolean enabled = fUseTemplateButton.getSelection(); - - if (!enabled) { - // save last selected template - Template template = getSelectedTemplate(); - if (template != null) - fLastSelectedTemplateName = template.getName(); - else - fLastSelectedTemplateName = ""; //$NON-NLS-1$ - - fTableViewer.setSelection(null); - } - else { - setSelectedTemplate(fLastSelectedTemplateName); - } - - fTableViewer.getControl().setEnabled(enabled); - fPatternViewer.getControl().setEnabled(enabled); - } - - /** - * Return the template preference page id - * - * @return - */ - private String getPreferencePageId() { - return "org.eclipse.wst.sse.ui.preferences.jsp.templates"; //$NON-NLS-1$ - } - - /** - * Get the currently selected template. - * - * @return - */ - private Template getSelectedTemplate() { - Template template = null; - IStructuredSelection selection = (IStructuredSelection) fTableViewer.getSelection(); - - if (selection.size() == 1) { - template = (Template) selection.getFirstElement(); - } - return template; - } - - /** - * Returns template string to insert. - * - * @return String to insert or null if none is to be inserted - */ - String getTemplateString() { - String templateString = null; - - Template template = getSelectedTemplate(); - if (template != null) { - TemplateContextType contextType = JSPUIPlugin.getDefault().getTemplateContextRegistry().getContextType(TemplateContextTypeIdsJSP.NEW); - IDocument document = new Document(); - TemplateContext context = new DocumentTemplateContext(contextType, document, 0, 0); - try { - TemplateBuffer buffer = context.evaluate(template); - templateString = buffer.getString(); - } - catch (Exception e) { - Logger.log(Logger.WARNING_DEBUG, "Could not create template for new jsp", e); //$NON-NLS-1$ - } - } - - return templateString; - } - - void linkClicked() { - String pageId = getPreferencePageId(); - PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(getShell(), pageId, new String[]{pageId}, null); - dialog.open(); - fTableViewer.refresh(); - } - - /** - * Load the last template name used in New JSP File wizard. - */ - private void loadLastSavedPreferences() { - String templateName = JSPUIPlugin.getDefault().getPreferenceStore().getString(JSPUIPreferenceNames.NEW_FILE_TEMPLATE_NAME); - if (templateName == null || templateName.length() == 0) { - fLastSelectedTemplateName = ""; //$NON-NLS-1$ - fUseTemplateButton.setSelection(false); - } - else { - fLastSelectedTemplateName = templateName; - fUseTemplateButton.setSelection(true); - } - enableTemplates(); - } - - /** - * Save template name used for next call to New JSP File wizard. - */ - void saveLastSavedPreferences() { - String templateName = ""; //$NON-NLS-1$ - - Template template = getSelectedTemplate(); - if (template != null) { - templateName = template.getName(); - } - - JSPUIPlugin.getDefault().getPreferenceStore().setValue(JSPUIPreferenceNames.NEW_FILE_TEMPLATE_NAME, templateName); - JSPUIPlugin.getDefault().savePluginPreferences(); - } - - /** - * Select a template in the table viewer given the template name. If - * template name cannot be found or templateName is null, just select - * first item in table. If no items in table select nothing. - * - * @param templateName - */ - private void setSelectedTemplate(String templateName) { - Object template = null; - - if (templateName != null && templateName.length() > 0) { - // pick the last used template - template = fTemplateStore.findTemplate(templateName, TemplateContextTypeIdsJSP.NEW); - } - - // no record of last used template so just pick first element - if (template == null) { - // just pick first element - template = fTableViewer.getElementAt(0); - } - - if (template != null) { - IStructuredSelection selection = new StructuredSelection(template); - fTableViewer.setSelection(selection, true); - } - } - - /** - * Updates the pattern viewer. - */ - void updateViewerInput() { - Template template = getSelectedTemplate(); - if (template != null) { - fPatternViewer.getDocument().set(template.getPattern()); - } - else { - fPatternViewer.getDocument().set(""); //$NON-NLS-1$ - } - } -} diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java deleted file mode 100644 index d152057e89..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2006 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.internal.wizard; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.OutputStreamWriter; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.Preferences; -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.StructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.jst.jsp.core.internal.JSPCorePlugin; -import org.eclipse.jst.jsp.ui.internal.JSPUIMessages; -import org.eclipse.jst.jsp.ui.internal.Logger; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImageHelper; -import org.eclipse.jst.jsp.ui.internal.editor.JSPEditorPluginImages; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.ide.IDE; -import org.eclipse.wst.sse.core.internal.encoding.CommonEncodingPreferenceNames; - -public class NewJSPWizard extends Wizard implements INewWizard { - private NewJSPFileWizardPage fNewFilePage; - private NewJSPTemplatesWizardPage fNewFileTemplatesPage; - private IStructuredSelection fSelection; - - public void addPages() { - fNewFilePage = new NewJSPFileWizardPage("JSPWizardNewFileCreationPage", new StructuredSelection(IDE.computeSelectedResources(fSelection))); //$NON-NLS-1$ - fNewFilePage.setTitle(JSPUIMessages._UI_WIZARD_NEW_HEADING); - fNewFilePage.setDescription(JSPUIMessages._UI_WIZARD_NEW_DESCRIPTION); - addPage(fNewFilePage); - - fNewFileTemplatesPage = new NewJSPTemplatesWizardPage(); - addPage(fNewFileTemplatesPage); - } - - public void init(IWorkbench aWorkbench, IStructuredSelection aSelection) { - fSelection = aSelection; - setWindowTitle(JSPUIMessages._UI_WIZARD_NEW_TITLE); - - ImageDescriptor descriptor = JSPEditorPluginImageHelper.getInstance().getImageDescriptor(JSPEditorPluginImages.IMG_OBJ_WIZBAN_NEWJSPFILE); - setDefaultPageImageDescriptor(descriptor); - } - - private void openEditor(final IFile file) { - if (file != null) { - getShell().getDisplay().asyncExec(new Runnable() { - public void run() { - try { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - IDE.openEditor(page, file, true); - } - catch (PartInitException e) { - Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e); - } - } - }); - } - } - - public boolean performFinish() { - boolean performedOK = false; - - // save user options for next use - fNewFileTemplatesPage.saveLastSavedPreferences(); - - // no file extension specified so add default extension - String fileName = fNewFilePage.getFileName(); - if (fileName.lastIndexOf('.') == -1) { - String newFileName = fNewFilePage.addDefaultExtension(fileName); - fNewFilePage.setFileName(newFileName); - } - - // create a new empty file - IFile file = fNewFilePage.createNewFile(); - - // if there was problem with creating file, it will be null, so make - // sure to check - if (file != null) { - // put template contents into file - String templateString = fNewFileTemplatesPage.getTemplateString(); - if (templateString != null) { - // determine the encoding for the new file - Preferences preference = JSPCorePlugin.getDefault().getPluginPreferences(); - String charSet = preference.getString(CommonEncodingPreferenceNames.OUTPUT_CODESET); - - try { - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - OutputStreamWriter outputStreamWriter = null; - if (charSet == null || charSet.trim().equals("")) { //$NON-NLS-1$ - // just use default encoding - outputStreamWriter = new OutputStreamWriter(outputStream); - } - else { - outputStreamWriter = new OutputStreamWriter(outputStream, charSet); - } - outputStreamWriter.write(templateString); - outputStreamWriter.flush(); - outputStreamWriter.close(); - ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); - file.setContents(inputStream, true, false, null); - inputStream.close(); - } - catch (Exception e) { - Logger.log(Logger.WARNING_DEBUG, "Could not create contents for new JSP file", e); //$NON-NLS-1$ - } - } - - // open the file in editor - openEditor(file); - - // everything's fine - performedOK = true; - } - return performedOK; - } - -}
\ No newline at end of file diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/views/contentoutline/JSPContentOutlineConfiguration.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/views/contentoutline/JSPContentOutlineConfiguration.java deleted file mode 100644 index f9a15705b3..0000000000 --- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/views/contentoutline/JSPContentOutlineConfiguration.java +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.jst.jsp.ui.views.contentoutline; - -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin; -import org.eclipse.wst.html.ui.views.contentoutline.HTMLContentOutlineConfiguration; - -/** - * Configuration for outline view page which shows JSP content. - * - * @see org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration - * @since 1.0 - */ -public class JSPContentOutlineConfiguration extends HTMLContentOutlineConfiguration { - - // private static final String ATT_CLASS = "class"; //$NON-NLS-1$ - - // TODO: Automate the loading of a real configuration based on the model - // type at - // creation time; clear on unConfigure so that a new embedded - // configuration can - // be used - // private StructuredContentOutlineConfiguration fEmbeddedConfiguration = - // null; - - /** - * Create new instance of JSPContentOutlineConfiguration - */ - public JSPContentOutlineConfiguration() { - // Must have empty constructor to createExecutableExtension - super(); - } - - /* - * (non-Javadoc) - * - * @see org.eclipse.wst.sse.ui.views.contentoutline.ContentOutlineConfiguration#getPreferenceStore() - */ - protected IPreferenceStore getPreferenceStore() { - return JSPUIPlugin.getDefault().getPreferenceStore(); - } -} |