Commit 5af4cc5a authored by Narayan Kamath's avatar Narayan Kamath Committed by Gerrit Code Review
Browse files

Merge "Fix getGenericSuperclass."

parents 48132b98 f9f628bf
......@@ -798,9 +798,19 @@ public final class Class<T> implements Serializable, AnnotatedElement, GenericDe
* class}.
*/
public Type getGenericSuperclass() {
GenericSignatureParser parser = new GenericSignatureParser(getClassLoader());
parser.parseForClass(this, getSignatureAttribute());
return Types.getType(parser.superclassType);
Type superClass = getSuperclass();
// This method is specified to return null for all cases where getSuperclass
// returns null, i.e, for primitives, interfaces, void and java.lang.Object.
if (superClass == null) {
return null;
}
String signature = getSignatureAttribute();
if (signature != null) {
GenericSignatureParser parser = new GenericSignatureParser(getClassLoader());
parser.parseForClass(this, getSignatureAttribute());
superClass = parser.superclassType;
}
return Types.getType(superClass);
}
/**
......
/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package libcore.java.lang;
import junit.framework.TestCase;
public class ClassTest extends TestCase {
interface Foo {
public void foo();
}
interface ParameterizedFoo<T> {
public void foo(T param);
}
interface ParameterizedBar<T> extends ParameterizedFoo<T> {
public void bar(T param);
}
interface ParameterizedBaz extends ParameterizedFoo<String> {
}
public void test_getGenericSuperclass_nullReturnCases() {
// Should always return null for interfaces.
assertNull(Foo.class.getGenericSuperclass());
assertNull(ParameterizedFoo.class.getGenericSuperclass());
assertNull(ParameterizedBar.class.getGenericSuperclass());
assertNull(ParameterizedBaz.class.getGenericSuperclass());
assertNull(Object.class.getGenericSuperclass());
assertNull(void.class.getGenericSuperclass());
assertNull(int.class.getGenericSuperclass());
}
public void test_getGenericSuperclass_returnsObjectForArrays() {
assertSame(Object.class, (new Integer[0]).getClass().getGenericSuperclass());
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment