diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index c248f85e819..775124279a8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -43,7 +43,6 @@ import org.jetbrains.jet.lang.resolve.constants.StringValue; import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterSignature; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature; @@ -110,10 +109,7 @@ public class JetTypeMapper { } DeclarationDescriptor container = descriptor.getContainingDeclaration(); - if (container instanceof JavaClassStaticsPackageFragmentDescriptor) { - return mapClass(((JavaClassStaticsPackageFragmentDescriptor) container).getCorrespondingClass()); - } - else if (container instanceof PackageFragmentDescriptor) { + if (container instanceof PackageFragmentDescriptor) { return Type.getObjectType(internalNameForPackage( (PackageFragmentDescriptor) container, (CallableMemberDescriptor) descriptor, diff --git a/compiler/testData/diagnostics/tests/j+k/privateNestedClassStaticMember.kt b/compiler/testData/diagnostics/tests/j+k/privateNestedClassStaticMember.kt new file mode 100644 index 00000000000..1abe80f449d --- /dev/null +++ b/compiler/testData/diagnostics/tests/j+k/privateNestedClassStaticMember.kt @@ -0,0 +1,18 @@ +// KT-4149 static members of Java private nested class are accessible from Kotlin + +// FILE: javaPackage/Foo.java + +package javaPackage; + +public class Foo { + private static class Bar { + public static void doSmth() { + } + } +} + +// FILE: 1.kt + +fun main(args: Array) { + javaPackage.Foo.Bar.doSmth() +} diff --git a/compiler/testData/loadJava/compiledJava/InnerOfGeneric.txt b/compiler/testData/loadJava/compiledJava/InnerOfGeneric.txt index 7d7d206d116..8cf2ece2acf 100644 --- a/compiler/testData/loadJava/compiledJava/InnerOfGeneric.txt +++ b/compiler/testData/loadJava/compiledJava/InnerOfGeneric.txt @@ -2,30 +2,29 @@ package test public open class InnerOfGeneric { public constructor InnerOfGeneric() - + public abstract inner class A { public constructor A() - + public abstract inner class Inner : test.InnerOfGeneric.S { public constructor Inner() public abstract override /*1*/ /*fake_override*/ fun iterator(): kotlin.MutableIterator? } } - + public open inner class B : test.InnerOfGeneric.A { public constructor B() - + public open inner class SubInner : test.InnerOfGeneric.A.Inner { public constructor SubInner() public open override /*1*/ fun iterator(): kotlin.MutableIterator? } } - + public trait S { public abstract fun iterator(): kotlin.MutableIterator? } -} - -package test.InnerOfGeneric { - public /*synthesized*/ fun S(/*0*/ function: () -> kotlin.MutableIterator?): test.InnerOfGeneric.S + + // Static members + public final /*synthesized*/ fun S(/*0*/ function: () -> kotlin.MutableIterator?): test.InnerOfGeneric.S } diff --git a/compiler/testData/loadJava/compiledJava/PrivateMembers.txt b/compiler/testData/loadJava/compiledJava/PrivateMembers.txt index 0bf31dd1820..f279cc4787d 100644 --- a/compiler/testData/loadJava/compiledJava/PrivateMembers.txt +++ b/compiler/testData/loadJava/compiledJava/PrivateMembers.txt @@ -6,26 +6,24 @@ public open class PrivateMembers { private open fun method(): kotlin.Unit private final /*synthesized*/ fun samAdapter(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit private open fun samAdapter(/*0*/ p0: test.PrivateMembers.SamInterface?): kotlin.Unit - + private open inner class Inner { private constructor Inner() } - + private open class Nested { private constructor Nested() + + // Static members + private open fun staticMethodInNested(): kotlin.Unit } - + private trait SamInterface { public abstract fun foo(): kotlin.Unit } -} - -package test.PrivateMembers { - private var staticField: kotlin.Int - private /*synthesized*/ fun SamInterface(/*0*/ function: () -> kotlin.Unit): test.PrivateMembers.SamInterface + + // Static members + private final var staticField: kotlin.Int + private final /*synthesized*/ fun SamInterface(/*0*/ function: () -> kotlin.Unit): test.PrivateMembers.SamInterface private open fun staticMethod(): kotlin.Unit - - package test.PrivateMembers.Nested { - private open fun staticMethodInNested(): kotlin.Unit - } } diff --git a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt index 91f7c59dfff..acd5cc51586 100644 --- a/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt +++ b/compiler/testData/loadJava/compiledJava/RawTypeWithUpperBound.txt @@ -1,15 +1,14 @@ package test public trait RawTypeWithUpperBound { - + public trait Bar { public abstract fun f(/*0*/ p0: test.RawTypeWithUpperBound.Foo?): kotlin.Unit } - + public trait Foo { } -} - -package test.RawTypeWithUpperBound { - public /*synthesized*/ fun Bar(/*0*/ function: (test.RawTypeWithUpperBound.Foo?) -> kotlin.Unit): test.RawTypeWithUpperBound.Bar + + // Static members + public final /*synthesized*/ fun Bar(/*0*/ function: (test.RawTypeWithUpperBound.Foo?) -> kotlin.Unit): test.RawTypeWithUpperBound.Bar } diff --git a/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.txt b/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.txt index 4ff9e52b3b0..c2c0889d4cf 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.txt @@ -1,17 +1,16 @@ package test public trait StringConstantInParam { - + public final annotation class Anno : kotlin.Annotation { public constructor Anno(/*0*/ value: kotlin.String) public abstract fun value(): kotlin.String } - + test.StringConstantInParam.Anno(value = "hello": kotlin.String) public open class Class { public constructor Class() } -} - -package test.StringConstantInParam { - public val HEL: kotlin.String = "hel" + + // Static members + public final val HEL: kotlin.String = "hel" } diff --git a/compiler/testData/loadJava/compiledJava/sam/Nested.txt b/compiler/testData/loadJava/compiledJava/sam/Nested.txt index f044e356498..3e3888db240 100644 --- a/compiler/testData/loadJava/compiledJava/sam/Nested.txt +++ b/compiler/testData/loadJava/compiledJava/sam/Nested.txt @@ -1,31 +1,29 @@ package test public trait Nested { - + public trait Deeper1 { - + public trait Runnable { public abstract fun run(): kotlin.Unit public abstract fun run2(): kotlin.Unit } } - + public trait Deeper2 { - + public trait Runnable { public abstract fun run(): kotlin.Unit } + + // Static members + public final /*synthesized*/ fun Runnable(/*0*/ function: () -> kotlin.Unit): test.Nested.Deeper2.Runnable } - + public trait Runnable { public abstract fun run(): kotlin.Unit } -} - -package test.Nested { - public /*synthesized*/ fun Runnable(/*0*/ function: () -> kotlin.Unit): test.Nested.Runnable - - package test.Nested.Deeper2 { - public /*synthesized*/ fun Runnable(/*0*/ function: () -> kotlin.Unit): test.Nested.Deeper2.Runnable - } + + // Static members + public final /*synthesized*/ fun Runnable(/*0*/ function: () -> kotlin.Unit): test.Nested.Runnable } diff --git a/compiler/testData/loadJava/compiledJava/sam/SamSubinterfaceOfTwo.txt b/compiler/testData/loadJava/compiledJava/sam/SamSubinterfaceOfTwo.txt index a7f6c72e9bd..a341c31c741 100644 --- a/compiler/testData/loadJava/compiledJava/sam/SamSubinterfaceOfTwo.txt +++ b/compiler/testData/loadJava/compiledJava/sam/SamSubinterfaceOfTwo.txt @@ -1,22 +1,21 @@ package test public trait SamSubinterfaceOfTwo { - + public trait Sub : test.SamSubinterfaceOfTwo.Super1, test.SamSubinterfaceOfTwo.Super2 { public abstract override /*2*/ /*fake_override*/ fun f(): kotlin.String? } - + public trait Super1 { public abstract fun f(): kotlin.CharSequence? } - + public trait Super2 { public abstract fun f(): T? } -} - -package test.SamSubinterfaceOfTwo { - public /*synthesized*/ fun Sub(/*0*/ function: () -> kotlin.String?): test.SamSubinterfaceOfTwo.Sub - public /*synthesized*/ fun Super1(/*0*/ function: () -> kotlin.CharSequence?): test.SamSubinterfaceOfTwo.Super1 - public /*synthesized*/ fun Super2(/*0*/ function: () -> T?): test.SamSubinterfaceOfTwo.Super2 + + // Static members + public final /*synthesized*/ fun Sub(/*0*/ function: () -> kotlin.String?): test.SamSubinterfaceOfTwo.Sub + public final /*synthesized*/ fun Super1(/*0*/ function: () -> kotlin.CharSequence?): test.SamSubinterfaceOfTwo.Super1 + public final /*synthesized*/ fun Super2(/*0*/ function: () -> T?): test.SamSubinterfaceOfTwo.Super2 } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/Basic.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/Basic.txt index 545fb723273..ff745a4d6bf 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/Basic.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/Basic.txt @@ -4,9 +4,8 @@ public open class Basic { public constructor Basic() public final /*synthesized*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public open fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit -} -package test.Basic { - public /*synthesized*/ fun bar(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit + // Static members + public final /*synthesized*/ fun bar(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public open fun bar(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/DeepSamLoop.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/DeepSamLoop.txt index 0cb712d4f59..30a3d1e0e16 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/DeepSamLoop.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/DeepSamLoop.txt @@ -1,19 +1,18 @@ package test public trait DeepSamLoop { - + public trait Bar { public final /*synthesized*/ fun foo(/*0*/ p0: ((test.DeepSamLoop.Bar?) -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: test.DeepSamLoop.Foo?): kotlin.Unit } - + public trait Foo { public final /*synthesized*/ fun foo(/*0*/ p0: ((test.DeepSamLoop.Foo?) -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: test.DeepSamLoop.Bar?): kotlin.Unit } -} - -package test.DeepSamLoop { - public /*synthesized*/ fun Bar(/*0*/ function: (test.DeepSamLoop.Foo?) -> kotlin.Unit): test.DeepSamLoop.Bar - public /*synthesized*/ fun Foo(/*0*/ function: (test.DeepSamLoop.Bar?) -> kotlin.Unit): test.DeepSamLoop.Foo + + // Static members + public final /*synthesized*/ fun Bar(/*0*/ function: (test.DeepSamLoop.Foo?) -> kotlin.Unit): test.DeepSamLoop.Bar + public final /*synthesized*/ fun Foo(/*0*/ function: (test.DeepSamLoop.Bar?) -> kotlin.Unit): test.DeepSamLoop.Foo } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/SeveralSamParameters.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/SeveralSamParameters.txt index 53f649e6c28..b86d0fd1c2d 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/SeveralSamParameters.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/SeveralSamParameters.txt @@ -2,9 +2,8 @@ package test public open class SeveralSamParameters { public constructor SeveralSamParameters() -} - -package test.SeveralSamParameters { - public /*synthesized*/ fun findMaxAndInvokeCallback(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?, /*1*/ p1: kotlin.String?, /*2*/ p2: kotlin.String?, /*3*/ p3: (() -> kotlin.Unit)?): kotlin.String? + + // Static members + public final /*synthesized*/ fun findMaxAndInvokeCallback(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?, /*1*/ p1: kotlin.String?, /*2*/ p2: kotlin.String?, /*3*/ p3: (() -> kotlin.Unit)?): kotlin.String? public open fun findMaxAndInvokeCallback(/*0*/ p0: java.util.Comparator?, /*1*/ p1: kotlin.String?, /*2*/ p2: kotlin.String?, /*3*/ p3: java.lang.Runnable?): kotlin.String? } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/TypeParameterOfMethod.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/TypeParameterOfMethod.txt index f567fbb2ac3..3d680547951 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/TypeParameterOfMethod.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/TypeParameterOfMethod.txt @@ -2,13 +2,12 @@ package test public open class TypeParameterOfMethod { public constructor TypeParameterOfMethod() -} - -package test.TypeParameterOfMethod { - public /*synthesized*/ fun max(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? + + // Static members + public final /*synthesized*/ fun max(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? public open fun max(/*0*/ p0: java.util.Comparator?, /*1*/ p1: T?, /*2*/ p2: T?): T? - public /*synthesized*/ fun max2(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? + public final /*synthesized*/ fun max2(/*0*/ p0: ((T, T) -> kotlin.Int)?, /*1*/ p1: T?, /*2*/ p2: T?): T? public open fun max2(/*0*/ p0: java.util.Comparator?, /*1*/ p1: T?, /*2*/ p2: T?): T? - public /*synthesized*/ fun ?> method(/*0*/ p0: ((A, A) -> kotlin.Int)?, /*1*/ p1: B?): kotlin.Unit + public final /*synthesized*/ fun ?> method(/*0*/ p0: ((A, A) -> kotlin.Int)?, /*1*/ p1: B?): kotlin.Unit public open fun ?> method(/*0*/ p0: java.util.Comparator?, /*1*/ p1: B?): kotlin.Unit } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/AdapterDoesntOverrideDeclaration.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/AdapterDoesntOverrideDeclaration.txt index bb3b0670979..8f020ab7ded 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/AdapterDoesntOverrideDeclaration.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/AdapterDoesntOverrideDeclaration.txt @@ -1,18 +1,17 @@ package test public trait AdapterDoesntOverrideDeclaration { - + public trait Sub : test.AdapterDoesntOverrideDeclaration.Super { public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public final /*synthesized*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } - + public trait Super { public abstract fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit } -} - -package test.AdapterDoesntOverrideDeclaration { - public /*synthesized*/ fun Super(/*0*/ function: ((() -> kotlin.Unit)?) -> kotlin.Unit): test.AdapterDoesntOverrideDeclaration.Super + + // Static members + public final /*synthesized*/ fun Super(/*0*/ function: ((() -> kotlin.Unit)?) -> kotlin.Unit): test.AdapterDoesntOverrideDeclaration.Super } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdapters.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdapters.txt index 739ec23f05d..978fc13d436 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdapters.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdapters.txt @@ -1,25 +1,24 @@ package test public trait InheritedSameAdapters { - + public trait Sub : test.InheritedSameAdapters.Super1, test.InheritedSameAdapters.Super2 { public final override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } - + public trait Super1 { public final /*synthesized*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } - + public trait Super2 { public final /*synthesized*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } -} - -package test.InheritedSameAdapters { - public /*synthesized*/ fun Sub(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Sub - public /*synthesized*/ fun Super1(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Super1 - public /*synthesized*/ fun Super2(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Super2 + + // Static members + public final /*synthesized*/ fun Sub(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Sub + public final /*synthesized*/ fun Super1(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Super1 + public final /*synthesized*/ fun Super2(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSameAdapters.Super2 } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdaptersWithSubstitution.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdaptersWithSubstitution.txt index a7be8e55b7d..f4e30d5a396 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdaptersWithSubstitution.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSameAdaptersWithSubstitution.txt @@ -1,31 +1,30 @@ package test public trait InheritedSameAdaptersWithSubstitution { - + public trait Sub : test.InheritedSameAdaptersWithSubstitution.Super1, test.InheritedSameAdaptersWithSubstitution.Super2Substituted { public final override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public abstract override /*2*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator?): kotlin.Unit } - + public trait Super1 { public final /*synthesized*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.util.Comparator?): kotlin.Unit } - + public trait Super2 { public final /*synthesized*/ fun foo(/*0*/ p0: ((T, T) -> kotlin.Int)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.util.Comparator?): kotlin.Unit } - + public trait Super2Substituted : test.InheritedSameAdaptersWithSubstitution.Super2 { public final override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: ((kotlin.String, kotlin.String) -> kotlin.Int)?): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: java.util.Comparator?): kotlin.Unit } -} - -package test.InheritedSameAdaptersWithSubstitution { - public /*synthesized*/ fun Sub(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Sub - public /*synthesized*/ fun Super1(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super1 - public /*synthesized*/ fun Super2(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2 - public /*synthesized*/ fun Super2Substituted(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2Substituted + + // Static members + public final /*synthesized*/ fun Sub(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Sub + public final /*synthesized*/ fun Super1(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super1 + public final /*synthesized*/ fun Super2(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2 + public final /*synthesized*/ fun Super2Substituted(/*0*/ function: (java.util.Comparator?) -> kotlin.Unit): test.InheritedSameAdaptersWithSubstitution.Super2Substituted } diff --git a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSimple.txt b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSimple.txt index 76d7dccbfd7..0fa258f47c5 100644 --- a/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSimple.txt +++ b/compiler/testData/loadJava/compiledJava/sam/adapters/inheritance/InheritedSimple.txt @@ -1,19 +1,18 @@ package test public trait InheritedSimple { - + public trait Sub : test.InheritedSimple.Super { public final override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } - + public trait Super { public final /*synthesized*/ fun foo(/*0*/ p0: (() -> kotlin.Unit)?): kotlin.Unit public abstract fun foo(/*0*/ p0: java.lang.Runnable?): kotlin.Unit } -} - -package test.InheritedSimple { - public /*synthesized*/ fun Sub(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSimple.Sub - public /*synthesized*/ fun Super(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSimple.Super + + // Static members + public final /*synthesized*/ fun Sub(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSimple.Sub + public final /*synthesized*/ fun Super(/*0*/ function: (java.lang.Runnable?) -> kotlin.Unit): test.InheritedSimple.Super } diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt index b5bf8d1e4f5..24e43148d8b 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/RawSuperType.txt @@ -2,17 +2,16 @@ package test public open class RawSuperType { public constructor RawSuperType() - + public open inner class Derived : test.RawSuperType.Super { public constructor Derived() public open override /*1*/ fun foo(/*0*/ p0: kotlin.Any?): kotlin.Unit } - + public trait Super { public abstract fun foo(/*0*/ p0: T?): kotlin.Unit } -} - -package test.RawSuperType { - public /*synthesized*/ fun Super(/*0*/ function: (T?) -> kotlin.Unit): test.RawSuperType.Super + + // Static members + public final /*synthesized*/ fun Super(/*0*/ function: (T?) -> kotlin.Unit): test.RawSuperType.Super } diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesInconsistentGenericTypes.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesInconsistentGenericTypes.txt index 243480526f5..f3178af2629 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesInconsistentGenericTypes.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesInconsistentGenericTypes.txt @@ -4,17 +4,16 @@ public /*synthesized*/ fun TwoSuperclassesInconsistentGenericTypes(/*0*/ functio public trait TwoSuperclassesInconsistentGenericTypes { public abstract fun foo(): kotlin.MutableList - + public trait Other { public abstract fun foo(): kotlin.MutableList? } - + public open class Sub : test.TwoSuperclassesInconsistentGenericTypes, test.TwoSuperclassesInconsistentGenericTypes.Other { public constructor Sub() public open override /*2*/ fun foo(): kotlin.MutableList } -} - -package test.TwoSuperclassesInconsistentGenericTypes { - public /*synthesized*/ fun Other(/*0*/ function: () -> kotlin.MutableList?): test.TwoSuperclassesInconsistentGenericTypes.Other + + // Static members + public final /*synthesized*/ fun Other(/*0*/ function: () -> kotlin.MutableList?): test.TwoSuperclassesInconsistentGenericTypes.Other } diff --git a/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesVarargAndNot.txt b/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesVarargAndNot.txt index 01d00f38389..c18933990d3 100644 --- a/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesVarargAndNot.txt +++ b/compiler/testData/loadJava/compiledJava/signaturePropagation/TwoSuperclassesVarargAndNot.txt @@ -1,22 +1,21 @@ package test public trait TwoSuperclassesVarargAndNot { - + public trait Sub : test.TwoSuperclassesVarargAndNot.Super1, test.TwoSuperclassesVarargAndNot.Super2 { public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ vararg p0: kotlin.String? /*kotlin.Array*/): kotlin.Unit public abstract override /*1*/ fun foo(/*0*/ s: kotlin.Array?): kotlin.Unit } - + public trait Super1 { public abstract fun foo(/*0*/ vararg p0: kotlin.String? /*kotlin.Array*/): kotlin.Unit } - + public trait Super2 { public abstract fun foo(/*0*/ s: kotlin.Array?): kotlin.Unit } -} - -package test.TwoSuperclassesVarargAndNot { - public /*synthesized*/ fun Super1(/*0*/ function: (kotlin.Array) -> kotlin.Unit): test.TwoSuperclassesVarargAndNot.Super1 - public /*synthesized*/ fun Super2(/*0*/ function: (kotlin.Array?) -> kotlin.Unit): test.TwoSuperclassesVarargAndNot.Super2 + + // Static members + public final /*synthesized*/ fun Super1(/*0*/ function: (kotlin.Array) -> kotlin.Unit): test.TwoSuperclassesVarargAndNot.Super1 + public final /*synthesized*/ fun Super2(/*0*/ function: (kotlin.Array?) -> kotlin.Unit): test.TwoSuperclassesVarargAndNot.Super2 } diff --git a/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt index 8585bb9fd22..ff1c72b56b1 100644 --- a/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt +++ b/compiler/testData/loadJava/compiledJava/static/DeeplyNestedStatic.txt @@ -2,21 +2,14 @@ package test public open class DeeplyNestedStatic { public constructor DeeplyNestedStatic() - + public open class Foo { public constructor Foo() - + public open class Bar { public constructor Bar() - } - } -} - -package test.DeeplyNestedStatic { - - package test.DeeplyNestedStatic.Foo { - - package test.DeeplyNestedStatic.Foo.Bar { + + // Static members public open fun method(): kotlin.Unit } } diff --git a/compiler/testData/loadJava/compiledJava/static/Simple.txt b/compiler/testData/loadJava/compiledJava/static/Simple.txt index 2acce6d38a5..a6940f25a2e 100644 --- a/compiler/testData/loadJava/compiledJava/static/Simple.txt +++ b/compiler/testData/loadJava/compiledJava/static/Simple.txt @@ -3,8 +3,7 @@ package test public open class Simple { public constructor Simple() public open fun foo(): kotlin.Unit -} - -package test.Simple { + + // Static members public open fun bar(): kotlin.Unit } diff --git a/compiler/testData/loadJava/compiledJava/static/StaticFinal.txt b/compiler/testData/loadJava/compiledJava/static/StaticFinal.txt index 16d4403ba44..88dee4cb21c 100644 --- a/compiler/testData/loadJava/compiledJava/static/StaticFinal.txt +++ b/compiler/testData/loadJava/compiledJava/static/StaticFinal.txt @@ -2,8 +2,7 @@ package test public open class StaticFinal { public constructor StaticFinal() -} - -package test.StaticFinal { - public val foo: kotlin.String = "aaa" + + // Static members + public final val foo: kotlin.String = "aaa" } diff --git a/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt b/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt index d8f355694d3..09aa288ca05 100644 --- a/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt +++ b/compiler/testData/loadJava/compiledJava/static/StaticMembersInEnum.txt @@ -4,29 +4,28 @@ public final enum class StaticMembersInEnum : kotlin.Enum { private constructor () public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): test.StaticMembersInEnum public final /*synthesized*/ fun values(): kotlin.Array } - + public enum entry ENTRY : test.StaticMembersInEnum { private constructor ENTRY() public final override /*1*/ /*fake_override*/ fun name(): kotlin.String public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int - + public class object : test.StaticMembersInEnum.ENTRY { private constructor () public final override /*1*/ /*fake_override*/ fun name(): kotlin.String public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int } } -} - -package test.StaticMembersInEnum { - public val CONSTANT: test.StaticMembersInEnum - public var STATIC_FIELD: kotlin.Int + + // Static members + public final val CONSTANT: test.StaticMembersInEnum + public final var STATIC_FIELD: kotlin.Int public open fun foo(): kotlin.Unit public open fun valueOf(/*0*/ p0: kotlin.Int): kotlin.Unit public open fun values(/*0*/ p0: kotlin.Int): kotlin.Unit diff --git a/compiler/testData/loadJava/compiledJavaAndKotlin/MixedPackage.txt b/compiler/testData/loadJava/compiledJavaAndKotlin/MixedPackage.txt index 6d03dbf4edd..329e0c009a8 100644 --- a/compiler/testData/loadJava/compiledJavaAndKotlin/MixedPackage.txt +++ b/compiler/testData/loadJava/compiledJavaAndKotlin/MixedPackage.txt @@ -6,6 +6,9 @@ public fun topLevelFunction(): kotlin.Unit public open class JavaClass { public constructor JavaClass() public open fun instanceMethod(): kotlin.Unit + + // Static members + public open fun staticMethod(): kotlin.Unit } public final class KotlinClass { @@ -16,18 +19,13 @@ public trait SamInterface { public abstract fun instanceMethod(): kotlin.Unit } -package test.JavaClass { - public open fun staticMethod(): kotlin.Unit -} - package test.sub { - + public open class JavaClassInSubpackage { public constructor JavaClassInSubpackage() public open fun instanceMethod(): kotlin.Unit - } - - package test.sub.JavaClassInSubpackage { + + // Static members public open fun staticMethod(): kotlin.Unit } } diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index a15c4c05fd8..e4f30a4f231 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -6151,6 +6151,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("privateNestedClassStaticMember.kt") + public void testPrivateNestedClassStaticMember() throws Exception { + doTest("compiler/testData/diagnostics/tests/j+k/privateNestedClassStaticMember.kt"); + } + @TestMetadata("protectedStaticSamePackage.kt") public void testProtectedStaticSamePackage() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/j+k/protectedStaticSamePackage.kt"); diff --git a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java index 90d2e44aa30..5848a9a2024 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java @@ -20,8 +20,6 @@ import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -170,13 +168,6 @@ public class DescriptorValidator { public Boolean visitPackageFragmentDescriptor( PackageFragmentDescriptor descriptor, DiagnosticCollector collector ) { - if (descriptor instanceof JavaClassStaticsPackageFragmentDescriptor) { - JavaClassDescriptor correspondingClass = ((JavaClassStaticsPackageFragmentDescriptor) descriptor).getCorrespondingClass(); - JavaClassStaticsPackageFragmentDescriptor correspondingPackageFragment = correspondingClass.getCorrespondingPackageFragment(); - if (correspondingPackageFragment != descriptor) { - report(collector, descriptor, "Corresponding class bound to another descriptor: " + correspondingPackageFragment); - } - } validateScope(descriptor.getMemberScope(), collector); return true; } @@ -251,17 +242,6 @@ public class DescriptorValidator { } } - if (descriptor instanceof JavaClassDescriptor) { - JavaClassStaticsPackageFragmentDescriptor - correspondingPackageFragment = ((JavaClassDescriptor) descriptor).getCorrespondingPackageFragment(); - if (correspondingPackageFragment != null) { - JavaClassDescriptor correspondingClass = correspondingPackageFragment.getCorrespondingClass(); - if (correspondingClass != descriptor) { - report(collector, descriptor, "Corresponding package bound to another descriptor: " + correspondingClass); - } - } - } - return true; } diff --git a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorComparator.java b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorComparator.java index 6fb0f15df1c..6b6fada1dce 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorComparator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorComparator.java @@ -95,6 +95,12 @@ public class RecursiveDescriptorComparator { if (descriptor instanceof ClassDescriptor) { ClassDescriptor klass = (ClassDescriptor) descriptor; appendSubDescriptors(klass.getDefaultType().getMemberScope(), getConstructorsAndClassObject(klass), printer); + JetScope staticScope = klass.getStaticScope(); + if (!staticScope.getAllDescriptors().isEmpty()) { + printer.println(); + printer.println("// Static members"); + appendSubDescriptors(staticScope, Collections.emptyList(), printer); + } } else if (descriptor instanceof PackageFragmentDescriptor) { appendSubDescriptors(((PackageFragmentDescriptor) descriptor).getMemberScope(), diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.kt index 00f89cefe5d..88f8bef2f1f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.kt @@ -16,29 +16,16 @@ package org.jetbrains.jet.lang.resolve.java -import org.jetbrains.jet.lang.descriptors.ClassDescriptor -import org.jetbrains.jet.lang.descriptors.ModuleDescriptor -import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor +import org.jetbrains.jet.lang.descriptors.* +import org.jetbrains.jet.lang.resolve.java.structure.* import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider -import org.jetbrains.jet.lang.resolve.java.structure.JavaClass -import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import org.jetbrains.jet.lang.resolve.scopes.JetScope -import org.jetbrains.jet.lang.resolve.java.structure.JavaField -import org.jetbrains.jet.lang.resolve.java.structure.JavaMember -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor import org.jetbrains.jet.lang.resolve.java.sources.JavaSourceElement -import org.jetbrains.jet.lang.resolve.java.structure.JavaElement -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithSource public class JavaDescriptorResolver(public val packageFragmentProvider: LazyJavaPackageFragmentProvider, private val module: ModuleDescriptor) { public fun resolveClass(javaClass: JavaClass): ClassDescriptor? { return packageFragmentProvider.getClass(javaClass) } - - public fun getPackageFragment(javaClass: JavaClass): PackageFragmentDescriptor? { - return packageFragmentProvider.getPackageFragment(javaClass) - } } public fun JavaDescriptorResolver.resolveMethod(method: JavaMethod): FunctionDescriptor? { @@ -54,12 +41,12 @@ public fun JavaDescriptorResolver.resolveField(field: JavaField): PropertyDescri return getContainingScope(field)?.getProperties(field.getName())?.findByJavaElement(field) as? PropertyDescriptor } -private fun JavaDescriptorResolver.getContainingScope(method: JavaMember): JetScope? { - val containingClass = method.getContainingClass() - return if (method.isStatic()) - getPackageFragment(containingClass)?.getMemberScope() +private fun JavaDescriptorResolver.getContainingScope(member: JavaMember): JetScope? { + val containingClass = resolveClass(member.getContainingClass()) + return if (member.isStatic()) + containingClass?.getStaticScope() else - resolveClass(containingClass)?.getDefaultType()?.getMemberScope() + containingClass?.getDefaultType()?.getMemberScope() } private fun Collection.findByJavaElement(javaElement: JavaElement): T? { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java index d088f6da55a..5334e95d8f3 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JavaVisibilities.java @@ -17,10 +17,8 @@ package org.jetbrains.jet.lang.resolve.java; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor; public class JavaVisibilities { private JavaVisibilities() { @@ -61,20 +59,9 @@ public class JavaVisibilities { ClassDescriptor fromClass = DescriptorUtils.getParentOfType(from, ClassDescriptor.class, false); if (fromClass == null) return false; - ClassDescriptor whatClass; - // protected static class - if (what instanceof ClassDescriptor) { - DeclarationDescriptor containingDeclaration = what.getContainingDeclaration(); - assert containingDeclaration instanceof ClassDescriptor : "Only static nested classes can have protected_static visibility"; - whatClass = (ClassDescriptor) containingDeclaration; - } - // protected static function or property - else { - DeclarationDescriptor whatDeclarationDescriptor = what.getContainingDeclaration(); - assert whatDeclarationDescriptor instanceof JavaClassStaticsPackageFragmentDescriptor - : "Only static declarations can have protected_static visibility"; - whatClass = ((JavaClassStaticsPackageFragmentDescriptor) whatDeclarationDescriptor).getCorrespondingClass(); - } + DeclarationDescriptor containingDeclaration = what.getContainingDeclaration(); + assert containingDeclaration instanceof ClassDescriptor : "Only class members can have protected_static visibility"; + ClassDescriptor whatClass = (ClassDescriptor) containingDeclaration; if (DescriptorUtils.isSubclass(fromClass, whatClass)) { return true; @@ -134,18 +121,8 @@ public class JavaVisibilities { }; private static boolean areInSamePackage(@NotNull DeclarationDescriptor first, @NotNull DeclarationDescriptor second) { - PackageFragmentDescriptor whatPackage = getPackageStaticsAware(first); - PackageFragmentDescriptor fromPackage = getPackageStaticsAware(second); + PackageFragmentDescriptor whatPackage = DescriptorUtils.getParentOfType(first, PackageFragmentDescriptor.class, false); + PackageFragmentDescriptor fromPackage = DescriptorUtils.getParentOfType(second, PackageFragmentDescriptor.class, false); return fromPackage != null && whatPackage != null && whatPackage.getFqName().equals(fromPackage.getFqName()); } - - @Nullable - private static PackageFragmentDescriptor getPackageStaticsAware(@NotNull DeclarationDescriptor member) { - PackageFragmentDescriptor packageFragment = DescriptorUtils.getParentOfType(member, PackageFragmentDescriptor.class, false); - if (packageFragment instanceof JavaClassStaticsPackageFragmentDescriptor) { - ClassDescriptor classForPackage = ((JavaClassStaticsPackageFragmentDescriptor) packageFragment).getCorrespondingClass(); - return DescriptorUtils.getParentOfType(classForPackage, PackageFragmentDescriptor.class, false); - } - return packageFragment; - } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaClassDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaClassDescriptor.java index 80a7d70d12d..4b3392965ff 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaClassDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaClassDescriptor.java @@ -23,7 +23,4 @@ import org.jetbrains.jet.lang.types.JetType; public interface JavaClassDescriptor extends ClassDescriptor { @Nullable JetType getFunctionTypeForSamInterface(); - - @Nullable - JavaClassStaticsPackageFragmentDescriptor getCorrespondingPackageFragment(); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.kt index 1e8b3f11481..cfdcd1d7fd6 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaPackageFragmentDescriptor.kt @@ -19,7 +19,3 @@ package org.jetbrains.jet.lang.resolve.java.descriptor import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor public trait JavaPackageFragmentDescriptor : PackageFragmentDescriptor - -public trait JavaClassStaticsPackageFragmentDescriptor : JavaPackageFragmentDescriptor { - public fun getCorrespondingClass(): JavaClassDescriptor -} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt index e2d17556712..061f6d6f84d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt @@ -21,13 +21,9 @@ import org.jetbrains.jet.storage.MemoizedFunctionToNullable import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.jet.lang.descriptors.ClassDescriptor -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaPackage -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass -import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils +import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.* import org.jetbrains.jet.lang.resolve.java.resolver.JavaPackageFragmentProvider -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaPackageFragment import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaClassDescriptor public class LazyJavaPackageFragmentProvider( outerContext: GlobalJavaResolverContext, @@ -53,20 +49,15 @@ public class LazyJavaPackageFragmentProvider( override fun getModule() = _module - private val _packageFragments: MemoizedFunctionToNullable = c.storageManager.createMemoizedFunctionWithNullableValues { - fqName -> - val jPackage = c.finder.findPackage(fqName) - if (jPackage != null) { - LazyPackageFragmentForJavaPackage(c, _module, jPackage) - } - else { - val jClass = c.findJavaClass(fqName) - if (jClass != null) { - packageFragmentsForClasses(jClass) + private val _packageFragments: MemoizedFunctionToNullable = + c.storageManager.createMemoizedFunctionWithNullableValues { + fqName -> + val jPackage = c.finder.findPackage(fqName) + if (jPackage != null) { + LazyJavaPackageFragment(c, _module, jPackage) + } + else null } - else null - } - } private val topLevelClasses = c.storageManager.createMemoizedFunctionWithNullableValues @lambda { (jClass: JavaClass): LazyJavaClassDescriptor? -> @@ -84,17 +75,7 @@ public class LazyJavaPackageFragmentProvider( ) } - private val packageFragmentsForClasses: MemoizedFunctionToNullable = c.storageManager.createMemoizedFunctionWithNullableValues { - jClass -> - if (DescriptorResolverUtils.hasStaticMembers(jClass)) { - val correspondingClass = c.javaClassResolver.resolveClass(jClass) - if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null - } - else null - } - - override fun getPackageFragment(fqName: FqName) = _packageFragments(fqName) - fun getPackageFragment(javaClass: JavaClass) = packageFragmentsForClasses(javaClass) + fun getPackageFragment(fqName: FqName) = _packageFragments(fqName) override fun getPackageFragments(fqName: FqName) = getPackageFragment(fqName)?.let {listOf(it)}.orEmpty() @@ -120,4 +101,4 @@ public class LazyJavaPackageFragmentProvider( return outerClassScope?.getClassifier(javaClass.getName()) as? ClassDescriptor } } -} \ No newline at end of file +} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt index 26cf37604bf..b960a02de7c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassDescriptor.kt @@ -16,16 +16,13 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors +import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.java.structure.JavaClass -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase import org.jetbrains.jet.lang.resolve.scopes.JetScope -import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor import org.jetbrains.jet.lang.types.JetType -import org.jetbrains.jet.lang.descriptors.ClassDescriptor import org.jetbrains.jet.lang.types.TypeConstructor -import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContextWithTypes import org.jetbrains.jet.lang.resolve.java.lazy.child import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage @@ -36,18 +33,13 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns import org.jetbrains.jet.utils.* import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod -import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor import org.jetbrains.jet.lang.types.TypeUtils import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor -import org.jetbrains.jet.lang.descriptors.Modality import org.jetbrains.jet.lang.descriptors.annotations.Annotations -import org.jetbrains.jet.lang.descriptors.ClassKind import java.util.ArrayList import org.jetbrains.jet.lang.types.checker.JetTypeChecker -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor import org.jetbrains.jet.lang.descriptors.impl.EnumClassObjectDescriptor -import org.jetbrains.jet.lang.resolve.scopes.StaticScopeForKotlinClass class LazyJavaClassDescriptor( private val outerC: LazyJavaResolverContextWithTypes, @@ -91,7 +83,8 @@ class LazyJavaClassDescriptor( private val _innerClassesScope = InnerClassesScopeWrapper(getScopeForMemberLookup()) override fun getUnsubstitutedInnerClassesScope(): JetScope = _innerClassesScope - override fun getStaticScope(): JetScope = StaticScopeForKotlinClass(this) // TODO + private val _staticScope = LazyJavaStaticClassScope(c, jClass, this) + override fun getStaticScope(): JetScope = _staticScope override fun getUnsubstitutedPrimaryConstructor(): ConstructorDescriptor? = null @@ -102,9 +95,6 @@ class LazyJavaClassDescriptor( else null } - override fun getCorrespondingPackageFragment() = - c.packageFragmentProvider.getPackageFragment(fqName) as? JavaClassStaticsPackageFragmentDescriptor - override fun getClassObjectDescriptor(): ClassDescriptor? = _classObjectDescriptor() override fun getClassObjectType(): JetType? = getClassObjectDescriptor()?.let { d -> d.getDefaultType() } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt index 29e31df71e6..d542ff6a447 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt @@ -18,55 +18,21 @@ package org.jetbrains.jet.lang.resolve.java.lazy.descriptors import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaResolverContext import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage -import org.jetbrains.jet.lang.resolve.name.FqName -import org.jetbrains.jet.lang.resolve.java.structure.JavaClass -import org.jetbrains.kotlin.util.sure -import org.jetbrains.jet.lang.descriptors.ModuleDescriptor import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor import org.jetbrains.jet.lang.descriptors.impl.PackageFragmentDescriptorImpl import kotlin.properties.Delegates -class LazyPackageFragmentForJavaPackage( - c: LazyJavaResolverContext, - containingDeclaration: ModuleDescriptor, +class LazyJavaPackageFragment( + private val c: LazyJavaResolverContext, + module: ModuleDescriptor, private val jPackage: JavaPackage -) : LazyJavaPackageFragment(c, containingDeclaration, jPackage.getFqName()) { - override fun createMemberScope() = LazyPackageFragmentScopeForJavaPackage(c, jPackage, this) -} - -public class LazyPackageFragmentForJavaClass( - c: LazyJavaResolverContext, - containingDeclaration: ModuleDescriptor, - private val jClass: JavaClass -) : JavaClassStaticsPackageFragmentDescriptor, - LazyJavaPackageFragment(c, containingDeclaration, - jClass.getFqName().sure("Attempt to build a package of an anonymous/local class: $jClass")) { - - override fun createMemberScope() = LazyPackageFragmentScopeForJavaClass(c, jClass, this) - - override fun getCorrespondingClass(): JavaClassDescriptor { - val classDescriptor = c.javaClassResolver.resolveClass(jClass) - if (classDescriptor !is JavaClassDescriptor) { - throw AssertionError("Corresponding class not found for package with static members: $this") - } - return classDescriptor - } -} - -abstract class LazyJavaPackageFragment( - protected val c: LazyJavaResolverContext, - containingDeclaration: ModuleDescriptor, - fqName: FqName -) : PackageFragmentDescriptorImpl(containingDeclaration, fqName), +) : PackageFragmentDescriptorImpl(module, jPackage.getFqName()), JavaPackageFragmentDescriptor, LazyJavaDescriptor { - private val _memberScope by Delegates.lazy { createMemberScope() } + private val _memberScope by Delegates.lazy { LazyPackageFragmentScopeForJavaPackage(c, jPackage, this) } - abstract fun createMemberScope(): LazyJavaPackageFragmentScope + override fun getMemberScope() = _memberScope - override fun getMemberScope(): LazyJavaPackageFragmentScope = _memberScope - - override fun toString() = "lazy java package fragment: " + fqName -} \ No newline at end of file + override fun toString() = "lazy java package fragment: $fqName" +} diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt similarity index 86% rename from core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt rename to core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt index a4b067db6c0..ca7c8773368 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragmentScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt @@ -28,7 +28,6 @@ import org.jetbrains.jet.utils.flatten import org.jetbrains.jet.lang.resolve.java.structure.JavaClass import org.jetbrains.kotlin.util.inn import org.jetbrains.kotlin.util.sure -import org.jetbrains.jet.lang.resolve.java.lazy.findJavaClass import org.jetbrains.jet.lang.resolve.java.lazy.findClassInJava import org.jetbrains.jet.lang.resolve.java.PackageClassUtils import org.jetbrains.jet.lang.resolve.scopes.JetScope @@ -40,16 +39,16 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.SamConstructorDescriptor import org.jetbrains.jet.lang.resolve.name.SpecialNames import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass -public abstract class LazyJavaPackageFragmentScope( +public abstract class LazyJavaStaticScope( c: LazyJavaResolverContext, - packageFragment: LazyJavaPackageFragment -) : LazyJavaMemberScope(c.withTypes(), packageFragment) { + descriptor: ClassOrPackageFragmentDescriptor +) : LazyJavaMemberScope(c.withTypes(), descriptor) { - protected val fqName: FqName = DescriptorUtils.getFqName(packageFragment).toSafe() + protected val fqName: FqName = DescriptorUtils.getFqName(descriptor).toSafe() protected fun computeMemberIndexForSamConstructors(delegate: MemberIndex): MemberIndex = object : MemberIndex by delegate { override fun getAllMethodNames(): Collection { - val jClass = c.findJavaClass(fqName) + val jClass = c.findClassInJava(fqName).jClass return delegate.getAllMethodNames() + // For SAM-constructors getAllClassNames() + @@ -76,11 +75,11 @@ public abstract class LazyJavaPackageFragmentScope( //no undeclared properties } - override fun getContainingDeclaration() = super.getContainingDeclaration() as LazyJavaPackageFragment + override fun getContainingDeclaration() = super.getContainingDeclaration() as ClassOrPackageFragmentDescriptor fun ClassifierDescriptor.createSamConstructor(): SamConstructorDescriptor? { if (this is LazyJavaClassDescriptor && this.getFunctionTypeForSamInterface() != null) { - return SingleAbstractMethodUtils.createSamConstructorFunction(this@LazyJavaPackageFragmentScope.getContainingDeclaration(), this) + return SingleAbstractMethodUtils.createSamConstructorFunction(this@LazyJavaStaticScope.getContainingDeclaration(), this) } return null } @@ -89,8 +88,8 @@ public abstract class LazyJavaPackageFragmentScope( public class LazyPackageFragmentScopeForJavaPackage( c: LazyJavaResolverContext, private val jPackage: JavaPackage, - packageFragment: LazyPackageFragmentForJavaPackage -) : LazyJavaPackageFragmentScope(c, packageFragment) { + packageFragment: LazyJavaPackageFragment +) : LazyJavaStaticScope(c, packageFragment) { // TODO: Storing references is a temporary hack until modules infrastructure is implemented. // See JetTypeMapperWithOutDirectories for details @@ -143,7 +142,7 @@ public class LazyPackageFragmentScopeForJavaPackage( listOf( // We do not filter by hasStaticMembers() because it's slow (e.g. it triggers light class generation), // and there's no harm in having some names in the result that can not be resolved - jPackage.getClasses().map { c -> c.getFqName().sure("Toplevel class has no fqName: $c}") }, + jPackage.getClasses().map { c -> c.getFqName().sure("Toplevel class has no fqName: $c") }, jPackage.getSubPackages().map { sp -> sp.getFqName() } ).flatten() }, @@ -162,32 +161,30 @@ public class LazyPackageFragmentScopeForJavaPackage( override fun getAllPropertyNames() = Collections.emptyList() } -public class LazyPackageFragmentScopeForJavaClass( +public class LazyJavaStaticClassScope( c: LazyJavaResolverContext, private val jClass: JavaClass, - packageFragment: LazyPackageFragmentForJavaClass -) : LazyJavaPackageFragmentScope(c, packageFragment) { + descriptor: LazyJavaClassDescriptor +) : LazyJavaStaticScope(c, descriptor) { override fun computeMemberIndex(): MemberIndex = computeMemberIndexForSamConstructors(ClassMemberIndex(jClass, { m -> m.isStatic() })) - // nested classes are loaded as members of their outer classes, not packages override fun getAllClassNames(): Collection = listOf() override fun getClassifier(name: Name): ClassifierDescriptor? = null // We do not filter by hasStaticMembers() because it's slow (e.g. it triggers light class generation), // and there's no harm in having some names in the result that can not be resolved override fun getSubPackages(): Collection = jClass.getInnerClasses().stream() - .filter { c -> c.isStatic() } - .map { c -> c.getFqName().sure("Nested class has no fqName: $c}") }.toList() + .filter { c -> c.isStatic() } + .map { c -> c.getFqName().sure("Nested class has no fqName: $c") }.toList() override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { //NOTE: assuming that all sam constructors are created for interfaces which are static and should be placed in this scope - val samConstructor = getContainingDeclaration().getCorrespondingClass().getUnsubstitutedInnerClassesScope().getClassifier(name) - ?.createSamConstructor() + val samConstructor = getContainingDeclaration().getUnsubstitutedInnerClassesScope().getClassifier(name)?.createSamConstructor() if (samConstructor != null) { result.add(samConstructor) } } - override fun getContainingDeclaration() = super.getContainingDeclaration() as LazyPackageFragmentForJavaClass + override fun getContainingDeclaration() = super.getContainingDeclaration() as LazyJavaClassDescriptor } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt index 420fa53aa4d..58b1db2a451 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/resolvers.kt @@ -24,7 +24,6 @@ import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyJavaTypeParamete import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.resolve.name.FqName import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader -import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils import org.jetbrains.jet.lang.resolve.kotlin.KotlinJvmBinaryClass import org.jetbrains.jet.lang.resolve.resolveTopLevelClass @@ -65,8 +64,6 @@ class LazyJavaTypeParameterResolver( } } -fun LazyJavaResolverContext.findJavaClass(fqName: FqName): JavaClass? = findClassInJava(fqName).jClass - data class JavaClassLookupResult(val jClass: JavaClass? = null, val kClass: ClassDescriptor? = null) fun LazyJavaResolverContext.lookupBinaryClass(javaClass: JavaClass): ClassDescriptor? { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java index 048bc4213de..3962109bcb2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/DescriptorResolverUtils.java @@ -23,16 +23,13 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.resolve.OverridingUtil; -import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils; import org.jetbrains.jet.lang.resolve.java.structure.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeProjectionImpl; import org.jetbrains.jet.lang.types.TypeSubstitutor; -import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; @@ -262,29 +259,4 @@ public final class DescriptorResolverUtils { } return TypeSubstitutor.create(typeSubstitutionContext); } - - public static boolean hasStaticMembers(@NotNull JavaClass javaClass) { - for (JavaMethod method : javaClass.getMethods()) { - if (method.isStatic() && !shouldBeInEnumClassObject(method)) { - return true; - } - } - - for (JavaField field : javaClass.getFields()) { - if (field.isStatic() && !field.isEnumEntry()) { - return true; - } - } - - for (JavaClass nestedClass : javaClass.getInnerClasses()) { - if (SingleAbstractMethodUtils.isSamInterface(nestedClass)) { - return true; - } - if (nestedClass.isStatic() && hasStaticMembers(nestedClass)) { - return true; - } - } - - return false; - } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java index 36cf041945d..7ed523884ac 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaPackageFragmentProvider.java @@ -17,16 +17,10 @@ package org.jetbrains.jet.lang.resolve.java.resolver; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider; -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPackageFragmentDescriptor; -import org.jetbrains.jet.lang.resolve.name.FqName; public interface JavaPackageFragmentProvider extends PackageFragmentProvider { - @Nullable - JavaPackageFragmentDescriptor getPackageFragment(@NotNull FqName fqName); - @NotNull ModuleDescriptor getModule(); } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java index fa64640f73f..cdf8a903e9d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java @@ -280,10 +280,6 @@ public class SingleAbstractMethodUtils { return new TypeParameters(typeParameters, typeParametersSubstitutor); } - public static boolean isSamInterface(@NotNull JavaClass javaClass) { - return getSamInterfaceMethod(javaClass) != null; - } - // Returns null if not SAM interface @Nullable public static JavaMethod getSamInterfaceMethod(@NotNull JavaClass javaClass) { diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt index 1f3779ffda2..29dc3cbf432 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/ShortenReferences.kt @@ -24,14 +24,10 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.plugin.project.ResolveSessionForBodies; import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; import org.jetbrains.jet.renderer.DescriptorRenderer; - import java.util.HashSet; import com.intellij.psi.util.PsiTreeUtil import java.util.ArrayList import org.jetbrains.jet.lang.psi.psiUtil.getParentByType -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaPropertyDescriptor -import org.jetbrains.jet.lang.resolve.java.lazy.descriptors.LazyPackageFragmentForJavaClass -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaMethodDescriptor import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiDocumentManager import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession @@ -245,19 +241,9 @@ public object ShortenReferences { refExpression: JetReferenceExpression, bindingContext: BindingContext ): PsiElement { - val receiverExpression = qualifiedExpression.getReceiverExpression() val target = bindingContext[BindingContext.REFERENCE_TARGET, refExpression] - if (target != null) { - if ((target is JavaPropertyDescriptor || target is JavaMethodDescriptor) && receiverExpression is JetDotQualifiedExpression) { - val containingDescriptor = target.getContainingDeclaration() - if (containingDescriptor is LazyPackageFragmentForJavaClass) { - return shortenIfPossibleByDescriptor(receiverExpression, containingDescriptor.getCorrespondingClass(), bindingContext) - } - } - - return shortenIfPossibleByDescriptor(qualifiedExpression, target, bindingContext) - } - return qualifiedExpression + if (target == null) return qualifiedExpression + return shortenIfPossibleByDescriptor(qualifiedExpression, target, bindingContext) } private fun instantiatedClass(calleeExpression: JetReferenceExpression): ClassDescriptor? { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt index 8c3ca5cbd7e..62ccab860d4 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt @@ -18,16 +18,9 @@ package org.jetbrains.jet.plugin.completion.smart import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.jet.lang.types.TypeUtils -import org.jetbrains.jet.lang.descriptors.ClassDescriptor +import org.jetbrains.jet.lang.descriptors.* import org.jetbrains.jet.lang.resolve.scopes.JetScope -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorWithVisibility -import org.jetbrains.jet.lang.descriptors.Visibilities -import org.jetbrains.jet.lang.descriptors.CallableDescriptor -import org.jetbrains.jet.lang.descriptors.ClassKind -import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor import org.jetbrains.jet.lang.resolve.DescriptorUtils -import org.jetbrains.jet.lang.descriptors.FunctionDescriptor import com.intellij.codeInsight.lookup.LookupElementDecorator import com.intellij.codeInsight.lookup.LookupElementPresentation import org.jetbrains.jet.renderer.DescriptorRenderer @@ -95,12 +88,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso collection.addLookupElements(expectedInfos, classifier, { createLookupElement(descriptor, classDescriptor) }) } - if (classDescriptor is JavaClassDescriptor) { - val pseudoPackage = classDescriptor.getCorrespondingPackageFragment() - if (pseudoPackage != null) { - pseudoPackage.getMemberScope().getAllDescriptors().forEach(::processMember) - } - } + classDescriptor.getStaticScope().getAllDescriptors().forEach(::processMember) val classObject = classDescriptor.getClassObjectDescriptor() if (classObject != null) {