summaryrefslogtreecommitdiffstats
path: root/libjava/classpath/gnu/javax/management/Translator.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/gnu/javax/management/Translator.java')
-rw-r--r--libjava/classpath/gnu/javax/management/Translator.java78
1 files changed, 42 insertions, 36 deletions
diff --git a/libjava/classpath/gnu/javax/management/Translator.java b/libjava/classpath/gnu/javax/management/Translator.java
index 69191d43f86..4ede3743088 100644
--- a/libjava/classpath/gnu/javax/management/Translator.java
+++ b/libjava/classpath/gnu/javax/management/Translator.java
@@ -39,11 +39,15 @@ package gnu.javax.management;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Proxy;
import java.lang.reflect.Type;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -92,7 +96,7 @@ public final class Translator
Type[] gtypes = method.getGenericParameterTypes();
Object[] otypes = new Object[jtypes.length];
for (int a = 0; a < jtypes.length; ++a)
- otypes[a] = fromJava(jtypes[a], (Class<?>) gtypes[a]);
+ otypes[a] = fromJava(jtypes[a], gtypes[a]);
return otypes;
}
@@ -131,11 +135,10 @@ public final class Translator
if (jtype instanceof List || jtype instanceof Set ||
jtype instanceof SortedSet)
{
- String elemType = tName.substring(tName.indexOf("<") + 1,
- tName.indexOf(">")).trim();
if (jtype instanceof SortedSet)
{
- Class<?> elemClass = Class.forName(elemType);
+ ParameterizedType ptype = (ParameterizedType) type;
+ Class<?> elemClass = (Class<?>) ptype.getActualTypeArguments()[0];
if (!Comparable.class.isAssignableFrom(elemClass))
throw new IllegalArgumentException(jtype + " has a " +
"non-comparable element " +
@@ -144,11 +147,13 @@ public final class Translator
throw new IllegalArgumentException(jtype + " does not " +
"use natural ordering.");
}
- List elems = (List) jtype;
- Object[] celems = new Object[elems.size()];
- for (int a = 0; a < elems.size(); ++a)
+ Collection<Object> elems = (Collection<Object>) jtype;
+ int numElems = elems.size();
+ Object[] celems = new Object[numElems];
+ Iterator<Object> i = elems.iterator();
+ for (int a = 0; a < numElems; ++a)
{
- Object elem = elems.get(a);
+ Object elem = i.next();
celems[a] = fromJava(elem, elem.getClass());
}
return makeArraySpecific(celems);
@@ -440,33 +445,6 @@ public final class Translator
SimpleType.STRING,
null, names);
}
- try
- {
- c.getMethod("from", new Class[] { CompositeData.class });
- Method[] methods = c.getDeclaredMethods();
- List<String> names = new ArrayList<String>();
- List<OpenType> types = new ArrayList<OpenType>();
- for (int a = 0; a < methods.length; ++a)
- {
- String name = methods[a].getName();
- if (name.startsWith("get"))
- {
- names.add(name.substring(3));
- types.add(getTypeFromClass(methods[a].getReturnType()));
- }
- }
- String[] fields = names.toArray(new String[names.size()]);
- CompositeType ctype = new CompositeType(c.getName(), c.getName(),
- fields, fields,
- types.toArray(new OpenType[types.size()]));
- return new OpenMBeanParameterInfoSupport("TransParam",
- "Translated parameter",
- ctype);
- }
- catch (NoSuchMethodException e)
- {
- /* Ignored; we expect this if this isn't a from(CompositeData) class */
- }
if (c.isArray())
{
int depth;
@@ -478,7 +456,35 @@ public final class Translator
new ArrayType(depth, ot)
);
}
- throw new InternalError("The type used does not have an open type translation.");
+ Method[] methods = c.getDeclaredMethods();
+ List<String> names = new ArrayList<String>();
+ List<OpenType> types = new ArrayList<OpenType>();
+ for (int a = 0; a < methods.length; ++a)
+ {
+ String name = methods[a].getName();
+ if (Modifier.isPublic(methods[a].getModifiers()))
+ {
+ if (name.startsWith("get"))
+ {
+ names.add(name.substring(3));
+ types.add(getTypeFromClass(methods[a].getReturnType()));
+ }
+ else if (name.startsWith("is"))
+ {
+ names.add(name.substring(2));
+ types.add(getTypeFromClass(methods[a].getReturnType()));
+ }
+ }
+ }
+ if (names.isEmpty())
+ throw new OpenDataException("The type used does not have an open type translation.");
+ String[] fields = names.toArray(new String[names.size()]);
+ CompositeType ctype = new CompositeType(c.getName(), c.getName(),
+ fields, fields,
+ types.toArray(new OpenType[types.size()]));
+ return new OpenMBeanParameterInfoSupport("TransParam",
+ "Translated parameter",
+ ctype);
}
/**
OpenPOWER on IntegriCloud