generic signatures for properties #KT2677 fixed

This commit is contained in:
Alex Tkachman
2012-09-20 16:39:12 +03:00
parent eaf9a79420
commit 242ee38606
3 changed files with 63 additions and 10 deletions
@@ -19,10 +19,7 @@ package org.jetbrains.jet.codegen;
import org.jetbrains.asm4.Opcodes;
import org.jetbrains.jet.ConfigurationKind;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.*;
/**
* @author yole
@@ -318,4 +315,44 @@ public class PropertyGenTest extends CodegenTestCase {
throw new RuntimeException(e);
}
}
public void testKt2677() throws Exception {
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
loadFile("regressions/kt2677.kt");
final Class aClass = loadImplementationClass(generateClassesInFile(), "DerivedWeatherReport");
final Class bClass = aClass.getSuperclass();
try {
{
Method get = aClass.getDeclaredMethod("getForecast");
Type type = get.getGenericReturnType();
assertInstanceOf(type, ParameterizedType.class);
ParameterizedType parameterizedType = (ParameterizedType) type;
assertEquals(String.class, parameterizedType.getActualTypeArguments()[0]);
Method set = aClass.getDeclaredMethod("setForecast", (Class)parameterizedType.getRawType());
type = set.getGenericParameterTypes()[0];
parameterizedType = (ParameterizedType) type;
assertInstanceOf(type, ParameterizedType.class);
assertEquals(String.class, parameterizedType.getActualTypeArguments()[0]);
}
{
Method get = bClass.getDeclaredMethod("getForecast");
Type type = get.getGenericReturnType();
assertInstanceOf(type, ParameterizedType.class);
ParameterizedType parameterizedType = (ParameterizedType) type;
assertEquals(String.class, parameterizedType.getActualTypeArguments()[0]);
Method set = bClass.getDeclaredMethod("setForecast", (Class)parameterizedType.getRawType());
type = set.getGenericParameterTypes()[0];
parameterizedType = (ParameterizedType) type;
assertInstanceOf(type, ParameterizedType.class);
assertEquals(String.class, parameterizedType.getActualTypeArguments()[0]);
}
}
catch (Throwable e) {
System.out.println(generateToText());
throw new RuntimeException(e);
}
}
}