diff --git a/compiler/testData/readClass/fun/FunParamUpperClassBound.kt b/compiler/testData/readClass/fun/FunParamUpperClassBound.kt
new file mode 100644
index 00000000000..3a4c68fed8f
--- /dev/null
+++ b/compiler/testData/readClass/fun/FunParamUpperClassBound.kt
@@ -0,0 +1,3 @@
+namespace test
+
+fun uno() = 1
diff --git a/compiler/testData/readClass/fun/FunParamUpperClassInterfaceBound.kt b/compiler/testData/readClass/fun/FunParamUpperClassInterfaceBound.kt
new file mode 100644
index 00000000000..678d5a2967a
--- /dev/null
+++ b/compiler/testData/readClass/fun/FunParamUpperClassInterfaceBound.kt
@@ -0,0 +1,3 @@
+namespace test
+
+fun tres() where A : java.lang.Number, A : java.lang.CharSequence = 1
diff --git a/compiler/testData/readClass/fun/FunParamUpperInterfaceBound.kt b/compiler/testData/readClass/fun/FunParamUpperInterfaceBound.kt
new file mode 100644
index 00000000000..00a6e0432cb
--- /dev/null
+++ b/compiler/testData/readClass/fun/FunParamUpperInterfaceBound.kt
@@ -0,0 +1,3 @@
+namespace test
+
+fun dos() = 1
diff --git a/compiler/testData/readClass/fun/FunParamUpperInterfaceClassBound.kt b/compiler/testData/readClass/fun/FunParamUpperInterfaceClassBound.kt
new file mode 100644
index 00000000000..6effa87aba9
--- /dev/null
+++ b/compiler/testData/readClass/fun/FunParamUpperInterfaceClassBound.kt
@@ -0,0 +1,3 @@
+namespace test
+
+fun cuatro() where A : java.lang.CharSequence, A : java.lang.Number = 1
diff --git a/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java b/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
index 2627cd5c94d..b8a9351f937 100644
--- a/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
+++ b/compiler/tests/org/jetbrains/jet/ReadClassDataTest.java
@@ -160,9 +160,6 @@ public class ReadClassDataTest extends UsefulTestCase {
sb.append(" {\n");
- if (false) {
- // TODO: for some reason I don't understand scope of ClassDescriptor came from source is empty
-
List typeArguments = new ArrayList();
for (TypeParameterDescriptor param : klass.getTypeConstructor().getParameters()) {
typeArguments.add(new TypeProjection(Variance.INVARIANT, param.getDefaultType()));
@@ -170,12 +167,21 @@ public class ReadClassDataTest extends UsefulTestCase {
JetScope memberScope = klass.getMemberScope(typeArguments);
for (DeclarationDescriptor member : memberScope.getAllDescriptors()) {
+ // TODO
+ if (member.getName().equals("equals") || member.getName().equals("hashCode")
+ || member.getName().equals("wait") || member.getName().equals("notify") || member.getName().equals("notifyAll")
+ || member.getName().equals("toString") || member.getName().equals("getClass")
+ || member.getName().equals("clone") || member.getName().equals("finalize")
+ || member.getName().equals("getTypeInfo") || member.getName().equals("$setTypeInfo") || member.getName().equals("$typeInfo")
+ )
+ {
+ continue;
+ }
+ sb.append(" ");
serialize(member, sb);
sb.append("\n");
}
- }
-
sb.append("}\n");
return sb.toString();
}
@@ -213,6 +219,17 @@ public class ReadClassDataTest extends UsefulTestCase {
serialize(fun.getReturnType(), sb);
}
+ private void serialize(PropertyDescriptor prop, StringBuilder sb) {
+ if (prop.isVar()) {
+ sb.append("var ");
+ } else {
+ sb.append("val ");
+ }
+ sb.append(prop.getName());
+ sb.append(": ");
+ serialize(prop.getOutType(), sb);
+ }
+
private void serialize(ValueParameterDescriptor valueParameter, StringBuilder sb) {
sb.append(valueParameter.getName());
sb.append(": ");