Forbid usage of outer's generic parameter in nested class

#KT-1174 In Progress
This commit is contained in:
Alexander Udalov
2012-12-10 20:36:06 +04:00
parent 43c37398af
commit 7a3000ccac
6 changed files with 26 additions and 7 deletions
@@ -124,6 +124,11 @@ public class TypeResolver {
}
resolveTypeProjections(scope, ErrorUtils.createErrorType("No type").getConstructor(), type.getTypeArguments(), trace, checkBounds);
DeclarationDescriptor containing = typeParameterDescriptor.getContainingDeclaration();
if (containing instanceof ClassDescriptor) {
DescriptorResolver.checkHasOuterClassInstance(scope, trace, referenceExpression, (ClassDescriptor) containing);
}
}
else if (classifierDescriptor instanceof ClassDescriptor) {
ClassDescriptor classDescriptor = (ClassDescriptor) classifierDescriptor;
@@ -19,10 +19,6 @@ class MyIterator<T>(val array : ReadOnlyArray<T>) : javaUtilIterator<T> {
trait ReadOnlyArray<out T> : ISized, Iterable<T> {
fun get(index : Int) : T
class Default {
fun check(v: Any) = v is T
}
override fun iterator() : Iterator<T> = MyIterator<T>(this)
}
+2 -2
View File
@@ -1,9 +1,9 @@
class Box<T>() {
open class Inner () {
open inner class Inner () {
fun isT(s : Any) = if(s is T) "OK" else "fail"
}
class Inner2() : Inner() {
inner class Inner2() : Inner() {
}
fun inner() = Inner2()
@@ -19,7 +19,7 @@ class MyIterable<T> : Iterable<T>
{
override fun iterator(): Iterator<T> = MyIterator()
class MyIterator : Iterator<T>
inner class MyIterator : Iterator<T>
{
override fun hasNext(): Boolean = false
override fun next(): T {
@@ -0,0 +1,13 @@
class Outer<T> {
class Nested {
fun foo(t: <!INACCESSIBLE_OUTER_CLASS_EXPRESSION!>T<!>) = t
}
class Nested2<T> {
fun foo(t: T) = t
}
inner class Inner {
fun foo(t: T) = t
}
}
@@ -2459,6 +2459,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/inner/nestedVsInnerAccessOuterMember.kt");
}
@TestMetadata("outerGenericParam.kt")
public void testOuterGenericParam() throws Exception {
doTest("compiler/testData/diagnostics/tests/inner/outerGenericParam.kt");
}
@TestMetadata("visibility.kt")
public void testVisibility() throws Exception {
doTest("compiler/testData/diagnostics/tests/inner/visibility.kt");