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

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Apr 5 19:59:25 EDT 2011


Author: scabanovich
Date: 2011-04-05 19:59:23 -0400 (Tue, 05 Apr 2011)
New Revision: 30347

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java
Modified:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.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/feature/IProcessAnnotatedTypeFeature.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java
Log:
JBIDE-3120
https://issues.jboss.org/browse/JBIDE-3120

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -12,6 +12,7 @@
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -38,6 +39,8 @@
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
 import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationHelper;
 import org.jboss.tools.cdi.internal.core.scanner.CDIBuilderDelegate;
 import org.jboss.tools.cdi.internal.core.scanner.FileSet;
@@ -66,6 +69,8 @@
 
 	CDIResourceVisitor resourceVisitor = null;
 
+	Set<IBuildParticipantFeature> buildParticipants = null;
+
 	public CDICoreBuilder() {}
 
 	CDICoreNature getCDICoreNature() {
@@ -109,6 +114,7 @@
 		if(n == null) {
 			return null;
 		}
+		
 		if(n.hasNoStorage()) {
 			kind = FULL_BUILD;
 		}
@@ -137,12 +143,32 @@
 			}
 
 			n.getTypeFactory().clean();
+		
+			//1. Check class path.
+			boolean isClassPathUpdated = n.getClassPath().update();
+	
+			Map<String, XModelObject> newJars = new HashMap<String, XModelObject>();
+			if(isClassPathUpdated) {
+				n.getClassPath().setSrcs(getResourceVisitor().srcs);
+				
+				//2. Update class path.
+				newJars = n.getClassPath().process();
 
+				//3. Install extensions.
+				buildParticipants = n.getExtensionManager().getBuildParticipantFeature();
+				Set<IDefinitionContextExtension> es = new HashSet<IDefinitionContextExtension>();
+				for (IBuildParticipantFeature p: buildParticipants) {
+					IDefinitionContextExtension e = p.getContext();
+					if(e != null) es.add(e);
+				}
+				n.getDefinitions().setExtensions(es);
+			}
+
+			//4. Create working copy of context.
 			n.getDefinitions().newWorkingCopy(kind == FULL_BUILD);
 
-			if(n.getClassPath().update()) {
-				n.getClassPath().setSrcs(getResourceVisitor().srcs);
-				Map<String, XModelObject> newJars = n.getClassPath().process();
+			//5. Build bean definitions.
+			if(isClassPathUpdated) {
 				buildJars(newJars);
 				
 				n.getClassPath().validateProjectDependencies();
@@ -163,6 +189,7 @@
 				}
 			}
 
+			// 6. Save created definitions to project context and build beans.
 			getCDICoreNature().getDefinitions().applyWorkingCopy();
 			
 			long end = System.currentTimeMillis();

Added: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -0,0 +1,53 @@
+/******************************************************************************* 
+ * 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;
+
+import org.eclipse.core.runtime.IPath;
+
+/**
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IDefinitionContext {
+
+	/**
+	 * Returns existing working copy of original context, or this object if it is a working copy.
+	 * 
+	 * @return
+	 */
+	public IDefinitionContext getWorkingCopy();
+
+	/**
+	 * Creates copy of this object and makes it the working copy bounded to this object.
+	 * 
+	 * @param forFullBuild
+	 */
+	public void newWorkingCopy(boolean forFullBuild);
+
+	/**
+	 * Submits loaded definitions to original context.
+	 */
+	public void applyWorkingCopy();
+
+	/**
+	 * Removes all definitions.
+	 */
+	public void clean();
+
+	/**
+	 * Removes difinitions loaded from path.
+	 * 
+	 * @param path
+	 */
+	public void clean(IPath path);
+
+}


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

