diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt index 53be3319399..bb90591185f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaStaticScope.kt @@ -25,7 +25,6 @@ import org.jetbrains.jet.lang.resolve.java.lazy.withTypes 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.inn 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 @@ -42,21 +41,9 @@ public abstract class LazyJavaStaticScope( c: LazyJavaResolverContext, descriptor: ClassOrPackageFragmentDescriptor ) : LazyJavaMemberScope(c.withTypes(), descriptor) { - - protected val fqName: FqName = DescriptorUtils.getFqName(descriptor).toSafe() override fun getExpectedThisObject() = null - protected fun computeMemberIndexForSamConstructors(delegate: MemberIndex): MemberIndex = object : MemberIndex by delegate { - override fun getAllMethodNames(): Collection { - val jClass = c.findClassInJava(fqName).jClass - return delegate.getAllMethodNames() + - // For SAM-constructors - getAllClassNames() + - jClass.inn({ jC -> jC.getInnerClasses().map { c -> c.getName() }}, listOf()) - } - } - // Package fragments are not nested override fun getPackage(name: Name) = null abstract fun getSubPackages(): Collection @@ -95,7 +82,7 @@ public class LazyPackageFragmentScopeForJavaPackage( // TODO: Storing references is a temporary hack until modules infrastructure is implemented. // See JetTypeMapperWithOutDirectories for details public val kotlinBinaryClass: KotlinJvmBinaryClass? - = c.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassFqName(fqName)) + = c.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassFqName(packageFragment.fqName)) private val deserializedPackageScope = c.storageManager.createLazyValue { val kotlinBinaryClass = kotlinBinaryClass @@ -107,7 +94,7 @@ public class LazyPackageFragmentScopeForJavaPackage( private val classes = c.storageManager.createMemoizedFunctionWithNullableValues { name -> - val fqName = fqName.child(SpecialNames.safeIdentifier(name)) + val fqName = packageFragment.fqName.child(SpecialNames.safeIdentifier(name)) val (jClass, kClass) = c.findClassInJava(fqName) if (kClass != null) kClass @@ -130,7 +117,10 @@ public class LazyPackageFragmentScopeForJavaPackage( result.addAll(deserializedPackageScope().getAllDescriptors()) } - override fun computeMemberIndex(): MemberIndex = computeMemberIndexForSamConstructors(EMPTY_MEMBER_INDEX) + override fun computeMemberIndex(): MemberIndex = object : MemberIndex by EMPTY_MEMBER_INDEX { + // For SAM-constructors + override fun getAllMethodNames(): Collection = getAllClassNames() + } override fun computeAdditionalFunctions(name: Name) = listOf() @@ -166,7 +156,17 @@ public class LazyJavaStaticClassScope( descriptor: LazyJavaClassDescriptor ) : LazyJavaStaticScope(c, descriptor) { - override fun computeMemberIndex(): MemberIndex = computeMemberIndexForSamConstructors(ClassMemberIndex(jClass, { m -> m.isStatic() })) + override fun computeMemberIndex(): MemberIndex { + val delegate = ClassMemberIndex(jClass) { m -> m.isStatic() } + return object : MemberIndex by delegate { + override fun getAllMethodNames(): Collection { + // Should be a super call, but KT-2860 + return delegate.getAllMethodNames() + + // For SAM-constructors + jClass.getInnerClasses().map { c -> c.getName() } + } + } + } override fun getAllFunctionNames(): Collection { if (jClass.isEnum()) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaType.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaType.kt index 44d5983c4f3..f8a0b9a7fb7 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaType.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/types/LazyJavaType.kt @@ -17,13 +17,8 @@ package org.jetbrains.jet.lang.resolve.java.lazy.types import org.jetbrains.jet.storage.StorageManager -import org.jetbrains.jet.lang.types.TypeConstructor -import org.jetbrains.jet.lang.types.TypeProjection +import org.jetbrains.jet.lang.types.* import org.jetbrains.jet.lang.resolve.scopes.JetScope -import org.jetbrains.jet.lang.types.AbstractJetType -import org.jetbrains.jet.lang.types.ErrorUtils -import org.jetbrains.kotlin.util.inn -import org.jetbrains.jet.lang.types.LazyType import org.jetbrains.jet.lang.descriptors.annotations.Annotations abstract class LazyJavaType(storageManager: StorageManager) : AbstractJetType(), LazyType { @@ -45,7 +40,7 @@ abstract class LazyJavaType(storageManager: StorageManager) : AbstractJetType(), override fun isNullable() = false - override fun isError()= getConstructor().getDeclarationDescriptor().inn({ d -> ErrorUtils.isError(d)}, false) + override fun isError() = getConstructor().getDeclarationDescriptor()?.let { d -> ErrorUtils.isError(d) } ?: false override fun getAnnotations() = Annotations.EMPTY diff --git a/core/util.runtime/src/org/jetbrains/jet/utils/coreLib.kt b/core/util.runtime/src/org/jetbrains/jet/utils/coreLib.kt index 0ca39ceba8c..1b570db59c0 100644 --- a/core/util.runtime/src/org/jetbrains/jet/utils/coreLib.kt +++ b/core/util.runtime/src/org/jetbrains/jet/utils/coreLib.kt @@ -16,9 +16,7 @@ package org.jetbrains.kotlin.util -public fun T?.inn(then: (T) -> R, _else: R): R = if (this != null) then(this) else _else - -public fun T?.sure(message: String): T = this ?: throw AssertionError(message) +public fun T?.sure(message: String): T = this ?: throw AssertionError(message) fun T.printAndReturn(message: String = ""): T { if (!message.isEmpty()) { @@ -26,4 +24,4 @@ fun T.printAndReturn(message: String = ""): T { } println(this) return this -} \ No newline at end of file +}