diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java index 06fa6e3fe73..7bfbc4d8d61 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BodyResolver.java @@ -166,8 +166,8 @@ public class BodyResolver { MutableClassDescriptor descriptor = entry.getValue(); resolveDelegationSpecifierList(classOrObject, descriptor, descriptor.getUnsubstitutedPrimaryConstructor(), - descriptor.getScopeForSupertypeResolution(), - descriptor.getScopeForMemberResolution()); + descriptor.getScopeForClassHeaderResolution(), + descriptor.getScopeForMemberDeclarationResolution()); } } @@ -342,7 +342,7 @@ public class BodyResolver { private void resolveClassAnnotations() { for (Map.Entry entry : context.getClasses().entrySet()) { - resolveAnnotationArguments(entry.getValue().getScopeForSupertypeResolution(), entry.getKey()); + resolveAnnotationArguments(entry.getValue().getScopeForClassHeaderResolution(), entry.getKey()); } } @@ -351,7 +351,7 @@ public class BodyResolver { JetClassOrObject classOrObject = entry.getKey(); MutableClassDescriptor descriptor = entry.getValue(); resolveAnonymousInitializers(classOrObject, descriptor.getUnsubstitutedPrimaryConstructor(), - descriptor.getScopeForInitializers()); + descriptor.getScopeForInitializerResolution()); } } @@ -394,10 +394,10 @@ public class BodyResolver { MutableClassDescriptor classDescriptor = entry.getValue(); ConstructorDescriptor unsubstitutedPrimaryConstructor = classDescriptor.getUnsubstitutedPrimaryConstructor(); - annotationResolver.resolveAnnotationsArguments(classDescriptor.getScopeForSupertypeResolution(), klass.getPrimaryConstructorModifierList(), trace); + annotationResolver.resolveAnnotationsArguments(classDescriptor.getScopeForClassHeaderResolution(), klass.getPrimaryConstructorModifierList(), trace); if (unsubstitutedPrimaryConstructor != null) { - WritableScope parameterScope = getPrimaryConstructorParametersScope(classDescriptor.getScopeForSupertypeResolution(), unsubstitutedPrimaryConstructor); + WritableScope parameterScope = getPrimaryConstructorParametersScope(classDescriptor.getScopeForClassHeaderResolution(), unsubstitutedPrimaryConstructor); expressionTypingServices.resolveValueParameters(klass.getPrimaryConstructorParameters(), unsubstitutedPrimaryConstructor.getValueParameters(), parameterScope, context.getOuterDataFlowInfo(), trace, context.completeAnalysisNeeded(klass)); } @@ -447,7 +447,7 @@ public class BodyResolver { JetExpression delegateExpression = property.getDelegateExpression(); if (delegateExpression != null) { assert initializer == null : "Initializer should be null for delegated property : " + property.getText(); - resolvePropertyDelegate(property, propertyDescriptor, delegateExpression, classDescriptor.getScopeForMemberResolution(), propertyScope); + resolvePropertyDelegate(property, propertyDescriptor, delegateExpression, classDescriptor.getScopeForMemberDeclarationResolution(), propertyScope); } resolveAnnotationArguments(propertyScope, property); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 480590d9d86..8e83e6f37c8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -155,7 +155,7 @@ public class DeclarationResolver { if (modifierList != null) { MutableClassDescriptor descriptor = entry.getValue(); descriptor.addAnnotations(annotationResolver.resolveAnnotationsWithoutArguments( - descriptor.getScopeForSupertypeResolution(), modifierList, trace)); + descriptor.getScopeForClassHeaderResolution(), modifierList, trace)); } } } @@ -178,8 +178,8 @@ public class DeclarationResolver { } resolveFunctionAndPropertyHeaders( - classOrObject.getDeclarations(), classDescriptor.getScopeForMemberResolution(), - classDescriptor.getScopeForInitializers(), classDescriptor.getScopeForMemberResolution(), + classOrObject.getDeclarations(), classDescriptor.getScopeForMemberDeclarationResolution(), + classDescriptor.getScopeForInitializerResolution(), classDescriptor.getScopeForMemberDeclarationResolution(), classDescriptor.getBuilder()); } @@ -283,7 +283,7 @@ public class DeclarationResolver { boolean isAnnotationClass = DescriptorUtils.isAnnotationClass(classDescriptor); // TODO : not all the parameters are real properties - JetScope memberScope = classDescriptor.getScopeForSupertypeResolution(); + JetScope memberScope = classDescriptor.getScopeForClassHeaderResolution(); ConstructorDescriptor constructorDescriptor = descriptorResolver.resolvePrimaryConstructorDescriptor(memberScope, classDescriptor, klass, trace); if (constructorDescriptor != null) { List valueParameterDescriptors = constructorDescriptor.getValueParameters(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 2c543b20234..e24b8d8a163 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -133,7 +133,7 @@ public class DescriptorResolver { @NotNull MutableClassDescriptor descriptor, BindingTrace trace ) { - for (JetType supertype : resolveSupertypes(descriptor.getScopeForSupertypeResolution(), descriptor, jetClass, trace)) { + for (JetType supertype : resolveSupertypes(descriptor.getScopeForClassHeaderResolution(), descriptor, jetClass, trace)) { descriptor.addSupertype(supertype); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java index bafce4c99e8..1ce11cd5458 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TypeHierarchyResolver.java @@ -215,7 +215,7 @@ public class TypeHierarchyResolver { if (classOrObject instanceof JetClass) { MutableClassDescriptor descriptor = entry.getValue(); //noinspection unchecked - descriptorResolver.resolveGenericBounds((JetClass) classOrObject, descriptor.getScopeForSupertypeResolution(), + descriptorResolver.resolveGenericBounds((JetClass) classOrObject, descriptor.getScopeForClassHeaderResolution(), (List) descriptor.getTypeConstructor().getParameters(), trace); } } @@ -610,7 +610,7 @@ public class TypeHierarchyResolver { createClassObjectForEnumClass(mutableClassDescriptor); - JetScope classScope = mutableClassDescriptor.getScopeForMemberResolution(); + JetScope classScope = mutableClassDescriptor.getScopeForMemberDeclarationResolution(); prepareForDeferredCall(classScope, mutableClassDescriptor, klass); @@ -625,7 +625,7 @@ public class TypeHierarchyResolver { ) { MutableClassDescriptor descriptor = new MutableClassDescriptor(owner.getOwnerForChildren(), outerScope, kind, false, name); - prepareForDeferredCall(descriptor.getScopeForMemberResolution(), descriptor, declaration); + prepareForDeferredCall(descriptor.getScopeForMemberDeclarationResolution(), descriptor, declaration); createPrimaryConstructorForObject(declaration, descriptor); trace.record(BindingContext.CLASS, declaration, descriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java index bf010556650..f1ca58cacb4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java @@ -139,7 +139,7 @@ public class ScopeProvider { JetClassOrObject classOrObject = (JetClassOrObject) parentDeclaration; LazyClassDescriptor classDescriptor = (LazyClassDescriptor) resolveSession.getClassDescriptor(classOrObject); if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) { - return classDescriptor.getScopeForPropertyInitializerResolution(); + return classDescriptor.getScopeForInitializerResolution(); } return classDescriptor.getScopeForMemberDeclarationResolution(); } 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 e85f4fd2198..365b9630359 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 @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.descriptors.ClassDescriptorWithResolutionScopes; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.LazyEntity; @@ -56,7 +57,7 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isSyntheticClassObj import static org.jetbrains.jet.lang.resolve.ModifiersChecker.*; import static org.jetbrains.jet.lang.resolve.name.SpecialNames.getClassObjectName; -public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEntity, ClassDescriptor { +public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEntity, ClassDescriptorWithResolutionScopes { private static final Predicate VALID_SUPERTYPE = new Predicate() { @Override public boolean apply(JetType type) { @@ -157,6 +158,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti return unsubstitutedMemberScope; } + @Override @NotNull public JetScope getScopeForClassHeaderResolution() { return scopeForClassHeaderResolution.invoke(); @@ -177,6 +179,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti getScopeProvider().getResolutionScopeForDeclaration(scopeAnchor)); } + @Override @NotNull public JetScope getScopeForMemberDeclarationResolution() { return scopeForMemberDeclarationResolution.invoke(); @@ -200,8 +203,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti classObjectAdapterScope); } + @Override @NotNull - public JetScope getScopeForPropertyInitializerResolution() { + public JetScope getScopeForInitializerResolution() { return scopeForPropertyInitializerResolution.invoke(); } @@ -332,7 +336,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti getScopeForClassHeaderResolution(); getScopeForMemberDeclarationResolution(); ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup()); - getScopeForPropertyInitializerResolution(); + getScopeForInitializerResolution(); getUnsubstitutedInnerClassesScope(); ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); getUnsubstitutedPrimaryConstructor(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java index 0166f6d1ff2..2bfb29a0ccc 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyClassMemberScope.java @@ -94,7 +94,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope.classObjFunc:SimpleFunctionDescriptor .classObjProp:PropertyDescriptor .this:ReceiverParameterDescriptor -:ClassDescriptor +:ClassDescriptorWithResolutionScopes .():ConstructorDescriptor .nestedClassObjFunc:SimpleFunctionDescriptor .this:ReceiverParameterDescriptor -:ClassDescriptor +:ClassDescriptorWithResolutionScopes .():ConstructorDescriptor .this:ReceiverParameterDescriptor -:ClassDescriptor +:ClassDescriptorWithResolutionScopes .():ConstructorDescriptor .this:ReceiverParameterDescriptor -:ClassDescriptor +:ClassDescriptorWithResolutionScopes :ValueParameterDescriptor Class.:PropertyGetterDescriptor Class.():ConstructorDescriptor Class.classFunc:SimpleFunctionDescriptor Class.classProp:PropertyDescriptor Class.this:ReceiverParameterDescriptor -Class:ClassDescriptor +Class:ClassDescriptorWithResolutionScopes NestedClass.():ConstructorDescriptor NestedClass.this:ReceiverParameterDescriptor -NestedClass:ClassDescriptor +NestedClass:ClassDescriptorWithResolutionScopes NestedObject.():ConstructorDescriptor NestedObject.nestedFunc:SimpleFunctionDescriptor NestedObject.this:ReceiverParameterDescriptor -NestedObject:ClassDescriptor +NestedObject:ClassDescriptorWithResolutionScopes NestedTrait.nestedTraitFun:SimpleFunctionDescriptor NestedTrait.this:ReceiverParameterDescriptor -NestedTrait:ClassDescriptor +NestedTrait:ClassDescriptorWithResolutionScopes Object.:PropertyGetterDescriptor Object.():ConstructorDescriptor Object.objFunc:SimpleFunctionDescriptor Object.objProp:PropertyDescriptor Object.this:ReceiverParameterDescriptor -Object:ClassDescriptor +Object:ClassDescriptorWithResolutionScopes Outer.this:ReceiverParameterDescriptor -Outer:ClassDescriptor +Outer:ClassDescriptorWithResolutionScopes T1:TypeParameterDescriptor T2:TypeParameterDescriptor T3:TypeParameterDescriptor @@ -48,7 +48,7 @@ Trait.:PropertyGetterDescriptor Trait.this:ReceiverParameterDescriptor Trait.traitFunc:SimpleFunctionDescriptor Trait.traitProp:PropertyDescriptor -Trait:ClassDescriptor +Trait:ClassDescriptorWithResolutionScopes a:ValueParameterDescriptor fake .nestedFunc:SimpleFunctionDescriptor fake .:PropertyGetterDescriptor @@ -67,4 +67,4 @@ innerTest.propVar:PropertyDescriptor innerTest:PackageViewDescriptor prop.this:ReceiverParameterDescriptor prop.this:ReceiverParameterDescriptor -test:PackageViewDescriptor +test:PackageViewDescriptor \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorWithResolutionScopes.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorWithResolutionScopes.java new file mode 100644 index 00000000000..3ad08c246d9 --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ClassDescriptorWithResolutionScopes.java @@ -0,0 +1,31 @@ +/* + * 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.descriptors; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; + +public interface ClassDescriptorWithResolutionScopes extends ClassDescriptor { + @NotNull + JetScope getScopeForClassHeaderResolution(); + + @NotNull + JetScope getScopeForMemberDeclarationResolution(); + + @NotNull + JetScope getScopeForInitializerResolution(); +} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java index 91b79d5ee31..329edf6b0be 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutableClassDescriptor.java @@ -27,7 +27,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; -public class MutableClassDescriptor extends MutableClassDescriptorLite { +public class MutableClassDescriptor extends MutableClassDescriptorLite implements ClassDescriptorWithResolutionScopes { private final Set constructors = Sets.newLinkedHashSet(); private ConstructorDescriptor primaryConstructor; @@ -137,13 +137,15 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite { scopeForMemberResolution.setImplicitReceiver(getThisAsReceiverParameter()); } + @Override @NotNull - public JetScope getScopeForSupertypeResolution() { + public JetScope getScopeForClassHeaderResolution() { return scopeForSupertypeResolution; } + @Override @NotNull - public JetScope getScopeForMemberResolution() { + public JetScope getScopeForMemberDeclarationResolution() { return scopeForMemberResolution; } @@ -154,8 +156,9 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite { return scopeForInitializers; } + @Override @NotNull - public JetScope getScopeForInitializers() { + public JetScope getScopeForInitializerResolution() { return getWritableScopeForInitializers(); } diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index b9565d8a165..f46a41af772 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -312,7 +312,7 @@ public class ResolveElementCache { JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class); LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject); bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(), - classOrObjectDescriptor.getScopeForPropertyInitializerResolution()); + classOrObjectDescriptor.getScopeForInitializerResolution()); return true; } diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/CreateFunctionFromUsageFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/CreateFunctionFromUsageFix.java index 82eb30a0437..3547d9a1e01 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/CreateFunctionFromUsageFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/CreateFunctionFromUsageFix.java @@ -670,7 +670,7 @@ public class CreateFunctionFromUsageFix extends CreateFromUsageFixBase { scope = currentFileModule.getPackage(JetPsiUtil.getFQName(currentFile)).getMemberScope(); } else { assert ownerClassDescriptor instanceof MutableClassDescriptor; - scope = ((MutableClassDescriptor) ownerClassDescriptor).getScopeForMemberResolution(); + scope = ((MutableClassDescriptor) ownerClassDescriptor).getScopeForMemberDeclarationResolution(); } // figure out type substitutions for type parameters