From 1ea9be67c48d47b7b55646d216ff1c02a5236fc2 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 22 Oct 2013 15:28:43 +0400 Subject: [PATCH] Support netsted classes --- .../LazyJavaAnnotationDescriptor.kt | 10 ++++---- .../descriptors/LazyJavaClassDescriptor.kt | 7 +++--- .../descriptors/LazyJavaClassMemberScope.kt | 24 +++++++++++++++---- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt index b7c6b71489a..e84ae094c48 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaAnnotationDescriptor.kt @@ -67,10 +67,12 @@ class LazyJavaAnnotationDescriptor( private val _allValueArguments = c.storageManager.createLazyValue { val constructors = getAnnotationClass().getConstructors() - if (constructors.isEmpty()) mapOf>() - constructors.first().getValueParameters().keysToMapExceptNulls { - vp -> getValueArgument(vp) - } + if (constructors.isEmpty()) + mapOf>() + else + constructors.first().getValueParameters().keysToMapExceptNulls { + vp -> getValueArgument(vp) + } } override fun getAllValueArguments() = _allValueArguments() 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 be62a8d089f..471e8b6732d 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 @@ -20,11 +20,12 @@ import org.jetbrains.jet.lang.resolve.java.lazy.child import org.jetbrains.jet.lang.resolve.java.resolver.TypeUsage import org.jetbrains.jet.lang.resolve.java.lazy.resolveAnnotations import org.jetbrains.jet.lang.resolve.java.lazy.types.toAttributes +import org.jetbrains.jet.lang.resolve.scopes.InnerClassesScopeWrapper class LazyJavaClassDescriptor( private val c: LazyJavaResolverContextWithTypes, containingDeclaration: DeclarationDescriptor, - fqName: FqName, + internal val fqName: FqName, private val jClass: JavaClass ) : ClassDescriptorBase(containingDeclaration, fqName.shortName()), LazyJavaDescriptor { @@ -49,8 +50,8 @@ class LazyJavaClassDescriptor( private val _thisAsReceiverParameter = c.storageManager.createLazyValue { DescriptorFactory.createLazyReceiverParameterDescriptor(this) } override fun getThisAsReceiverParameter() = _thisAsReceiverParameter() - // TODO - override fun getUnsubstitutedInnerClassesScope(): JetScope = JetScope.EMPTY + private val _innerClassesScope = InnerClassesScopeWrapper(getScopeForMemberLookup()) + override fun getUnsubstitutedInnerClassesScope(): JetScope = _innerClassesScope override fun getUnsubstitutedPrimaryConstructor(): ConstructorDescriptor? = null diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 108c276724a..80cf616e1a7 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -45,7 +45,7 @@ import org.jetbrains.jet.lang.resolve.java.structure.JavaValueParameter public class LazyJavaClassMemberScope( c: LazyJavaResolverContextWithTypes, - containingDeclaration: DeclarationDescriptor, + containingDeclaration: LazyJavaClassDescriptor, private val jClass: JavaClass, classAsPackage: Boolean ) : LazyJavaMemberScope(c, containingDeclaration) { @@ -147,9 +147,21 @@ public class LazyJavaClassMemberScope( override fun getProperties(name: Name): Collection = listOf() override fun getAllPropertyNames(): Collection = listOf() - // TODO - override fun getClassifier(name: Name): ClassifierDescriptor? = null - override fun getAllClassNames(): Collection = listOf() + private val nestedClassIndex = c.storageManager.createLazyValue { + jClass.getInnerClasses().valuesToMap { c -> c.getName() } + } + + private val nestedClasses = c.storageManager.createMemoizedFunctionWithNullableValues { + (name: Name) -> + val jNestedClass = nestedClassIndex()[name] + if (jNestedClass == null) + null + else + LazyJavaClassDescriptor(c, getContainingDeclaration(), getContainingDeclaration().fqName.child(name), jNestedClass) + } + + override fun getClassifier(name: Name): ClassifierDescriptor? = nestedClasses(name) + override fun getAllClassNames(): Collection = nestedClassIndex().keySet() override fun addExtraDescriptors(result: MutableCollection) { // TODO @@ -158,4 +170,8 @@ public class LazyJavaClassMemberScope( // TODO override fun getImplicitReceiversHierarchy(): List = listOf() + + override fun getContainingDeclaration(): LazyJavaClassDescriptor { + return super.getContainingDeclaration() as LazyJavaClassDescriptor + } } \ No newline at end of file