Import GNU Classpath (20121202).

2012-12-19  Matthias Klose  <doko@ubuntu.com>

        Import GNU Classpath (20121202).

        * Regenerate class and header files.
        * Regenerate auto* files.
        * sources.am, gcj/javaprims.h: Regenerate.
        * gnu/java/nio/FileLockImpl.java (close): New override.

From-SVN: r194618
This commit is contained in:
Matthias Klose
2012-12-19 17:03:15 +00:00
parent baeb2e1647
commit a1906e8bbf
454 changed files with 5224 additions and 2925 deletions
@@ -1,6 +1,6 @@
/* FormatCharacter.java -- Implementation of AttributedCharacterIterator for
formatters.
Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2012 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -38,12 +38,15 @@ exception statement from your version. */
package gnu.java.text;
import java.text.AttributedCharacterIterator;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import static java.text.AttributedCharacterIterator.Attribute;
/**
* This class should not be put public and it is only intended to the
@@ -62,7 +65,7 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
private int charIndex;
private int attributeIndex;
private int[] ranges;
private HashMap[] attributes;
private List<Map<Attribute,Object>> attributes;
private static final boolean DEBUG = false;
/**
@@ -74,7 +77,7 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
{
formattedString = "";
ranges = new int[0];
attributes = new HashMap[0];
attributes = new ArrayList<Map<Attribute,Object>>(0);
}
/**
@@ -87,12 +90,13 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
* <pre>
* s = "hello";
* ranges = new int[] { 2, 6 };
* attributes = new HashMap[2];
* attributes = new ArrayList<Map<Attribute,Object>>(2);
* </pre>
* <code>"he"</code> will have the attributes <code>attributes[0]</code>,
* <code>"llo"</code> the <code>attributes[1]</code>.
* <code>"he"</code> will have the attributes <code>attributes.get(0)</code>,
* <code>"llo"</code> the <code>attributes.get(1)</code>.
*/
public FormatCharacterIterator (String s, int[] ranges, HashMap[] attributes)
public FormatCharacterIterator (String s, int[] ranges,
List<Map<Attribute,Object>> attributes)
{
formattedString = s;
this.ranges = ranges;
@@ -104,55 +108,57 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
* and thus are already documented.
*/
public Set getAllAttributeKeys()
public Set<Attribute> getAllAttributeKeys()
{
if (attributes != null && attributes[attributeIndex] != null)
return attributes[attributeIndex].keySet();
if (attributes != null && attributes.get(attributeIndex) != null)
return attributes.get(attributeIndex).keySet();
else
return new HashSet();
return new HashSet<Attribute>();
}
public Map getAttributes()
public Map<Attribute,Object> getAttributes()
{
if (attributes != null && attributes[attributeIndex] != null)
return attributes[attributeIndex];
if (attributes != null && attributes.get(attributeIndex) != null)
return attributes.get(attributeIndex);
else
return new HashMap();
return new HashMap<Attribute,Object>();
}
public Object getAttribute (AttributedCharacterIterator.Attribute attrib)
public Object getAttribute (Attribute attrib)
{
if (attributes != null && attributes[attributeIndex] != null)
return attributes[attributeIndex].get (attrib);
if (attributes != null && attributes.get(attributeIndex) != null)
return attributes.get(attributeIndex).get (attrib);
else
return null;
}
public int getRunLimit(Set reqAttrs)
public int getRunLimit(Set<? extends Attribute> reqAttrs)
{
if (attributes == null)
return formattedString.length();
int currentAttrIndex = attributeIndex;
Set newKeys;
Set<Attribute> newKeys;
do
{
currentAttrIndex++;
if (currentAttrIndex == attributes.length)
if (currentAttrIndex == attributes.size())
return formattedString.length();
if (attributes[currentAttrIndex] == null)
Map<Attribute,Object> currentAttr =
attributes.get(currentAttrIndex);
if (currentAttr == null)
break;
newKeys = attributes[currentAttrIndex].keySet();
newKeys = currentAttr.keySet();
}
while (newKeys.containsAll (reqAttrs));
return ranges[currentAttrIndex-1];
}
public int getRunLimit (AttributedCharacterIterator.Attribute attribute)
public int getRunLimit (Attribute attribute)
{
Set s = new HashSet();
Set<Attribute> s = new HashSet<Attribute>();
s.add (attribute);
return getRunLimit (s);
@@ -162,24 +168,24 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
{
if (attributes == null)
return formattedString.length();
if (attributes[attributeIndex] == null)
if (attributes.get(attributeIndex) == null)
{
for (int i=attributeIndex+1;i<attributes.length;i++)
if (attributes[i] != null)
for (int i=attributeIndex+1;i<attributes.size();i++)
if (attributes.get(i) != null)
return ranges[i-1];
return formattedString.length();
}
return getRunLimit (attributes[attributeIndex].keySet());
return getRunLimit (attributes.get(attributeIndex).keySet());
}
public int getRunStart (Set reqAttrs)
public int getRunStart (Set<? extends Attribute> reqAttrs)
{
if (attributes == null)
return formattedString.length();
int currentAttrIndex = attributeIndex;
Set newKeys = null;
Set<Attribute> newKeys = null;
do
{
@@ -187,9 +193,11 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
return 0;
currentAttrIndex--;
if (attributes[currentAttrIndex] == null)
Map<Attribute,Object> currentAttr =
attributes.get(currentAttrIndex);
if (currentAttr == null)
break;
newKeys = attributes[currentAttrIndex].keySet();
newKeys = currentAttr.keySet();
}
while (newKeys.containsAll (reqAttrs));
@@ -201,20 +209,21 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
if (attributes == null)
return 0;
if (attributes[attributeIndex] == null)
Map<Attribute,Object> attrib = attributes.get(attributeIndex);
if (attrib == null)
{
for (int i=attributeIndex;i>0;i--)
if (attributes[i] != null)
if (attributes.get(i) != null)
return ranges[attributeIndex-1];
return 0;
}
return getRunStart (attributes[attributeIndex].keySet());
return getRunStart (attrib.keySet());
}
public int getRunStart (AttributedCharacterIterator.Attribute attribute)
public int getRunStart (Attribute attribute)
{
Set s = new HashSet();
Set<Attribute> s = new HashSet<Attribute>();
s.add (attribute);
return getRunStart (s);
@@ -261,7 +270,7 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
{
charIndex = formattedString.length()-1;
if (attributes != null)
attributeIndex = attributes.length-1;
attributeIndex = attributes.size()-1;
return formattedString.charAt (charIndex);
}
@@ -306,7 +315,7 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
charIndex = position;
if (attributes != null)
{
for (attributeIndex=0;attributeIndex<attributes.length;
for (attributeIndex=0;attributeIndex<attributes.size();
attributeIndex++)
if (ranges[attributeIndex] > charIndex)
break;
@@ -327,40 +336,42 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
*
* @param attributes the new array attributes to apply to the string.
*/
public void mergeAttributes (HashMap[] attributes, int[] ranges)
public void mergeAttributes (List<Map<Attribute,Object>> attributes,
int[] ranges)
{
Vector new_ranges = new Vector();
Vector new_attributes = new Vector();
List<Integer> newRanges = new ArrayList<Integer>();
List<Map<Attribute,Object>> newAttributes =
new ArrayList<Map<Attribute,Object>>();
int i = 0, j = 0;
debug("merging " + attributes.length + " attrs");
debug("merging " + attributes.size() + " attrs");
while (i < this.ranges.length && j < ranges.length)
{
if (this.attributes[i] != null)
if (this.attributes.get(i) != null)
{
new_attributes.add (this.attributes[i]);
if (attributes[j] != null)
this.attributes[i].putAll (attributes[j]);
newAttributes.add (this.attributes.get(i));
if (attributes.get(j) != null)
this.attributes.get(i).putAll (attributes.get(j));
}
else
{
new_attributes.add (attributes[j]);
newAttributes.add (attributes.get(j));
}
if (this.ranges[i] == ranges[j])
{
new_ranges.add (new Integer (ranges[j]));
newRanges.add (Integer.valueOf (ranges[j]));
i++;
j++;
}
else if (this.ranges[i] < ranges[j])
{
new_ranges.add (new Integer (this.ranges[i]));
newRanges.add (Integer.valueOf (this.ranges[i]));
i++;
}
else
{
new_ranges.add (new Integer (ranges[j]));
newRanges.add (Integer.valueOf (ranges[j]));
j++;
}
}
@@ -369,27 +380,25 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
{
for (;i<this.ranges.length;i++)
{
new_attributes.add (this.attributes[i]);
new_ranges.add (new Integer (this.ranges[i]));
newAttributes.add (this.attributes.get(i));
newRanges.add (Integer.valueOf (this.ranges[i]));
}
}
if (j != ranges.length)
{
for (;j<ranges.length;j++)
{
new_attributes.add (attributes[j]);
new_ranges.add (new Integer (ranges[j]));
newAttributes.add (attributes.get(j));
newRanges.add (Integer.valueOf (ranges[j]));
}
}
this.attributes = new HashMap[new_attributes.size()];
this.ranges = new int[new_ranges.size()];
System.arraycopy (new_attributes.toArray(), 0, this.attributes,
0, this.attributes.length);
this.attributes = newAttributes;
this.ranges = new int[newRanges.size()];
for (i=0;i<new_ranges.size();i++)
for (i=0;i<newRanges.size();i++)
{
this.ranges[i] = ((Integer)new_ranges.elementAt (i)).intValue();
this.ranges[i] = newRanges.get (i).intValue();
}
dumpTable();
@@ -405,35 +414,35 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
public void append (AttributedCharacterIterator iterator)
{
char c = iterator.first();
Vector more_ranges = new Vector();
Vector more_attributes = new Vector();
List<Integer> moreRanges = new ArrayList<Integer>();
List<Map<Attribute,Object>> moreAttributes =
new ArrayList<Map<Attribute,Object>>();
do
{
formattedString = formattedString + String.valueOf (c);
// TODO: Reduce the size of the output array.
more_attributes.add (iterator.getAttributes());
more_ranges.add (new Integer (formattedString.length()));
moreAttributes.add (iterator.getAttributes());
moreRanges.add (Integer.valueOf (formattedString.length()));
// END TOOD
c = iterator.next();
}
while (c != DONE);
HashMap[] new_attributes = new HashMap[attributes.length
+ more_attributes.size()];
int[] new_ranges = new int[ranges.length + more_ranges.size()];
List<Map<Attribute,Object>> newAttributes =
new ArrayList<Map<Attribute,Object>>(attributes.size() + moreAttributes.size());
int[] newRanges = new int[ranges.length + moreRanges.size()];
System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
System.arraycopy (more_attributes.toArray(), 0, new_attributes,
attributes.length, more_attributes.size());
newAttributes.addAll(attributes);
newAttributes.addAll(moreAttributes);
System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
Object[] new_ranges_array = more_ranges.toArray();
for (int i = 0; i < more_ranges.size();i++)
new_ranges[i+ranges.length] = ((Integer) new_ranges_array[i]).intValue();
System.arraycopy (ranges, 0, newRanges, 0, ranges.length);
Integer[] newRangesArray = moreRanges.toArray(new Integer[moreRanges.size()]);
for (int i = 0; i < moreRanges.size();i++)
newRanges[i+ranges.length] = newRangesArray[i].intValue();
attributes = new_attributes;
ranges = new_ranges;
attributes = newAttributes;
ranges = newRanges;
}
/**
@@ -441,28 +450,29 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
* directly in the calling parameters.
*
* @param text The string to append.
* @param local_attributes The attributes to put on this string in the
* @param localAttributes The attributes to put on this string in the
* iterator. If it is <code>null</code> the string will simply have no
* attributes.
*/
public void append (String text, HashMap local_attributes)
public void append (String text, HashMap<? extends Attribute,? extends Object> localAttributes)
{
int[] new_ranges = new int[ranges.length+1];
HashMap[] new_attributes = new HashMap[attributes.length+1];
int[] newRanges = new int[ranges.length+1];
List<Map<Attribute,Object>> newAttributes =
new ArrayList<Map<Attribute,Object>>(attributes.size()+1);
formattedString += text;
System.arraycopy (attributes, 0, new_attributes, 0, attributes.length);
System.arraycopy (ranges, 0, new_ranges, 0, ranges.length);
new_ranges[ranges.length] = formattedString.length();
new_attributes[attributes.length] = local_attributes;
newAttributes.addAll(attributes);
System.arraycopy (ranges, 0, newRanges, 0, ranges.length);
newRanges[ranges.length] = formattedString.length();
newAttributes.add(new HashMap<Attribute,Object>(localAttributes));
ranges = new_ranges;
attributes = new_attributes;
ranges = newRanges;
attributes = newAttributes;
}
/**
* This method appends a string without attributes. It is completely
* equivalent to call {@link #append(String,HashMap)} with local_attributes
* equivalent to call {@link #append(String,HashMap)} with localAttributes
* equal to <code>null</code>.
*
* @param text The string to append to the iterator.
@@ -475,22 +485,31 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
/**
* This method adds a set of attributes to a range of character. The
* bounds are always inclusive. In the case many attributes have to
* be added it is advised to directly use {@link #mergeAttributes([Ljava.util.HashMap;[I}
* be added it is advised to directly use {@link #mergeAttributes(java.util.List;[I}
*
* @param attributes Attributes to merge into the iterator.
* @param range_start Lower bound of the range of characters which will receive the
* @param rangeStart Lower bound of the range of characters which will receive the
* attribute.
* @param range_end Upper bound of the range of characters which will receive the
* @param rangeEnd Upper bound of the range of characters which will receive the
* attribute.
*
* @throws IllegalArgumentException if ranges are out of bounds.
*/
public void addAttributes(HashMap attributes, int range_start, int range_end)
public void addAttributes(Map<? extends Attribute,? extends Object> attributes,
int rangeStart, int rangeEnd)
{
if (range_start == 0)
mergeAttributes(new HashMap[] { attributes }, new int[] { range_end });
List<Map<Attribute,Object>> mergeAttribs = new ArrayList<Map<Attribute,Object>>();
int[] mergeRanges;
if (rangeStart == 0)
mergeRanges = new int[] { rangeEnd };
else
mergeAttributes(new HashMap[] { null, attributes }, new int[] { range_start, range_end });
{
mergeRanges = new int[] { rangeStart, rangeEnd };
mergeAttribs.add(null);
}
mergeAttribs.add(new HashMap<Attribute,Object>(attributes));
mergeAttributes(mergeAttribs, mergeRanges);
}
private void debug(String s)
@@ -501,7 +520,7 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
private void dumpTable()
{
int start_range = 0;
int startRange = 0;
if (!DEBUG)
return;
@@ -509,15 +528,15 @@ public class FormatCharacterIterator implements AttributedCharacterIterator
System.out.println("Dumping internal table:");
for (int i = 0; i < ranges.length; i++)
{
System.out.print("\t" + start_range + " => " + ranges[i] + ":");
if (attributes[i] == null)
System.out.print("\t" + startRange + " => " + ranges[i] + ":");
if (attributes.get(i) == null)
System.out.println("null");
else
{
Set keyset = attributes[i].keySet();
Set<Attribute> keyset = attributes.get(i).keySet();
if (keyset != null)
{
Iterator keys = keyset.iterator();
Iterator<Attribute> keys = keyset.iterator();
while (keys.hasNext())
System.out.print(" " + keys.next());