Author: scabanovich
Date: 2011-04-01 16:44:45 -0400 (Fri, 01 Apr 2011)
New Revision: 30232
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java
Removed:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IVetoFeature.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/internal/core/impl/AnnotationDeclaration.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationLiteral.java
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.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/DefinitionContext.java
Log:
JBIDE-3120
https://issues.jboss.org/browse/JBIDE-3120
JBIDE-8196
https://issues.jboss.org/browse/JBIDE-8196
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -186,6 +186,7 @@
throws CoreException {
try {
CDIResourceVisitor rv = getResourceVisitor();
+ rv.incremental = false;
getProject().accept(rv);
FileSet fs = rv.fileSet;
builderDelegate.build(fs, getCDICoreNature());
@@ -198,8 +199,10 @@
protected void incrementalBuild(IResourceDelta delta,
IProgressMonitor monitor) throws CoreException {
CDIResourceVisitor rv = getResourceVisitor();
+ rv.incremental = true;
delta.accept(new SampleDeltaVisitor());
FileSet fs = rv.fileSet;
+// fs.getPackages().
builderDelegate.build(fs, getCDICoreNature());
}
@@ -286,10 +289,12 @@
}
class CDIResourceVisitor implements IResourceVisitor {
+ boolean incremental = false;
FileSet fileSet = new FileSet();
IPath[] outs = new IPath[0];
IPath[] srcs = new IPath[0];
IPath webinf = null;
+ Set<IPath> visited = new HashSet<IPath>();
CDIResourceVisitor() {
webinf = ProjectHome.getWebInfPath(getProject());
@@ -327,6 +332,10 @@
public boolean visit(IResource resource) throws CoreException {
IPath path = resource.getFullPath();
if(resource instanceof IFile) {
+ if(visited.contains(path)) {
+ return false;
+ }
+ visited.add(path);
IFile f = (IFile)resource;
for (int i = 0; i < outs.length; i++) {
if(outs[i].isPrefixOf(path)) {
@@ -342,6 +351,14 @@
IPackageDeclaration[] pkg = unit.getPackageDeclarations();
if(pkg != null && pkg.length > 0) {
fileSet.add(f.getFullPath(), pkg[0]);
+ if(incremental) {
+ IResource[] ms = resource.getParent().members();
+ for (IResource m: ms) {
+ if(m instanceof IFile &&
!m.getName().equals("package-info.java")) {
+ visit(m);
+ }
+ }
+ }
}
} else {
IType[] ts = unit.getTypes();
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionFactory.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -22,6 +22,7 @@
import org.eclipse.core.runtime.Platform;
import org.jboss.tools.cdi.core.CDICorePlugin;
import org.jboss.tools.cdi.core.extension.feature.IBeanNameFeature;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
/**
* Loads Eclipse extension point 'org.jboss.tools.cdi.core.cdiextensions'
@@ -44,6 +45,7 @@
public static String POINT_ID = "org.jboss.tools.cdi.core.cdiextensions";
public static Class<?>[] FEATURES = {
+ IProcessAnnotatedTypeFeature.class,
IBeanNameFeature.class
};
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/CDIExtensionManager.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -18,6 +18,7 @@
import org.jboss.tools.cdi.core.CDICoreNature;
import org.jboss.tools.cdi.core.extension.feature.IBeanNameFeature;
+import org.jboss.tools.cdi.core.extension.feature.IProcessAnnotatedTypeFeature;
/**
*
@@ -129,6 +130,14 @@
return result;
}
+ public Set<IProcessAnnotatedTypeFeature> getProcessAnnotatedTypeFeature() {
+ Set<IProcessAnnotatedTypeFeature> result = featureStorage.processAnnotatedType;
+ if(result == null) {
+ featureStorage.processAnnotatedType = result =
getFeature(IProcessAnnotatedTypeFeature.class);
+ }
+ return result;
+ }
+
private <F extends Object> Set<F> getFeature(Class<F> cls) {
Set<F> result = new HashSet<F>();
Set<ICDIExtension> extensions = getExtensions(cls);
@@ -145,9 +154,11 @@
class FeatureStorage {
Set<IBeanNameFeature> beanName = null;
+ Set<IProcessAnnotatedTypeFeature> processAnnotatedType = null;
void clean() {
beanName = null;
+ processAnnotatedType = null;
}
Added:
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
(rev 0)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -0,0 +1,33 @@
+/**
+ * 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.
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+package org.jboss.tools.cdi.core.extension.feature;
+
+import org.jboss.tools.cdi.internal.core.impl.definition.DefinitionContext;
+import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
+
+/**
+ * This feature corresponds to ProcessAnnotatedTypeEvent in CDI runtime.
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public interface IProcessAnnotatedTypeFeature {
+
+ /**
+ * Method is called after CDI builder loaded type definitions and before they are
+ * used to build beans. Client may change type definitions and there members or veto
them.
+ *
+ * @param typeDefinition
+ * @param context
+ */
+ public void processAnnotatedType(TypeDefinition typeDefinition, DefinitionContext
context);
+
+}
Property changes on:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IProcessAnnotatedTypeFeature.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Deleted:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IVetoFeature.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IVetoFeature.java 2011-04-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/extension/feature/IVetoFeature.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -1,22 +0,0 @@
-/*******************************************************************************
- * 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;
-
-/**
- * This feature corresponds to runtime feature
- * javax.enterprise.inject.spi.ProcessAnnotatedType.veto()
- *
- * @author Viacheslav Kabanovich
- *
- */
-public interface IVetoFeature {
-
-}
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationDeclaration.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -11,7 +11,6 @@
package org.jboss.tools.cdi.internal.core.impl;
import org.eclipse.core.resources.IResource;
-import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.IType;
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationLiteral.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationLiteral.java 2011-04-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/AnnotationLiteral.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -45,9 +45,8 @@
return declaringResource;
}
- @Override
public String getTypeName() {
- // TODO Auto-generated method stub
+ if(annotationType != null) return annotationType.getFullyQualifiedName();
return null;
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2011-04-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/CDIProject.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -1092,6 +1092,9 @@
ImplementationCollector ic = new ImplementationCollector(typeDefinitions);
for (TypeDefinition typeDefinition : typeDefinitions) {
+ if(typeDefinition.isVetoed()) {
+ continue;
+ }
ClassBean bean = null;
if(typeDefinition.getInterceptorAnnotation() != null ||
ic.isInterceptor(typeDefinition.getType())) {
bean = new InterceptorBean();
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractTypeDefinition.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -35,9 +35,19 @@
protected ParametedType parametedType = null;
protected String content = null;
+
+ protected boolean isVetoed = false;
public AbstractTypeDefinition() {}
+ public void veto() {
+ isVetoed = true;
+ }
+
+ public boolean isVetoed() {
+ return isVetoed;
+ }
+
public AbstractTypeDefinition getTypeDefinition() {
return this;
}
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-01
20:19:10 UTC (rev 30231)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java 2011-04-01
20:44:45 UTC (rev 30232)
@@ -21,6 +21,7 @@
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.extension.feature.IProcessAnnotatedTypeFeature;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
/**
@@ -298,7 +299,16 @@
if(workingCopy == null) {
return;
}
-
+
+ Set<TypeDefinition> newTypeDefinitions = new HashSet<TypeDefinition>();
+ for (String typeName: workingCopy.typeDefinitions.keySet()) {
+ TypeDefinition nd = workingCopy.typeDefinitions.get(typeName);
+ TypeDefinition od = typeDefinitions.get(typeName);
+ if(od != nd) {
+ newTypeDefinitions.add(nd);
+ }
+ }
+
types = workingCopy.types;
resources = workingCopy.resources;
childPaths = workingCopy.childPaths;
@@ -307,7 +317,16 @@
packages = workingCopy.packages;
packageDefinitions = workingCopy.packageDefinitions;
beanXMLs = workingCopy.beanXMLs;
-
+
+ Set<IProcessAnnotatedTypeFeature> fs =
project.getExtensionManager().getProcessAnnotatedTypeFeature();
+ if(fs != null && !fs.isEmpty()) {
+ for (TypeDefinition nd: newTypeDefinitions) {
+ for (IProcessAnnotatedTypeFeature f: fs) {
+ f.processAnnotatedType(nd, workingCopy);
+ }
+ }
+ }
+
project.getDelegate().update();
workingCopy = null;