Added: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -0,0 +1,43 @@
+/******************************************************************************* 
+ * 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;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
+
+/**
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IRootDefinitionContext extends IDefinitionContext {
+
+	/**
+	 * Returns cdi project for which this context is created.
+	 * 
+	 * @return
+	 */
+	public CDICoreNature getProject();
+
+	/**
+	 * Registers path in context so that when its parent resource is removed from project,
+	 * definitions load from that path should be cleaned from context.
+	 * 
+	 * @param file
+	 */
+	public void addToParents(IPath file);
+
+	public int getAnnotationKind(IType annotationType);
+
+	public AnnotationDefinition getAnnotation(String fullyQualifiedName);
+
+}


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

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-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -21,6 +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.IBuildParticipantFeature;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
 
 /**
@@ -44,7 +45,8 @@
 	public static String POINT_ID = "org.jboss.tools.cdi.core.cdiextensions";
 
 	public static Class<?>[] FEATURES = {
-		IProcessAnnotatedTypeFeature.class,
+		IBuildParticipantFeature.class,
+		IProcessAnnotatedTypeFeature.class,		
 	};
 	
 	public static CDIExtensionFactory getInstance() {

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-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -17,6 +17,7 @@
 import java.util.Set;
 
 import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.extension.feature.IBuildParticipantFeature;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
 
 /**
@@ -129,6 +130,17 @@
 		return result;
 	}
 
+	public Set<IBuildParticipantFeature> getBuildParticipantFeature() {
+		Set<IBuildParticipantFeature> result = featureStorage.buildParticipant;
+		if(result == null) {
+			featureStorage.buildParticipant = result = getFeature(IBuildParticipantFeature.class);
+			for (IBuildParticipantFeature f: result) {
+				f.setProject(n);
+			}
+		}
+		return result;
+	}
+
 	private <F extends Object> Set<F> getFeature(Class<F> cls) {
 		Set<F> result = new HashSet<F>();
 		Set<ICDIExtension> extensions = getExtensions(cls);
@@ -144,10 +156,12 @@
 	}
 
 	class FeatureStorage {
+		Set<IBuildParticipantFeature> buildParticipant = null;
 		Set<IProcessAnnotatedTypeFeature> processAnnotatedType = null;
 		
 		void clean() {
 			processAnnotatedType = null;
+			buildParticipant = null;
 		}
 	
 	

Added: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -0,0 +1,40 @@
+/******************************************************************************* 
+ * 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;
+
+import org.jboss.tools.cdi.core.IDefinitionContext;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+
+/**
+ * Context to keep definitions loaded by CDI extensions.
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IDefinitionContextExtension extends IDefinitionContext {
+
+	public void setRootContext(IRootDefinitionContext context);
+
+	/**
+	 * Returns the entire context of CDI project.
+	 *  
+	 * @return
+	 */
+	public IRootDefinitionContext getRootContext();
+
+	/**
+	 * Returns existing working copy of original context, or this object if it is a working copy.
+	 * 
+	 * @return
+	 */
+	public IDefinitionContextExtension getWorkingCopy();
+
+}


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

Added: 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	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IBuildParticipantFeature.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -0,0 +1,31 @@
+/******************************************************************************* 
+ * 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.CDICoreNature;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
+
+/**
+ * This feature includes BeforeBeanDiscovery event of CDI runtime, but also it should provide
+ * facilities for incremental build and clean of project at design time. 
+ * 
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IBuildParticipantFeature {
+	
+	public void setProject(CDICoreNature n);
+
+	public void buildIsAboutToBegin();
+
+	public IDefinitionContextExtension getContext();
+
+}


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

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-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -1,16 +1,17 @@
-/**
- * This feature corresponds to runtime feature
- * javax.enterprise.inject.spi.ProcessAnnotatedType.setAnnotatedType()
- *
- * This feature is invoked by bean when it computes its name.
- * The first non-null value is accepted.
+/******************************************************************************* 
+ * 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 
  * 
- * @author Viacheslav Kabanovich
- *
- */
+ * Contributors: 
+ * Red Hat, Inc. - initial API and implementation 
+ ******************************************************************************/
 package org.jboss.tools.cdi.core.extension.feature;
 
-import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
+
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
 
 /**
@@ -28,6 +29,6 @@
 	 * @param typeDefinition
 	 * @param context
 	 */
-	public void processAnnotatedType(TypeDefinition typeDefinition, DefinitionContext context);
+	public void processAnnotatedType(TypeDefinition typeDefinition, IRootDefinitionContext context);
 
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -27,6 +27,7 @@
 import org.jboss.tools.cdi.core.IAnnotated;
 import org.jboss.tools.cdi.core.IAnnotationDeclaration;
 import org.jboss.tools.cdi.core.IJavaAnnotation;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.InterceptorBindingDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.JavaAnnotation;
@@ -49,7 +50,7 @@
 
 	public AbstractMemberDefinition() {}
 
