EA-36814. Do not repeat annotations resolve

for primary constructor parameters as properties
(annotations are already resolved for parameters themselves)
This commit is contained in:
Svetlana Isakova
2012-06-22 17:23:55 +04:00
parent 32e0b06de1
commit 53b59ce152
4 changed files with 51 additions and 25 deletions
@@ -229,18 +229,23 @@ public class DeclarationResolver {
// TODO : not all the parameters are real properties // TODO : not all the parameters are real properties
JetScope memberScope = classDescriptor.getScopeForSupertypeResolution(); JetScope memberScope = classDescriptor.getScopeForSupertypeResolution();
ConstructorDescriptor constructorDescriptor = descriptorResolver.resolvePrimaryConstructorDescriptor(memberScope, classDescriptor, klass, trace); 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) { if (constructorDescriptor != null) {
List<ValueParameterDescriptor> 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); classDescriptor.setPrimaryConstructor(constructorDescriptor, trace);
} }
} }
@@ -924,6 +924,7 @@ public class DescriptorResolver {
@NotNull @NotNull
public PropertyDescriptor resolvePrimaryConstructorParameterToAProperty( public PropertyDescriptor resolvePrimaryConstructorParameterToAProperty(
@NotNull ClassDescriptor classDescriptor, @NotNull ClassDescriptor classDescriptor,
@NotNull ValueParameterDescriptor valueParameter,
@NotNull JetScope scope, @NotNull JetScope scope,
@NotNull JetParameter parameter, BindingTrace trace) { @NotNull JetParameter parameter, BindingTrace trace) {
JetType type = resolveParameterType(scope, parameter, trace); JetType type = resolveParameterType(scope, parameter, trace);
@@ -940,7 +941,7 @@ public class DescriptorResolver {
PropertyDescriptor propertyDescriptor = new PropertyDescriptor( PropertyDescriptor propertyDescriptor = new PropertyDescriptor(
classDescriptor, classDescriptor,
annotationResolver.resolveAnnotations(scope, modifierList, trace), valueParameter.getAnnotations(),
resolveModalityFromModifiers(parameter.getModifierList(), Modality.FINAL), resolveModalityFromModifiers(parameter.getModifierList(), Modality.FINAL),
resolveVisibilityFromModifiers(parameter.getModifierList()), resolveVisibilityFromModifiers(parameter.getModifierList()),
isMutable, isMutable,
@@ -36,10 +36,7 @@ import org.jetbrains.jet.lang.types.DeferredType;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.util.lazy.LazyValue; import org.jetbrains.jet.util.lazy.LazyValue;
import java.util.Collection; import java.util.*;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Set;
/** /**
* @author abreslav * @author abreslav
@@ -111,15 +108,23 @@ public class LazyClassMemberScope extends AbstractLazyMemberScope<LazyClassDescr
if (classOrObject instanceof JetClass) { if (classOrObject instanceof JetClass) {
JetClass jetClass = (JetClass) classOrObject; JetClass jetClass = (JetClass) classOrObject;
for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) { ConstructorDescriptor primaryConstructor = getPrimaryConstructor();
if (parameter.getValOrVarNode() != null && name.equals(parameter.getNameAsName())) { if (primaryConstructor != null) {
PropertyDescriptor propertyDescriptor = List<ValueParameterDescriptor> valueParameters = primaryConstructor.getValueParameters();
resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty( assert valueParameters.size() == jetClass.getPrimaryConstructorParameters().size();
thisDescriptor, int i = 0;
thisDescriptor.getScopeForClassHeaderResolution(), for (JetParameter parameter : jetClass.getPrimaryConstructorParameters()) {
parameter, resolveSession.getTrace() if (parameter.getValOrVarNode() != null && name.equals(parameter.getNameAsName())) {
); PropertyDescriptor propertyDescriptor =
result.add(propertyDescriptor); resolveSession.getInjector().getDescriptorResolver().resolvePrimaryConstructorParameterToAProperty(
thisDescriptor,
valueParameters.get(i),
thisDescriptor.getScopeForClassHeaderResolution(),
parameter, resolveSession.getTrace()
);
result.add(propertyDescriptor);
}
i++;
} }
} }
} }
@@ -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<String>) {
System.out.println("Hello, world!")
}
class Test(deprecated val s: String,
suppresswarnings val x : Int) {}