Support netsted classes

This commit is contained in:
Andrey Breslav
2013-10-22 15:28:43 +04:00
parent 2620c872ab
commit 1ea9be67c4
3 changed files with 30 additions and 11 deletions
@@ -67,10 +67,12 @@ class LazyJavaAnnotationDescriptor(
private val _allValueArguments = c.storageManager.createLazyValue {
val constructors = getAnnotationClass().getConstructors()
if (constructors.isEmpty()) mapOf<ValueParameterDescriptor, CompileTimeConstant<out Any?>>()
constructors.first().getValueParameters().keysToMapExceptNulls {
vp -> getValueArgument(vp)
}
if (constructors.isEmpty())
mapOf<ValueParameterDescriptor, CompileTimeConstant<out Any?>>()
else
constructors.first().getValueParameters().keysToMapExceptNulls {
vp -> getValueArgument(vp)
}
}
override fun getAllValueArguments() = _allValueArguments()
@@ -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
@@ -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<VariableDescriptor> = listOf()
override fun getAllPropertyNames(): Collection<Name> = listOf()
// TODO
override fun getClassifier(name: Name): ClassifierDescriptor? = null
override fun getAllClassNames(): Collection<Name> = 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<Name> = nestedClassIndex().keySet()
override fun addExtraDescriptors(result: MutableCollection<in DeclarationDescriptor>) {
// TODO
@@ -158,4 +170,8 @@ public class LazyJavaClassMemberScope(
// TODO
override fun getImplicitReceiversHierarchy(): List<ReceiverParameterDescriptor> = listOf()
override fun getContainingDeclaration(): LazyJavaClassDescriptor {
return super.getContainingDeclaration() as LazyJavaClassDescriptor
}
}