[jbosstools-commits] JBoss Tools SVN: r22083 - in trunk/cdi/plugins/org.jboss.tools.cdi.text.ext: src/org/jboss/tools/cdi/text/ext and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Fri May 14 08:32:32 EDT 2010


Author: dazarov
Date: 2010-05-14 08:32:31 -0400 (Fri, 14 May 2010)
New Revision: 22083

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/DisposerHyperlink.java
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerDisposerHyperlinkDetector.java
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerHyperlink.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.properties
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/CDIExtensionsMessages.java
   trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/messages.properties
Log:
https://jira.jboss.org/jira/browse/JBIDE-6251

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.properties
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.properties	2010-05-14 12:23:04 UTC (rev 22082)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.properties	2010-05-14 12:32:31 UTC (rev 22083)
@@ -1,3 +1,4 @@
 providerName=JBoss by Red Hat
 InjectedPointHyperlinkDetector=CDI Injected Point
+ProducerDisposerHyperlinkDetector=CDI Produser & Disposer
 Bundle-Name.0 = CDI Text Editors Extensions
\ No newline at end of file

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml	2010-05-14 12:23:04 UTC (rev 22082)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/plugin.xml	2010-05-14 12:32:31 UTC (rev 22083)
@@ -11,5 +11,15 @@
             targetId="org.eclipse.jdt.ui.javaCode">
       </hyperlinkDetector>
    </extension>
+
+	<extension
+         point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
+      <hyperlinkDetector
+            class="org.jboss.tools.cdi.text.ext.hyperlink.ProducerDisposerHyperlinkDetector"
+            id="org.jboss.tools.cdi.text.ext.hyperlink.ProducerDisposerHyperlinkDetector"
+            name="%ProducerDisposerHyperlinkDetector"
+            targetId="org.eclipse.jdt.ui.javaCode">
+      </hyperlinkDetector>
+   </extension>
    
 </plugin>

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/CDIExtensionsMessages.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/CDIExtensionsMessages.java	2010-05-14 12:23:04 UTC (rev 22082)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/CDIExtensionsMessages.java	2010-05-14 12:32:31 UTC (rev 22083)
@@ -22,4 +22,6 @@
 	public static String CDI_EXT_PLUGIN_NO_MESSAGE;
 	public static String CDI_INJECTED_POINT_HYPERLINK_OPEN_BEAN;
 	public static String CDI_INJECTED_POINT_HYPERLINK_OPEN_INJECTED_CLASS;
+	public static String CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_DISPOSER;
+	public static String CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_PRODUCER;
 }

