Interface ClassDescriptorWithResolutionScopes extracted for both lazy and mutable classes

This commit is contained in:
Andrey Breslav
2014-02-05 13:45:32 +01:00
parent 9a8a8364dd
commit ac94dc5411
12 changed files with 76 additions and 38 deletions
@@ -166,8 +166,8 @@ public class BodyResolver {
MutableClassDescriptor descriptor = entry.getValue(); MutableClassDescriptor descriptor = entry.getValue();
resolveDelegationSpecifierList(classOrObject, descriptor, resolveDelegationSpecifierList(classOrObject, descriptor,
descriptor.getUnsubstitutedPrimaryConstructor(), descriptor.getUnsubstitutedPrimaryConstructor(),
descriptor.getScopeForSupertypeResolution(), descriptor.getScopeForClassHeaderResolution(),
descriptor.getScopeForMemberResolution()); descriptor.getScopeForMemberDeclarationResolution());
} }
} }
@@ -342,7 +342,7 @@ public class BodyResolver {
private void resolveClassAnnotations() { private void resolveClassAnnotations() {
for (Map.Entry<JetClassOrObject, MutableClassDescriptor> entry : context.getClasses().entrySet()) { for (Map.Entry<JetClassOrObject, MutableClassDescriptor> 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(); JetClassOrObject classOrObject = entry.getKey();
MutableClassDescriptor descriptor = entry.getValue(); MutableClassDescriptor descriptor = entry.getValue();
resolveAnonymousInitializers(classOrObject, descriptor.getUnsubstitutedPrimaryConstructor(), resolveAnonymousInitializers(classOrObject, descriptor.getUnsubstitutedPrimaryConstructor(),
descriptor.getScopeForInitializers()); descriptor.getScopeForInitializerResolution());
} }
} }
@@ -394,10 +394,10 @@ public class BodyResolver {
MutableClassDescriptor classDescriptor = entry.getValue(); MutableClassDescriptor classDescriptor = entry.getValue();
ConstructorDescriptor unsubstitutedPrimaryConstructor = classDescriptor.getUnsubstitutedPrimaryConstructor(); ConstructorDescriptor unsubstitutedPrimaryConstructor = classDescriptor.getUnsubstitutedPrimaryConstructor();
annotationResolver.resolveAnnotationsArguments(classDescriptor.getScopeForSupertypeResolution(), klass.getPrimaryConstructorModifierList(), trace); annotationResolver.resolveAnnotationsArguments(classDescriptor.getScopeForClassHeaderResolution(), klass.getPrimaryConstructorModifierList(), trace);
if (unsubstitutedPrimaryConstructor != null) { if (unsubstitutedPrimaryConstructor != null) {
WritableScope parameterScope = getPrimaryConstructorParametersScope(classDescriptor.getScopeForSupertypeResolution(), unsubstitutedPrimaryConstructor); WritableScope parameterScope = getPrimaryConstructorParametersScope(classDescriptor.getScopeForClassHeaderResolution(), unsubstitutedPrimaryConstructor);
expressionTypingServices.resolveValueParameters(klass.getPrimaryConstructorParameters(), unsubstitutedPrimaryConstructor.getValueParameters(), expressionTypingServices.resolveValueParameters(klass.getPrimaryConstructorParameters(), unsubstitutedPrimaryConstructor.getValueParameters(),
parameterScope, context.getOuterDataFlowInfo(), trace, context.completeAnalysisNeeded(klass)); parameterScope, context.getOuterDataFlowInfo(), trace, context.completeAnalysisNeeded(klass));
} }
@@ -447,7 +447,7 @@ public class BodyResolver {
JetExpression delegateExpression = property.getDelegateExpression(); JetExpression delegateExpression = property.getDelegateExpression();
if (delegateExpression != null) { if (delegateExpression != null) {
assert initializer == null : "Initializer should be null for delegated property : " + property.getText(); 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); resolveAnnotationArguments(propertyScope, property);
@@ -155,7 +155,7 @@ public class DeclarationResolver {
if (modifierList != null) { if (modifierList != null) {
MutableClassDescriptor descriptor = entry.getValue(); MutableClassDescriptor descriptor = entry.getValue();
descriptor.addAnnotations(annotationResolver.resolveAnnotationsWithoutArguments( descriptor.addAnnotations(annotationResolver.resolveAnnotationsWithoutArguments(
descriptor.getScopeForSupertypeResolution(), modifierList, trace)); descriptor.getScopeForClassHeaderResolution(), modifierList, trace));
} }
} }
} }
@@ -178,8 +178,8 @@ public class DeclarationResolver {
} }
resolveFunctionAndPropertyHeaders( resolveFunctionAndPropertyHeaders(
classOrObject.getDeclarations(), classDescriptor.getScopeForMemberResolution(), classOrObject.getDeclarations(), classDescriptor.getScopeForMemberDeclarationResolution(),
classDescriptor.getScopeForInitializers(), classDescriptor.getScopeForMemberResolution(), classDescriptor.getScopeForInitializerResolution(), classDescriptor.getScopeForMemberDeclarationResolution(),
classDescriptor.getBuilder()); classDescriptor.getBuilder());
} }
@@ -283,7 +283,7 @@ public class DeclarationResolver {
boolean isAnnotationClass = DescriptorUtils.isAnnotationClass(classDescriptor); boolean isAnnotationClass = DescriptorUtils.isAnnotationClass(classDescriptor);
// TODO : not all the parameters are real properties // TODO : not all the parameters are real properties
JetScope memberScope = classDescriptor.getScopeForSupertypeResolution(); JetScope memberScope = classDescriptor.getScopeForClassHeaderResolution();
ConstructorDescriptor constructorDescriptor = descriptorResolver.resolvePrimaryConstructorDescriptor(memberScope, classDescriptor, klass, trace); ConstructorDescriptor constructorDescriptor = descriptorResolver.resolvePrimaryConstructorDescriptor(memberScope, classDescriptor, klass, trace);
if (constructorDescriptor != null) { if (constructorDescriptor != null) {
List<ValueParameterDescriptor> valueParameterDescriptors = constructorDescriptor.getValueParameters(); List<ValueParameterDescriptor> valueParameterDescriptors = constructorDescriptor.getValueParameters();
@@ -133,7 +133,7 @@ public class DescriptorResolver {
@NotNull MutableClassDescriptor descriptor, @NotNull MutableClassDescriptor descriptor,
BindingTrace trace BindingTrace trace
) { ) {
for (JetType supertype : resolveSupertypes(descriptor.getScopeForSupertypeResolution(), descriptor, jetClass, trace)) { for (JetType supertype : resolveSupertypes(descriptor.getScopeForClassHeaderResolution(), descriptor, jetClass, trace)) {
descriptor.addSupertype(supertype); descriptor.addSupertype(supertype);
} }
} }
@@ -215,7 +215,7 @@ public class TypeHierarchyResolver {
if (classOrObject instanceof JetClass) { if (classOrObject instanceof JetClass) {
MutableClassDescriptor descriptor = entry.getValue(); MutableClassDescriptor descriptor = entry.getValue();
//noinspection unchecked //noinspection unchecked
descriptorResolver.resolveGenericBounds((JetClass) classOrObject, descriptor.getScopeForSupertypeResolution(), descriptorResolver.resolveGenericBounds((JetClass) classOrObject, descriptor.getScopeForClassHeaderResolution(),
(List) descriptor.getTypeConstructor().getParameters(), trace); (List) descriptor.getTypeConstructor().getParameters(), trace);
} }
} }
@@ -610,7 +610,7 @@ public class TypeHierarchyResolver {
createClassObjectForEnumClass(mutableClassDescriptor); createClassObjectForEnumClass(mutableClassDescriptor);
JetScope classScope = mutableClassDescriptor.getScopeForMemberResolution(); JetScope classScope = mutableClassDescriptor.getScopeForMemberDeclarationResolution();
prepareForDeferredCall(classScope, mutableClassDescriptor, klass); prepareForDeferredCall(classScope, mutableClassDescriptor, klass);
@@ -625,7 +625,7 @@ public class TypeHierarchyResolver {
) { ) {
MutableClassDescriptor descriptor = new MutableClassDescriptor(owner.getOwnerForChildren(), outerScope, kind, false, name); MutableClassDescriptor descriptor = new MutableClassDescriptor(owner.getOwnerForChildren(), outerScope, kind, false, name);
prepareForDeferredCall(descriptor.getScopeForMemberResolution(), descriptor, declaration); prepareForDeferredCall(descriptor.getScopeForMemberDeclarationResolution(), descriptor, declaration);
createPrimaryConstructorForObject(declaration, descriptor); createPrimaryConstructorForObject(declaration, descriptor);
trace.record(BindingContext.CLASS, declaration, descriptor); trace.record(BindingContext.CLASS, declaration, descriptor);
@@ -139,7 +139,7 @@ public class ScopeProvider {
JetClassOrObject classOrObject = (JetClassOrObject) parentDeclaration; JetClassOrObject classOrObject = (JetClassOrObject) parentDeclaration;
LazyClassDescriptor classDescriptor = (LazyClassDescriptor) resolveSession.getClassDescriptor(classOrObject); LazyClassDescriptor classDescriptor = (LazyClassDescriptor) resolveSession.getClassDescriptor(classOrObject);
if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) { if (jetDeclaration instanceof JetClassInitializer || jetDeclaration instanceof JetProperty) {
return classDescriptor.getScopeForPropertyInitializerResolution(); return classDescriptor.getScopeForInitializerResolution();
} }
return classDescriptor.getScopeForMemberDeclarationResolution(); return classDescriptor.getScopeForMemberDeclarationResolution();
} }
@@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorBase;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.BindingContext; 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.DescriptorUtils;
import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil; import org.jetbrains.jet.lang.resolve.lazy.ForceResolveUtil;
import org.jetbrains.jet.lang.resolve.lazy.LazyEntity; 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.ModifiersChecker.*;
import static org.jetbrains.jet.lang.resolve.name.SpecialNames.getClassObjectName; 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<JetType> VALID_SUPERTYPE = new Predicate<JetType>() { private static final Predicate<JetType> VALID_SUPERTYPE = new Predicate<JetType>() {
@Override @Override
public boolean apply(JetType type) { public boolean apply(JetType type) {
@@ -157,6 +158,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
return unsubstitutedMemberScope; return unsubstitutedMemberScope;
} }
@Override
@NotNull @NotNull
public JetScope getScopeForClassHeaderResolution() { public JetScope getScopeForClassHeaderResolution() {
return scopeForClassHeaderResolution.invoke(); return scopeForClassHeaderResolution.invoke();
@@ -177,6 +179,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
getScopeProvider().getResolutionScopeForDeclaration(scopeAnchor)); getScopeProvider().getResolutionScopeForDeclaration(scopeAnchor));
} }
@Override
@NotNull @NotNull
public JetScope getScopeForMemberDeclarationResolution() { public JetScope getScopeForMemberDeclarationResolution() {
return scopeForMemberDeclarationResolution.invoke(); return scopeForMemberDeclarationResolution.invoke();
@@ -200,8 +203,9 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
classObjectAdapterScope); classObjectAdapterScope);
} }
@Override
@NotNull @NotNull
public JetScope getScopeForPropertyInitializerResolution() { public JetScope getScopeForInitializerResolution() {
return scopeForPropertyInitializerResolution.invoke(); return scopeForPropertyInitializerResolution.invoke();
} }
@@ -332,7 +336,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements LazyEnti
getScopeForClassHeaderResolution(); getScopeForClassHeaderResolution();
getScopeForMemberDeclarationResolution(); getScopeForMemberDeclarationResolution();
ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup()); ForceResolveUtil.forceResolveAllContents(getScopeForMemberLookup());
getScopeForPropertyInitializerResolution(); getScopeForInitializerResolution();
getUnsubstitutedInnerClassesScope(); getUnsubstitutedInnerClassesScope();
ForceResolveUtil.forceResolveAllContents(getTypeConstructor()); ForceResolveUtil.forceResolveAllContents(getTypeConstructor());
getUnsubstitutedPrimaryConstructor(); getUnsubstitutedPrimaryConstructor();
@@ -94,7 +94,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
@Override @Override
protected JetScope getScopeForMemberDeclarationResolution(JetDeclaration declaration) { protected JetScope getScopeForMemberDeclarationResolution(JetDeclaration declaration) {
if (declaration instanceof JetProperty) { if (declaration instanceof JetProperty) {
return thisDescriptor.getScopeForPropertyInitializerResolution(); return thisDescriptor.getScopeForInitializerResolution();
} }
return thisDescriptor.getScopeForMemberDeclarationResolution(); return thisDescriptor.getScopeForMemberDeclarationResolution();
} }
@@ -3,42 +3,42 @@
<class-object-for-Class>.classObjFunc:SimpleFunctionDescriptor <class-object-for-Class>.classObjFunc:SimpleFunctionDescriptor
<class-object-for-Class>.classObjProp:PropertyDescriptor <class-object-for-Class>.classObjProp:PropertyDescriptor
<class-object-for-Class>.this:ReceiverParameterDescriptor <class-object-for-Class>.this:ReceiverParameterDescriptor
<class-object-for-Class>:ClassDescriptor <class-object-for-Class>:ClassDescriptorWithResolutionScopes
<class-object-for-NestedClass>.<init>():ConstructorDescriptor <class-object-for-NestedClass>.<init>():ConstructorDescriptor
<class-object-for-NestedClass>.nestedClassObjFunc:SimpleFunctionDescriptor <class-object-for-NestedClass>.nestedClassObjFunc:SimpleFunctionDescriptor
<class-object-for-NestedClass>.this:ReceiverParameterDescriptor <class-object-for-NestedClass>.this:ReceiverParameterDescriptor
<class-object-for-NestedClass>:ClassDescriptor <class-object-for-NestedClass>:ClassDescriptorWithResolutionScopes
<class-object-for-NestedObject>.<init>():ConstructorDescriptor <class-object-for-NestedObject>.<init>():ConstructorDescriptor
<class-object-for-NestedObject>.this:ReceiverParameterDescriptor <class-object-for-NestedObject>.this:ReceiverParameterDescriptor
<class-object-for-NestedObject>:ClassDescriptor <class-object-for-NestedObject>:ClassDescriptorWithResolutionScopes
<class-object-for-Object>.<init>():ConstructorDescriptor <class-object-for-Object>.<init>():ConstructorDescriptor
<class-object-for-Object>.this:ReceiverParameterDescriptor <class-object-for-Object>.this:ReceiverParameterDescriptor
<class-object-for-Object>:ClassDescriptor <class-object-for-Object>:ClassDescriptorWithResolutionScopes
<set-?>:ValueParameterDescriptor <set-?>:ValueParameterDescriptor
Class.<get-classProp>:PropertyGetterDescriptor Class.<get-classProp>:PropertyGetterDescriptor
Class.<init>():ConstructorDescriptor Class.<init>():ConstructorDescriptor
Class.classFunc:SimpleFunctionDescriptor Class.classFunc:SimpleFunctionDescriptor
Class.classProp:PropertyDescriptor Class.classProp:PropertyDescriptor
Class.this:ReceiverParameterDescriptor Class.this:ReceiverParameterDescriptor
Class:ClassDescriptor Class:ClassDescriptorWithResolutionScopes
NestedClass.<init>():ConstructorDescriptor NestedClass.<init>():ConstructorDescriptor
NestedClass.this:ReceiverParameterDescriptor NestedClass.this:ReceiverParameterDescriptor
NestedClass:ClassDescriptor NestedClass:ClassDescriptorWithResolutionScopes
NestedObject.<init>():ConstructorDescriptor NestedObject.<init>():ConstructorDescriptor
NestedObject.nestedFunc:SimpleFunctionDescriptor NestedObject.nestedFunc:SimpleFunctionDescriptor
NestedObject.this:ReceiverParameterDescriptor NestedObject.this:ReceiverParameterDescriptor
NestedObject:ClassDescriptor NestedObject:ClassDescriptorWithResolutionScopes
NestedTrait.nestedTraitFun:SimpleFunctionDescriptor NestedTrait.nestedTraitFun:SimpleFunctionDescriptor
NestedTrait.this:ReceiverParameterDescriptor NestedTrait.this:ReceiverParameterDescriptor
NestedTrait:ClassDescriptor NestedTrait:ClassDescriptorWithResolutionScopes
Object.<get-objProp>:PropertyGetterDescriptor Object.<get-objProp>:PropertyGetterDescriptor
Object.<init>():ConstructorDescriptor Object.<init>():ConstructorDescriptor
Object.objFunc:SimpleFunctionDescriptor Object.objFunc:SimpleFunctionDescriptor
Object.objProp:PropertyDescriptor Object.objProp:PropertyDescriptor
Object.this:ReceiverParameterDescriptor Object.this:ReceiverParameterDescriptor
Object:ClassDescriptor Object:ClassDescriptorWithResolutionScopes
Outer.this:ReceiverParameterDescriptor Outer.this:ReceiverParameterDescriptor
Outer:ClassDescriptor Outer:ClassDescriptorWithResolutionScopes
T1:TypeParameterDescriptor T1:TypeParameterDescriptor
T2:TypeParameterDescriptor T2:TypeParameterDescriptor
T3:TypeParameterDescriptor T3:TypeParameterDescriptor
@@ -48,7 +48,7 @@ Trait.<get-traitProp>:PropertyGetterDescriptor
Trait.this:ReceiverParameterDescriptor Trait.this:ReceiverParameterDescriptor
Trait.traitFunc:SimpleFunctionDescriptor Trait.traitFunc:SimpleFunctionDescriptor
Trait.traitProp:PropertyDescriptor Trait.traitProp:PropertyDescriptor
Trait:ClassDescriptor Trait:ClassDescriptorWithResolutionScopes
a:ValueParameterDescriptor a:ValueParameterDescriptor
fake <class-object-for-NestedObject>.nestedFunc:SimpleFunctionDescriptor fake <class-object-for-NestedObject>.nestedFunc:SimpleFunctionDescriptor
fake <class-object-for-Object>.<get-objProp>:PropertyGetterDescriptor fake <class-object-for-Object>.<get-objProp>:PropertyGetterDescriptor
@@ -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();
}
@@ -27,7 +27,7 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
public class MutableClassDescriptor extends MutableClassDescriptorLite { public class MutableClassDescriptor extends MutableClassDescriptorLite implements ClassDescriptorWithResolutionScopes {
private final Set<ConstructorDescriptor> constructors = Sets.newLinkedHashSet(); private final Set<ConstructorDescriptor> constructors = Sets.newLinkedHashSet();
private ConstructorDescriptor primaryConstructor; private ConstructorDescriptor primaryConstructor;
@@ -137,13 +137,15 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
scopeForMemberResolution.setImplicitReceiver(getThisAsReceiverParameter()); scopeForMemberResolution.setImplicitReceiver(getThisAsReceiverParameter());
} }
@Override
@NotNull @NotNull
public JetScope getScopeForSupertypeResolution() { public JetScope getScopeForClassHeaderResolution() {
return scopeForSupertypeResolution; return scopeForSupertypeResolution;
} }
@Override
@NotNull @NotNull
public JetScope getScopeForMemberResolution() { public JetScope getScopeForMemberDeclarationResolution() {
return scopeForMemberResolution; return scopeForMemberResolution;
} }
@@ -154,8 +156,9 @@ public class MutableClassDescriptor extends MutableClassDescriptorLite {
return scopeForInitializers; return scopeForInitializers;
} }
@Override
@NotNull @NotNull
public JetScope getScopeForInitializers() { public JetScope getScopeForInitializerResolution() {
return getWritableScopeForInitializers(); return getWritableScopeForInitializers();
} }
@@ -312,7 +312,7 @@ public class ResolveElementCache {
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class); JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class);
LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject); LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject);
bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(), bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(),
classOrObjectDescriptor.getScopeForPropertyInitializerResolution()); classOrObjectDescriptor.getScopeForInitializerResolution());
return true; return true;
} }
@@ -670,7 +670,7 @@ public class CreateFunctionFromUsageFix extends CreateFromUsageFixBase {
scope = currentFileModule.getPackage(JetPsiUtil.getFQName(currentFile)).getMemberScope(); scope = currentFileModule.getPackage(JetPsiUtil.getFQName(currentFile)).getMemberScope();
} else { } else {
assert ownerClassDescriptor instanceof MutableClassDescriptor; assert ownerClassDescriptor instanceof MutableClassDescriptor;
scope = ((MutableClassDescriptor) ownerClassDescriptor).getScopeForMemberResolution(); scope = ((MutableClassDescriptor) ownerClassDescriptor).getScopeForMemberDeclarationResolution();
} }
// figure out type substitutions for type parameters // figure out type substitutions for type parameters