Author: scabanovich
Date: 2007-07-04 03:15:13 -0400 (Wed, 04 Jul 2007)
New Revision: 2276
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamFactory.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/IFileScanner.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/LoadedDeclarations.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/JavaScanner.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/LibraryScanner.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java
Log:
EXIN-217 Optimization for incremental build provided.
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/core/SeamCoreBuilder.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -30,6 +30,7 @@
import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
import org.jboss.tools.seam.internal.core.SeamProject;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
+import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
import org.jboss.tools.seam.internal.core.scanner.java.JavaScanner;
import org.jboss.tools.seam.internal.core.scanner.lib.LibraryScanner;
import org.jboss.tools.seam.internal.core.scanner.xml.XMLScanner;
@@ -86,7 +87,7 @@
IFileScanner scanner = FILE_SCANNERS[i];
if(scanner.isRelevant(f)) {
if(!scanner.isLikelyComponentSource(f)) return false;
- SeamComponentDeclaration[] c = null;
+ LoadedDeclarations c = null;
try {
c = scanner.parse(f);
} catch (Exception e) {
@@ -101,8 +102,8 @@
}
}
- void componentsLoaded(SeamComponentDeclaration[] c, IFile resource) {
- if(c == null || c.length == 0) return;
+ void componentsLoaded(LoadedDeclarations c, IFile resource) {
+ if(c == null || c.getComponents().size() + c.getFactories().size() == 0) return;
SeamProject p = getSeamProject();
if(p == null) return;
p.registerComponents(c, resource.getFullPath());
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamComponentDeclaration.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -5,10 +5,28 @@
import org.jboss.tools.seam.core.ISeamComponentDeclaration;
public abstract class SeamComponentDeclaration implements ISeamComponentDeclaration {
-
+ /**
+ * Path of resource where this component is declared.
+ */
protected IPath source;
+
+ /**
+ * Object that allows to identify this declaration.
+ */
+ protected Object id;
+
+ /**
+ * Seam component name.
+ */
+ protected String name;
- protected String name;
+ public Object getId() {
+ return id;
+ }
+
+ public void setId(Object id) {
+ this.id = id;
+ }
public String getName() {
return name;
@@ -21,6 +39,10 @@
public void setSourcePath(IPath path) {
source = path;
}
+
+ public IPath getSourcePath() {
+ return source;
+ }
public int getLength() {
// TODO Auto-generated method stub
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamFactory.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamFactory.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamFactory.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -1,12 +1,39 @@
package org.jboss.tools.seam.internal.core;
+import org.eclipse.core.runtime.IPath;
import org.jboss.tools.seam.core.ISeamFactory;
import org.jboss.tools.seam.core.ScopeType;
public class SeamFactory implements ISeamFactory {
- String name = null;
+ /**
+ * Path of resource where this factory is declared.
+ */
+ protected IPath source;
+ /**
+ * Object that allows to identify this declaration.
+ */
+ protected Object id;
+
+ String name = null;
+ String scope = null;
ScopeType scopeType = ScopeType.UNSPECIFIED;
+ public Object getId() {
+ return id;
+ }
+
+ public void setId(Object id) {
+ this.id = id;
+ }
+
+ public void setSourcePath(IPath path) {
+ source = path;
+ }
+
+ public IPath getSourcePath() {
+ return source;
+ }
+
public String getName() {
return name;
}
@@ -21,6 +48,16 @@
public void setScope(ScopeType type) {
this.scopeType = type;
+ scope = scopeType.toString();
}
+ public void setScopeAsString(String scope) {
+ this.scope = scope;
+ try {
+ this.scopeType = scope == null || scope.length() == 0 ? ScopeType.UNSPECIFIED :
ScopeType.valueOf(scope.toUpperCase());
+ } catch (Exception e) {
+ //ignore
+ }
+ }
+
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -31,6 +31,18 @@
public void setType(IType type) {
this.type = type;
}
+
+ public ScopeType getScope() {
+ return scopeType;
+ }
+
+ public void setScope(String scope) {
+ if(scope == null || scope.length() == 0) {
+ scopeType = ScopeType.UNSPECIFIED;
+ } else {
+ scopeType = ScopeType.valueOf(scope.toUpperCase());
+ }
+ }
public String getClassName() {
return className;
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -27,6 +27,7 @@
import org.jboss.tools.seam.core.ISeamContextVariable;
import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration;
import org.jboss.tools.seam.core.ScopeType;
+import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
/**
* @author glory
@@ -85,29 +86,39 @@
* @param component
* @param source
*/
- public void registerComponents(SeamComponentDeclaration[] list, IPath source) {
+ public void registerComponents(LoadedDeclarations ds, IPath source) {
+ //deprecated
pathRemoved(source);
- if(list == null) return;
+
+ SeamComponentDeclaration[] components = ds.getComponents().toArray(new
SeamComponentDeclaration[0]);
+ SeamFactory[] factories = ds.getFactories().toArray(new SeamFactory[0]);
+
+ if(components.length == 0 && factories.length == 0) {
+ pathRemoved(source);
+ return;
+ }
+
+ Map<Object,ISeamComponentDeclaration> currentDeclarations =
findComponentDeclarations(source);
- for (int i = 0; i < list.length; i++) {
- list[i].setSourcePath(source);
- String name = list[i].getName();
+ for (int i = 0; i < components.length; i++) {
+ components[i].setSourcePath(source);
+ String name = components[i].getName();
SeamComponent c = getComponent(name);
if(c == null) {
c = newComponent(name);
allComponents.put(name, c);
}
- c.addDeclaration(list[i]);
- if(list[i] instanceof ISeamJavaComponentDeclaration) {
- javaDeclarations.put(c.getClassName(), (SeamJavaComponentDeclaration)list[i]);
+ c.addDeclaration(components[i]);
+ if(components[i] instanceof ISeamJavaComponentDeclaration) {
+ javaDeclarations.put(c.getClassName(), (SeamJavaComponentDeclaration)components[i]);
Set<ISeamComponent> cs = getComponentsByClass(c.getClassName());
for (ISeamComponent ci: cs) {
if(ci == c) continue;
SeamComponent cii = (SeamComponent)ci;
- cii.addDeclaration(list[i]);
+ cii.addDeclaration(components[i]);
}
- } else if(list[i] instanceof ISeamXmlComponentDeclaration) {
- ISeamXmlComponentDeclaration xml = (ISeamXmlComponentDeclaration)list[i];
+ } else if(components[i] instanceof ISeamXmlComponentDeclaration) {
+ ISeamXmlComponentDeclaration xml = (ISeamXmlComponentDeclaration)components[i];
String className = xml.getClassName();
SeamJavaComponentDeclaration j = javaDeclarations.get(className);
if(j != null) c.addDeclaration(j);
@@ -142,6 +153,17 @@
}
}
}
+
+ public Map<Object,ISeamComponentDeclaration> findComponentDeclarations(IPath
source) {
+ Map<Object,ISeamComponentDeclaration> map = new HashMap<Object,
ISeamComponentDeclaration>();
+ for (SeamComponent c: allComponents.values()) {
+ for (ISeamComponentDeclaration d: c.getAllDeclarations()) {
+ SeamComponentDeclaration di = (SeamComponentDeclaration)d;
+ if(source.equals(di.getSourcePath())) map.put(di.getId(), di);
+ }
+ }
+ return map;
+ }
//deprecated
public Set<ISeamComponent> getComponentsByName(String name) {
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/IFileScanner.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/IFileScanner.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/IFileScanner.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -38,6 +38,6 @@
* @return
* @throws Exception
*/
- public SeamComponentDeclaration[] parse(IFile f) throws Exception;
+ public LoadedDeclarations parse(IFile f) throws Exception;
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/LoadedDeclarations.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/LoadedDeclarations.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/LoadedDeclarations.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -3,14 +3,14 @@
import java.util.ArrayList;
import java.util.List;
-import org.jboss.tools.seam.internal.core.SeamComponent;
+import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
import org.jboss.tools.seam.internal.core.SeamFactory;
public class LoadedDeclarations {
- List<SeamComponent> components = new ArrayList<SeamComponent>();
+ List<SeamComponentDeclaration> components = new
ArrayList<SeamComponentDeclaration>();
List<SeamFactory> factories = new ArrayList<SeamFactory>();
- public List<SeamComponent> getComponents() {
+ public List<SeamComponentDeclaration> getComponents() {
return components;
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/JavaScanner.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/JavaScanner.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/JavaScanner.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -29,6 +29,7 @@
import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
import org.jboss.tools.seam.internal.core.SeamJavaComponentDeclaration;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
+import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
public class JavaScanner implements IFileScanner {
@@ -68,14 +69,13 @@
* @return
* @throws Exception
*/
- public SeamComponentDeclaration[] parse(IFile f) throws Exception {
+ public LoadedDeclarations parse(IFile f) throws Exception {
ICompilationUnit u = getCompilationUnit(f);
if(u == null) return null;
ASTRequestorImpl requestor = new ASTRequestorImpl();
ICompilationUnit[] us = new ICompilationUnit[]{u};
ASTParser.newParser(AST.JLS3).createASTs(us, new String[0], requestor, null);
- SeamComponentDeclaration component = requestor.getComponent();
- return component == null ? new SeamComponentDeclaration[0] : new
SeamComponentDeclaration[]{component};
+ return requestor.getDeclarations();
}
private ICompilationUnit getCompilationUnit(IFile f) throws Exception {
@@ -97,10 +97,10 @@
class ASTRequestorImpl extends ASTRequestor {
private ASTVisitorImpl visitor = new ASTVisitorImpl();
- private SeamJavaComponentDeclaration component = null;
+ LoadedDeclarations ds = new LoadedDeclarations();
- public SeamComponentDeclaration getComponent() {
- return component;
+ public LoadedDeclarations getDeclarations() {
+ return ds;
}
public void acceptAST(ICompilationUnit source, CompilationUnit ast) {
@@ -118,12 +118,14 @@
if(visitor.name != null && visitor.type != null) {
String n = visitor.type.getElementName();
n = getResolvedType(visitor.type, n);
- component = new SeamJavaComponentDeclaration();
+ SeamJavaComponentDeclaration component = new SeamJavaComponentDeclaration();
+ ds.getComponents().add(component);
+ component.setType(visitor.type);
+ component.setId(visitor.type);
component.setClassName(n);
component.setName(visitor.name);
if(visitor.scope != null) {
- //TODO
- //component.setScope(visitor.scope);
+ component.setScope(visitor.scope);
}
}
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/LibraryScanner.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/LibraryScanner.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/lib/LibraryScanner.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -10,15 +10,16 @@
******************************************************************************/
package org.jboss.tools.seam.internal.core.scanner.lib;
-import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.filesystems.impl.FileSystemsImpl;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
-import org.jboss.tools.seam.internal.core.SeamComponent;
-import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
+import org.jboss.tools.seam.internal.core.SeamPropertiesDeclaration;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
+import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
import org.jboss.tools.seam.internal.core.scanner.xml.XMLScanner;
public class LibraryScanner implements IFileScanner {
@@ -41,7 +42,7 @@
return false;
}
- public SeamComponentDeclaration[] parse(IFile f) throws Exception {
+ public LoadedDeclarations parse(IFile f) throws Exception {
XModelObject o = EclipseResourceUtil.getObjectByResource(f);
if(o == null) return null;
if(!o.getModelEntity().getName().equals("FileSystemJar")) {
@@ -53,30 +54,44 @@
XModelObject componentsXML = o.getChildByPath("META-INF/components.xml");
if(componentsXML == null && seamProperties == null) return null;
- ArrayList<SeamComponentDeclaration> list = new
ArrayList<SeamComponentDeclaration>();
+ LoadedDeclarations ds = new LoadedDeclarations();
- processJavaClasses(o, list);
+ processJavaClasses(o, ds);
if(componentsXML != null) {
- SeamComponentDeclaration[] components = new XMLScanner().parse(componentsXML);
- if(components != null) {
- for (int i = 0; i < components.length; i++) list.add(components[i]);
+ LoadedDeclarations ds1 = new XMLScanner().parse(componentsXML, f.getFullPath());
+ if(ds1 != null) {
+ ds.getComponents().addAll(ds1.getComponents());
+ ds.getFactories().addAll(ds1.getFactories());
}
}
if(seamProperties != null) {
XModelObject[] properties = seamProperties.getChildren();
+ Map<String, SeamPropertiesDeclaration> ds1 = new HashMap<String,
SeamPropertiesDeclaration>();
for (int i = 0; i < properties.length; i++) {
String name = properties[i].getAttributeValue("name");
String value = properties[i].getAttributeValue("value");
- //TODO put that to a component
+ int q = name.lastIndexOf('.');
+ if(q < 0) continue;
+ String componentName = name.substring(0, q);
+ String propertyName = name.substring(q + 1);
+ SeamPropertiesDeclaration d = ds1.get(componentName);
+ if(d == null) {
+ d = new SeamPropertiesDeclaration();
+ d.setId(properties[i]);
+ d.setSourcePath(f.getFullPath());
+ d.setName(componentName);
+ ds1.put(componentName, d);
+ }
+ d.addStringProperty(propertyName, value);
}
- //TODO add components to list
+ ds.getComponents().addAll(ds1.values());
}
- return list.toArray(new SeamComponentDeclaration[0]);
+ return ds;
}
- protected void processJavaClasses(XModelObject o,
ArrayList<SeamComponentDeclaration> list) {
+ protected void processJavaClasses(XModelObject o, LoadedDeclarations ds) {
//TODO
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java 2007-07-03
22:09:21 UTC (rev 2275)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java 2007-07-04
07:15:13 UTC (rev 2276)
@@ -18,16 +18,18 @@
import java.util.Set;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.IPath;
import org.jboss.tools.common.meta.XAttribute;
import org.jboss.tools.common.meta.XModelEntity;
import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
import org.jboss.tools.seam.core.ISeamXmlComponentDeclaration;
-import org.jboss.tools.seam.internal.core.SeamComponent;
-import org.jboss.tools.seam.internal.core.SeamComponentDeclaration;
+import org.jboss.tools.seam.core.ISeamXmlFactory;
+import org.jboss.tools.seam.internal.core.SeamFactory;
import org.jboss.tools.seam.internal.core.SeamProperty;
import org.jboss.tools.seam.internal.core.SeamXmlComponentDeclaration;
import org.jboss.tools.seam.internal.core.scanner.IFileScanner;
+import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
public class XMLScanner implements IFileScanner {
@@ -67,9 +69,9 @@
* @return
* @throws Exception
*/
- public SeamComponentDeclaration[] parse(IFile f) throws Exception {
+ public LoadedDeclarations parse(IFile f) throws Exception {
XModelObject o = EclipseResourceUtil.getObjectByResource(f);
- return parse(o);
+ return parse(o, f.getFullPath());
}
static Set<String> COMMON_ATTRIBUTES = new HashSet<String>();
@@ -85,9 +87,9 @@
// COMMON_ATTRIBUTES.add(ISeamComponent.JNDI_NAME);
}
- public SeamComponentDeclaration[] parse(XModelObject o) {
+ public LoadedDeclarations parse(XModelObject o, IPath source) {
if(o == null) return null;
- ArrayList<SeamComponentDeclaration> list = new
ArrayList<SeamComponentDeclaration>();
+ LoadedDeclarations ds = new LoadedDeclarations();
XModelObject[] os = o.getChildren();
for (int i = 0; i < os.length; i++) {
XModelEntity componentEntity = os[i].getModelEntity();
@@ -144,21 +146,21 @@
//TODO assign positioning attributes to created ISeamProperty object
}
- list.add(component);
+ ds.getComponents().add(component);
} else if(os[i].getModelEntity().getName().startsWith("SeamFactory")) {
- //TODO what is the best way for factory?
- SeamComponent component = new SeamComponent();
- //TODO
-// component.setName(os[i].getAttributeValue(ISeamComponent.NAME));
-// component.setScope(os[i].getAttributeValue(ISeamComponent.SCOPE));
+ //TODO replace with xml factory
+ SeamFactory factory = new SeamFactory();
+ factory.setId(os[i]);
+ factory.setSourcePath(source);
+ factory.setName(os[i].getAttributeValue(ISeamXmlComponentDeclaration.NAME));
+ factory.setScopeAsString(os[i].getAttributeValue(ISeamXmlComponentDeclaration.SCOPE));
String value = os[i].getAttributeValue("value");
- //TODO how should we resolve value?
-// if(value != null) component.addStringProperty("value", value);
-
-// list.add(component);
+ if(factory instanceof ISeamXmlFactory) {
+ ((ISeamXmlFactory)factory).setValue(value);
+ }
+ ds.getFactories().add(factory);
}
}
-
- return list.toArray(new SeamComponentDeclaration[0]);
+ return ds;
}
}
\ No newline at end of file