Author: scabanovich
Date: 2009-08-06 09:46:38 -0400 (Thu, 06 Aug 2009)
New Revision: 16982
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JSPDialogContentProposalProvider.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/JSPDialogCellEditor.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-3571
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JSPDialogContentProposalProvider.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JSPDialogContentProposalProvider.java 2009-08-06
13:04:51 UTC (rev 16981)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JSPDialogContentProposalProvider.java 2009-08-06
13:46:38 UTC (rev 16982)
@@ -53,6 +53,10 @@
*
*/
public class JSPDialogContentProposalProvider implements IContentProposalProvider {
+ static int EL_MODE = 0;
+ static int ATTR_MODE = 1;
+ int mode = EL_MODE;
+
Properties context;
String attributeName;
String nodeName;
@@ -60,7 +64,12 @@
JspContentAssistProcessor processor;
IPageContext pageContext = null;
- public JSPDialogContentProposalProvider() {}
+ public JSPDialogContentProposalProvider() {
+ }
+
+ public void setAttrMode() {
+ mode = ATTR_MODE;
+ }
public void setContext(Properties context) {
this.context = context;
@@ -90,25 +99,48 @@
}
public IContentProposal[] getProposals(String contents, int position) {
+ if(mode == ATTR_MODE) {
+ return getAttrProposals(contents, position);
+ } else {
+ return getELProposals(contents, position);
+ }
+ }
+
+ public IContentProposal[] getAttrProposals(String contents, int position) {
List<IContentProposal> result = new ArrayList<IContentProposal>();
- if(contents.indexOf('{') < 0) {
- KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, contents, contents, position,
false);
+ TextRegion p = getELPrefix(contents, position);
+ if (p == null || !p.isELStarted()) {
+ KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, contents.substring(0, position),
contents, position, false);
TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
pageContext);
if(proposals != null) for (TextProposal textProposal: proposals) {
String displayString = textProposal.getReplacementString();
int cursorPosition = /*replacementOffset + */
textProposal.getReplacementString().length();
Image image = textProposal.getImage();
-
+ String relacementString = textProposal.getReplacementString();
+ if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
+ int b = textProposal.getStart();
+ int e = textProposal.getEnd();
+ String prefix = contents.substring(0, b);
+ String tail = contents.substring(e);
+ relacementString = prefix + relacementString + tail;
+ }
IContentProposal proposal = //new ContentProposal(replacementString,
replacementOffset, replacementLength, cursorPosition, image, displayString,
contextInformation, additionalProposalInfo, relevance);
- new ContentProposal(textProposal.getReplacementString(), cursorPosition,
displayString, displayString);
+ new ContentProposal(relacementString, cursorPosition, displayString,
displayString);
result.add(proposal);
}
+ IContentProposal proposal = new ContentProposal(contents.substring(0, position) +
"#{}" + contents.substring(position), position, "#{}",
JstUIMessages.JSPDialogContentProposalProvider_NewELExpression); //$NON-NLS-1$
//$NON-NLS-2$
+ result.add(proposal);
}
+ return toSortedUniqueArray(result);
+ }
+
+ public IContentProposal[] getELProposals(String contents, int position) {
+ List<IContentProposal> result = new ArrayList<IContentProposal>();
TextRegion prefix = getELPrefix(contents, position);
if (prefix == null || !prefix.isELStarted()) {
- IContentProposal proposal = new ContentProposal("#{}", 0, "#{}",
JstUIMessages.JSPDialogContentProposalProvider_NewELExpression); //$NON-NLS-1$
//$NON-NLS-2$
- result.add(proposal);
+// IContentProposal proposal = new ContentProposal("#{}", 0, "#{}",
JstUIMessages.JSPDialogContentProposalProvider_NewELExpression); //$NON-NLS-1$
//$NON-NLS-2$
+// result.add(proposal);
return toSortedUniqueArray(result);
}
String matchString = "#{" + prefix.getText(); //$NON-NLS-1$
@@ -276,7 +308,7 @@
return elrfm.getResolvers(resource);
}
- protected KbQuery createKbQuery(Type type, String query, String stringQuery, int pos,
boolean addAttr) {
+ protected KbQuery createKbQuery(Type type, String query, String text, int pos, boolean
addAttr) {
KbQuery kbQuery = new KbQuery();
String[] parentTags = processor.getParentTags(false);
@@ -293,7 +325,8 @@
// kbQuery.setOffset(pos);
kbQuery.setOffset(offset);
kbQuery.setValue(query);
- kbQuery.setStringQuery(stringQuery);
+ kbQuery.setStringQuery(query);
+ kbQuery.setText(text);
return kbQuery;
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java 2009-08-06
13:04:51 UTC (rev 16981)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/contentassist/JspContentAssistProcessor.java 2009-08-06
13:46:38 UTC (rev 16982)
@@ -514,13 +514,21 @@
String stringQuery = matchString;
KbQuery kbQuery = createKbQuery(Type.ATTRIBUTE_VALUE, query, stringQuery);
+ kbQuery.setText(contentAssistRequest.getText());
TextProposal[] proposals = PageProcessor.getInstance().getProposals(kbQuery,
getContext());
for (int i = 0; proposals != null && i < proposals.length; i++) {
TextProposal textProposal = proposals[i];
int replacementOffset = contentAssistRequest.getReplacementBeginPosition();
int replacementLength = contentAssistRequest.getReplacementLength();
+ if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
+ replacementOffset += textProposal.getStart() + 1;
+ replacementLength = textProposal.getEnd() - textProposal.getStart();
+ }
String replacementString = "\"" + textProposal.getReplacementString()
+ "\""; //$NON-NLS-1$ //$NON-NLS-2$
+ if(textProposal.getStart() >= 0 && textProposal.getEnd() >= 0) {
+ replacementString = textProposal.getReplacementString();
+ }
int cursorPosition = getCursorPositionForProposedText(replacementString);
Image image = textProposal.getImage();
String displayString = textProposal.getLabel();
Modified:
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/JSPDialogCellEditor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/JSPDialogCellEditor.java 2009-08-06
13:04:51 UTC (rev 16981)
+++
trunk/jst/plugins/org.jboss.tools.jst.jsp/src/org/jboss/tools/jst/jsp/outline/JSPDialogCellEditor.java 2009-08-06
13:46:38 UTC (rev 16982)
@@ -45,7 +45,8 @@
public class JSPDialogCellEditor extends DialogCellEditorEx implements
ExtendedCellEditorProvider.StoppableCellEditor {
Properties context;
- JSPDialogContentProposalProvider cpp;
+ JSPDialogContentProposalProvider cppEL;
+ JSPDialogContentProposalProvider cppAttr;
boolean hasProposals = false;
/**
@@ -80,11 +81,16 @@
return;
}
- if(cpp == null) {
- cpp = new JSPDialogContentProposalProvider();
+ if(cppEL == null) {
+ cppEL = new JSPDialogContentProposalProvider();
}
- cpp.setContext(context);
- IContentProposal[] ps = cpp.getProposals("#{}", 2); //$NON-NLS-1$
+ cppEL.setContext(context);
+ if(cppAttr == null) {
+ cppAttr = new JSPDialogContentProposalProvider();
+ cppAttr.setAttrMode();
+ }
+ cppAttr.setContext(context);
+ IContentProposal[] ps = cppEL.getProposals("#{}", 2); //$NON-NLS-1$
hasProposals = ((ps != null) && (ps.length > 0));
}
@@ -180,13 +186,13 @@
protected void addContentAssist(Text text) {
IControlContentAdapter controlAdapter = new TextContentAdapter();
- cpp = new JSPDialogContentProposalProvider();
- cpp.setContext(context);
+ cppEL = new JSPDialogContentProposalProvider();
+ cppEL.setContext(context);
ContentProposalAdapter adapter = new ContentProposalAdapter(
text,
controlAdapter,
- cpp,
+ cppEL,
AttributeContentProposalProviderFactory.getCtrlSpaceKeyStroke(),
null);
adapter.setPropagateKeys(true);
@@ -195,6 +201,22 @@
adapter.addContentProposalListener(popup);
}
+ cppAttr = new JSPDialogContentProposalProvider();
+ cppAttr.setAttrMode();
+ cppAttr.setContext(context);
+
+ adapter = new ContentProposalAdapter(
+ text,
+ controlAdapter,
+ cppAttr,
+ AttributeContentProposalProviderFactory.getCtrlSpaceKeyStroke(),
+ null);
+ adapter.setPropagateKeys(true);
+ adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
+ if(popup != null) {
+ adapter.addContentProposalListener(popup);
+ }
+
int bits = SWT.TOP | SWT.LEFT;
ControlDecoration controlDecoration = new ControlDecoration(getTextControl(), bits) {
public Image getImage() {