Document should not have its own reference to Content.
Signed-off-by: Florian Thienel <florian@thienel.org>
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 6458a15..650a70f 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
@@ -29,7 +29,6 @@
*/
public class Document extends Parent {
- private final Content content;
private final Element rootElement;
private final ListenerList<DocumentListener, DocumentEvent> listeners = new ListenerList<DocumentListener, DocumentEvent>(DocumentListener.class);
private boolean undoEnabled = true;
@@ -49,9 +48,10 @@
*
*/
public Document(final Element rootElement) {
- content = new GapContent(100);
+ final GapContent content = new GapContent(100);
content.insertElementMarker(0);
content.insertElementMarker(0);
+ associate(content, 0, 1);
this.rootElement = rootElement;
addChild(rootElement);
@@ -69,7 +69,7 @@
*
*/
public Document(final Content content, final Element rootElement) {
- this.content = content;
+ associate(content, 0, content.getLength() - 1);
this.rootElement = rootElement;
addChild(rootElement);
}
@@ -122,7 +122,7 @@
}
public Position createPosition(final int offset) {
- return content.createPosition(offset);
+ return getContent().createPosition(offset);
}
public void delete(final int startOffset, final int endOffset) throws DocumentValidationException {
@@ -156,7 +156,7 @@
}
}
- content.remove(startOffset, endOffset - startOffset);
+ getContent().remove(startOffset, endOffset - startOffset);
final IUndoableEdit edit = undoEnabled ? new DeleteEdit(startOffset, endOffset, frag) : null;
@@ -184,7 +184,7 @@
}
public char getCharacterAt(final int offset) {
- final String text = content.getText(offset, 1);
+ final String text = getContent().getText(offset, 1);
if (text.length() == 0) {
/*
* XXX This is used in VexWidgetImpl.deleteNextChar/deletePreviousChar to find out if there is an element
@@ -222,7 +222,7 @@
}
public boolean isElementAt(final int offset) {
- return content.isElementMarker(offset);
+ return getContent().isElementMarker(offset);
}
public String getEncoding() {
@@ -235,8 +235,8 @@
public DocumentFragment getFragment(final int startOffset, final int endOffset) {
- assertOffset(startOffset, 0, content.getLength());
- assertOffset(endOffset, 0, content.getLength());
+ assertOffset(startOffset, 0, getContent().getLength());
+ assertOffset(endOffset, 0, getContent().getLength());
if (endOffset <= startOffset) {
throw new IllegalArgumentException("Invalid range (" + startOffset + ", " + endOffset + ")");
@@ -250,7 +250,7 @@
final List<Element> children = e1.getChildElements();
- final Content newContent = content.getContent(startOffset, endOffset - startOffset);
+ final Content newContent = getContent().getContent(startOffset, endOffset - startOffset);
final List<Element> newChildren = new ArrayList<Element>();
for (int i = 0; i < children.size(); i++) {
final Element child = children.get(i);
@@ -267,7 +267,7 @@
}
public int getLength() {
- return content.getLength();
+ return getContent().getLength();
}
public List<QualifiedName> getNodeNames(final int startOffset, final int endOffset) {
@@ -378,11 +378,11 @@
}
public String getText(final int startOffset, final int endOffset) {
- return content.getText(startOffset, endOffset - startOffset);
+ return getContent().getText(startOffset, endOffset - startOffset);
}
public String getRawText(final int startOffset, final int endOffset) {
- return content.getRawText(startOffset, endOffset - startOffset);
+ return getContent().getRawText(startOffset, endOffset - startOffset);
}
public Validator getValidator() {
@@ -433,10 +433,10 @@
fireBeforeContentInserted(new DocumentEvent(this, parent, offset, 2, null));
- content.insertElementMarker(offset);
- content.insertElementMarker(offset + 1);
+ getContent().insertElementMarker(offset);
+ getContent().insertElementMarker(offset + 1);
- element.associate(content, offset, offset + 1);
+ element.associate(getContent(), offset, offset + 1);
element.setParent(parent);
parent.insertChild(childIndex, element);
@@ -465,7 +465,7 @@
fireBeforeContentInserted(new DocumentEvent(this, parent, offset, 2, null));
- content.insertContent(offset, fragment.getContent());
+ getContent().insertContent(offset, fragment.getContent());
final List<Element> children = parent.getChildElements();
int index = 0;
@@ -475,7 +475,7 @@
final List<Element> elements = fragment.getElements();
for (int i = 0; i < elements.size(); i++) {
- final Element newElement = cloneElement(elements.get(i), content, offset, parent);
+ final Element newElement = cloneElement(elements.get(i), getContent(), offset, parent);
parent.insertChild(index, newElement);
index++;
}
@@ -494,9 +494,9 @@
final Element parent = getElementAt(offset);
boolean isValid = false;
- if (!content.isElementMarker(offset - 1)) {
+ if (!getContent().isElementMarker(offset - 1)) {
isValid = true;
- } else if (!content.isElementMarker(offset)) {
+ } else if (!getContent().isElementMarker(offset)) {
isValid = true;
} else {
final Validator validator = getValidator();
@@ -527,7 +527,7 @@
fireBeforeContentInserted(new DocumentEvent(this, parent, offset, 2, null));
- content.insertText(offset, s);
+ getContent().insertText(offset, s);
final IUndoableEdit edit = undoEnabled ? new InsertTextEdit(offset, s) : null;