[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