[jbosstools-commits] JBoss Tools SVN: r42637 - in trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core: ca and 1 other directories.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Wed Jul 18 19:28:14 EDT 2012


Author: scabanovich
Date: 2012-07-18 19:28:14 -0400 (Wed, 18 Jul 2012)
New Revision: 42637

Modified:
   trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/ca/AbstractELCompletionEngine.java
   trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/messages.properties
   trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ELSegmentImpl.java
   trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ElVarSearcher.java
   trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/JavaMemberELSegmentImpl.java
Log:
JBIDE-12295
https://issues.jboss.org/browse/JBIDE-12295
Open-on of multiple declarations of ui:param with the same name are supported.

Modified: trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/ca/AbstractELCompletionEngine.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/ca/AbstractELCompletionEngine.java	2012-07-18 23:27:09 UTC (rev 42636)
+++ trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/ca/AbstractELCompletionEngine.java	2012-07-18 23:28:14 UTC (rev 42637)
@@ -318,7 +318,7 @@
 						sufixIsNotResolved = !segment.isResolved();
 					}
 					firstSegment = segment;
-					((ELSegmentImpl)firstSegment).setVar(var);
+					((ELSegmentImpl)firstSegment).setVars(varSearcher.findVarsForEl(oldEl, context, vars, true));
 					((ELSegmentImpl)firstSegment).setToken(firstOriginalToken);
 					((ELSegmentImpl)firstSegment).setResolved(!sufixIsNotResolved);
 //					if(firstSegment instanceof JavaMemberELSegmentImpl) {
@@ -355,7 +355,7 @@
 			} else {
 				resolution = resolveELOperand(file, context, operand, returnEqualedVariablesOnly, false, offset);
 				if(var != null && !resolution.getSegments().isEmpty()) {
-					((ELSegmentImpl)resolution.getSegments().get(0)).setVar(var);
+					((ELSegmentImpl)resolution.getSegments().get(0)).setVars(varSearcher.findVarsForEl(oldEl, context, vars, true));
 				}
 			}
 		}

Modified: trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/messages.properties
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/messages.properties	2012-07-18 23:27:09 UTC (rev 42636)
+++ trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/messages.properties	2012-07-18 23:28:14 UTC (rev 42637)
@@ -31,4 +31,4 @@
 
 OpenBundle=Open bundle ''{0}''
 OpenBundleProperty=Open property ''{0}'' of bundle ''{1}''
-OpenVarDefinition=Open Definition of ''{0}''
+OpenVarDefinition=Open Definition of ''{0}'' in ''{1}''

Modified: trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ELSegmentImpl.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ELSegmentImpl.java	2012-07-18 23:27:09 UTC (rev 42636)
+++ trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ELSegmentImpl.java	2012-07-18 23:28:14 UTC (rev 42637)
@@ -39,7 +39,8 @@
 	protected boolean resolved = false;
 	protected boolean validatable = true;
 	protected List<IVariable> variables = new ArrayList<IVariable>();
-	protected Var var = null;
+	protected List<Var> vars = new ArrayList<Var>();
+	
 
 	public ELSegmentImpl(LexicalToken token) {
 		this.token = token;
@@ -71,43 +72,56 @@
 		}
 		return sourceReference;
 	}
+
+	public static class VarOpenable implements IOpenableReference {
+		Var var;
+		VarOpenable(Var var) {
+			this.var = var;
+		}
+		@Override
+		public boolean open() {
+			IEditorPart part = null;
+			IWorkbenchWindow window = ELCorePlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
+			if (window == null)	return false;
+			IWorkbenchPage page = window.getActivePage();
+			try {
+				part = IDE.openEditor(page, var.getFile());
+			} catch (PartInitException e) {
+				ELCorePlugin.getDefault().logError(e);
+			}
+			if(part != null) {
+				part.getEditorSite().getSelectionProvider().setSelection(new TextSelection(var.getDeclarationOffset(), var.getDeclarationLength()));
+			}
+			return false;
+		}
+
+		@Override
+		public String getLabel() {
+			return MessageFormat.format(ElCoreMessages.OpenVarDefinition, var.getName(), var.getFile().getName());
+		}
 	
+		public Var getVar() {
+			return var;
+		}
+
+		@Override
+		public Image getImage() {
+			return null;
+		}
+	}
+	
 	/**
 	 * Default empty implementation. Subclasses should override this method.
 	 * 
 	 * @return
 	 */
 	public IOpenableReference[] getOpenable() {
-		if(var != null) {
-			IOpenableReference result = new IOpenableReference() {
-				@Override
-				public boolean open() {
-					IEditorPart part = null;
-					IWorkbenchWindow window = ELCorePlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
-					if (window == null)	return false;
-					IWorkbenchPage page = window.getActivePage();
-					try {
-						part = IDE.openEditor(page, var.getFile());
-					} catch (PartInitException e) {
-						ELCorePlugin.getDefault().logError(e);
-					}
-					if(part != null) {
-						part.getEditorSite().getSelectionProvider().setSelection(new TextSelection(var.getDeclarationOffset(), var.getDeclarationLength()));
-					}
-					return false;
-				}
-
-				@Override
-				public String getLabel() {
-					return MessageFormat.format(ElCoreMessages.OpenVarDefinition, var.getName());
-				}
-
-				@Override
-				public Image getImage() {
-					return null;
-				}
-			};
-			return new IOpenableReference[]{result};
+		if(!vars.isEmpty()) {
+			List<IOpenableReference> rs = new ArrayList<IOpenableReference>();
+			for (Var var: vars) {
+				rs.add(new VarOpenable(var));
+			}
+			return rs.toArray(new VarOpenable[0]);
 		}
 		return new IOpenableReference[0];
 	}
@@ -192,11 +206,11 @@
 		this.validatable = validatable;
 	}
 
