R3_2_maintenance - 168354, 171653
diff --git a/buildnotes_jdt-core.html b/buildnotes_jdt-core.html
index b14d4d1..98193eb 100644
--- a/buildnotes_jdt-core.html
+++ b/buildnotes_jdt-core.html
@@ -48,6 +48,10 @@
<h2>What's new in this drop</h2>
<h3>Problem Reports Fixed</h3>
+<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=171653">171653</a>
+Java Tooling initialization performance issue after startup
+<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=168354">168354</a>
+[indexing] Java Type Indicator eats CPU time
<a name="v_684_R32x"></a>
<p><hr><h1>
diff --git a/model/org/eclipse/jdt/internal/core/util/Util.java b/model/org/eclipse/jdt/internal/core/util/Util.java
index b8c0098..ec7ca35 100644
--- a/model/org/eclipse/jdt/internal/core/util/Util.java
+++ b/model/org/eclipse/jdt/internal/core/util/Util.java
@@ -1708,83 +1708,6 @@
}
}
/**
- * Reads in a string from the specified data input stream. The
- * string has been encoded using a modified UTF-8 format.
- * <p>
- * The first two bytes are read as if by
- * <code>readUnsignedShort</code>. This value gives the number of
- * following bytes that are in the encoded string, not
- * the length of the resulting string. The following bytes are then
- * interpreted as bytes encoding characters in the UTF-8 format
- * and are converted into characters.
- * <p>
- * This method blocks until all the bytes are read, the end of the
- * stream is detected, or an exception is thrown.
- *
- * @param in a data input stream.
- * @return a Unicode string.
- * @exception EOFException if the input stream reaches the end
- * before all the bytes.
- * @exception IOException if an I/O error occurs.
- * @exception UTFDataFormatException if the bytes do not represent a
- * valid UTF-8 encoding of a Unicode string.
- * @see java.io.DataInputStream#readUnsignedShort()
- */
- public final static char[] readUTF(DataInput in) throws IOException {
- int utflen= in.readUnsignedShort();
- char str[]= new char[utflen];
- int count= 0;
- int strlen= 0;
- while (count < utflen) {
- int c= in.readUnsignedByte();
- int char2, char3;
- switch (c >> 4) {
- case 0 :
- case 1 :
- case 2 :
- case 3 :
- case 4 :
- case 5 :
- case 6 :
- case 7 :
- // 0xxxxxxx
- count++;
- str[strlen++]= (char) c;
- break;
- case 12 :
- case 13 :
- // 110x xxxx 10xx xxxx
- count += 2;
- if (count > utflen)
- throw new UTFDataFormatException();
- char2= in.readUnsignedByte();
- if ((char2 & 0xC0) != 0x80)
- throw new UTFDataFormatException();
- str[strlen++]= (char) (((c & 0x1F) << 6) | (char2 & 0x3F));
- break;
- case 14 :
- // 1110 xxxx 10xx xxxx 10xx xxxx
- count += 3;
- if (count > utflen)
- throw new UTFDataFormatException();
- char2= in.readUnsignedByte();
- char3= in.readUnsignedByte();
- if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
- throw new UTFDataFormatException();
- str[strlen++]= (char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));
- break;
- default :
- // 10xx xxxx, 1111 xxxx
- throw new UTFDataFormatException();
- }
- }
- if (strlen < utflen) {
- System.arraycopy(str, 0, str= new char[strlen], 0, strlen);
- }
- return str;
- }
-
- /**
* Returns the toString() of the given full path minus the first given number of segments.
* The returned string is always a relative path (it has no leading slash)
*/
diff --git a/search/org/eclipse/jdt/internal/core/index/DiskIndex.java b/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
index 906c554..733f954 100644
--- a/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
+++ b/search/org/eclipse/jdt/internal/core/index/DiskIndex.java
@@ -593,7 +593,7 @@
}
int largeArraySize = 256;
for (int i = 0; i < size; i++) {
- char[] word = Util.readUTF(stream);
+ char[] word = stream.readUTF().toCharArray();
int arrayOffset = stream.readInt();
// if arrayOffset is:
// <= 0 then the array size == 1 with the value -> -arrayOffset
@@ -618,7 +618,7 @@
this.categoryTables.put(categoryName, categoryTable);
// cache the table as long as its not too big
// in practise, some tables can be greater than 500K when the contain more than 10K elements
- this.cachedCategoryName = categoryTable.elementSize < 10000 ? categoryName : null;
+ this.cachedCategoryName = categoryTable.elementSize < 20000 ? categoryName : null;
} finally {
stream.close();
}
@@ -733,7 +733,7 @@
int size = file.readInt();
this.categoryOffsets = new HashtableOfIntValues(size);
for (int i = 0; i < size; i++)
- this.categoryOffsets.put(Util.readUTF(file), file.readInt()); // cache offset to category table
+ this.categoryOffsets.put(file.readUTF().toCharArray(), file.readInt()); // cache offset to category table
this.categoryTables = new HashtableOfObject(3);
}
synchronized void startQuery() {