From 71102627c0a7979402852ec92dbcac3b00340b45 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Wed, 18 Apr 2012 19:59:15 +0400 Subject: [PATCH] 'isClassObject' method moved from CodegenUtil to DescriptorUtils --- .../jetbrains/jet/codegen/ClosureAnnotator.java | 3 ++- .../org/jetbrains/jet/codegen/CodegenUtil.java | 15 --------------- .../jetbrains/jet/codegen/ExpressionCodegen.java | 5 +++-- .../org/jetbrains/jet/codegen/JetTypeMapper.java | 2 +- .../jetbrains/jet/codegen/PropertyCodegen.java | 3 ++- .../jet/lang/resolve/DescriptorUtils.java | 14 ++++++++++++++ 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java index 91a827e4e66..d4d3242be61 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java @@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.FqName; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -118,7 +119,7 @@ public class ClosureAnnotator { } public boolean hasThis0(ClassDescriptor classDescriptor) { - if(CodegenUtil.isClassObject(classDescriptor)) + if(DescriptorUtils.isClassObject(classDescriptor)) return false; ClassDescriptor other = enclosing.get(classDescriptor); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 38e20c4a7dd..5188c638b1f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -42,21 +42,6 @@ public class CodegenUtil { public static boolean isInterface(JetType type) { return isInterface(type.getConstructor().getDeclarationDescriptor()); } - - public static boolean isClassObject(DeclarationDescriptor descriptor) { - if(descriptor instanceof ClassDescriptor) { - ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; - if(classDescriptor.getKind() == ClassKind.OBJECT) { - if(classDescriptor.getContainingDeclaration() instanceof ClassDescriptor) { - ClassDescriptor containingDeclaration = (ClassDescriptor) classDescriptor.getContainingDeclaration(); - if(classDescriptor.getDefaultType().equals(containingDeclaration.getClassObjectType())) { - return true; - } - } - } - } - return false; - } public static SimpleFunctionDescriptor createInvoke(FunctionDescriptor fd) { int arity = fd.getValueParameters().size(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 96db28b8a60..7637d081dbf 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1021,7 +1021,8 @@ public class ExpressionCodegen extends JetVisitor { final boolean directToField = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER && contextKind() != OwnerKind.TRAIT_IMPL ; JetExpression r = getReceiverForSelector(expression); final boolean isSuper = r instanceof JetSuperExpression; - if(propertyDescriptor.getVisibility() == Visibilities.PRIVATE && !CodegenUtil.isClassObject(propertyDescriptor.getContainingDeclaration())) { + if(propertyDescriptor.getVisibility() == Visibilities.PRIVATE && !DescriptorUtils + .isClassObject(propertyDescriptor.getContainingDeclaration())) { if(context.getClassOrNamespaceDescriptor() != propertyDescriptor.getContainingDeclaration()) { DeclarationDescriptor enclosed = propertyDescriptor.getContainingDeclaration(); if(enclosed != null && enclosed != context.getThisDescriptor()) { @@ -1374,7 +1375,7 @@ public class ExpressionCodegen extends JetVisitor { Type exprType = asmType(descriptor.getType()); ClassReceiver classReceiver = (ClassReceiver) descriptor; ClassDescriptor classReceiverDeclarationDescriptor = (ClassDescriptor) classReceiver.getDeclarationDescriptor(); - if(CodegenUtil.isClassObject(classReceiverDeclarationDescriptor)) { + if(DescriptorUtils.isClassObject(classReceiverDeclarationDescriptor)) { ClassDescriptor containingDeclaration = (ClassDescriptor) classReceiverDeclarationDescriptor.getContainingDeclaration(); Type classObjType = typeMapper.mapType(containingDeclaration.getDefaultType(), MapTypeMode.IMPL); v.getstatic(classObjType.getInternalName(), "$classobj", exprType.getDescriptor()); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index 907c5341d3b..3508bb9eb03 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -835,7 +835,7 @@ public class JetTypeMapper { return ACC_PROTECTED; } else if (p.getVisibility() == Visibilities.PRIVATE) { - if(CodegenUtil.isClassObject(declaration)) { + if(DescriptorUtils.isClassObject(declaration)) { return defaultFlags; } return ACC_PRIVATE; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java index 1e2bcb8886f..f8070e10c35 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PropertyCodegen.java @@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; @@ -121,7 +122,7 @@ public class PropertyCodegen { } private static boolean isExternallyAccessible(PropertyDescriptor p) { - return p.getVisibility() != Visibilities.PRIVATE || CodegenUtil.isClassObject(p.getContainingDeclaration()); + return p.getVisibility() != Visibilities.PRIVATE || DescriptorUtils.isClassObject(p.getContainingDeclaration()); } private void generateSetter(JetProperty p, PropertyDescriptor propertyDescriptor) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 8827c70dd77..5ce30d66e3f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -314,4 +314,18 @@ public class DescriptorUtils { return namespaceDescriptor.getContainingDeclaration() instanceof ModuleDescriptor; } + public static boolean isClassObject(@NotNull DeclarationDescriptor descriptor) { + if(descriptor instanceof ClassDescriptor) { + ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; + if(classDescriptor.getKind() == ClassKind.OBJECT) { + if(classDescriptor.getContainingDeclaration() instanceof ClassDescriptor) { + ClassDescriptor containingDeclaration = (ClassDescriptor) classDescriptor.getContainingDeclaration(); + if(classDescriptor.getDefaultType().equals(containingDeclaration.getClassObjectType())) { + return true; + } + } + } + } + return false; + } }