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

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue May 3 16:16:27 EDT 2011


Author: scabanovich
Date: 2011-05-03 16:16:26 -0400 (Tue, 03 May 2011)
New Revision: 31043

Added:
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/Dependencies.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/IRootDefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.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/DefinitionContext.java
   trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.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-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/CDICoreBuilder.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -25,7 +25,9 @@
 import org.eclipse.core.resources.IResourceDelta;
 import org.eclipse.core.resources.IResourceDeltaVisitor;
 import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
@@ -42,6 +44,7 @@
 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.impl.definition.Dependencies;
 import org.jboss.tools.cdi.internal.core.scanner.CDIBuilderDelegate;
 import org.jboss.tools.cdi.internal.core.scanner.FileSet;
 import org.jboss.tools.common.EclipseUtil;
@@ -304,6 +307,29 @@
 		if(n != null) n.clean();
 	}
 
+	/**
+	 * Returns files directly dependent on path which are not included into visited set. 
+	 * 
+	 * @param path
+	 * @param visited
+	 * @return
+	 */
+	Set<IFile> getDependentFiles(IPath path, Set<IPath> visited) {
+		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+		Dependencies d = getCDICoreNature().getDefinitions().getWorkingCopy().getDependencies();
+		Set<IFile> result = new HashSet<IFile>();
+
+		// we do not need to recurse: that will be done by visitor.
+		Set<IPath> ps = d.getDirectDependencies(path);
+		if(ps != null) for (IPath p: ps) {
+			if(visited.contains(p)) continue;
+			IFile f = root.getFile(p);
+			if(f != null && f.exists()) result.add(f);
+		}
+		
+		return result;		
+	}
+
 	class SampleDeltaVisitor implements IResourceDeltaVisitor {
 		/*
 		 * @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
@@ -408,6 +434,8 @@
 							addBeansXML(f, fileSet);
 						}
 						for (IBuildParticipantFeature p: buildParticipants) p.visit(f, srcs[i], null);
+						Set<IFile> ds = getDependentFiles(path, visited);
+						if(ds != null) for (IFile d: ds) visit(d);
 						return false;
 					}
 				}
@@ -417,6 +445,9 @@
 					}
 					for (IBuildParticipantFeature p: buildParticipants) p.visit(f, null, webinf);
 				}
+				
+				Set<IFile> ds = getDependentFiles(path, visited);
+				if(ds != null) for (IFile d: ds) visit(d);
 			}
 			
 			if(resource instanceof IFolder) {

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-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/core/IRootDefinitionContext.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -53,4 +53,6 @@
 
 	public Set<IDefinitionContextExtension> getExtensions();
 
+	public void addDependency(IPath source, IPath target);
+
 }

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java	2011-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/BeanMember.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -10,6 +10,7 @@
  ******************************************************************************/ 
 package org.jboss.tools.cdi.internal.core.impl;
 
+import org.eclipse.core.resources.IResource;
 import org.eclipse.jdt.core.IField;
 import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IMethod;
@@ -97,7 +98,17 @@
 		return typeDeclaration;
 	}
 
