From 7cf9eeee6537feb1a7f3cc6089042734fb68a407 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 11 Jul 2012 19:43:43 +0400 Subject: [PATCH] Class object handling refactored to emphasize the structure --- .../resolve/lazy/LazyClassDescriptor.java | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java index 79a6594d90a..50550019e3f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyClassDescriptor.java @@ -20,6 +20,7 @@ import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; @@ -205,31 +206,35 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes if (!classObjectDescriptorResolved) { JetClassObject classObject = declarationProvider.getOwnerInfo().getClassObject(); - boolean isEnum = getKind() == ClassKind.ENUM_CLASS; - JetClassLikeInfo classObjectInfo = null; - if (classObject != null) { - JetObjectDeclaration objectDeclaration = classObject.getObjectDeclaration(); - if (objectDeclaration != null) { - classObjectInfo = JetClassInfoUtil.createClassLikeInfo(objectDeclaration); - } - } - else { - if (isEnum) { - // Enum classes always have class objects, and enum constants are their members - classObjectInfo = onlyEnumEntries(originalClassInfo); - } - } - - + JetClassLikeInfo classObjectInfo = getClassObjectInfo(classObject); if (classObjectInfo != null) { - classObjectDescriptor = new LazyClassDescriptor(resolveSession, this, isEnum ? Name.special("") : JetPsiUtil.NO_NAME_PROVIDED, - classObjectInfo); + Name classObjectName = getKind() == ClassKind.ENUM_CLASS + ? Name.special("") + : JetPsiUtil.NO_NAME_PROVIDED; + classObjectDescriptor = new LazyClassDescriptor(resolveSession, this, classObjectName, classObjectInfo); } classObjectDescriptorResolved = true; } return classObjectDescriptor; } + @Nullable + private JetClassLikeInfo getClassObjectInfo(JetClassObject classObject) { + if (classObject != null) { + JetObjectDeclaration objectDeclaration = classObject.getObjectDeclaration(); + if (objectDeclaration != null) { + return JetClassInfoUtil.createClassLikeInfo(objectDeclaration); + } + } + else { + if (getKind() == ClassKind.ENUM_CLASS) { + // Enum classes always have class objects, and enum constants are their members + return onlyEnumEntries(originalClassInfo); + } + } + return null; + } + @NotNull @Override public ClassKind getKind() {