From edc37bd4997c7237458ef49846a89bbc064abc12 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 31 Oct 2013 19:02:22 +0400 Subject: [PATCH] Change local objects resolution, delete LocalVariableDescriptorForObject Local objects are now resolved as global ones (with derived class objects) --- .../LocalVariableDescriptorForObject.java | 47 ------------ .../jet/lang/resolve/AnnotationResolver.java | 14 ++-- .../jet/lang/resolve/DescriptorResolver.java | 72 ------------------- .../jet/lang/resolve/ModifiersChecker.java | 8 --- .../ExpressionTypingVisitorForStatements.java | 4 +- 5 files changed, 5 insertions(+), 140 deletions(-) delete mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/LocalVariableDescriptorForObject.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/LocalVariableDescriptorForObject.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/LocalVariableDescriptorForObject.java deleted file mode 100644 index 3911ff7d706..00000000000 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/impl/LocalVariableDescriptorForObject.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2010-2013 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.impl; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.ClassDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.VariableDescriptorForObject; -import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.resolve.name.Name; - -import java.util.List; - -public class LocalVariableDescriptorForObject extends LocalVariableDescriptor implements VariableDescriptorForObject { - - private final ClassDescriptor objectClass; - - public LocalVariableDescriptorForObject( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull List annotations, - @NotNull Name name, - @NotNull ClassDescriptor objectClass - ) { - super(containingDeclaration, annotations, name, objectClass.getDefaultType(), false); - this.objectClass = objectClass; - } - - @NotNull - @Override - public ClassDescriptor getObjectClass() { - return objectClass; - } -} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java index 3d4a9b7fb75..b6cc6d49059 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnnotationResolver.java @@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import javax.inject.Inject; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -363,24 +364,17 @@ public class AnnotationResolver { } private static boolean isEnumProperty(@NotNull PropertyDescriptor descriptor) { + // TODO: doesn't return true anymore ClassifierDescriptor classifier = descriptor.getType().getConstructor().getDeclarationDescriptor(); return classifier != null && DescriptorUtils.isEnumClass(classifier) && DescriptorUtils.isEnumClassObject(descriptor.getContainingDeclaration()); } - @NotNull - public List getResolvedAnnotations(@Nullable JetModifierList modifierList, BindingTrace trace) { - if (modifierList == null) { - return Collections.emptyList(); - } - return getResolvedAnnotations(modifierList.getAnnotationEntries(), trace); - } - @SuppressWarnings("MethodMayBeStatic") @NotNull - public List getResolvedAnnotations(List annotations, BindingTrace trace) { - List result = Lists.newArrayList(); + public List getResolvedAnnotations(@NotNull List annotations, @NotNull BindingTrace trace) { + List result = new ArrayList(annotations.size()); for (JetAnnotationEntry annotation : annotations) { AnnotationDescriptor annotationDescriptor = trace.get(BindingContext.ANNOTATION, annotation); if (annotationDescriptor == null) { 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 2231db3e243..5c767c9b0eb 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -816,77 +816,6 @@ public class DescriptorResolver { return variableDescriptor; } - @NotNull - public VariableDescriptor resolveObjectDeclaration( - @NotNull JetScope scope, - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull JetClassOrObject objectDeclaration, - @NotNull ClassDescriptor classDescriptor, BindingTrace trace - ) { - boolean isProperty = (containingDeclaration instanceof NamespaceDescriptor) || (containingDeclaration instanceof ClassDescriptor); - if (isProperty) { - return resolveObjectDeclarationAsPropertyDescriptor(scope, containingDeclaration, objectDeclaration, classDescriptor, trace); - } - else { - return resolveObjectDeclarationAsLocalVariable(containingDeclaration, objectDeclaration, classDescriptor, trace); - } - } - - @NotNull - public PropertyDescriptor resolveObjectDeclarationAsPropertyDescriptor( - @NotNull JetScope scope, - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull JetClassOrObject objectDeclaration, - @NotNull ClassDescriptor classDescriptor, BindingTrace trace - ) { - JetModifierList modifierList = objectDeclaration.getModifierList(); - PropertyDescriptorImpl propertyDescriptor = new PropertyDescriptorForObjectImpl( - containingDeclaration, - annotationResolver.resolveAnnotationsWithoutArguments(scope, modifierList, trace), - resolveVisibilityFromModifiers(objectDeclaration, getDefaultVisibilityForObjectPropertyDescriptor(classDescriptor)), - JetPsiUtil.safeName(objectDeclaration.getName()), - classDescriptor - ); - propertyDescriptor.setType(getTypeForObjectDeclaration(classDescriptor), Collections.emptyList(), - getExpectedThisObjectIfNeeded(containingDeclaration), NO_RECEIVER_PARAMETER); - propertyDescriptor.initialize(null, null); - JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); - if (nameAsDeclaration != null) { - trace.record(BindingContext.OBJECT_DECLARATION, nameAsDeclaration, propertyDescriptor); - } - return propertyDescriptor; - } - - @NotNull - private static JetType getTypeForObjectDeclaration(@NotNull ClassDescriptor objectClassDescriptor) { - if (objectClassDescriptor.getKind() == ClassKind.ENUM_ENTRY) { - DeclarationDescriptor containingDeclaration = objectClassDescriptor.getContainingDeclaration().getContainingDeclaration(); - assert containingDeclaration instanceof ClassDescriptor; - ClassDescriptor enumClass = (ClassDescriptor) containingDeclaration; - assert enumClass.getKind() == ClassKind.ENUM_CLASS; - return enumClass.getDefaultType(); - } - return objectClassDescriptor.getDefaultType(); - } - - @NotNull - private VariableDescriptor resolveObjectDeclarationAsLocalVariable( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull JetClassOrObject objectDeclaration, - @NotNull ClassDescriptor classDescriptor, BindingTrace trace - ) { - VariableDescriptorImpl variableDescriptor = new LocalVariableDescriptorForObject( - containingDeclaration, - annotationResolver.getResolvedAnnotations(objectDeclaration.getModifierList(), trace), - JetPsiUtil.safeName(objectDeclaration.getName()), - classDescriptor); - JetObjectDeclarationName nameAsDeclaration = objectDeclaration.getNameAsDeclaration(); - if (nameAsDeclaration != null) { - trace.record(BindingContext.VARIABLE, nameAsDeclaration, variableDescriptor); - } - return variableDescriptor; - } - @NotNull public PropertyDescriptor resolvePropertyDescriptor( @NotNull DeclarationDescriptor containingDeclaration, @@ -895,7 +824,6 @@ public class DescriptorResolver { @NotNull BindingTrace trace, @NotNull DataFlowInfo dataFlowInfo ) { - JetModifierList modifierList = property.getModifierList(); boolean isVar = property.isVar(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index 33a385f3089..ff60d63381d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -241,12 +241,4 @@ public class ModifiersChecker { } return Visibilities.INTERNAL; } - - @NotNull - public static Visibility getDefaultVisibilityForObjectPropertyDescriptor(@NotNull ClassDescriptor objectClassDescriptor) { - if (objectClassDescriptor.getKind() == ClassKind.ENUM_ENTRY) { - return Visibilities.PUBLIC; - } - return Visibilities.INTERNAL; - } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java index aa6cd798384..543d3d4c687 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java @@ -88,9 +88,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito context.replaceScope(scope).replaceContextDependency(INDEPENDENT), scope.getContainingDeclaration(), declaration); ClassDescriptor classDescriptor = context.trace.getBindingContext().get(BindingContext.CLASS, declaration); if (classDescriptor != null) { - VariableDescriptor variableDescriptor = context.expressionTypingServices.getDescriptorResolver() - .resolveObjectDeclaration(scope, scope.getContainingDeclaration(), declaration, classDescriptor, context.trace); - scope.addVariableDescriptor(variableDescriptor); + scope.addClassifierDescriptor(classDescriptor); } return DataFlowUtils.checkStatementType(declaration, context, context.dataFlowInfo); }