[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