+	public IResource getResource() {
+		if(definition.getOriginalDefinition() != null) {
+			return definition.getOriginalDefinition().getResource();
+		}
+		return super.getResource();
+	}
+
 	public int getLength() {
+		if(definition.getOriginalDefinition() != null) {
+			return definition.getOriginalDefinition().getLength();
+		}
 		ISourceRange r = null;
 		try {
 			getSourceMember().getSourceRange();
@@ -108,6 +119,9 @@
 	}
 
 	public int getStartPosition() {
+		if(definition.getOriginalDefinition() != null) {
+			return definition.getOriginalDefinition().getStartPosition();
+		}
 		ISourceRange r = null;
 		try {
 			getSourceMember().getSourceRange();

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-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/AbstractMemberDefinition.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -16,11 +16,13 @@
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.core.IAnnotatable;
 import org.eclipse.jdt.core.IAnnotation;
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMember;
 import org.eclipse.jdt.core.IType;
 import org.jboss.tools.cdi.core.CDIConstants;
 import org.jboss.tools.cdi.core.CDICoreNature;
@@ -51,6 +53,8 @@
 	protected IAnnotatable member;
 	protected Map<String, AnnotationDeclaration> annotationsByType = new HashMap<String, AnnotationDeclaration>();
 	protected IResource resource;
+	
+	protected ITextSourceReference originalDefinition = null;
 
 	public AbstractMemberDefinition() {}
 
@@ -63,6 +67,10 @@
 		}
 	}
 
+	public void setOriginalDefinition(ITextSourceReference def) {
+		originalDefinition = def;
+	}
+
 	public IAnnotatable getMember() {
 		return member;
 	}
@@ -98,8 +106,19 @@
 		a.setProject(context.getProject());
 		a.setDeclaration(ja);
 		addAnnotation(a, context);
+		addDependency(ja.getType(), context);
 	}
 
+	protected void addDependency(IMember reference, IRootDefinitionContext context) {
+		if(reference == null || reference.isBinary()) return;
+		if(!(resource instanceof IFile)) return;
+		IFile target = (IFile)resource;
+		IFile source = (IFile)reference.getResource();
+		if(target.exists() && source != null && source.exists()) {
+			context.addDependency(source.getFullPath(), target.getFullPath());
+		}
+	}
+
 	private void addAnnotation(AnnotationDeclaration a, IRootDefinitionContext context) {
 		AnnotationDeclaration b = null;
 		int kind = context.getAnnotationKind(a.getType());
@@ -204,4 +223,8 @@
 	public IResource getResource() {
 		return resource;
 	}
+
+	public ITextSourceReference getOriginalDefinition() {
+		return originalDefinition;
+	}
 }
\ No newline at end of file

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-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/DefinitionContext.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -48,6 +48,8 @@
 
 	Set<IDefinitionContextExtension> extensions = new HashSet<IDefinitionContextExtension>();
 
+	private Dependencies dependencies = new Dependencies();
+
 	private DefinitionContext workingCopy;
 	private DefinitionContext original;
 
@@ -99,6 +101,7 @@
 				}
 			}
 			copy.beanXMLs.putAll(beanXMLs);
+			copy.dependencies = dependencies;
 		}
 		
 		return copy;
@@ -208,6 +211,7 @@
 		}
 	
 		for (IDefinitionContextExtension e: extensions) e.clean();
+		dependencies.clean();
 	}
 
 	public void clean(IPath path) {
@@ -230,6 +234,7 @@
 		}
 	
 		for (IDefinitionContextExtension e: extensions) e.clean(path);
+		dependencies.clean(path);
 	}
 
 	public void clean(String typeName) {
@@ -357,6 +362,7 @@
 		packages = workingCopy.packages;
 		packageDefinitions = workingCopy.packageDefinitions;
 		beanXMLs = workingCopy.beanXMLs;
+		dependencies = workingCopy.dependencies;
 
 		Set<IProcessAnnotatedTypeFeature> fs = project.getExtensionManager().getProcessAnnotatedTypeFeature();
 		if(fs != null && !fs.isEmpty()) {
@@ -458,6 +464,14 @@
 		TypeDefinition d = typeDefinitions.get(type.getFullyQualifiedName());
 		if(d != null) d.unveto();
 	}
+
+	public void addDependency(IPath source, IPath target) {
+		dependencies.addDependency(source, target);
+	}
+
+	public Dependencies getDependencies() {
+		return dependencies;
+	}
 	
 }
 

