Author: scabanovich
Date: 2011-04-12 19:51:35 -0400 (Tue, 12 Apr 2011)
New Revision: 30541
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/AbstractDefinitionContextExtension.java
Modified:
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/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
Log:
JBIDE-8717
https://issues.jboss.org/browse/JBIDE-8717
Modified:
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 2011-04-12
21:44:00 UTC (rev 30540)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java 2011-04-12
23:51:35 UTC (rev 30541)
@@ -10,8 +10,11 @@
******************************************************************************/
package org.jboss.tools.cdi.core;
+import java.util.Set;
+
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.extension.IDefinitionContextExtension;
import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
/**
@@ -36,8 +39,18 @@
*/
public void addToParents(IPath file);
+ /**
+ * Registers type name 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 addType(IPath file, String typeName);
+
public int getAnnotationKind(IType annotationType);
public AnnotationDefinition getAnnotation(String fullyQualifiedName);
+ public Set<IDefinitionContextExtension> getExtensions();
+
}
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/AbstractDefinitionContextExtension.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/AbstractDefinitionContextExtension.java
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/AbstractDefinitionContextExtension.java 2011-04-12
23:51:35 UTC (rev 30541)
@@ -0,0 +1,72 @@
+package org.jboss.tools.cdi.core.extension;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IType;
+import org.jboss.tools.cdi.core.CDIConstants;
+import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
+
+public abstract class AbstractDefinitionContextExtension implements
IDefinitionContextExtension {
+ protected IRootDefinitionContext root;
+
+ protected AbstractDefinitionContextExtension original;
+ protected AbstractDefinitionContextExtension workingCopy;
+
+ protected abstract AbstractDefinitionContextExtension copy(boolean clean);
+
+ public void newWorkingCopy(boolean forFullBuild) {
+ if(original != null) return;
+ workingCopy = copy(forFullBuild);
+ workingCopy.original = this;
+ }
+
+ public void applyWorkingCopy() {
+ if(original != null) {
+ original.applyWorkingCopy();
+ return;
+ }
+ if(workingCopy == null) {
+ return;
+ }
+
+ doApplyWorkingCopy();
+
+ workingCopy = null;
+ }
+
+ protected void doApplyWorkingCopy() {}
+
+ public void clean() {
+ }
+
+ public void clean(IPath path) {
+ }
+
+ public void clean(String typeName) {
+ }
+
+ public void setRootContext(IRootDefinitionContext context) {
+ this.root = context;
+ }
+
+ public IRootDefinitionContext getRootContext() {
+ return root;
+ }
+
+ public IDefinitionContextExtension getWorkingCopy() {
+ if(original != null) {
+ return this;
+ }
+ if(workingCopy != null) {
+ return workingCopy;
+ }
+ workingCopy = copy(false);
+ workingCopy.original = this;
+ return workingCopy;
+ }
+
+ public void computeAnnotationKind(AnnotationDefinition annotation) {
+
+ }
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/AbstractDefinitionContextExtension.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
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-12
21:44:00 UTC (rev 30540)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/IDefinitionContextExtension.java 2011-04-12
23:51:35 UTC (rev 30541)
@@ -10,8 +10,10 @@
******************************************************************************/
package org.jboss.tools.cdi.core.extension;
+import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.IDefinitionContext;
import org.jboss.tools.cdi.core.IRootDefinitionContext;
+import org.jboss.tools.cdi.internal.core.impl.definition.AnnotationDefinition;
/**
* Context to keep definitions loaded by CDI extensions.
@@ -21,6 +23,13 @@
*/
public interface IDefinitionContextExtension extends IDefinitionContext {
+ /**
+ * Removes definitions loaded from type
+ *
+ * @param typeName
+ */
+ public void clean(String typeName);
+
public void setRootContext(IRootDefinitionContext context);
/**
@@ -37,4 +46,12 @@
*/
public IDefinitionContextExtension getWorkingCopy();
+ /**
+ * Contributes to computing of annotation kind by root context.
+ *
+ * @param annotationType
+ * @return
+ */
+ public void computeAnnotationKind(AnnotationDefinition annotation);
+
}
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-12
21:44:00 UTC (rev 30540)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AnnotationDefinition.java 2011-04-12
23:51:35 UTC (rev 30541)
@@ -14,6 +14,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.IMethod;
@@ -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.IDefinitionContextExtension;
import org.jboss.tools.cdi.internal.core.impl.AnnotationDeclaration;
/**
@@ -36,9 +38,12 @@
public static final int STEREOTYPE = 8; //has Stereotype
public static final int INTERCEPTOR_BINDING = 16; //has InterceptorBinding
public static final int SCOPE = 32; //has Scope or NormalScope
+
+ public static final int EXTENDED = 1024;
//TODO add other definition kinds of interest
protected int kind = NON_RELEVANT;
+ protected Object extendedKind = null;
List<AnnotationMemberDefinition> methods = new
ArrayList<AnnotationMemberDefinition>();
@@ -48,10 +53,19 @@
this.kind = kind;
}
+ public void setExtendedKind(Object s) {
+ extendedKind = s;
+ kind |= EXTENDED;
+ }
+
public int getKind() {
return kind;
}
+ public boolean hasExtendedKind(Object kind) {
+ return extendedKind != null && extendedKind.equals(kind);
+ }
+
public List<AnnotationMemberDefinition> getMethods() {
return methods;
}
@@ -87,6 +101,13 @@
kind |= INTERCEPTOR_BINDING;
}
if(kind == NON_RELEVANT) {
+ Set<IDefinitionContextExtension> es = context.getExtensions();
+ for (IDefinitionContextExtension e: es) {
+ e.computeAnnotationKind(this);
+ if(kind == EXTENDED) break;
+ }
+ }
+ if(kind == NON_RELEVANT) {
if(AnnotationHelper.BASIC_ANNOTATION_TYPES.contains(qualifiedName)) {
kind = AnnotationDefinition.BASIC;
} else if(AnnotationHelper.CDI_ANNOTATION_TYPES.contains(qualifiedName)) {
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-12
21:44:00 UTC (rev 30540)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java 2011-04-12
23:51:35 UTC (rev 30541)
@@ -59,6 +59,10 @@
for (IDefinitionContextExtension e: extensions) e.setRootContext(this);
}
+ public Set<IDefinitionContextExtension> getExtensions() {
+ return extensions;
+ }
+
private DefinitionContext copy(boolean clean) {
DefinitionContext copy = new DefinitionContext();
copy.project = project;
@@ -114,16 +118,7 @@
}
public void addType(IPath file, String typeName, AbstractTypeDefinition def) {
- if(file != null) {
- Set<String> ts = resources.get(file);
- if(ts == null) {
- ts = new HashSet<String>();
- resources.put(file, ts);
- }
- ts.add(typeName);
- types.add(typeName);
- addToParents(file);
- }
+ addType(file, typeName);
if(def != null) {
if(def instanceof AnnotationDefinition) {
synchronized (annotations) {
@@ -162,6 +157,19 @@
addToParents(path);
}
+ public void addType(IPath file, String typeName) {
+ if(file != null) {
+ Set<String> ts = resources.get(file);
+ if(ts == null) {
+ ts = new HashSet<String>();
+ resources.put(file, ts);
+ }
+ ts.add(typeName);
+ types.add(typeName);
+ addToParents(file);
+ }
+ }
+
public void addToParents(IPath file) {
if(file == null) return;
if(file.segmentCount() < 2) return;
@@ -211,6 +219,7 @@
synchronized (packageDefinitions) {
packageDefinitions.remove(t);
}
+ for (IDefinitionContextExtension e: extensions) e.clean(t);
}
synchronized (beanXMLs) {
beanXMLs.remove(path);
@@ -248,6 +257,7 @@
public int getAnnotationKind(IType annotationType) {
if(annotationType == null) return -1;
+ if(!annotationType.exists()) return -1;
AnnotationDefinition d = getAnnotation(annotationType);
if(d != null) {
return d.getKind();