Author: dazarov
Date: 2011-06-22 17:48:21 -0400 (Wed, 22 Jun 2011)
New Revision: 32294
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/src/org/jboss/tools/cdi/seam/text/ext/hyperlink/XMLInjectedPointHyperlinkDetector.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/XMLInjectedPointHyperlinkDetectorTest.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/plugin.xml
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/InjectedPointHyperlinkDetector.java
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/CdiSeamTextExtAllTests.java
trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/META-INF/MANIFEST.MF
trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/src/org/jboss/tools/cdi/text/ext/test/CDIHyperlinkTestUtil.java
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/XMLTextViewerConfiguration.java
Log:
https://issues.jboss.org/browse/JBIDE-9187
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/plugin.xml 2011-06-22 21:42:40 UTC
(rev 32293)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/plugin.xml 2011-06-22 21:48:21 UTC
(rev 32294)
@@ -11,26 +11,26 @@
targetId="org.eclipse.jdt.ui.javaCode">
</hyperlinkDetector>
- </extension>
-
- <extension
- point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
<hyperlinkDetector
class="org.jboss.tools.cdi.seam.text.ext.hyperlink.GenericInjectedPointHyperlinkDetector"
id="org.jboss.tools.cdi.seam.text.ext.hyperlink.GenericInjectedPointHyperlinkDetector"
name="%GenericInjectedPointHyperlinkDetector"
targetId="org.eclipse.jdt.ui.javaCode">
</hyperlinkDetector>
- </extension>
- <extension
- point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
<hyperlinkDetector
class="org.jboss.tools.cdi.seam.text.ext.hyperlink.SeamConfigInjectedPointHyperlinkDetector"
id="org.jboss.tools.cdi.seam.text.ext.hyperlink.SeamConfigInjectedPointHyperlinkDetector"
name="%SeamConfigInjectedPointHyperlinkDetector"
targetId="org.eclipse.jdt.ui.javaCode">
</hyperlinkDetector>
+
+ <hyperlinkDetector
+
class="org.jboss.tools.cdi.seam.text.ext.hyperlink.XMLInjectedPointHyperlinkDetector"
+
id="org.jboss.tools.cdi.seam.text.ext.hyperlink.XMLInjectedPointHyperlinkDetector"
+ name="%XMLInjectedPointHyperlinkDetector"
+ targetId="org.eclipse.core.runtime.xml">
+ </hyperlinkDetector>
</extension>
<extension
@@ -80,4 +80,4 @@
</extension>
-</plugin>
\ No newline at end of file
+</plugin>
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/src/org/jboss/tools/cdi/seam/text/ext/hyperlink/XMLInjectedPointHyperlinkDetector.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/src/org/jboss/tools/cdi/seam/text/ext/hyperlink/XMLInjectedPointHyperlinkDetector.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/src/org/jboss/tools/cdi/seam/text/ext/hyperlink/XMLInjectedPointHyperlinkDetector.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is 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:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.seam.text.ext.hyperlink;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.wst.sse.core.internal.provisional.IndexedRegion;
+import org.eclipse.wst.xml.core.internal.provisional.document.IDOMElement;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.CDIUtil;
+import org.jboss.tools.cdi.seam.config.core.CDISeamConfigExtension;
+import org.jboss.tools.cdi.seam.config.core.definition.SeamBeansDefinition;
+import org.jboss.tools.cdi.seam.config.core.definition.SeamFieldDefinition;
+import org.jboss.tools.cdi.seam.config.core.definition.SeamMemberDefinition;
+import org.jboss.tools.cdi.seam.config.core.definition.SeamMethodDefinition;
+import org.jboss.tools.cdi.seam.config.core.util.Util;
+import org.jboss.tools.cdi.seam.text.ext.CDISeamExtPlugin;
+import org.jboss.tools.cdi.text.ext.hyperlink.InjectedPointHyperlinkDetector;
+import org.jboss.tools.common.model.ui.editor.EditorPartWrapper;
+import org.jboss.tools.common.text.ext.util.StructuredModelWrapper;
+import org.jboss.tools.common.text.ext.util.Utils;
+import org.jboss.tools.jst.text.ext.hyperlink.jsp.JSPRootHyperlinkPartitioner;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+public class XMLInjectedPointHyperlinkDetector extends InjectedPointHyperlinkDetector{
+ private static final String INJECT_NAME = "Inject";
+ private static final String INJECT_URI = "urn:java:ee";
+
+ public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
+ IRegion region, boolean canShowMultipleHyperlinks) {
+
+ this.viewer = textViewer;
+
+ if (region == null || !canShowMultipleHyperlinks)
+ return null;
+
+ IEditorPart editor =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+ if(!(editor instanceof EditorPartWrapper))
+ return null;
+
+ IEditorInput input = ((EditorPartWrapper)editor).getEditorInput();
+
+ if(!(input instanceof FileEditorInput))
+ return null;
+
+ IFile file = ((FileEditorInput)input).getFile();
+
+ if(file == null)
+ return null;
+
+ CDICoreNature cdiNature = CDIUtil.getCDINatureWithProgress(file.getProject());
+ if(cdiNature == null)
+ return null;
+
+ document = textViewer.getDocument();
+
+ ArrayList<IHyperlink> hyperlinks = new ArrayList<IHyperlink>();
+
+ Node node = getTagNode(region.getOffset() );
+ if(node == null) return null;
+
+ int offset= ((IndexedRegion)node).getStartOffset();
+
+ String uri = getURI(node);
+ IJavaElement element = null;
+ IType type = Util.resolveType(node.getLocalName(), uri, cdiNature);
+ if(type != null) {
+ element = type;
+ } else {
+ SeamMemberDefinition def = find(cdiNature, offset, file);
+ if(def instanceof SeamFieldDefinition) {
+ element = ((SeamFieldDefinition)def).getField();
+ } else if(def instanceof SeamMethodDefinition) {
+ element = ((SeamMethodDefinition)def).getMethod();
+ }
+ }
+ if(element != null) {
+ IFile elementFile = null;
+ try{
+ elementFile = (IFile)element.getUnderlyingResource();
+ }catch(JavaModelException ex){
+ CDISeamExtPlugin.log(ex);
+ }
+
+ if(elementFile != null)
+ findInjectedBeans(cdiNature, element, offset, elementFile, hyperlinks);
+
+ if (hyperlinks != null && !hyperlinks.isEmpty()) {
+ return (IHyperlink[])hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
+ }
+ }
+ return null;
+ }
+
+ private Node getTagNode(int offset) {
+ StructuredModelWrapper smw = new StructuredModelWrapper();
+ smw.init(document);
+ try {
+ Document xmlDocument = smw.getDocument();
+ if (xmlDocument == null) return null;
+
+ Node node = Utils.findNodeForOffset(xmlDocument, offset);
+ if(node == null) return null;
+
+ if(node instanceof IDOMElement){
+ if(INJECT_NAME.equals(node.getLocalName()) &&
+ INJECT_URI.equals(node.getNamespaceURI())){
+ return node.getParentNode();
+ }else if(offset >= ((IDOMElement)node).getStartOffset() && offset <=
((IDOMElement)node).getStartEndOffset())
+ return node;
+ }
+ return null;
+ } finally {
+ smw.dispose();
+ }
+ }
+
+ SeamMemberDefinition find(CDICoreNature cdi, int offset, IFile documentFile) {
+ CDISeamConfigExtension ext = CDISeamConfigExtension.getExtension(cdi);
+ if(ext == null) return null;
+ SeamBeansDefinition def = ext.getContext().getDefinition(documentFile.getFullPath());
+ if(def == null) return null;
+ return def.findExactly(offset);
+ }
+
+ private String getURI(Node node) {
+ String nodeName = node.getNodeName();
+ if (nodeName.indexOf(':') == -1) return null;
+ String nodePrefix = nodeName.substring(0, nodeName.indexOf(":"));
//$NON-NLS-1$
+ if (nodePrefix == null || nodePrefix.length() == 0) return null;
+ Map trackers = JSPRootHyperlinkPartitioner.getTrackersMap(document,
((IndexedRegion)node).getStartOffset());
+ return (String)(trackers == null ? null : trackers.get(nodePrefix));
+ }
+}
\ No newline at end of file
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.text.ext/src/org/jboss/tools/cdi/seam/text/ext/hyperlink/XMLInjectedPointHyperlinkDetector.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/InjectedPointHyperlinkDetector.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/InjectedPointHyperlinkDetector.java 2011-06-22
21:42:40 UTC (rev 32293)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/InjectedPointHyperlinkDetector.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -40,8 +40,8 @@
public class InjectedPointHyperlinkDetector extends AbstractHyperlinkDetector{
private IRegion region;
- private IDocument document;
- private ITextViewer viewer;
+ protected IDocument document;
+ protected ITextViewer viewer;
public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
IRegion region, boolean canShowMultipleHyperlinks) {
@@ -115,7 +115,7 @@
return null;
}
- private void findInjectedBeans(CDICoreNature nature, IJavaElement element, int offset,
IFile file, ArrayList<IHyperlink> hyperlinks){
+ protected void findInjectedBeans(CDICoreNature nature, IJavaElement element, int offset,
IFile file, ArrayList<IHyperlink> hyperlinks){
ICDIProject cdiProject = nature.getDelegate();
if(cdiProject == null){
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/CdiSeamTextExtAllTests.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/CdiSeamTextExtAllTests.java 2011-06-22
21:42:40 UTC (rev 32293)
+++
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/CdiSeamTextExtAllTests.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -33,6 +33,7 @@
TestSuite suiteConfig = new TestSuite("CDI Seam Config OpenOns Tests");
suiteConfig.addTestSuite(SeamConfigTagNameHyperlinkTest.class);
suiteConfig.addTestSuite(SeamConfigInjectedPointHyperlinkTest.class);
+ suiteConfig.addTestSuite(XMLInjectedPointHyperlinkDetectorTest.class);
suiteAll.addTest(new SeamConfigTestSetup(suiteConfig));
Added:
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/XMLInjectedPointHyperlinkDetectorTest.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/XMLInjectedPointHyperlinkDetectorTest.java
(rev 0)
+++
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/XMLInjectedPointHyperlinkDetectorTest.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -0,0 +1,27 @@
+package org.jboss.tools.cdi.seam.text.ext.test;
+
+import java.util.ArrayList;
+
+import org.jboss.tools.cdi.seam.config.core.test.SeamConfigTest;
+import org.jboss.tools.cdi.seam.text.ext.hyperlink.XMLInjectedPointHyperlinkDetector;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsMessages;
+import org.jboss.tools.cdi.text.ext.hyperlink.InjectedPointHyperlink;
+import org.jboss.tools.cdi.text.ext.test.CDIHyperlinkTestUtil;
+import org.jboss.tools.cdi.text.ext.test.CDIHyperlinkTestUtil.TestHyperlink;
+import org.jboss.tools.cdi.text.ext.test.CDIHyperlinkTestUtil.TestRegion;
+
+public class XMLInjectedPointHyperlinkDetectorTest extends SeamConfigTest{
+ private static final String FILENAME = "src/META-INF/seam-beans.xml";
+
+ public void testXMLInjectedPointHyperlinkDetector() throws Exception {
+ ArrayList<TestRegion> regionList = new ArrayList<TestRegion>();
+
+ regionList.add(new TestRegion(2166, 15, new TestHyperlink[]{
+ new TestHyperlink(InjectedPointHyperlink.class,
CDIExtensionsMessages.CDI_INJECTED_POINT_HYPERLINK_OPEN_INJECT_BEAN+ "
MyBean6.myType6")
+ //new TestHyperlink(AlternativeInjectedPointListHyperlink.class,
CDIExtensionsMessages.CDI_INJECTED_POINT_HYPERLINK_SHOW_ALTERNATIVES)
+ }));
+
+ CDIHyperlinkTestUtil.checkRegions(project, FILENAME, regionList, new
XMLInjectedPointHyperlinkDetector());
+ }
+
+}
Property changes on:
trunk/cdi/tests/org.jboss.tools.cdi.seam.text.ext.test/src/org/jboss/tools/cdi/seam/text/ext/test/XMLInjectedPointHyperlinkDetectorTest.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/META-INF/MANIFEST.MF
===================================================================
--- trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/META-INF/MANIFEST.MF 2011-06-22
21:42:40 UTC (rev 32293)
+++ trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/META-INF/MANIFEST.MF 2011-06-22
21:48:21 UTC (rev 32294)
@@ -18,7 +18,8 @@
org.eclipse.wst.xml.ui,
org.eclipse.jface;bundle-version="3.6.0",
org.jboss.tools.cdi.core;bundle-version="1.2.0",
- org.jboss.tools.common.el.core;bundle-version="3.3.0"
+ org.jboss.tools.common.el.core;bundle-version="3.3.0",
+ org.jboss.tools.jst.web.ui;bundle-version="3.3.0"
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %Bundle-Vendor.0
Export-Package: org.jboss.tools.cdi.text.ext.test
Modified:
trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/src/org/jboss/tools/cdi/text/ext/test/CDIHyperlinkTestUtil.java
===================================================================
---
trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/src/org/jboss/tools/cdi/text/ext/test/CDIHyperlinkTestUtil.java 2011-06-22
21:42:40 UTC (rev 32293)
+++
trunk/cdi/tests/org.jboss.tools.cdi.text.ext.test/src/org/jboss/tools/cdi/text/ext/test/CDIHyperlinkTestUtil.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -35,9 +35,11 @@
import org.jboss.tools.cdi.text.ext.hyperlink.ITestableCDIHyperlink;
import org.jboss.tools.common.editor.ObjectMultiPageEditor;
import org.jboss.tools.common.model.ui.editor.EditorPartWrapper;
+import org.jboss.tools.common.model.ui.texteditors.XMLTextEditorStandAlone;
import org.jboss.tools.common.text.ext.hyperlink.HyperlinkDetector;
import org.jboss.tools.common.text.ext.hyperlink.IHyperlinkRegion;
import org.jboss.tools.common.text.ext.util.AxisUtil;
+import org.jboss.tools.jst.web.ui.editors.WebCompoundEditor;
public class CDIHyperlinkTestUtil extends TestCase{
public static void checkRegions(IProject project, String fileName,
List<TestRegion> regionList, AbstractHyperlinkDetector elPartitioner) throws
Exception {
@@ -77,9 +79,20 @@
ISourceViewer viewer = null;
if(part instanceof JavaEditor){
viewer = ((JavaEditor)part).getViewer();
- }
+ elPartitioner.setContext(new TestContext((ITextEditor)part));
+ }else if(part instanceof EditorPartWrapper){
+ if(((EditorPartWrapper)part).getEditor() instanceof WebCompoundEditor){
+ WebCompoundEditor wce = (WebCompoundEditor)((EditorPartWrapper)part).getEditor();
+ viewer = wce.getSourceEditor().getTextViewer();
+ elPartitioner.setContext(new TestContext(wce.getSourceEditor()));
+ }else if(((EditorPartWrapper)part).getEditor() instanceof XMLTextEditorStandAlone){
+ XMLTextEditorStandAlone xtesa =
(XMLTextEditorStandAlone)((EditorPartWrapper)part).getEditor();
+ viewer = xtesa.getTextViewer();
+ elPartitioner.setContext(new TestContext(xtesa));
+ }else fail("unsupported editor type -
"+((EditorPartWrapper)part).getEditor().getClass());
+ }else fail("unsupported editor type - "+part.getClass());
- elPartitioner.setContext(new TestContext((ITextEditor)part));
+
int counter = 0;
for (int i = 0; i < document.getLength(); i++) {
@@ -87,6 +100,8 @@
IHyperlink[] links = elPartitioner.detectHyperlinks(viewer,
testData.getHyperlinkRegion(), true);
boolean recognized = links != null;
+// if(recognized)
+// System.out.println("Recognized - "+i);
if (recognized) {
counter++;
Modified:
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/XMLTextViewerConfiguration.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/XMLTextViewerConfiguration.java 2011-06-22
21:42:40 UTC (rev 32293)
+++
trunk/common/plugins/org.jboss.tools.common.text.xml/src/org/jboss/tools/common/text/xml/XMLTextViewerConfiguration.java 2011-06-22
21:48:21 UTC (rev 32294)
@@ -104,34 +104,20 @@
* @since 3.1
*/
public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) {
- if (fPreferenceStore == null)
- return null;
- if (sourceViewer == null ||
!fPreferenceStore.getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_HYPERLINKS_ENABLED))
- return null;
-
List<IHyperlinkDetector> allDetectors = new
ArrayList<IHyperlinkDetector>(0);
IHyperlinkDetector extHyperlinkDetector = getTextEditorsExtensionsHyperlinkDetector();
if (extHyperlinkDetector != null) allDetectors.add(extHyperlinkDetector);
-/*
IHyperlinkDetector[] superDetectors = super.getHyperlinkDetectors(sourceViewer);
- for (int m = 0; m < superDetectors.length; m++) {
- IHyperlinkDetector detector = superDetectors[m];
+ for (IHyperlinkDetector detector : superDetectors) {
if (!allDetectors.contains(detector)) {
allDetectors.add(detector);
}
}
-*/
- IHyperlinkDetector[] ts = (IHyperlinkDetector[]) allDetectors.toArray(new
IHyperlinkDetector[0]);
- IHyperlinkDetector[] in = (initial != null) ?
initial.getHyperlinkDetectors(sourceViewer) : null;
- if(in == null || in.length == 0) return ts;
- if(ts == null || ts.length == 0) return in;
- ArrayList<IHyperlinkDetector> total = new ArrayList<IHyperlinkDetector>();
- for (int i = 0; i < ts.length; i++) total.add(ts[i]);
- for (int i = 0; i < in.length; i++) if(!total.contains(in[i])) total.add(in[i]);
- return total.toArray(new IHyperlinkDetector[0]);
+
+ return allDetectors.toArray(new IHyperlinkDetector[0]);
}
@SuppressWarnings("deprecation")