Interface ClassDescriptorWithResolutionScopes extracted for both lazy and mutable classes
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
+7
-3
@@ -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();
|
||||
|
||||
+1
-1
@@ -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
|
||||
+31
@@ -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();
|
||||
}
|
||||
+7
-4
@@ -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<ConstructorDescriptor> 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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user