diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java index 9e22a3b016d..04514d9fd69 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java @@ -57,8 +57,9 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class private final WritableScope scopeForMemberResolution; // This scope contains type parameters but does not contain inner classes private final WritableScope scopeForSupertypeResolution; - private WritableScope scopeForInitializers = null; //contains members + primary constructor value parameters + map for backing fields + private WritableScope scopeForInitializers; //contains members + primary constructor value parameters + map for backing fields private JetScope scopeForMemberLookup; + private final JetScope staticScope = new StaticScopeForKotlinClass(this); public MutableClassDescriptor( @NotNull DeclarationDescriptor containingDeclaration, @@ -295,6 +296,12 @@ public class MutableClassDescriptor extends ClassDescriptorBase implements Class return (WritableScope) scopeForMemberLookup; } + @NotNull + @Override + public JetScope getStaticScope() { + return staticScope; + } + public void lockScopes() { getScopeForMemberLookupAsWritableScope().changeLockLevel(WritableScope.LockLevel.READING); if (classObjectDescriptor instanceof MutableClassDescriptor) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java index b659da76f6f..3b26aff357d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -88,6 +88,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes private final MemoizedFunctionToNotNull extraClassObjectDescriptors; private final LazyClassMemberScope unsubstitutedMemberScope; + private final JetScope staticScope = new StaticScopeForKotlinClass(this); private final NotNullLazyValue scopeForClassHeaderResolution; private final NotNullLazyValue scopeForMemberDeclarationResolution; @@ -300,6 +301,12 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes scope, getScopeForMemberDeclarationResolution()); } + @NotNull + @Override + public JetScope getStaticScope() { + return staticScope; + } + @NotNull @Override public Collection getConstructors() { 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 5e990edb421..26cf37604bf 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 @@ -47,6 +47,7 @@ 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, @@ -90,6 +91,8 @@ class LazyJavaClassDescriptor( private val _innerClassesScope = InnerClassesScopeWrapper(getScopeForMemberLookup()) override fun getUnsubstitutedInnerClassesScope(): JetScope = _innerClassesScope + override fun getStaticScope(): JetScope = StaticScopeForKotlinClass(this) // TODO + override fun getUnsubstitutedPrimaryConstructor(): ConstructorDescriptor? = null private val _classObjectDescriptor = c.storageManager.createNullableLazyValue { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java index 1ffc3e45d0f..9a69053e8d6 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptor.java @@ -28,13 +28,15 @@ import java.util.Collection; import java.util.List; public interface ClassDescriptor extends ClassifierDescriptor, MemberDescriptor, ClassOrPackageFragmentDescriptor { - @NotNull JetScope getMemberScope(@NotNull List typeArguments); @NotNull JetScope getUnsubstitutedInnerClassesScope(); + @NotNull + JetScope getStaticScope(); + @NotNull @ReadOnly Collection getConstructors(); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ClassDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ClassDescriptorImpl.java index 2a7f0ae52df..fe0aa656ae9 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ClassDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ClassDescriptorImpl.java @@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; +import org.jetbrains.jet.lang.resolve.scopes.StaticScopeForKotlinClass; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructorImpl; @@ -34,6 +35,7 @@ import java.util.Set; public class ClassDescriptorImpl extends ClassDescriptorBase { private final Modality modality; private final TypeConstructor typeConstructor; + private final JetScope staticScope = new StaticScopeForKotlinClass(this); private JetScope scopeForMemberLookup; private Set constructors; @@ -91,6 +93,12 @@ public class ClassDescriptorImpl extends ClassDescriptorBase { return scopeForMemberLookup; } + @NotNull + @Override + public JetScope getStaticScope() { + return staticScope; + } + @Nullable @Override public ClassDescriptor getClassObjectDescriptor() { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumClassObjectDescriptor.kt b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumClassObjectDescriptor.kt index 2b3d194ac96..c93e1eb02da 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumClassObjectDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumClassObjectDescriptor.kt @@ -35,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl import org.jetbrains.jet.utils.Printer import java.util.ArrayList import kotlin.properties.Delegates +import org.jetbrains.jet.lang.resolve.scopes.StaticScopeForKotlinClass public class EnumClassObjectDescriptor( storageManager: StorageManager, @@ -52,9 +53,12 @@ public class EnumClassObjectDescriptor( listOf(), listOf(KotlinBuiltIns.getInstance().getAnyType())) private val scope = EnumClassObjectScope() + private val staticScope = StaticScopeForKotlinClass(this) override fun getScopeForMemberLookup(): JetScope = scope + override fun getStaticScope(): JetScope = staticScope + override fun getClassObjectDescriptor(): ClassDescriptor? = null override fun getConstructors(): List = listOf(primaryConstructor) diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java index d3c8e8b2ce3..fa904a63704 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/EnumEntrySyntheticClassDescriptor.java @@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScopeImpl; +import org.jetbrains.jet.lang.resolve.scopes.StaticScopeForKotlinClass; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructorImpl; @@ -46,6 +47,7 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { private final TypeConstructor typeConstructor; private final ConstructorDescriptor primaryConstructor; private final JetScope scope; + private final JetScope staticScope = new StaticScopeForKotlinClass(this); private final EnumEntrySyntheticClassDescriptor classObjectDescriptor; private final NotNullLazyValue> enumMemberNames; @@ -102,6 +104,12 @@ public class EnumEntrySyntheticClassDescriptor extends ClassDescriptorBase { return scope; } + @NotNull + @Override + public JetScope getStaticScope() { + return staticScope; + } + @NotNull @Override public Collection getConstructors() { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/LazySubstitutingClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/LazySubstitutingClassDescriptor.java index 0bc7b2bebcf..a27a289f081 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/LazySubstitutingClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/LazySubstitutingClassDescriptor.java @@ -97,6 +97,12 @@ public class LazySubstitutingClassDescriptor implements ClassDescriptor { return new SubstitutingScope(memberScope, getSubstitutor()); } + @NotNull + @Override + public JetScope getStaticScope() { + return original.getStaticScope(); + } + @NotNull @Override public JetType getDefaultType() { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/StaticScopeForKotlinClass.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/StaticScopeForKotlinClass.kt new file mode 100644 index 00000000000..fa815f80a37 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/StaticScopeForKotlinClass.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve.scopes + +import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.lang.descriptors.* +import org.jetbrains.jet.utils.Printer + +public class StaticScopeForKotlinClass( + private val containingClass: ClassDescriptor +) : JetScope { + override fun getClassifier(name: Name) = null // TODO + + override fun getAllDescriptors() = listOf() // TODO + + override fun getOwnDeclaredDescriptors() = listOf() // TODO + + override fun getPackage(name: Name) = null + override fun getProperties(name: Name) = listOf() + override fun getLocalVariable(name: Name) = null + override fun getFunctions(name: Name) = listOf() + override fun getContainingDeclaration() = containingClass + override fun getDeclarationsByLabel(labelName: Name) = listOf() + override fun getImplicitReceiversHierarchy() = listOf() + + override fun printScopeStructure(p: Printer) { + p.println("Static scope for $containingClass") + } +} diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java index d5c0986e58b..85d6b65fc6c 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.DescriptorFactory; import org.jetbrains.jet.lang.resolve.OverridingUtil; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; +import org.jetbrains.jet.lang.resolve.scopes.StaticScopeForKotlinClass; import org.jetbrains.jet.lang.types.AbstractClassTypeConstructor; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; @@ -61,8 +62,8 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme private final NotNullLazyValue annotations; private final NullableLazyValue classObjectDescriptor; - private final NestedClassDescriptors nestedClasses; + private final JetScope staticScope = new StaticScopeForKotlinClass(this); private final NotNullLazyValue containingDeclaration; private final DeserializedClassTypeConstructor typeConstructor; @@ -194,6 +195,12 @@ public class DeserializedClassDescriptor extends AbstractClassDescriptor impleme return memberScope; } + @NotNull + @Override + public JetScope getStaticScope() { + return staticScope; + } + @Nullable private ConstructorDescriptor computePrimaryConstructor() { if (!classProto.hasPrimaryConstructor()) return null;