[jbosstools-commits] JBoss Tools SVN: r30661 - in trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi: core/extension and 3 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Apr 19 14:16:24 EDT 2011


Author: scabanovich
Date: 2011-04-19 14:16:23 -0400 (Tue, 19 Apr 2011)
New Revision: 30661

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreNature.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java
Log:
JBIDE--8715
https://issues.jboss.org/browse/JBIDE-8715

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreNature.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreNature.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreNature.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -27,7 +27,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
 import org.jboss.tools.cdi.core.extension.CDIExtensionManager;
 import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
 import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
@@ -36,6 +38,8 @@
 import org.jboss.tools.cdi.internal.core.scanner.lib.ClassPathMonitor;
 import org.jboss.tools.common.model.XJob;
 import org.jboss.tools.common.model.XJob.XRunnable;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
+import org.jboss.tools.common.util.EclipseJavaUtil;
 import org.jboss.tools.common.util.FileUtil;
 import org.jboss.tools.common.xml.XMLUtilities;
 import org.jboss.tools.jst.web.kb.WebKbPlugin;
@@ -83,6 +87,23 @@
 		return project;
 	}
 
+	/**
+	 * Convenience method.
+	 * 
+	 * @param qualifiedName
+	 * @return
+	 */
+	public IType getType(String qualifiedName) {
+		IJavaProject jp = EclipseResourceUtil.getJavaProject(getProject());
+		if(jp == null) return null;
+		try {
+			return EclipseJavaUtil.findType(jp, qualifiedName);
+		} catch (JavaModelException e) {
+			CDICorePlugin.getDefault().logError(e);
+		}
+		return null;
+	}
+
 	public void setProject(IProject project) {
 		this.project = project;
 		classPath.init();

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -14,15 +14,16 @@
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
-import java.util.StringTokenizer;
 
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.core.runtime.IExtensionPoint;
 import org.eclipse.core.runtime.Platform;
 import org.jboss.tools.cdi.core.CDICorePlugin;
 import org.jboss.tools.cdi.core.extension.feature.IAmbiguousBeanResolverFeature;
 import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedMemberFeature;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
 
 /**
@@ -47,6 +48,7 @@
 
 	public static Class<?>[] FEATURES = {
 		IBuildParticipantFeature.class,
+		IProcessAnnotatedMemberFeature.class,
 		IProcessAnnotatedTypeFeature.class,
 		IAmbiguousBeanResolverFeature.class
 	};
@@ -86,7 +88,12 @@
 			String cls = c.getAttribute("class");
 			ICDIExtension extension = null;
 			try {
-				extension = (ICDIExtension)c.createExecutableExtension("class");
+				Object o = c.createExecutableExtension("class");
+				if(!(o instanceof ICDIExtension)) {
+					CDICorePlugin.getDefault().logError("CDI extension " + cls + " should implement ICDIExtension.");
+				} else {
+					extension = (ICDIExtension)o;
+				}
 			} catch (CoreException e) {
 				CDICorePlugin.getDefault().logError(e);
 				continue;
@@ -148,7 +155,10 @@
 		if(feature.isAssignableFrom(cls)) {
 			return (F)extension;
 		}
-		return (F)extension.getAdapter(feature);
+		if(extension instanceof IAdaptable) {
+			return (F)((IAdaptable)extension).getAdapter(feature);
+		}
+		return null;
 	}
 
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -19,6 +19,7 @@
 import org.jboss.tools.cdi.core.CDICoreNature;
 import org.jboss.tools.cdi.core.extension.feature.IAmbiguousBeanResolverFeature;
 import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedMemberFeature;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
 
 /**
@@ -123,6 +124,14 @@
 		return featureToExtensions.containsKey(feature) ? featureToExtensions.get(feature) : EMPTY;
 	}
 
+	public Set<IProcessAnnotatedMemberFeature> getProcessAnnotatedMemberFeature() {
+		Set<IProcessAnnotatedMemberFeature> result = featureStorage.processAnnotatedMember;
+		if(result == null) {
+			featureStorage.processAnnotatedMember = result = getFeature(IProcessAnnotatedMemberFeature.class);
+		}
+		return result;
+	}
+
 	public Set<IProcessAnnotatedTypeFeature> getProcessAnnotatedTypeFeature() {
 		Set<IProcessAnnotatedTypeFeature> result = featureStorage.processAnnotatedType;
 		if(result == null) {
@@ -166,10 +175,12 @@
 
 	class FeatureStorage {
 		Set<IBuildParticipantFeature> buildParticipant = null;
+		Set<IProcessAnnotatedMemberFeature> processAnnotatedMember = null;
 		Set<IProcessAnnotatedTypeFeature> processAnnotatedType = null;
 		Set<IAmbiguousBeanResolverFeature> ambiguousBeanResolver = null;
 		
 		void clean() {
+			processAnnotatedMember = null;
 			processAnnotatedType = null;
 			buildParticipant = null;
 			ambiguousBeanResolver = null;

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/ICDIExtension.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -28,6 +28,6 @@
  * @author Viacheslav Kabanovich
  *
  */
-public interface ICDIExtension extends IAdaptable {
+public interface ICDIExtension {
 
 }

Added: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -0,0 +1,34 @@
+/******************************************************************************* 
+ * 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.core.extension.feature;
+
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.internal.core.impl.definition.BeanMemberDefinition;
+
+/**
+ * This feature corresponds to ProcessAnnotatedTypeEvent in CDI runtime.
+ * 
+ * It is invoked as soon as builder have read member definition, but has not yet 
+ * added it to the parent type definition. That moment is important for extensions 
+ * that would recognize this member as a CDI artifact (producer, injection, observer) 
+ * even though it is not annotated so. Extensions that do not need to interfere 
+ * with CDI artifact recognition, may use IProcessAnnotatedTypeFeature instead, 
+ * which is invoked when all type definitions with members are built completely,
+ * and get access to members as child elements of the type definition.
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IProcessAnnotatedMemberFeature {
+
+	public void processAnnotatedMember(BeanMemberDefinition memberDefinition, IRootDefinitionContext context);
+
+}


Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -1361,23 +1361,14 @@
 	public Set<IBean> getBeans(boolean attemptToResolveAmbiguousDependency,
 			String fullyQualifiedBeanType,
 			String... fullyQualifiedQualifiersTypes) {
-		IType type = null;
-		try {
-			type = EclipseJavaUtil.findType(EclipseUtil.getJavaProject(getNature().getProject()), fullyQualifiedBeanType);
-		} catch (JavaModelException e) {
-			CDICorePlugin.getDefault().logError(e);
-		}
+		IType type = getNature().getType(fullyQualifiedBeanType);
 		if(type == null) {
 			return Collections.emptySet();
 		}
 		IParametedType beanType = getNature().getTypeFactory().newParametedType(type);
 		List<IType> qualifiers = new ArrayList<IType>();
 		if(fullyQualifiedQualifiersTypes != null) for (String s : fullyQualifiedQualifiersTypes) {
-			try {
-				type = EclipseJavaUtil.findType(EclipseUtil.getJavaProject(getNature().getProject()), s);
-			} catch (JavaModelException e) {
-				CDICorePlugin.getDefault().logError(e);
-			}
+			type = getNature().getType(s);
 			if(type != null) qualifiers.add(type);
 		}
 		

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java	2011-04-19 06:20:38 UTC (rev 30660)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java	2011-04-19 18:16:23 UTC (rev 30661)
@@ -12,6 +12,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.core.Flags;
@@ -21,6 +22,7 @@
 import org.jboss.tools.cdi.core.CDIConstants;
 import org.jboss.tools.cdi.core.IAnnotationDeclaration;
 import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedMemberFeature;
 import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.ParametedType;
 
@@ -46,11 +48,15 @@
 			//provide initialization
 			context.getAnnotationKind(a.getType());
 		}
+		Set<IProcessAnnotatedMemberFeature> extensions = context.getProject().getExtensionManager().getProcessAnnotatedMemberFeature();
 		IField[] fs = getType().getFields();
 		for (int i = 0; i < fs.length; i++) {
 			FieldDefinition f = new FieldDefinition();
 			f.setTypeDefinition(this);
 			f.setField(fs[i], context);
+			for (IProcessAnnotatedMemberFeature e: extensions) {
+				e.processAnnotatedMember(f, context);
+			}
 			if(f.isCDIAnnotated()) {
 				fields.add(f);
 			}
@@ -61,6 +67,9 @@
 			MethodDefinition m = new MethodDefinition();
 			m.setTypeDefinition(this);
 			m.setMethod(ms[i], context);
+			for (IProcessAnnotatedMemberFeature e: extensions) {
+				e.processAnnotatedMember(m, context);
+			}
 			if(m.isCDIAnnotated() || (ms[i].isConstructor() && ms[i].getNumberOfParameters()==0)) {
 				methods.add(m);
 			}



More information about the jbosstools-commits mailing list