diff options
author | nsandonato | 2010-08-25 17:30:08 +0000 |
---|---|---|
committer | nsandonato | 2010-08-25 17:30:08 +0000 |
commit | 7627d701de085f3054f9062fa41561d208c094dc (patch) | |
tree | 21ee6d66993ff66a27bcc09dbbceaf86cd1a74ff /bundles/org.eclipse.wst.xml.ui | |
parent | af37efbcb28c6959035153da01220e841df51ab0 (diff) | |
download | webtools.sourceediting-7627d701de085f3054f9062fa41561d208c094dc.tar.gz webtools.sourceediting-7627d701de085f3054f9062fa41561d208c094dc.tar.xz webtools.sourceediting-7627d701de085f3054f9062fa41561d208c094dc.zip |
[323264] Content assist next to attribute name replaces that name
Diffstat (limited to 'bundles/org.eclipse.wst.xml.ui')
2 files changed, 15 insertions, 7 deletions
diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLCompletionProposalComputer.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLCompletionProposalComputer.java index eba5b95b03..dd21a18a85 100644 --- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLCompletionProposalComputer.java +++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLCompletionProposalComputer.java @@ -478,10 +478,11 @@ public abstract class AbstractXMLCompletionProposalComputer implements ICompleti IDOMNode nodeAtOffset, IDOMNode node, CompletionProposalInvocationContext context) { int documentPosition = context.getInvocationOffset(); - + ITextViewer viewer = context.getViewer(); ContentAssistRequest contentAssistRequest = null; IStructuredDocumentRegion sdRegion = getStructuredDocumentRegion(documentPosition); - if (documentPosition < sdRegion.getStartOffset(completionRegion)) { + // if the attribute name is selected, replace it instead of creating a new attribute + if (documentPosition <= sdRegion.getStartOffset(completionRegion) && (viewer != null && viewer.getSelectedRange().y != (sdRegion.getEndOffset(completionRegion) - sdRegion.getStartOffset(completionRegion)))) { // setup to insert new attributes contentAssistRequest = new ContentAssistRequest(nodeAtOffset, node, sdRegion, completionRegion, documentPosition, 0, matchString); } diff --git a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java index dfc47dd4e8..e5eced0f16 100644 --- a/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java +++ b/bundles/org.eclipse.wst.xml.ui/src/org/eclipse/wst/xml/ui/internal/contentassist/AbstractXMLModelQueryCompletionProposalComputer.java @@ -133,20 +133,25 @@ public abstract class AbstractXMLModelQueryCompletionProposalComputer extends Ab addModelQueryAttributeDeclarations(node, elementDecl,attributes); String matchString = contentAssistRequest.getMatchString(); - + int cursorOffset = context.getInvocationOffset(); // check whether an attribute really exists for the replacement // offsets AND if it possesses a value boolean attrAtLocationHasValue = false; + boolean proposalNeedsSpace = false; NamedNodeMap attrs = node.getAttributes(); for (int i = 0; i < attrs.getLength(); i++) { AttrImpl existingAttr = (AttrImpl) attrs.item(i); ITextRegion name = existingAttr.getNameRegion(); - + if ((sdRegion.getStartOffset(name) <= contentAssistRequest.getReplacementBeginPosition()) && (sdRegion.getStartOffset(name) + name.getLength() >= contentAssistRequest.getReplacementBeginPosition() + contentAssistRequest.getReplacementLength()) && (existingAttr.getValueRegion() != null)) { - - attrAtLocationHasValue = true; + // selected region is attribute name + if (cursorOffset >= sdRegion.getStartOffset(name) && contentAssistRequest.getReplacementLength() != 0) + attrAtLocationHasValue = true; + // propose new attribute, cursor is at the start of another attribute name + else if (cursorOffset == sdRegion.getStartOffset(name)) + proposalNeedsSpace = true; break; } } @@ -170,7 +175,7 @@ public abstract class AbstractXMLModelQueryCompletionProposalComputer extends Ab // matches against the full name of an existing Attr showAttribute = showAttribute && ((attr == null) || ((nameRegion != null) && - (sdRegion.getStartOffset(nameRegion) <= + (sdRegion.getStartOffset(nameRegion) < contentAssistRequest.getReplacementBeginPosition()) && (sdRegion.getStartOffset(nameRegion) + nameRegion.getLength() >= (contentAssistRequest.getReplacementBeginPosition() + @@ -213,6 +218,8 @@ public abstract class AbstractXMLModelQueryCompletionProposalComputer extends Ab else { proposedText = getRequiredText(node, attrDecl); } + if (proposalNeedsSpace) + proposedText += " "; //$NON-NLS-1$ proposal = new CustomCompletionProposal(proposedText, contentAssistRequest.getReplacementBeginPosition(), contentAssistRequest.getReplacementLength(), |