Support for properties defined by object declarations
This commit is contained in:
+10
@@ -141,6 +141,16 @@ public abstract class AbstractLazyMemberScope<D extends DeclarationDescriptor, D
|
|||||||
resolveSession.getTrace()));
|
resolveSession.getTrace()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Objects are also properties
|
||||||
|
JetClassOrObject classOrObjectDeclaration = declarationProvider.getClassOrObjectDeclaration(name);
|
||||||
|
if (classOrObjectDeclaration instanceof JetObjectDeclaration) {
|
||||||
|
JetObjectDeclaration objectDeclaration = (JetObjectDeclaration) classOrObjectDeclaration;
|
||||||
|
ClassDescriptor classifier = (ClassDescriptor) getClassifier(name);
|
||||||
|
VariableDescriptor propertyDescriptor = resolveSession.getInjector().getDescriptorResolver()
|
||||||
|
.resolveObjectDeclaration(thisDescriptor, objectDeclaration, classifier, resolveSession.getTrace());
|
||||||
|
result.add(propertyDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
getNonDeclaredProperties(name, result);
|
getNonDeclaredProperties(name, result);
|
||||||
|
|
||||||
if (!result.isEmpty()) {
|
if (!result.isEmpty()) {
|
||||||
|
|||||||
@@ -112,7 +112,7 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
|
|||||||
JetClass jetClass = (JetClass) classOrObject;
|
JetClass jetClass = (JetClass) classOrObject;
|
||||||
|
|
||||||
for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) {
|
for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) {
|
||||||
if (parameter.getValOrVarNode() != null) {
|
if (parameter.getValOrVarNode() != null && name.equals(parameter.getNameAsName())) {
|
||||||
PropertyDescriptor propertyDescriptor =
|
PropertyDescriptor propertyDescriptor =
|
||||||
resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty(
|
resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty(
|
||||||
thisDescriptor,
|
thisDescriptor,
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class ResolveSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public InjectorForLazyResolve getInjector() {
|
/*package*/ InjectorForLazyResolve getInjector() {
|
||||||
return injector;
|
return injector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ public class ResolveSession {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration) {
|
public DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration) {
|
||||||
return declaration.accept(new JetVisitor<DeclarationDescriptor, Void>() {
|
DeclarationDescriptor result = declaration.accept(new JetVisitor<DeclarationDescriptor, Void>() {
|
||||||
@Override
|
@Override
|
||||||
public DeclarationDescriptor visitClass(JetClass klass, Void data) {
|
public DeclarationDescriptor visitClass(JetClass klass, Void data) {
|
||||||
return getClassDescriptor(klass);
|
return getClassDescriptor(klass);
|
||||||
@@ -238,10 +238,22 @@ public class ResolveSession {
|
|||||||
return getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, property);
|
return getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, property);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeclarationDescriptor visitObjectDeclarationName(JetObjectDeclarationName declarationName, Void data) {
|
||||||
|
JetScope scopeForDeclaration = getInjector().getScopeProvider().getResolutionScopeForDeclaration(
|
||||||
|
(JetDeclaration) declarationName.getParent());
|
||||||
|
scopeForDeclaration.getProperties(declarationName.getNameAsName());
|
||||||
|
return getBindingContext().get(BindingContext.DECLARATION_TO_DESCRIPTOR, declarationName);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DeclarationDescriptor visitJetElement(JetElement element, Void data) {
|
public DeclarationDescriptor visitJetElement(JetElement element, Void data) {
|
||||||
throw new IllegalArgumentException("Unsupported declaration type: " + element + " " + element.getText());
|
throw new IllegalArgumentException("Unsupported declaration type: " + element + " " + element.getText());
|
||||||
}
|
}
|
||||||
}, null);
|
}, null);
|
||||||
|
if (result == null) {
|
||||||
|
throw new IllegalStateException("No descriptor resolevd for " + declaration + " " + declaration.getText());
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user