Straighten out MemberIndex calculation in LazyJavaStaticScope
Also delete confusing "inn" function
This commit is contained in:
+17
-17
@@ -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.java.structure.JavaPackage
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName
|
import org.jetbrains.jet.lang.resolve.name.FqName
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass
|
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.lazy.findClassInJava
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||||
@@ -42,21 +41,9 @@ public abstract class LazyJavaStaticScope(
|
|||||||
c: LazyJavaResolverContext,
|
c: LazyJavaResolverContext,
|
||||||
descriptor: ClassOrPackageFragmentDescriptor
|
descriptor: ClassOrPackageFragmentDescriptor
|
||||||
) : LazyJavaMemberScope(c.withTypes(), descriptor) {
|
) : LazyJavaMemberScope(c.withTypes(), descriptor) {
|
||||||
|
|
||||||
protected val fqName: FqName = DescriptorUtils.getFqName(descriptor).toSafe()
|
|
||||||
|
|
||||||
override fun getExpectedThisObject() = null
|
override fun getExpectedThisObject() = null
|
||||||
|
|
||||||
protected fun computeMemberIndexForSamConstructors(delegate: MemberIndex): MemberIndex = object : MemberIndex by delegate {
|
|
||||||
override fun getAllMethodNames(): Collection<Name> {
|
|
||||||
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
|
// Package fragments are not nested
|
||||||
override fun getPackage(name: Name) = null
|
override fun getPackage(name: Name) = null
|
||||||
abstract fun getSubPackages(): Collection<FqName>
|
abstract fun getSubPackages(): Collection<FqName>
|
||||||
@@ -95,7 +82,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
|
|||||||
// TODO: Storing references is a temporary hack until modules infrastructure is implemented.
|
// TODO: Storing references is a temporary hack until modules infrastructure is implemented.
|
||||||
// See JetTypeMapperWithOutDirectories for details
|
// See JetTypeMapperWithOutDirectories for details
|
||||||
public val kotlinBinaryClass: KotlinJvmBinaryClass?
|
public val kotlinBinaryClass: KotlinJvmBinaryClass?
|
||||||
= c.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassFqName(fqName))
|
= c.kotlinClassFinder.findKotlinClass(PackageClassUtils.getPackageClassFqName(packageFragment.fqName))
|
||||||
|
|
||||||
private val deserializedPackageScope = c.storageManager.createLazyValue {
|
private val deserializedPackageScope = c.storageManager.createLazyValue {
|
||||||
val kotlinBinaryClass = kotlinBinaryClass
|
val kotlinBinaryClass = kotlinBinaryClass
|
||||||
@@ -107,7 +94,7 @@ public class LazyPackageFragmentScopeForJavaPackage(
|
|||||||
|
|
||||||
private val classes = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
private val classes = c.storageManager.createMemoizedFunctionWithNullableValues<Name, ClassDescriptor> {
|
||||||
name ->
|
name ->
|
||||||
val fqName = fqName.child(SpecialNames.safeIdentifier(name))
|
val fqName = packageFragment.fqName.child(SpecialNames.safeIdentifier(name))
|
||||||
val (jClass, kClass) = c.findClassInJava(fqName)
|
val (jClass, kClass) = c.findClassInJava(fqName)
|
||||||
if (kClass != null)
|
if (kClass != null)
|
||||||
kClass
|
kClass
|
||||||
@@ -130,7 +117,10 @@ public class LazyPackageFragmentScopeForJavaPackage(
|
|||||||
result.addAll(deserializedPackageScope().getAllDescriptors())
|
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<Name> = getAllClassNames()
|
||||||
|
}
|
||||||
|
|
||||||
override fun computeAdditionalFunctions(name: Name) = listOf<SimpleFunctionDescriptor>()
|
override fun computeAdditionalFunctions(name: Name) = listOf<SimpleFunctionDescriptor>()
|
||||||
|
|
||||||
@@ -166,7 +156,17 @@ public class LazyJavaStaticClassScope(
|
|||||||
descriptor: LazyJavaClassDescriptor
|
descriptor: LazyJavaClassDescriptor
|
||||||
) : LazyJavaStaticScope(c, descriptor) {
|
) : 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<Name> {
|
||||||
|
// Should be a super call, but KT-2860
|
||||||
|
return delegate.getAllMethodNames() +
|
||||||
|
// For SAM-constructors
|
||||||
|
jClass.getInnerClasses().map { c -> c.getName() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun getAllFunctionNames(): Collection<Name> {
|
override fun getAllFunctionNames(): Collection<Name> {
|
||||||
if (jClass.isEnum()) {
|
if (jClass.isEnum()) {
|
||||||
|
|||||||
+2
-7
@@ -17,13 +17,8 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.java.lazy.types
|
package org.jetbrains.jet.lang.resolve.java.lazy.types
|
||||||
|
|
||||||
import org.jetbrains.jet.storage.StorageManager
|
import org.jetbrains.jet.storage.StorageManager
|
||||||
import org.jetbrains.jet.lang.types.TypeConstructor
|
import org.jetbrains.jet.lang.types.*
|
||||||
import org.jetbrains.jet.lang.types.TypeProjection
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
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
|
import org.jetbrains.jet.lang.descriptors.annotations.Annotations
|
||||||
|
|
||||||
abstract class LazyJavaType(storageManager: StorageManager) : AbstractJetType(), LazyType {
|
abstract class LazyJavaType(storageManager: StorageManager) : AbstractJetType(), LazyType {
|
||||||
@@ -45,7 +40,7 @@ abstract class LazyJavaType(storageManager: StorageManager) : AbstractJetType(),
|
|||||||
|
|
||||||
override fun isNullable() = false
|
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
|
override fun getAnnotations() = Annotations.EMPTY
|
||||||
|
|
||||||
|
|||||||
@@ -16,9 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.util
|
package org.jetbrains.kotlin.util
|
||||||
|
|
||||||
public fun <T: Any, R> T?.inn(then: (T) -> R, _else: R): R = if (this != null) then(this) else _else
|
public fun <T : Any> T?.sure(message: String): T = this ?: throw AssertionError(message)
|
||||||
|
|
||||||
public fun <T: Any> T?.sure(message: String): T = this ?: throw AssertionError(message)
|
|
||||||
|
|
||||||
fun <T> T.printAndReturn(message: String = ""): T {
|
fun <T> T.printAndReturn(message: String = ""): T {
|
||||||
if (!message.isEmpty()) {
|
if (!message.isEmpty()) {
|
||||||
@@ -26,4 +24,4 @@ fun <T> T.printAndReturn(message: String = ""): T {
|
|||||||
}
|
}
|
||||||
println(this)
|
println(this)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user