Author: scabanovich
Date: 2011-07-27 14:29:16 -0400 (Wed, 27 Jul 2011)
New Revision: 33264
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/ICDIFeature.java
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/CDIExtensionManager.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IAmbiguousBeanResolverFeature.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipant2Feature.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java
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/IProcessAnnotatedTypeFeature.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IValidatorFeature.java
Log:
JBIDE-9402
https://issues.jboss.org/browse/JBIDE-9402
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-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -21,11 +21,7 @@
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;
-import org.jboss.tools.cdi.core.extension.feature.IValidatorFeature;
+import org.jboss.tools.cdi.core.extension.feature.ICDIFeature;
/**
* Loads Eclipse extension point 'org.jboss.tools.cdi.core.cdiextensions'
@@ -47,14 +43,6 @@
static CDIExtensionFactory factory = null;
public static String POINT_ID = "org.jboss.tools.cdi.core.cdiextensions";
- public static Class<?>[] FEATURES = {
- IBuildParticipantFeature.class,
- IProcessAnnotatedMemberFeature.class,
- IProcessAnnotatedTypeFeature.class,
- IAmbiguousBeanResolverFeature.class,
- IValidatorFeature.class
- };
-
public static CDIExtensionFactory getInstance() {
if(factory == null) {
factory = new CDIExtensionFactory();
@@ -69,10 +57,9 @@
private Map<String, Set<String>> runtimeToDesign = new HashMap<String,
Set<String>>();
/**
- * Maps features to fully qualified names of implementations of ICDIExtention.
+ * Maps implementation class to its features (IAdaptable cannot be used without a way to
give all features)
*/
- private Map<Class<?>, Set<String>> featureToDesign = new
HashMap<Class<?>, Set<String>>();
-
+ private Map<Class<? extends ICDIExtension>, Set<Class<?>>>
designToFeatures = new HashMap<Class<? extends ICDIExtension>,
Set<Class<?>>>();
/**
* Maps fully qualified names of implementations of ICDIExtention to their Class
objects.
*/
@@ -110,32 +97,57 @@
runtimeToDesign.put(runtime, classes);
}
classes.add(cls);
-
- for (Class<?> f: FEATURES) {
- Object adapter = adaptTo(extension, f);
- if(adapter != null) {
- classes = featureToDesign.get(f);
- if(classes == null) {
- classes = new HashSet<String>();
- featureToDesign.put(f, classes);
- }
- classes.add(cls);
+ }
+ }
+
+ public Set<Class<?>> getFeatures(ICDIExtension extension) {
+ Set<Class<?>> result = designToFeatures.get(extension.getClass());
+ if(result == null) {
+ result = new HashSet<Class<?>>();
+ getFeatures(extension.getClass(), result);
+ }
+ return result;
+ }
+
+ Map<Class<?>, Boolean> featureCheck = new HashMap<Class<?>,
Boolean>();
+
+ void getFeatures(Class<?> cls, Set<Class<?>> result) {
+ if(cls == ICDIFeature.class) {
+ return;
+ }
+ if(isFeature(cls)) {
+ result.add(cls);
+ }
+ Class<?>[] is = cls.getInterfaces();
+ for (Class<?> c: is) {
+ getFeatures(c, result);
+ }
+ }
+
+ boolean isFeature(Class<?> cls) {
+ if(!cls.isInterface()) {
+ return false;
+ }
+ Boolean b = featureCheck.get(cls);
+ if(b == null) {
+ Class<?>[] is = cls.getInterfaces();
+ for (Class<?> c: is) {
+ if(c == ICDIFeature.class || isFeature(c)) {
+ b = Boolean.TRUE;
}
}
+ if(b == null) {
+ b = Boolean.FALSE;
+ }
+ featureCheck.put(cls, b);
}
+ return b.booleanValue();
}
public Set<String> getExtensionClassesByRuntime(String qualifiedName) {
return runtimeToDesign.get(qualifiedName);
}
- public Set<Class<?>> getFeatures() {
- return featureToDesign.keySet();
- }
- public Set<String> getExtensionClassesByFeature(Class<?> featureName) {
- return featureToDesign.get(featureName);
- }
-
public ICDIExtension createExtensionInstance(String qualifiedName) {
Class<? extends ICDIExtension> cls = designToClass.get(qualifiedName);
if(cls != 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-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -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.ICDIFeature;
import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedMemberFeature;
import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
import org.jboss.tools.cdi.core.extension.feature.IValidatorFeature;
@@ -46,7 +47,7 @@
*/
Map<Class<?>, Set<ICDIExtension>> featureToExtensions = new
HashMap<Class<?>, Set<ICDIExtension>>();
- FeatureStorage featureStorage = new FeatureStorage();
+ Map<Class<? extends ICDIFeature>, Set<?>> featureStorage = new
HashMap<Class<? extends ICDIFeature>, Set<?>>();
public CDIExtensionManager() {
}
@@ -95,17 +96,15 @@
ICDIExtension ext = factory.createExtensionInstance(cls);
if(ext == null) continue;
instances.put(cls, ext);
- for (Class<?> feature: CDIExtensionFactory.getInstance().getFeatures()) {
- if(factory.getExtensionClassesByFeature(feature).contains(cls)) {
- Set<ICDIExtension> es = featureToExtensions.get(feature);
- if(es == null) {
- es = new HashSet<ICDIExtension>();
- featureToExtensions.put(feature, es);
- }
- es.add(ext);
+ for (Class<?> feature: CDIExtensionFactory.getInstance().getFeatures(ext)) {
+ Set<ICDIExtension> es = featureToExtensions.get(feature);
+ if(es == null) {
+ es = new HashSet<ICDIExtension>();
+ featureToExtensions.put(feature, es);
}
+ es.add(ext);
}
- featureStorage.clean();
+ featureStorage.clear();
}
}
}
@@ -128,7 +127,7 @@
}
}
if(!clss.isEmpty()) {
- featureStorage.clean();
+ featureStorage.clear();
}
}
}
@@ -140,78 +139,53 @@
}
public Set<IProcessAnnotatedMemberFeature> getProcessAnnotatedMemberFeature() {
- Set<IProcessAnnotatedMemberFeature> result =
featureStorage.processAnnotatedMember;
- if(result == null) {
- featureStorage.processAnnotatedMember = result =
getFeature(IProcessAnnotatedMemberFeature.class);
- }
- return result;
+ return getFeature(IProcessAnnotatedMemberFeature.class);
}
public Set<IProcessAnnotatedTypeFeature> getProcessAnnotatedTypeFeature() {
- Set<IProcessAnnotatedTypeFeature> result = featureStorage.processAnnotatedType;
- if(result == null) {
- featureStorage.processAnnotatedType = result =
getFeature(IProcessAnnotatedTypeFeature.class);
- }
- return result;
+ return getFeature(IProcessAnnotatedTypeFeature.class);
}
public Set<IBuildParticipantFeature> getBuildParticipantFeature() {
- Set<IBuildParticipantFeature> result = featureStorage.buildParticipant;
- if(result == null) {
- featureStorage.buildParticipant = result =
getFeature(IBuildParticipantFeature.class);
+ if(!featureStorage.containsKey(IBuildParticipantFeature.class)) {
+ Set<IBuildParticipantFeature> result =
getFeature(IBuildParticipantFeature.class);
for (IBuildParticipantFeature f: result) {
f.setProject(n);
}
}
- return result;
+ return getFeature(IBuildParticipantFeature.class);
}
public Set<IAmbiguousBeanResolverFeature> getAmbiguousBeanResolverFeature() {
- Set<IAmbiguousBeanResolverFeature> result =
featureStorage.ambiguousBeanResolver;
- if(result == null) {
- featureStorage.ambiguousBeanResolver = result =
getFeature(IAmbiguousBeanResolverFeature.class);
- }
- return result;
+ return getFeature(IAmbiguousBeanResolverFeature.class);
}
public Set<IValidatorFeature> getValidatorFeature() {
- Set<IValidatorFeature> result = featureStorage.validator;
- if(result == null) {
- featureStorage.validator = result = getFeature(IValidatorFeature.class);
- }
- return result;
+ return getFeature(IValidatorFeature.class);
}
- private <F extends Object> Set<F> getFeature(Class<F> cls) {
- Set<F> result = new HashSet<F>();
- Set<ICDIExtension> extensions = getExtensions(cls);
- if(!extensions.isEmpty()) {
- for (ICDIExtension ext: extensions) {
- F feature = CDIExtensionFactory.adaptTo(ext, cls);
- if(feature != null) {
- result.add(feature);
+ /**
+ * Returns set of feature implementation objects by feature class.
+ *
+ * @param cls
+ * @return set of feature implementation objects by feature class
+ */
+ public <F extends ICDIFeature> Set<F> getFeature(Class<F> cls) {
+ Set<F> result = (Set<F>)featureStorage.get(cls);
+ if(result == null) {
+ result = new HashSet<F>();
+ Set<ICDIExtension> extensions = getExtensions(cls);
+ if(!extensions.isEmpty()) {
+ for (ICDIExtension ext: extensions) {
+ F feature = CDIExtensionFactory.adaptTo(ext, cls);
+ if(feature != null) {
+ result.add(feature);
+ }
}
}
+ featureStorage.put(cls, result);
}
return result;
}
- class FeatureStorage {
- Set<IBuildParticipantFeature> buildParticipant = null;
- Set<IProcessAnnotatedMemberFeature> processAnnotatedMember = null;
- Set<IProcessAnnotatedTypeFeature> processAnnotatedType = null;
- Set<IAmbiguousBeanResolverFeature> ambiguousBeanResolver = null;
- Set<IValidatorFeature> validator = null;
-
- void clean() {
- processAnnotatedMember = null;
- processAnnotatedType = null;
- buildParticipant = null;
- ambiguousBeanResolver = null;
- validator = null;
- }
-
-
- }
-
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IAmbiguousBeanResolverFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IAmbiguousBeanResolverFeature.java 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IAmbiguousBeanResolverFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -19,7 +19,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IAmbiguousBeanResolverFeature {
+public interface IAmbiguousBeanResolverFeature extends ICDIFeature {
/**
* Contributes to resolving ambiguous beans in methods ICDIProject.getBeans(boolean
attemptToResolveAmbiguousDependency, ...)
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipant2Feature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipant2Feature.java 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipant2Feature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -19,7 +19,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IBuildParticipant2Feature extends IBuildParticipantFeature {
+public interface IBuildParticipant2Feature extends IBuildParticipantFeature, ICDIFeature
{
/**
* Looks for artifacts in any jar entries.
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -29,7 +29,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IBuildParticipantFeature {
+public interface IBuildParticipantFeature extends ICDIFeature {
/**
* Sets CDI project access object once per lifetime of this object.
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/ICDIFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/ICDIFeature.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/ICDIFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -0,0 +1,21 @@
+/*******************************************************************************
+ * 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;
+
+/**
+ * Superinterface for CDI features to be recognized in extensions.
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface ICDIFeature {
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/ICDIFeature.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
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 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedMemberFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -27,7 +27,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IProcessAnnotatedMemberFeature {
+public interface IProcessAnnotatedMemberFeature extends ICDIFeature {
public void processAnnotatedMember(BeanMemberDefinition memberDefinition,
IRootDefinitionContext context);
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -19,7 +19,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IProcessAnnotatedTypeFeature {
+public interface IProcessAnnotatedTypeFeature extends ICDIFeature {
/**
* Method is called after CDI builder loaded type definitions and before they are
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IValidatorFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IValidatorFeature.java 2011-07-27
17:49:49 UTC (rev 33263)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IValidatorFeature.java 2011-07-27
18:29:16 UTC (rev 33264)
@@ -19,7 +19,7 @@
* @author Viacheslav Kabanovich
*
*/
-public interface IValidatorFeature {
+public interface IValidatorFeature extends ICDIFeature {
/**
* Contributes to validation of resource in CDICoreValidator.validateResource(IFile)