You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by hi...@apache.org on 2011/01/17 11:27:46 UTC
svn commit: r1059849 -
/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java
Author: hibou
Date: Mon Jan 17 10:27:46 2011
New Revision: 1059849
URL: http://svn.apache.org/viewvc?rev=1059849&view=rev
Log:
IVYDE-266 : correctly handle index out of range
Modified:
ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java
Modified: ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java
URL: http://svn.apache.org/viewvc/ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java?rev=1059849&r1=1059848&r2=1059849&view=diff
==============================================================================
--- ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java (original)
+++ ant/ivy/ivyde/trunk/org.apache.ivyde.eclipse/src/java/org/apache/ivyde/common/model/IvyFile.java Mon Jan 17 10:27:46 2011
@@ -57,11 +57,11 @@ public abstract class IvyFile {
protected String getDoc() {
return doc;
}
-
+
protected int getCurrentOffset() {
return currentOffset;
}
-
+
protected String getReversedDoc() {
return reversed;
}
@@ -86,8 +86,8 @@ public abstract class IvyFile {
return false;
}
if (c == '<'
- && (documentOffset + 1 >= doc.length() || (doc.charAt(documentOffset + 1) != '!'
- && doc.charAt(documentOffset + 1) != '?'))) {
+ && (documentOffset + 1 >= doc.length() || (doc.charAt(documentOffset + 1) != '!' && doc
+ .charAt(documentOffset + 1) != '?'))) {
return hasSpace;
}
}
@@ -200,7 +200,8 @@ public abstract class IvyFile {
/**
* Return the user typed string before calling completion stop on:<br>
- * < to match tag,<br/> space to found attribute name<br/>
+ * < to match tag,<br/>
+ * space to found attribute name<br/>
*
* @param documentOffset
* @return
@@ -220,8 +221,8 @@ public abstract class IvyFile {
}
/**
- * Return the user typed string before calling completion on attribute value stop on:<br> " to
- * match value for attribute
+ * Return the user typed string before calling completion on attribute value stop on:<br>
+ * " to match value for attribute
*
* @param documentOffset
* @return
@@ -278,67 +279,63 @@ public abstract class IvyFile {
}
public int[] getParentTagIndex(int documentOffset) {
+ if (doc.length() <= documentOffset) {
+ return null;
+ }
int offset = documentOffset;
int lastSpaceIndex = offset;
int parentEndTagIndex = -1;
boolean parentEndTagReached = false;
boolean inSimpleTag = false;
Stack stack = new Stack();
- while (true) {
- try {
- char c = doc.charAt(--offset);
- if (c == '>' && doc.charAt(offset - 1) != '-') {
- if (doc.charAt(offset - 1) != '/') { // not a simple tag
- // System.out.println("parentEndTagReached:"+doc.get(documentOffset-15,
- // 15));
- parentEndTagReached = true;
- parentEndTagIndex = offset;
- lastSpaceIndex = offset;
- // System.out.println("parentEndTagReached:"+doc.get(documentOffset-15,
- // 15));
+ while (offset > 0) {
+ char c = doc.charAt(--offset);
+ if (c == '>' && doc.charAt(offset - 1) != '-') {
+ if (doc.charAt(offset - 1) != '/') { // not a simple tag
+ // System.out.println("parentEndTagReached:"+doc.get(documentOffset-15,
+ // 15));
+ parentEndTagReached = true;
+ parentEndTagIndex = offset;
+ lastSpaceIndex = offset;
+ // System.out.println("parentEndTagReached:"+doc.get(documentOffset-15,
+ // 15));
+ continue;
+ } else { // simple tag
+ inSimpleTag = true;
+ }
+ } else if (c == '<') {
+ if (inSimpleTag) { // simple tag end
+ inSimpleTag = false;
+ } else if (doc.charAt(offset + 1) == '/') { // closing tag
+ if (parentEndTagReached) {
+ parentEndTagReached = false;
+ stack.push(doc.substring(offset + 2, parentEndTagIndex).trim());
+ lastSpaceIndex = offset + 2;
continue;
- } else { // simple tag
- inSimpleTag = true;
}
- } else if (c == '<') {
- if (inSimpleTag) { // simple tag end
- inSimpleTag = false;
- } else if (doc.charAt(offset + 1) == '/') { // closing tag
- if (parentEndTagReached) {
- parentEndTagReached = false;
- stack.push(doc.substring(offset + 2, parentEndTagIndex).trim());
- lastSpaceIndex = offset + 2;
- continue;
- }
- } else { // opening tag
- if (doc.charAt(offset + 1) != '!' && doc.charAt(offset + 1) != '?') {
- // not a doc tag or xml
- if (!stack.isEmpty()) { // we found the closing tag before
- String closedName = (String) stack.peek();
- if (closedName.equalsIgnoreCase(doc.substring(offset + 1, offset
- + 1 + closedName.length()))) {
- stack.pop();
- continue;
- }
- } else {
- if (parentEndTagReached) {
- return new int[] {offset + 1, lastSpaceIndex};
- }
+ } else { // opening tag
+ if (doc.charAt(offset + 1) != '!' && doc.charAt(offset + 1) != '?') {
+ // not a doc tag or xml
+ if (!stack.isEmpty()) { // we found the closing tag before
+ String closedName = (String) stack.peek();
+ if (closedName.equalsIgnoreCase(doc.substring(offset + 1, offset + 1
+ + closedName.length()))) {
+ stack.pop();
+ continue;
+ }
+ } else {
+ if (parentEndTagReached) {
+ return new int[] {offset + 1, lastSpaceIndex};
}
}
}
- } else if (Character.isWhitespace(c)) {
- lastSpaceIndex = offset;
- continue;
- }
- } catch (IndexOutOfBoundsException e) {
- // FIXME hu ? need some comments
- if (settings != null) {
- settings.logError("Something bad happened", e);
}
- return null;
+ } else if (Character.isWhitespace(c)) {
+ lastSpaceIndex = offset;
+ continue;
}
}
+ return null;
}
private int getReverseOffset(int documentOffset) {