Author: scabanovich
Date: 2010-11-17 11:15:38 -0500 (Wed, 17 Nov 2010)
New Revision: 26675
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamImport.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/SeamResourceVisitor.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/PackageInfoRequestor.java
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java
Log:
JBIDE-7616
https://jira.jboss.org/browse/JBIDE-7616
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamImport.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamImport.java 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamImport.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -1,9 +1,6 @@
package org.jboss.tools.seam.internal.core;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
import org.jboss.tools.common.xml.XMLUtilities;
-import org.jboss.tools.seam.core.ISeamNamespace;
import org.w3c.dom.Element;
public class SeamImport {
@@ -31,7 +28,7 @@
}
public Element toXML(Element parent) {
- Element element = XMLUtilities.createElement(parent, "import");
+ Element element = XMLUtilities.createElement(parent, SeamXMLConstants.TAG_IMPORT);
if(seamPackage != null) {
element.setAttribute(SeamXMLConstants.ATTR_VALUE, seamPackage);
}
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 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamJavaComponentDeclaration.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -73,6 +73,17 @@
if((c == null || c.isEmpty()) && getSeamProject().getParentProject() != null)
c = getSeamProject().getParentProject().getVariablesByName(qname);
if(c != null && !c.isEmpty()) result.addAll(c);
}
+ if(result.isEmpty()) {
+ List<SeamImport> is = ((SeamProject)getSeamProject()).getPackageImports(this);
+ if(is != null && !is.isEmpty()) {
+ for (SeamImport i: is) {
+ String qname = i.getSeamPackage() + "." + name;
+ Set<ISeamContextVariable> c = getSeamProject().getVariablesByName(qname);
+ if((c == null || c.isEmpty()) && getSeamProject().getParentProject() !=
null) c = getSeamProject().getParentProject().getVariablesByName(qname);
+ if(c != null && !c.isEmpty()) result.addAll(c);
+ }
+ }
+ }
return result;
}
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 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -13,9 +13,7 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
@@ -37,6 +35,8 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IType;
import org.eclipse.jst.jsf.designtime.DesignTimeApplicationManager;
import org.jboss.tools.common.model.project.ext.event.Change;
import org.jboss.tools.common.model.util.EclipseResourceUtil;
@@ -93,8 +93,9 @@
Set<SeamProject> usedBy = new HashSet<SeamProject>();
- Map<String,List<String>> imports = new HashMap<String,
List<String>>();
+ ImportStorage imports = new ImportStorage();
+
{
createScopes();
}
@@ -596,12 +597,11 @@
o.toXML(cse, context);
}
}
- List<String> imports = ds.getImports();
+ List<SeamImport> imports = ds.getImports();
if(imports != null && !imports.isEmpty()) {
Element cse = XMLUtilities.createElement(pathElement, "imports");
//$NON-NLS-1$
- for (String d: imports) {
- Element e = XMLUtilities.createElement(cse, SeamXMLConstants.TAG_IMPORT);
//$NON-NLS-1$
- e.setAttribute(SeamXMLConstants.ATTR_VALUE, d);
+ for (SeamImport d: imports) {
+ d.toXML(cse);
}
}
@@ -717,9 +717,10 @@
if(imports != null) {
Element[] cs = XMLUtilities.getChildren(imports, SeamXMLConstants.TAG_IMPORT);
for (int j = 0; j < cs.length; j++) {
- String v = cs[j].getAttribute(SeamXMLConstants.ATTR_VALUE);
- if(v != null && v.length() > 0) {
- ds.getImports().add(v);
+ SeamImport s = new SeamImport();
+ s.loadXML(cs[j]);
+ if(s.getSeamPackage() != null && s.getSeamPackage().length() > 0) {
+ ds.getImports().add(s);
}
}
@@ -854,9 +855,9 @@
}
if(!ds.getImports().isEmpty()) {
- setImports(source.toString(), ds.getImports());
+ setImports(source, ds.getImports());
} else {
- removeImports(source.toString());
+ removeImports(source);
}
Map<Object,ISeamComponentDeclaration> currentComponents =
findComponentDeclarations(source);
@@ -1181,7 +1182,7 @@
sourcePaths2.remove(source);
namespaces.removePath(source);
- removeImports(source.toString());
+ removeImports(source);
List<Change> changes = null;
@@ -1393,32 +1394,32 @@
variables.remove(v);
}
- public void setImports(String source, List<String> paths) {
- if(equalLists(imports.get(source), paths)) return;
+ public void setImports(IPath source, List<SeamImport> paths) {
+ if(equalLists(imports.importsBySource.get(source), paths)) return;
modifications++;
synchronized(variables) {
variables.allVariablesPlusShort = null;
variables.byName = null;
}
- imports.put(source, paths);
+ imports.setPath(source, paths);
}
- private boolean equalLists(List<String> s1, List<String> s2) {
+ private boolean equalLists(List<SeamImport> s1, List<SeamImport> s2) {
if(s1 == null || s2 == null) return s1 == s2;
if(s1.size() != s2.size()) return false;
for (int i = 0; i < s1.size(); i++) {
- if(!s1.get(i).equals(s2.get(i))) return false;
+ if(!s1.get(i).getSeamPackage().equals(s2.get(i).getSeamPackage())) return false;
}
return true;
}
- public void removeImports(String source) {
- if(!imports.containsKey(source)) return;
+ public void removeImports(IPath source) {
+ if(!imports.importsBySource.containsKey(source)) return;
modifications++;
synchronized(variables) {
variables.allVariablesPlusShort = null;
}
- imports.remove(source);
+ imports.removePath(source);
}
/**
@@ -1433,13 +1434,28 @@
}
public boolean isImportedPackage(String packageName) {
- for (String s: imports.keySet()) {
- List<String> list = imports.get(s);
- if(list.contains(packageName)) return true;
+ for (IPath s: imports.importsBySource.keySet()) {
+ List<SeamImport> list = imports.importsBySource.get(s);
+ for (SeamImport i: list) {
+ if(i.getJavaPackage() == null) {
+ if(i.getSeamPackage().equals(packageName)) return true;
+ }
+ }
}
return false;
}
+ public List<SeamImport> getPackageImports(ISeamJavaComponentDeclaration
declaration) {
+ IMember m = declaration.getSourceMember();
+ IType type = null;
+ if(m instanceof IType) type = (IType)m;
+ if(type != null && type.getPackageFragment() != null) {
+ String n = type.getPackageFragment().getElementName();
+ return imports.importsByJavaPackage.get(n);
+ }
+ return new ArrayList<SeamImport>();
+ }
+
/**
* @see org.jboss.tools.seam.core.ISeamProject#getVariablesByName(java.lang.String)
*/
@@ -1805,15 +1821,14 @@
}
ds.getFactories().add(f.clone());
}
- for (String s: imports.keySet()) {
- IPath p = new Path(s);
+ for (IPath p: imports.importsBySource.keySet()) {
if(p == null || EclipseResourceUtil.isJar(p.toString())) continue;
LoadedDeclarations ds = map.get(p);
if(ds == null) {
ds = new LoadedDeclarations();
map.put(p, ds);
}
- ds.getImports().addAll(imports.get(s));
+ ds.getImports().addAll(imports.importsBySource.get(p));
}
return map;
}
@@ -1983,6 +1998,49 @@
}
+
+
+ class ImportStorage extends Storage {
+ Map<IPath, List<SeamImport>> importsBySource = new HashMap<IPath,
List<SeamImport>>();
+ Map<String, List<SeamImport>> importsByJavaPackage = new HashMap<String,
List<SeamImport>>();
+
+ public void clear() {
+ importsBySource.clear();
+ importsByJavaPackage.clear();
+ }
+
+ public List<SeamImport> getImportsBySource(IPath path) {
+ return importsBySource.get(path);
+ }
+
+ public void setPath(IPath source, List<SeamImport> ns) {
+ List<SeamImport> sd = importsBySource.get(source);
+ if(sd == null && ns.isEmpty()) return;
+ if(ns.isEmpty()) {
+ removePath(source);
+ } else {
+ if(!equalLists(sd, ns)) {
+ removePath(source);
+ importsBySource.put(source, ns);
+ if(ns.get(0).getJavaPackage() != null) {
+ importsByJavaPackage.put(ns.get(0).getJavaPackage(), ns);
+ }
+ }
+ }
+ }
+
+ public void removePath(IPath path) {
+ List<SeamImport> sd = importsBySource.get(path);
+ if(sd == null) return;
+ for (SeamImport d: sd) {
+ String jp = d.getJavaPackage();
+ importsByJavaPackage.remove(jp);
+ }
+ importsBySource.remove(path);
+ }
+
+ }
+
class ComponentStorage extends Storage {
private Set<ISeamComponent> allComponentsSet = new
HashSet<ISeamComponent>();
Map<String, SeamComponent> allComponents = new HashMap<String,
SeamComponent>();
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamResourceVisitor.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamResourceVisitor.java 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamResourceVisitor.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -104,7 +104,7 @@
static long timeUsed = 0;
void componentsLoaded(LoadedDeclarations c, IFile resource) {
- if(c == null || c.getComponents().size() + c.getFactories().size() +
c.getNamespaces().size() == 0) return;
+ if(c == null || c.getComponents().size() + c.getFactories().size() +
c.getNamespaces().size() + c.getImports().size() == 0) return;
p.registerComponents(c, resource.getFullPath());
}
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 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/LoadedDeclarations.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -16,6 +16,7 @@
import org.jboss.tools.seam.core.ISeamComponentDeclaration;
import org.jboss.tools.seam.core.ISeamFactory;
import org.jboss.tools.seam.core.ISeamNamespace;
+import org.jboss.tools.seam.internal.core.SeamImport;
/**
* This object keeps all declarations loaded from one source.
@@ -25,7 +26,7 @@
public class LoadedDeclarations {
List<ISeamComponentDeclaration> components = new
ArrayList<ISeamComponentDeclaration>();
List<ISeamFactory> factories = new ArrayList<ISeamFactory>();
- List<String> imports = new ArrayList<String>();
+ List<SeamImport> imports = new ArrayList<SeamImport>();
List<ISeamNamespace> namespaces = new ArrayList<ISeamNamespace>();
public List<ISeamComponentDeclaration> getComponents() {
@@ -36,7 +37,7 @@
return factories;
}
- public List<String> getImports() {
+ public List<SeamImport> getImports() {
return imports;
}
Modified:
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/PackageInfoRequestor.java
===================================================================
---
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/PackageInfoRequestor.java 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/java/PackageInfoRequestor.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -24,6 +24,7 @@
import org.eclipse.jdt.core.dom.PackageDeclaration;
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
import org.jboss.tools.common.model.project.ext.impl.ValueInfo;
+import org.jboss.tools.seam.internal.core.SeamImport;
import org.jboss.tools.seam.internal.core.SeamNamespace;
import org.jboss.tools.seam.internal.core.scanner.LoadedDeclarations;
@@ -53,13 +54,18 @@
n.setSourcePath(resource.getFullPath());
n.setPackage(visitor.javaPackage);
}
+ for (SeamImport i: visitor.imports) {
+ i.setJavaPackage(visitor.javaPackage);
+ }
ds.getNamespaces().addAll(visitor.namespaces);
+ ds.getImports().addAll(visitor.imports);
}
}
class PackageInfoVisitor extends ASTVisitor implements SeamAnnotations {
List<SeamNamespace> namespaces = new ArrayList<SeamNamespace>();
+ List<SeamImport> imports = new ArrayList<SeamImport>();
String javaPackage = null;
public PackageInfoVisitor() {}
@@ -87,8 +93,12 @@
}
namespaces.add(ns);
} else if(IMPORT_ANNOTATION_TYPE.equals(type)) {
- List<String> imports = ComponentBuilder.getArrayValue(node);
- for (String s: imports) System.out.println("NormalAnnotation " + s);
+ List<String> is = ComponentBuilder.getArrayValue(node);
+ for (String s: is) {
+ SeamImport i = new SeamImport();
+ i.setSeamPackage(s);
+ imports.add(i);
+ }
}
}
return true;
@@ -99,8 +109,12 @@
if(b != null) {
String type = b.getAnnotationType().getQualifiedName();
if(IMPORT_ANNOTATION_TYPE.equals(type)) {
- List<String> imports = ComponentBuilder.getArrayValue(node);
- for (String s: imports) System.out.println("SingleMemberAnnotation " +
s);
+ List<String> is = ComponentBuilder.getArrayValue(node);
+ for (String s: is) {
+ SeamImport i = new SeamImport();
+ i.setSeamPackage(s);
+ imports.add(i);
+ }
}
}
return true;
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 2010-11-17
16:11:12 UTC (rev 26674)
+++
trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/scanner/xml/XMLScanner.java 2010-11-17
16:15:38 UTC (rev 26675)
@@ -42,6 +42,7 @@
import org.jboss.tools.seam.core.SeamCorePlugin;
import org.jboss.tools.seam.core.event.ISeamValue;
import org.jboss.tools.seam.core.event.ISeamValueString;
+import org.jboss.tools.seam.internal.core.SeamImport;
import org.jboss.tools.seam.internal.core.SeamProperty;
import org.jboss.tools.seam.internal.core.SeamValueList;
import org.jboss.tools.seam.internal.core.SeamValueMap;
@@ -175,8 +176,10 @@
ds.getFactories().add(factory);
} else if(os[i].getModelEntity().getName().startsWith("SeamImport")) {
//$NON-NLS-1$
String v = os[i].getAttributeValue("import");
- if(v != null && v.length() > 0 && !ds.getImports().contains(v)) {
- ds.getImports().add(v);
+ if(v != null && v.length() > 0) {
+ SeamImport s = new SeamImport();
+ s.setSeamPackage(v);
+ ds.getImports().add(s);
}
}
}