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();
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<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();
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);
@@ -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<ValueParameterDescriptor> valueParameterDescriptors = constructorDescriptor.getValueParameters();
@@ -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);
}
}
@@ -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);
@@ -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();
}
@@ -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<JetType> VALID_SUPERTYPE = new Predicate<JetType>() {
@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();
@@ -94,7 +94,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
@Override
protected JetScope getScopeForMemberDeclarationResolution(JetDeclaration declaration) {
if (declaration instanceof JetProperty) {
return thisDescriptor.getScopeForPropertyInitializerResolution();
return thisDescriptor.getScopeForInitializerResolution();
}
return thisDescriptor.getScopeForMemberDeclarationResolution();
}
@@ -3,42 +3,42 @@
<class-object-for-Class>.classObjFunc:SimpleFunctionDescriptor
<class-object-for-Class>.classObjProp:PropertyDescriptor
<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>.nestedClassObjFunc:SimpleFunctionDescriptor
<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>.this:ReceiverParameterDescriptor
<class-object-for-NestedObject>:ClassDescriptor
<class-object-for-NestedObject>:ClassDescriptorWithResolutionScopes
<class-object-for-Object>.<init>():ConstructorDescriptor
<class-object-for-Object>.this:ReceiverParameterDescriptor
<class-object-for-Object>:ClassDescriptor
<class-object-for-Object>:ClassDescriptorWithResolutionScopes
<set-?>:ValueParameterDescriptor
Class.<get-classProp>:PropertyGetterDescriptor
Class.<init>():ConstructorDescriptor
Class.classFunc:SimpleFunctionDescriptor
Class.classProp:PropertyDescriptor
Class.this:ReceiverParameterDescriptor
Class:ClassDescriptor
Class:ClassDescriptorWithResolutionScopes
NestedClass.<init>():ConstructorDescriptor
NestedClass.this:ReceiverParameterDescriptor
NestedClass:ClassDescriptor
NestedClass:ClassDescriptorWithResolutionScopes
NestedObject.<init>():ConstructorDescriptor
NestedObject.nestedFunc:SimpleFunctionDescriptor
NestedObject.this:ReceiverParameterDescriptor
NestedObject:ClassDescriptor
NestedObject:ClassDescriptorWithResolutionScopes
NestedTrait.nestedTraitFun:SimpleFunctionDescriptor
NestedTrait.this:ReceiverParameterDescriptor
NestedTrait:ClassDescriptor
NestedTrait:ClassDescriptorWithResolutionScopes
Object.<get-objProp>:PropertyGetterDescriptor
Object.<init>():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.<get-traitProp>:PropertyGetterDescriptor
Trait.this:ReceiverParameterDescriptor
Trait.traitFunc:SimpleFunctionDescriptor
Trait.traitProp:PropertyDescriptor
Trait:ClassDescriptor
Trait:ClassDescriptorWithResolutionScopes
a:ValueParameterDescriptor
fake <class-object-for-NestedObject>.nestedFunc:SimpleFunctionDescriptor
fake <class-object-for-Object>.<get-objProp>:PropertyGetterDescriptor
@@ -67,4 +67,4 @@ innerTest.propVar:PropertyDescriptor
innerTest:PackageViewDescriptor
prop.this:ReceiverParameterDescriptor
prop.this:ReceiverParameterDescriptor
test:PackageViewDescriptor
test:PackageViewDescriptor