From 53b59ce15201d2d1dfba951cc3bdc03bb8f52f87 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Fri, 22 Jun 2012 17:23:55 +0400 Subject: [PATCH] EA-36814. Do not repeat annotations resolve for primary constructor parameters as properties (annotations are already resolved for parameters themselves) --- .../jet/lang/resolve/DeclarationResolver.java | 27 +++++++++------- .../jet/lang/resolve/DescriptorResolver.java | 3 +- .../resolve/lazy/LazyClassMemberScope.java | 31 +++++++++++-------- .../AnnotatedConstructorParams.jet | 15 +++++++++ 4 files changed, 51 insertions(+), 25 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.jet diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index c883062118b..83f4da6f420 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -229,18 +229,23 @@ public class DeclarationResolver { // TODO : not all the parameters are real properties JetScope memberScope = classDescriptor.getScopeForSupertypeResolution(); ConstructorDescriptor constructorDescriptor = descriptorResolver.resolvePrimaryConstructorDescriptor(memberScope, classDescriptor, klass, trace); - for (JetParameter parameter : klass.getPrimaryConstructorParameters()) { - if (parameter.getValOrVarNode() != null) { - PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePrimaryConstructorParameterToAProperty( - classDescriptor, - memberScope, - parameter, trace - ); - classDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor); - context.getPrimaryConstructorParameterProperties().put(parameter, propertyDescriptor); - } - } if (constructorDescriptor != null) { + List valueParameters = constructorDescriptor.getValueParameters(); + assert valueParameters.size() == klass.getPrimaryConstructorParameters().size(); + int i = 0; + for (JetParameter parameter : klass.getPrimaryConstructorParameters()) { + if (parameter.getValOrVarNode() != null) { + PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePrimaryConstructorParameterToAProperty( + classDescriptor, + valueParameters.get(i), + memberScope, + parameter, trace + ); + classDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor); + context.getPrimaryConstructorParameterProperties().put(parameter, propertyDescriptor); + } + i++; + } classDescriptor.setPrimaryConstructor(constructorDescriptor, trace); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 97a1e356b22..6dd284f9c8b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -924,6 +924,7 @@ public class DescriptorResolver { @NotNull public PropertyDescriptor resolvePrimaryConstructorParameterToAProperty( @NotNull ClassDescriptor classDescriptor, + @NotNull ValueParameterDescriptor valueParameter, @NotNull JetScope scope, @NotNull JetParameter parameter, BindingTrace trace) { JetType type = resolveParameterType(scope, parameter, trace); @@ -940,7 +941,7 @@ public class DescriptorResolver { PropertyDescriptor propertyDescriptor = new PropertyDescriptor( classDescriptor, - annotationResolver.resolveAnnotations(scope, modifierList, trace), + valueParameter.getAnnotations(), resolveModalityFromModifiers(parameter.getModifierList(), Modality.FINAL), resolveVisibilityFromModifiers(parameter.getModifierList()), isMutable, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java index 8ca0711ff71..3476fb9693c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassMemberScope.java @@ -36,10 +36,7 @@ import org.jetbrains.jet.lang.types.DeferredType; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.util.lazy.LazyValue; -import java.util.Collection; -import java.util.Collections; -import java.util.EnumSet; -import java.util.Set; +import java.util.*; /** * @author abreslav @@ -111,15 +108,23 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope valueParameters = primaryConstructor.getValueParameters(); + assert valueParameters.size() == jetClass.getPrimaryConstructorParameters().size(); + int i = 0; + for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) { + if (parameter.getValOrVarNode() != null && name.equals(parameter.getNameAsName())) { + PropertyDescriptor propertyDescriptor = + resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty( + thisDescriptor, + valueParameters.get(i), + thisDescriptor.getScopeForClassHeaderResolution(), + parameter, resolveSession.getTrace() + ); + result.add(propertyDescriptor); + } + i++; } } } diff --git a/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.jet b/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.jet new file mode 100644 index 00000000000..f066cbb9569 --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.jet @@ -0,0 +1,15 @@ +package a + +import java.lang.Deprecated as deprecated +import java.lang.SuppressWarnings as suppresswarnings + + +deprecated suppresswarnings val s: String = ""; + +deprecated suppresswarnings fun main(args : Array) { + System.out.println("Hello, world!") +} + +class Test(deprecated val s: String, + suppresswarnings val x : Int) {} +