From 5e47b923b3de6429e3047fe09cd76f07b0f1734d Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 13 Jun 2012 13:22:09 +0400 Subject: [PATCH] Support properties declared as primary constructor parameters --- .../resolve/lazy/AbstractLazyMemberScope.java | 12 ++++++++++- .../AbstractPsiBasedDeclarationProvider.java | 8 ++++---- .../resolve/lazy/LazyClassMemberScope.java | 20 +++++++++++++++++-- ...siBasedClassMemberDeclarationProvider.java | 13 +++++++++--- 4 files changed, 43 insertions(+), 10 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java index 1a5d456e6bc..a87db0a292a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/AbstractLazyMemberScope.java @@ -186,7 +186,10 @@ public abstract class AbstractLazyMemberScope result) { - System.err.println("Parameter of the primary constructor"); + JetClassOrObject classOrObject = declarationProvider.getOwnerClassOrObject(); + if (classOrObject instanceof JetClass) { + JetClass jetClass = (JetClass) classOrObject; + + for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) { + if (parameter.getValOrVarNode() != null) { + PropertyDescriptor propertyDescriptor = + resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty( + thisDescriptor, + thisDescriptor.getScopeForClassHeaderResolution(), + parameter, resolveSession.getTrace() + ); + result.add(propertyDescriptor); + } + } + } - // Inherited fake overrides Collection fromSupertypes = Lists.newArrayList(); for (JetType supertype : thisDescriptor.getTypeConstructor().getSupertypes()) { fromSupertypes.addAll((Set) supertype.getMemberScope().getProperties(name)); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/PsiBasedClassMemberDeclarationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/PsiBasedClassMemberDeclarationProvider.java index e6b42cb1ef9..1f7863c6337 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/PsiBasedClassMemberDeclarationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/PsiBasedClassMemberDeclarationProvider.java @@ -17,9 +17,7 @@ package org.jetbrains.jet.lang.resolve.lazy; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.JetClassObject; -import org.jetbrains.jet.lang.psi.JetClassOrObject; -import org.jetbrains.jet.lang.psi.JetDeclaration; +import org.jetbrains.jet.lang.psi.*; /** * @author abreslav @@ -49,6 +47,15 @@ public class PsiBasedClassMemberDeclarationProvider extends AbstractPsiBasedDecl putToIndex(declaration); } } + + if (classOrObject instanceof JetClass) { + JetClass jetClass = (JetClass) classOrObject; + for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) { + if (parameter.getValOrVarNode() != null) { + putToIndex(parameter); + } + } + } } @Override