Author: scabanovich
Date: 2011-05-03 16:16:44 -0400 (Tue, 03 May 2011)
New Revision: 31044
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java
Log:
JBIDE-3120
https://issues.jboss.org/browse/JBIDE-3120
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java 2011-05-03
20:16:26 UTC (rev 31043)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/definition/SeamBeansDefinition.java 2011-05-03
20:16:44 UTC (rev 31044)
@@ -17,6 +17,7 @@
import java.util.Map;
import java.util.Set;
+import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.jboss.tools.cdi.core.IAnnotationDeclaration;
@@ -28,7 +29,9 @@
import org.jboss.tools.cdi.internal.core.impl.definition.ParameterDefinition;
import org.jboss.tools.cdi.internal.core.impl.definition.TypeDefinition;
import org.jboss.tools.cdi.seam.config.core.ConfigDefinitionContext;
+import org.jboss.tools.cdi.seam.config.core.xml.Location;
import org.jboss.tools.cdi.seam.config.core.xml.SAXNode;
+import org.jboss.tools.common.text.ITextSourceReference;
/**
*
@@ -36,6 +39,7 @@
*
*/
public class SeamBeansDefinition {
+ IResource resource;
Map<SAXNode, String> unresolvedNodes = new HashMap<SAXNode, String>();
Set<SeamBeanDefinition> beanDefinitions = new
HashSet<SeamBeanDefinition>();
@@ -46,6 +50,14 @@
public SeamBeansDefinition() {}
+ public void setResource(IResource resource) {
+ this.resource = resource;
+ }
+
+ public IResource getResource() {
+ return resource;
+ }
+
public Map<SAXNode, String> getUnresolvedNodes() {
return unresolvedNodes;
}
@@ -91,7 +103,6 @@
if(replaces) flags |= AbstractMemberDefinition.FLAG_NO_ANNOTATIONS;
typeDef.setType(type, context.getRootContext(), flags);
- System.out.println("--merge type def-->" +
def.getType().getFullyQualifiedName());
mergeTypeDefinition(def, typeDef, context);
typeDefinitions.add(typeDef);
@@ -115,6 +126,7 @@
String n = fieldDef.getField().getElementName();
SeamFieldDefinition f = def.getField(n);
if(f != null) {
+ fieldDef.setOriginalDefinition(new TextSourceReference(f.getNode().getLocation()));
mergeAnnotations(f, fieldDef, context);
}
}
@@ -152,4 +164,25 @@
}
}
+ class TextSourceReference implements ITextSourceReference {
+ Location location;
+
+ public TextSourceReference(Location location) {
+ this.location = location;
+ }
+
+ public int getStartPosition() {
+ return location.getStartPosition();
+ }
+
+ public int getLength() {
+ return location.getLength();
+ }
+
+ public IResource getResource() {
+ return resource;
+ }
+
+ }
+
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java 2011-05-03
20:16:26 UTC (rev 31043)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/scanner/SeamDefinitionBuilder.java 2011-05-03
20:16:44 UTC (rev 31044)
@@ -63,6 +63,7 @@
this.resource = resource;
result = new SeamBeansDefinition();
+ result.setResource(resource);
if(document.get().indexOf("<") >= 0) { // file can be empty
SAXParser parser = new SAXParser();
String text = document.get();
@@ -124,6 +125,7 @@
}
private SeamBeanDefinition scanBean(SAXElement element, IType type, boolean inline) {
+ addDependency(type);
SeamBeanDefinition def = new SeamBeanDefinition();
def.setInline(inline);
def.setNode(element);
@@ -421,6 +423,7 @@
TypeCheck typeCheck = new TypeCheck(type, element);
if(typeCheck.isCorrupted) return null;
if(typeCheck.isAnnotation) {
+ addDependency(type);
context.getRootContext().getAnnotationKind(type); // kick it
String value = null;
SAXText text = element.getTextNode();
@@ -475,4 +478,13 @@
return new AnnotationLiteral(resource, forElement.getLocation().getStartPosition(),
forElement.getLocation().getLength(), null, 0, type);
}
+ private void addDependency(IType type) {
+ if(!type.exists() || type.isBinary()) return;
+ if(!resource.exists() || resource.getName().endsWith(".jar")) return;
+ //beans.xml depends on type
+ context.getRootContext().addDependency(type.getResource().getFullPath(),
resource.getFullPath());
+ //though type does not depend on beans.xml it has to be revalidated. Maybe it should be
method addValidationDependency.
+ context.getRootContext().addDependency(resource.getFullPath(),
type.getResource().getFullPath());
+ }
+
}
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java
===================================================================
---
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java 2011-05-03
20:16:26 UTC (rev 31043)
+++
trunk/cdi/plugins/org.jboss.tools.cdi.seam.config.core/src/org/jboss/tools/cdi/seam/config/core/util/Util.java 2011-05-03
20:16:44 UTC (rev 31044)
@@ -94,11 +94,13 @@
}
public static IType resolveType(SAXElement element, CDICoreNature project) {
- String uri = element.getURI();
+ return resolveType(element.getURI(), element.getLocalName(), project);
+ }
+
+ public static IType resolveType(String name, String uri, CDICoreNature project) {
if(uri == null || !uri.startsWith(CDISeamConfigConstants.URI_PREFIX)) {
return null;
}
- String name = element.getLocalName();
String[] packages = getPackages(uri);
for (String pkg: packages) {
if(pkg.length() == 0) continue;