[jbosstools-commits] JBoss Tools SVN: r30792 - 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
Fri Apr 22 20:33:40 EDT 2011


Author: scabanovich
Date: 2011-04-22 20:33:40 -0400 (Fri, 22 Apr 2011)
New Revision: 30792

Modified:
   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/extension/IDefinitionContextExtension.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.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/AnnotationDefinition.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/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/IDefinitionContext.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java	2011-04-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IDefinitionContext.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -50,4 +50,11 @@
 	 */
 	public void clean(IPath path);
 
+	/**
+	 * Removes definitions loaded from type
+	 * 
+	 * @param typeName
+	 */
+	public void clean(String typeName);
+
 }

Modified: 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	2011-04-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -23,13 +23,6 @@
  */
 public interface IDefinitionContextExtension extends IDefinitionContext {
 
-	/**
-	 * Removes definitions loaded from type
-	 * 
-	 * @param typeName
-	 */
-	public void clean(String typeName);
-
 	public void setRootContext(IRootDefinitionContext context);
 
 	/**

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java	2011-04-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -30,6 +30,10 @@
 
 	public AnnotationDeclaration() {}
 
+	public AnnotationDeclaration(AnnotationDeclaration d) {
+		d.copyTo(this);
+	}
+
 	protected void copyTo(AnnotationDeclaration other) {
 		other.project = project;
 		other.annotation = annotation;

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-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -12,6 +12,7 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -91,6 +92,10 @@
 		AnnotationDeclaration a = new AnnotationDeclaration();
 		a.setProject(context.getProject());
 		a.setDeclaration(ja);
+		addAnnotation(a, context);
+	}
+
+	private void addAnnotation(AnnotationDeclaration a, IRootDefinitionContext context) {
 		AnnotationDeclaration b = null;
 		int kind = context.getAnnotationKind(a.getType());
 		if(kind > 0 && (kind & AnnotationDefinition.STEREOTYPE) > 0) {
@@ -120,6 +125,20 @@
 		}
 	}
 
+	public void annotationKindChanged(String typeName, IRootDefinitionContext context) {
+		AnnotationDeclaration a = annotationsByType.get(typeName);
+		if(a == null) return;
+		Iterator<IAnnotationDeclaration> it = annotations.iterator();
+		while(it.hasNext()) {
+			IAnnotationDeclaration a1 = it.next();
+			IType t = a1.getType();
+			if(t != null && typeName.equals(t.getFullyQualifiedName())) it.remove();
+		}
+		//Make sure that a is non-specific annotation.
+		addAnnotation(new AnnotationDeclaration(a), context);
+		
+	}
+
 	public void removeAnnotation(IAnnotationDeclaration a) {
 		String name = ((AnnotationDeclaration)a).getTypeName();
 		IAnnotationDeclaration b = annotationsByType.get(name);

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-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -20,6 +20,7 @@
 import org.eclipse.jdt.core.IMethod;
 import org.eclipse.jdt.core.IType;
 import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.CDICorePlugin;
 import org.jboss.tools.cdi.core.IAnnotationDeclaration;
 import org.jboss.tools.cdi.core.IRootDefinitionContext;
 import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
@@ -77,6 +78,13 @@
 			//TODO check super ?
 			return;
 		}
+		revalidateKind(context);
+	}
+
+	public void revalidateKind(IRootDefinitionContext context) {
+		boolean hasMembers = (kind & QUALIFIER) > 0 || (kind & INTERCEPTOR_BINDING) > 0;
+		kind = NON_RELEVANT;
+		
 		Map<String, AnnotationDeclaration> ds = new HashMap<String, AnnotationDeclaration>();
 		
 		for (IAnnotationDeclaration a: annotations) {
@@ -115,8 +123,14 @@
 			}
 		}
 
-		if((kind & QUALIFIER) > 0 || (kind & INTERCEPTOR_BINDING) > 0) {
-			initMemberDefinitions(contextType, context);
+		boolean newHasMembers = (kind & QUALIFIER) > 0 || (kind & INTERCEPTOR_BINDING) > 0;
+		if(newHasMembers != hasMembers) {
+			methods.clear();
+			try {
+				initMemberDefinitions(type, context);
+			} catch (CoreException e) {
+				CDICorePlugin.getDefault().logError(e);
+			}
 		}
 	}
 

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-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -121,9 +121,14 @@
 		addType(file, typeName);
 		if(def != null) {
 			if(def instanceof AnnotationDefinition) {
+				AnnotationDefinition newD = (AnnotationDefinition)def;
+				AnnotationDefinition oldD = annotations.get(def.getQualifiedName());
 				synchronized (annotations) {
-					annotations.put(def.getQualifiedName(), (AnnotationDefinition)def);
+					annotations.put(def.getQualifiedName(), newD);
 				}
+				if(oldD != null && oldD.getKind() != newD.getKind()) {
+					annotationKindChanged(typeName);
+				}
 			} else {
 				synchronized (typeDefinitions) {
 					typeDefinitions.put(def.getQualifiedName(), (TypeDefinition)def);
@@ -208,18 +213,7 @@
 	public void clean(IPath path) {
 		Set<String> ts = resources.remove(path);
 		if(ts != null) for (String t: ts) {
-			types.remove(t);
-			synchronized (typeDefinitions) {
-				typeDefinitions.remove(t);
-			}
-			synchronized (annotations) {
-				annotations.remove(t);
-			}
-			packages.remove(t);
-			synchronized (packageDefinitions) {
-				packageDefinitions.remove(t);
-			}
-			for (IDefinitionContextExtension e: extensions) e.clean(t);
+			clean(t);
 		}
 		synchronized (beanXMLs) {
 			beanXMLs.remove(path);
@@ -238,6 +232,21 @@
 		for (IDefinitionContextExtension e: extensions) e.clean(path);
 	}
 
+	public void clean(String typeName) {
+		types.remove(typeName);
+		synchronized (typeDefinitions) {
+			typeDefinitions.remove(typeName);
+		}
+		synchronized (annotations) {
+			annotations.remove(typeName);
+		}
+		packages.remove(typeName);
+		synchronized (packageDefinitions) {
+			packageDefinitions.remove(typeName);
+		}
+		for (IDefinitionContextExtension e: extensions) e.clean(typeName);
+	}
+
 	void removeFromParents(IPath file) {
 		if(file == null) return;
 		IPath q = file;
@@ -297,7 +306,7 @@
 		d.setType(annotationType, this);
 		int kind = d.getKind();
 		if(kind <= AnnotationDefinition.CDI) {
-			d = null;
+//			d = null; //We need it to compare kind if extensions change it.
 		}
 		addType(annotationType.getPath(), name, d);
 		underConstruction.remove(name);
@@ -427,6 +436,13 @@
 	public TypeDefinition getTypeDefinition(String fullyQualifiedName) {
 		return typeDefinitions.get(fullyQualifiedName);
 	}
+
+	private void annotationKindChanged(String typeName) {
+		List<TypeDefinition> ds = getTypeDefinitions();
+		for (TypeDefinition d: ds) {
+			d.annotationKindChanged(typeName, this);
+		}
+	}
 	
 }
 

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-22 23:54:51 UTC (rev 30791)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/TypeDefinition.java	2011-04-23 00:33:40 UTC (rev 30792)
@@ -88,6 +88,12 @@
 //		}
 	}
 
+	public void annotationKindChanged(String typeName, IRootDefinitionContext context) {
+		super.annotationKindChanged(typeName, context);
+		for (FieldDefinition f: fields) f.annotationKindChanged(typeName, context);
+		for (FieldDefinition m: fields) m.annotationKindChanged(typeName, context);
+	}
+
 	public ParametedType getSuperType() {
 		return parametedType == null ? null : parametedType.getSuperType();
 	}



More information about the jbosstools-commits mailing list