do not allow to insert a comment within another comment
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
index 2e81b62..ee1455a 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/widget/L2SimpleEditingTest.java
@@ -255,4 +255,10 @@
assertFalse(comment.isAssociated());
assertNull(comment.getParent());
}
+
+ @Test
+ public void givenAComment_whenCaretInComment_shouldNotAllowToInsertAComment() throws Exception {
+ widget.insertComment();
+ assertFalse("can insert comment within comment", widget.canInsertComment());
+ }
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index 88f1e13..94d2055 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -251,7 +251,14 @@
public boolean canInsertComment(final int offset) {
// TODO Currently comments can only be inserted within the root element.
- return offset > rootElement.getStartOffset() && offset <= rootElement.getEndOffset();
+ if (!(offset > rootElement.getStartOffset() && offset <= rootElement.getEndOffset())) {
+ return false;
+ }
+ final Node node = getNodeForInsertionAt(offset);
+ if (node instanceof Comment) {
+ return false;
+ }
+ return true;
}
public Comment insertComment(final int offset) {
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
index e960400..fdd50ea 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/IVexWidget.java
@@ -65,6 +65,8 @@
*/
public void beginWork();
+ public boolean canInsertComment();
+
/**
* Returns true if the clipboard has content that can be pasted. Used to enable/disable the paste action of a
* containing application.
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
index f29f32b..ee27aa6 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/widget/VexWidgetImpl.java
@@ -23,6 +23,7 @@
import java.util.List;
import java.util.Set;
+import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.vex.core.internal.core.Caret;
import org.eclipse.vex.core.internal.core.Color;
@@ -193,6 +194,10 @@
beginWorkCount++;
}
+ public boolean canInsertComment() {
+ return getDocument().canInsertComment(getCaretOffset());
+ }
+
/**
* Returns true if the given fragment can be inserted at the current caret position.
*
@@ -783,6 +788,8 @@
}
public Comment insertComment() throws DocumentValidationException {
+ Assert.isTrue(canInsertComment());
+
if (hasSelection()) {
deleteSelection();
}
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
index 44cdc10..b2bb232 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AddCommentHandler.java
@@ -20,7 +20,9 @@
@Override
public void execute(final VexWidget widget) throws ExecutionException {
- widget.insertComment();
+ if (widget.canInsertComment()) {
+ widget.insertComment();
+ }
}
}
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
index dad2363..be8951e 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/swt/VexWidget.java
@@ -135,6 +135,10 @@
impl.beginWork();
}
+ public boolean canInsertComment() {
+ return impl.canInsertComment();
+ }
+
public boolean canPaste() {
// TODO Auto-generated method stub
return false;