Added: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/DisposerHyperlink.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/DisposerHyperlink.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/DisposerHyperlink.java	2010-05-14 12:32:31 UTC (rev 22083)
@@ -0,0 +1,69 @@
+/******************************************************************************* 
+ * Copyright (c) 2010 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.text.ext.hyperlink;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PartInitException;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsMessages;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsPlugin;
+import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink;
+
+public class DisposerHyperlink extends AbstractHyperlink{
+	IMethod method;
+	IRegion region;
+	
+	public DisposerHyperlink(IRegion region, IMethod method, IDocument document){
+		this.method = method;
+		this.region = region;
+		setDocument(document);
+	}
+	
+
+	@Override
+	protected IRegion doGetHyperlinkRegion(int offset) {
+		return region;
+	}
+
+	protected void doHyperlink(IRegion region) {
+		IEditorPart part = null;
+		
+		if(method != null){
+			try{
+				part = JavaUI.openInEditor(method);
+			}catch(JavaModelException ex){
+				CDIExtensionsPlugin.log(ex);
+			}catch(PartInitException ex){
+				CDIExtensionsPlugin.log(ex);
+			}
+			
+			if (part != null) {
+				JavaUI.revealInEditor(part, (IJavaElement)method);
+			} 
+		}
+		if (part == null)
+			openFileFailed();
+	}
+
+	@Override
+	public String getHyperlinkText() {
+		String text = CDIExtensionsMessages.CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_DISPOSER+" ";
+		if(method != null)
+			text += method.getElementName();
+		return text;
+	}
+	
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/DisposerHyperlink.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerDisposerHyperlinkDetector.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerDisposerHyperlinkDetector.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerDisposerHyperlinkDetector.java	2010-05-14 12:32:31 UTC (rev 22083)
@@ -0,0 +1,190 @@
+/******************************************************************************* 
+ * Copyright (c) 2010 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.text.ext.hyperlink;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.jdt.core.ICodeAssist;
+import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
+import org.eclipse.jdt.internal.ui.text.JavaWordFinder;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.CDICorePlugin;
+import org.jboss.tools.cdi.core.IBean;
+import org.jboss.tools.cdi.core.IBeanMethod;
+import org.jboss.tools.cdi.core.ICDIProject;
+import org.jboss.tools.cdi.core.IClassBean;
+import org.jboss.tools.cdi.core.IProducer;
+import org.jboss.tools.cdi.core.IProducerMethod;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsPlugin;
+
+public class ProducerDisposerHyperlinkDetector extends AbstractHyperlinkDetector {
+	
+	public IHyperlink[] detectHyperlinks(ITextViewer textViewer,
+			IRegion region, boolean canShowMultipleHyperlinks) {
+		ITextEditor textEditor= (ITextEditor)getAdapter(ITextEditor.class);
+		if (region == null || !canShowMultipleHyperlinks || !(textEditor instanceof JavaEditor))
+			return null;
+		
+		int offset= region.getOffset();
+		
+		IJavaElement input= EditorUtility.getEditorInputJavaElement(textEditor, false);
+		if (input == null)
+			return null;
+
+		if (input.getResource() == null || input.getResource().getProject() == null)
+			return null;
+
+		IDocument document= textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
+		IRegion wordRegion= JavaWordFinder.findWord(document, offset);
+		if (wordRegion == null)
+			return null;
+		
+		IFile file = null;
+		
+		try {
+			IResource resource = input.getCorrespondingResource();
+			if (resource instanceof IFile)
+				file = (IFile) resource;
+		} catch (JavaModelException e) {
+			CDIExtensionsPlugin.log(e);
+		}
+		
+		if(file == null)
+			return null;
+		
+		Set<IBean> beans = getBeans(file);
+		
+		if(beans == null)
+			return null;
+		
+		IJavaElement[] elements = null;
+		
+		try {
+			elements = ((ICodeAssist)input).codeSelect(wordRegion.getOffset(), wordRegion.getLength());
+			if (elements == null) 
+				return null;
+			
+			ArrayList<IHyperlink> hyperlinks = new ArrayList<IHyperlink>();
+			for (IJavaElement element : elements) {
+				
+				if(element instanceof IType){
+					if(CDIConstants.PRODUCES_ANNOTATION_TYPE_NAME.equals(((IType) element).getFullyQualifiedName())){
+						ICompilationUnit cUnit = (ICompilationUnit)input;
+						element = cUnit.getElementAt(wordRegion.getOffset());
+						if(element == null)
+							continue;
+					}
+				}
+				
+				if (element instanceof IMethod) {
+					for(IBean bean : beans){
+						if(bean instanceof IClassBean){
+							IProducerMethod producer = getProducer((IClassBean)bean, (IMethod)element);
+							if(producer != null){
+								List<IMethod> disposers = findDisposerMethods(producer);
+								for(IMethod method : disposers){
+									hyperlinks.add(new DisposerHyperlink(region, method, document));
+								}
+							}else{
+								IBeanMethod disposer = getDisposer((IClassBean)bean, (IMethod)element);
+								if(disposer != null){
+									List<IMethod> producers = findProducerMethods((IClassBean)bean, disposer);
+									for(IMethod method : producers){
+										hyperlinks.add(new ProducerHyperlink(region, method, document));
+									}
+								}
+							}
+						}
+					}
+				}
+			}
+			
+			if (hyperlinks != null && !hyperlinks.isEmpty()) {
+				return (IHyperlink[])hyperlinks.toArray(new IHyperlink[hyperlinks.size()]);
+			}
+		} catch (JavaModelException jme) {
+			CDIExtensionsPlugin.log(jme);
+		}
+		return null;
+	}
+	
+	private Set<IBean> getBeans(IFile file){
+		CDICoreNature cdiNature = CDICorePlugin.getCDI(file.getProject(), true);
+		
+		if(cdiNature == null)
+			return null;
+		
+		
+		ICDIProject cdiProject = cdiNature.getDelegate();
+		
+		if(cdiProject == null)
+			return null;
+		
+		
+		Set<IBean> beans = cdiProject.getBeans(file.getFullPath());
+		return beans;
+	}
+	
+	private IProducerMethod getProducer(IClassBean classBean, IMethod method){
+		for(IProducer producer : classBean.getProducers()){
+			if(producer instanceof IProducerMethod && ((IProducerMethod)producer).getMethod().equals(method))
+				return (IProducerMethod)producer;
+		}
+		return null;
+	}
+
+	private IBeanMethod getDisposer(IClassBean classBean, IMethod method){
+		for(IBeanMethod disposer : classBean.getDisposers()){
+			if(disposer.getMethod().equals(method))
+				return disposer;
+		}
+		return null;
+	}
+	
+	private List<IMethod> findProducerMethods(IClassBean classBean, IBeanMethod disposer){
+		ArrayList<IMethod> methods = new ArrayList<IMethod>();
+		for(IProducer producer : classBean.getProducers()){
+			if(producer instanceof IProducerMethod){
+				for(IBeanMethod beanMethod : producer.getCDIProject().resolveDisposers((IProducerMethod)producer)){
+					if(beanMethod.equals(disposer))
+						methods.add(((IProducerMethod)producer).getMethod());
+				}
+			}
+		}
+		return methods;
+	}
+
+	private List<IMethod> findDisposerMethods(IProducerMethod producer){
+		ArrayList<IMethod> methods = new ArrayList<IMethod>();
+		for(IBeanMethod beanMethod : producer.getCDIProject().resolveDisposers(producer)){
+			methods.add(beanMethod.getMethod());
+		}
+		return methods;
+	}
+	
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerDisposerHyperlinkDetector.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerHyperlink.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerHyperlink.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerHyperlink.java	2010-05-14 12:32:31 UTC (rev 22083)
@@ -0,0 +1,32 @@
+/******************************************************************************* 
+ * Copyright (c) 2010 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.text.ext.hyperlink;
+
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.jboss.tools.cdi.text.ext.CDIExtensionsMessages;
+
+public class ProducerHyperlink extends DisposerHyperlink{
+	
+	public ProducerHyperlink(IRegion region, IMethod method, IDocument document){
+		super(region, method, document);
+	}
+
+	@Override
+	public String getHyperlinkText() {
+		String text = CDIExtensionsMessages.CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_PRODUCER+" ";
+		if(method != null)
+			text += method.getElementName();
+		return text;
+	}
+	
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/hyperlink/ProducerHyperlink.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/messages.properties
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/messages.properties	2010-05-14 12:23:04 UTC (rev 22082)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.text.ext/src/org/jboss/tools/cdi/text/ext/messages.properties	2010-05-14 12:32:31 UTC (rev 22083)
@@ -1,3 +1,5 @@
 CDI_EXT_PLUGIN_NO_MESSAGE=No message
 CDI_INJECTED_POINT_HYPERLINK_OPEN_BEAN=Open CDI Bean
 CDI_INJECTED_POINT_HYPERLINK_OPEN_INJECTED_CLASS=Open Injected Class
+CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_DISPOSER=Open Bound Disposer Method
+CDI_PRODUCER_DISPOSER_HYPERLINK_OPEN_BOUND_PRODUCER=Open Bound Producer Method



More information about the jbosstools-commits mailing list