[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