-	protected void setAnnotatable(IAnnotatable member, IType contextType, DefinitionContext context) {
+	protected void setAnnotatable(IAnnotatable member, IType contextType, IRootDefinitionContext context) {
 		this.member = member;
 		try {
 			init(contextType, context);
@@ -76,7 +77,7 @@
 		return project.getDefinitions().getPackageDefinition(packageName);
 	}
 
-	protected void init(IType contextType, DefinitionContext context) throws CoreException {
+	protected void init(IType contextType, IRootDefinitionContext context) throws CoreException {
 		project = context.getProject();
 		resource = ((IJavaElement)member).getResource();
 		IAnnotation[] ts = member.getAnnotations();
@@ -86,7 +87,7 @@
 		}
 	}
 
-	public void addAnnotation(IJavaAnnotation ja, DefinitionContext context) {
+	public void addAnnotation(IJavaAnnotation ja, IRootDefinitionContext context) {
 		AnnotationDeclaration a = new AnnotationDeclaration();
 		a.setProject(context.getProject());
 		a.setDeclaration(ja);

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -21,6 +21,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.SourceRange;
 import org.jboss.tools.cdi.core.IParametedType;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.internal.core.impl.ParametedType;
 import org.jboss.tools.common.util.FileUtil;
 
@@ -60,12 +61,12 @@
 		return type;
 	}
 
-	public void setType(IType type, DefinitionContext context) {
+	public void setType(IType type, IRootDefinitionContext context) {
 		super.setAnnotatable(type, type, context);
 	}
 
 	@Override
-	protected void init(IType contextType, DefinitionContext context) throws CoreException {
+	protected void init(IType contextType, IRootDefinitionContext context) throws CoreException {
 		this.type = contextType;
 		super.init(contextType, context);
 		qualifiedName = getType().getFullyQualifiedName();

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -20,6 +20,7 @@
 import org.eclipse.jdt.core.IType;
 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.internal.core.impl.AnnotationDeclaration;
 
 /**
@@ -56,7 +57,7 @@
 	}
 
 	@Override
-	protected void init(IType contextType, DefinitionContext context) throws CoreException {
+	protected void init(IType contextType, IRootDefinitionContext context) throws CoreException {
 		super.init(contextType, context);
 		if(annotations.isEmpty()) {
 			//TODO check super ?
@@ -98,7 +99,7 @@
 		}
 	}
 
-	void initMemberDefinitions(IType contextType, DefinitionContext context) throws CoreException {
+	void initMemberDefinitions(IType contextType, IRootDefinitionContext context) throws CoreException {
 		IMethod[] ms = getType().getMethods();
 		for (int i = 0; i < ms.length; i++) {
 			AnnotationMemberDefinition m = new AnnotationMemberDefinition();

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationMemberDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -12,6 +12,7 @@
 
 import org.eclipse.jdt.core.IMethod;
 import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
 
 /**
@@ -33,7 +34,7 @@
 		return annotationDefinition;
 	}
 
-	public void setMethod(IMethod method, DefinitionContext context) {
+	public void setMethod(IMethod method, IRootDefinitionContext context) {
 		this.method = method;
 		setAnnotatable(method, method.getDeclaringType(), context);
 	}

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -21,6 +21,8 @@
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IType;
 import org.jboss.tools.cdi.core.CDICoreNature;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
 import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
 import org.jboss.tools.common.model.util.EclipseResourceUtil;
 
@@ -29,7 +31,7 @@
  * @author Viacheslav Kabanovich
  *
  */
-public class DefinitionContext {
+public class DefinitionContext implements IRootDefinitionContext {
 	protected CDICoreNature project;
 	protected IJavaProject javaProject;
 
@@ -44,15 +46,30 @@
 
 	private Map<IPath, BeansXMLDefinition> beanXMLs = new HashMap<IPath, BeansXMLDefinition>();
 
+	Set<IDefinitionContextExtension> extensions = new HashSet<IDefinitionContextExtension>();
+
 	private DefinitionContext workingCopy;
 	private DefinitionContext original;
 
 	public DefinitionContext() {}
 
+	public void setExtensions(Set<IDefinitionContextExtension> extensions) {
+		this.extensions.clear();
+		this.extensions.addAll(extensions);
+		for (IDefinitionContextExtension e: extensions) e.setRootContext(this);
+	}
+
 	private DefinitionContext copy(boolean clean) {
 		DefinitionContext copy = new DefinitionContext();
 		copy.project = project;
 		copy.javaProject = javaProject;
+		copy.extensions = new HashSet<IDefinitionContextExtension>();
+		for (IDefinitionContextExtension e: extensions) {
+			e.newWorkingCopy(clean);
+			IDefinitionContextExtension ecopy = e.getWorkingCopy();
+			ecopy.setRootContext(copy);
+			copy.extensions.add(ecopy);
+		}
 		if(!clean) {
 			copy.types.addAll(types);
 			copy.typeDefinitions.putAll(typeDefinitions);
@@ -145,7 +162,7 @@
 		addToParents(path);
 	}
 
-	private void addToParents(IPath file) {
+	public void addToParents(IPath file) {
 		if(file == null) return;
 		if(file.segmentCount() < 2) return;
 		IPath q = file;
@@ -176,6 +193,8 @@
 		synchronized (beanXMLs) {
 			beanXMLs.clear();
 		}
+	
+		for (IDefinitionContextExtension e: extensions) e.clean();
 	}
 
 	public void clean(IPath path) {
@@ -206,6 +225,8 @@
 		} else {
 			removeFromParents(path);
 		}
+	
+		for (IDefinitionContextExtension e: extensions) e.clean(path);
 	}
 
 	void removeFromParents(IPath file) {
@@ -326,6 +347,10 @@
 				}
 			}
 		}
+	
+		for (IDefinitionContextExtension e: extensions) {
+			e.applyWorkingCopy();
+		}
 
 		project.getDelegate().update();
 

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/FieldDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -11,6 +11,7 @@
 package org.jboss.tools.cdi.internal.core.impl.definition;
 
 import org.eclipse.jdt.core.IField;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.core.ITypeDeclaration;
 
 /**
@@ -24,7 +25,7 @@
 
 	public FieldDefinition() {}
 
-	public void setField(IField field, DefinitionContext context) {
+	public void setField(IField field, IRootDefinitionContext context) {
 		this.field = field;
 		setAnnotatable(field, field.getDeclaringType(), context);
 	}

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/MethodDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -10,6 +10,7 @@
  ******************************************************************************/ 
 package org.jboss.tools.cdi.internal.core.impl.definition;
 
+
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -24,10 +25,10 @@
 import org.jboss.tools.cdi.core.IAnnotationDeclaration;
 import org.jboss.tools.cdi.core.IInterceptorBinding;
 import org.jboss.tools.cdi.core.IInterceptorBindingDeclaration;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.core.IStereotypeDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.ClassBean;
-import org.jboss.tools.cdi.internal.core.impl.InterceptorBindingDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.ParametedType;
 import org.jboss.tools.common.model.project.ext.impl.ValueInfo;
 import org.jboss.tools.common.model.util.EclipseJavaUtil;
@@ -45,7 +46,7 @@
 
 	public MethodDefinition() {}
 
-	public void setMethod(IMethod method, DefinitionContext context) {
+	public void setMethod(IMethod method, IRootDefinitionContext context) {
 		this.method = method;
 		setAnnotatable(method, method.getDeclaringType(), context);
 	}
@@ -58,7 +59,7 @@
 		return isConstructor;
 	}
 
-	protected void init(IType contextType, DefinitionContext context) throws CoreException {
+	protected void init(IType contextType, IRootDefinitionContext context) throws CoreException {
 		super.init(contextType, context);
 		isConstructor = method.isConstructor();
 		//TODO process parameters for disposers and observers
@@ -69,7 +70,7 @@
 		return getProducesAnnotation() != null || getInjectAnnotation() != null;
 	}
 
-	void loadParamDefinitions(IType contextType, DefinitionContext context) throws CoreException {
+	void loadParamDefinitions(IType contextType, IRootDefinitionContext context) throws CoreException {
 		if(method == null) return;
 		boolean parametersAreInjectionPoints = parametersAreInjectionPoints();
 		String[] parameterNames = method.getParameterNames();

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java	2011-04-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/PackageDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -15,6 +15,7 @@
 import org.eclipse.jdt.core.IPackageDeclaration;
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.common.util.EclipseJavaUtil;
 
 /**
@@ -31,7 +32,7 @@
 		return qualifiedName;
 	}
 
-	public void setPackage(IPackageDeclaration pkg, DefinitionContext context) {
+	public void setPackage(IPackageDeclaration pkg, IRootDefinitionContext context) {
 		qualifiedName = pkg.getElementName();
 		IType contextType = null;
 		ICompilationUnit u = null;

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-05 20:01:52 UTC (rev 30346)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java	2011-04-05 23:59:23 UTC (rev 30347)
@@ -20,6 +20,7 @@
 import org.eclipse.jdt.core.IType;
 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.internal.core.impl.AnnotationDeclaration;
 import org.jboss.tools.cdi.internal.core.impl.ParametedType;
 
@@ -38,7 +39,7 @@
 	}
 
 	@Override
-	protected void init(IType contextType, DefinitionContext context) throws CoreException {
+	protected void init(IType contextType, IRootDefinitionContext context) throws CoreException {
 		super.init(contextType, context);
 		isAbstract = Flags.isAbstract(type.getFlags());
 		for (IAnnotationDeclaration a: annotations) {



More information about the jbosstools-commits mailing list