Added: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/Dependencies.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/Dependencies.java	                        (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/impl/definition/Dependencies.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -0,0 +1,51 @@
+package org.jboss.tools.cdi.internal.core.impl.definition;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.core.runtime.IPath;
+
+public class Dependencies {
+	protected Map<IPath, Set<IPath>> direct = new HashMap<IPath, Set<IPath>>();
+	protected Map<IPath, Set<IPath>> reverse = new HashMap<IPath, Set<IPath>>();
+	
+	public Dependencies() {}
+
+	public void addDependency(IPath source, IPath target) {
+		Set<IPath> ps = direct.get(source);
+		if(ps == null) {
+			ps = new HashSet<IPath>();
+			direct.put(source, ps);
+		}
+		ps.add(target);
+		
+		ps = reverse.get(target);
+		if(ps == null) {
+			ps = new HashSet<IPath>();
+			reverse.put(target, ps);
+		}
+		ps.add(source);
+	}
+
+	public void clean() {
+		direct.clear();
+		reverse.clear();
+	}
+
+	public void clean(IPath path) {
+		Set<IPath> ps = reverse.remove(path);
+		if(ps != null) {
+			for (IPath p: ps) {
+				Set<IPath> ps1 = direct.get(p);
+				if(ps1 != null) ps1.remove(path);
+			}
+		}
+	}
+
+	public Set<IPath> getDirectDependencies(IPath path) {
+		return direct.get(path);
+	}
+
+}


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

Modified: trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java	2011-05-03 18:36:30 UTC (rev 31042)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.core/src/org/jboss/tools/cdi/internal/core/validation/CDICoreValidator.java	2011-05-03 20:16:26 UTC (rev 31043)
@@ -90,6 +90,7 @@
 import org.jboss.tools.cdi.internal.core.impl.ParametedType;
 import org.jboss.tools.cdi.internal.core.impl.Parameter;
 import org.jboss.tools.cdi.internal.core.impl.SessionBean;
+import org.jboss.tools.cdi.internal.core.impl.definition.Dependencies;
 import org.jboss.tools.common.model.util.EclipseJavaUtil;
 import org.jboss.tools.common.model.util.EclipseResourceUtil;
 import org.jboss.tools.common.text.ITextSourceReference;
@@ -270,6 +271,26 @@
 		// linked again during validation.
 		getValidationContext().removeLinkedCoreResources(SHORT_ID, resources);
 
+		Dependencies ds = cdiProject.getNature().getDefinitions().getDependencies();
+		Set<IFile> dependentFiles = new HashSet<IFile>();
+		for(IFile file: filesToValidate) {
+			Set<IPath> dd = ds.getDirectDependencies(file.getFullPath());
+			if(dd != null && !dd.isEmpty()) {
+				for (IPath p: dd) {
+					IFile f = cdiProject.getNature().getProject().getParent().getFile(p);
+					if(f != null && f.exists() && !filesToValidate.contains(f)) dependentFiles.add(f);
+				}
+			}
+		}
+		if(!dependentFiles.isEmpty()) {
+			System.out.println("Dependencies=" + dependentFiles.size());
+			filesToValidate.addAll(dependentFiles);
+		}
+
+		// We should remove markers from the source files at first
+		for(IFile file: filesToValidate) {
+			removeAllMessagesFromResource(file);
+		}
 		// Then we can validate them
 		for (IFile file : filesToValidate) {
 			validateResource(file);
@@ -340,6 +361,10 @@
 			}
 		}
 
+		// We should remove markers from the source files at first
+		for(IFile file: filesToValidate) {
+			removeAllMessagesFromResource(file);
+		}
 		for (IFile file : filesToValidate) {
 			validateResource(file);
 		}
@@ -359,9 +384,6 @@
 		displaySubtask(CDIValidationMessages.VALIDATING_RESOURCE, new String[] {file.getProject().getName(), file.getName()});
 		coreHelper.getValidationContextManager().addValidatedProject(this, file.getProject());
 
-		// We should remove markers from the source file at first
-		removeAllMessagesFromResource(file);
-
 		if("beans.xml".equalsIgnoreCase(file.getName()) && CDIPreferences.shouldValidateBeansXml(file.getProject())) {
 			// TODO should we check the path of the beans.xml? Or it's better to check the every beans.xml even if it is not in META-INF or WEB-INF.
 			beansXmlValidator.validateBeansXml(file);



More information about the jbosstools-commits mailing list