-	public void setVar(Var var) {
-		this.var = var;
+	public void setVars(List<Var> vars) {
+		this.vars = vars;
 	}
 
 	public Var getVar() {
-		return var;
+		return vars.isEmpty() ? null : vars.iterator().next();
 	}
 }
\ No newline at end of file

Modified: trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ElVarSearcher.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ElVarSearcher.java	2012-07-18 23:27:09 UTC (rev 42636)
+++ trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/ElVarSearcher.java	2012-07-18 23:28:14 UTC (rev 42637)
@@ -306,39 +306,62 @@
 		if(vars!=null) {
 			ArrayList<Var> parentVars = new ArrayList<Var>();
 			for (Var var : vars) {
-				ELExpression token = var.getElToken();
-				if(token!=null && !token.getText().endsWith(".")) { //$NON-NLS-1$
-					String varName = var.getName();
-					if(el.equals(varName) || el.startsWith(varName.trim()+".")) { //$NON-NLS-1$
-						if(var.getElToken()!=null && initializeNestedVars) {
-							Var parentVar = findVarForEl(var.getElToken().getText(), context, parentVars, true);
-							if(parentVar!=null) {
-								ELExpression resolvedToken = parentVar.getResolvedElToken();
-								if(resolvedToken==null && parentVar.getElToken()!=null) {
-									try {
-										// Initialize parent vars.
-										engine.resolveELOperand(file, context, var.getElToken(), true, parentVars, this, (var.getRegion() == null ? 0 : var.getRegion().getOffset()));
-										resolvedToken = parentVar.getResolvedElToken();
-									} catch (StringIndexOutOfBoundsException e) {
-										ELCorePlugin.getPluginLog().logError(e);
-									} catch (BadLocationException e) {
-										ELCorePlugin.getPluginLog().logError(e);
-									}
-								}
-								if(resolvedToken!=null) {
-									String oldText = var.getElToken().getText();
-									String newValue = "#{" + resolvedToken.getText() + oldText.substring(parentVar.getName().length()) + "}"; //$NON-NLS-1$ //$NON-NLS-2$
-									var.value = newValue;
-									var.elToken = var.parseEl(newValue);
-								}
+				if(isRelevantVar(var, el, context, vars, parentVars, initializeNestedVars)) {
+					return var;
+				}
+			}
+		}
+		return null;
+	}
+
+	public List<Var> findVarsForEl(String el, ELContext context, List<Var> vars, boolean initializeNestedVars) {
+		List<Var> result = new ArrayList<Var>();
+		ArrayList<Var> parentVars = new ArrayList<Var>();
+		for (Var var : vars) {
+			if(isRelevantVar(var, el, context, vars, parentVars, initializeNestedVars)) {
+				result.add(var);
+			}
+		}
+		return result;
+	}
+
+	private boolean isRelevantVar(Var var, String el, ELContext context, List<Var> vars, ArrayList<Var> parentVars, boolean initializeNestedVars) {
+		boolean result = false;
+		ELExpression token = var.getElToken();
+		if(token!=null && !token.getText().endsWith(".")) { //$NON-NLS-1$
+			String varName = var.getName();
+			if(el.equals(varName) || el.startsWith(varName.trim()+".")) { //$NON-NLS-1$
+				if(var.getElToken()!=null && initializeNestedVars) {
+					ELContext c = context;
+					if(!var.getFile().equals(context.getResource())) {
+						//TODO
+					}
+					Var parentVar = findVarForEl(var.getElToken().getText(), c, parentVars, true);
+					if(parentVar!=null) {
+						ELExpression resolvedToken = parentVar.getResolvedElToken();
+						if(resolvedToken==null && parentVar.getElToken()!=null) {
+							try {
+								// Initialize parent vars.
+								engine.resolveELOperand(file, context, var.getElToken(), true, parentVars, this, (var.getRegion() == null ? 0 : var.getRegion().getOffset()));
+								resolvedToken = parentVar.getResolvedElToken();
+							} catch (StringIndexOutOfBoundsException e) {
+								ELCorePlugin.getPluginLog().logError(e);
+							} catch (BadLocationException e) {
+								ELCorePlugin.getPluginLog().logError(e);
 							}
 						}
-						return var;
+						if(resolvedToken!=null) {
+							String oldText = var.getElToken().getText();
+							String newValue = "#{" + resolvedToken.getText() + oldText.substring(parentVar.getName().length()) + "}"; //$NON-NLS-1$ //$NON-NLS-2$
+							var.value = newValue;
+							var.elToken = var.parseEl(newValue);
+						}
 					}
 				}
-				parentVars.add(var);
+				result = true;
 			}
 		}
-		return null;
+		parentVars.add(var);
+		return result;
 	}
 }
\ No newline at end of file

Modified: trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/JavaMemberELSegmentImpl.java
===================================================================
--- trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/JavaMemberELSegmentImpl.java	2012-07-18 23:27:09 UTC (rev 42636)
+++ trunk/common/plugins/org.jboss.tools.common.el.core/src/org/jboss/tools/common/el/core/resolver/JavaMemberELSegmentImpl.java	2012-07-18 23:28:14 UTC (rev 42637)
@@ -212,7 +212,12 @@
 					return null;
 				}
 			};
-			if(os.length == 1) return new IOpenableReference[]{os[0], openable};
+			if(os.length > 0) {
+				IOpenableReference[] os1 = new IOpenableReference[os.length + 1];
+				System.arraycopy(os, 0, os1, 0, os.length);
+				os1[os.length] = openable;
+				return os1;
+			}
 			return new IOpenableReference[]{openable};
 		}
 		return os;



More information about the jbosstools-commits mailing list