From 36ae1079d65c1c2926588fbc9ddebc9fc5262057 Mon Sep 17 00:00:00 2001 From: Alex Tkachman Date: Tue, 28 Aug 2012 14:06:14 +0300 Subject: [PATCH] three utility functions moved from CodegenUtil to CodegenBinding --- .../jetbrains/jet/codegen/ClosureCodegen.java | 2 +- .../jetbrains/jet/codegen/CodegenUtil.java | 30 ++----------------- .../jet/codegen/FunctionCodegen.java | 4 ++- .../jetbrains/jet/codegen/JetTypeMapper.java | 2 +- .../jet/codegen/context/CodegenBinding.java | 26 ++++++++++++++++ .../jet/codegen/context/LocalLookup.java | 2 +- 6 files changed, 34 insertions(+), 32 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java index e23220a3c66..b759f9352ea 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java @@ -276,7 +276,7 @@ public class ClosureCodegen { : typeMapper.mapType(((VariableDescriptor) descriptor).getType(), MapTypeMode.VALUE); args.add(new Pair("$" + descriptor.getName().getName(), type)); } - else if (CodegenUtil.isNamedFun(descriptor, state.getBindingContext()) && + else if (isNamedFun(state.getBindingContext(), descriptor) && descriptor.getContainingDeclaration() instanceof FunctionDescriptor) { final Type type = classNameForAnonymousClass(bindingContext, diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 6cdf0444b70..4eba9b6dbcb 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -17,8 +17,7 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.util.Pair; -import com.intellij.psi.PsiElement; -import com.intellij.util.containers.*; +import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NotNull; import org.jetbrains.asm4.MethodVisitor; import org.jetbrains.asm4.Type; @@ -31,7 +30,6 @@ 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.BindingContextUtils; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames; import org.jetbrains.jet.lang.resolve.name.Name; @@ -92,30 +90,6 @@ public class CodegenUtil { !(myClass.getParent() instanceof JetClassObject); } - public static boolean isObjectLiteral(ClassDescriptor declaration, BindingContext bindingContext) { - PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, declaration); - if (psiElement instanceof JetObjectDeclaration && ((JetObjectDeclaration) psiElement).isObjectLiteral()) { - return true; - } - return false; - } - - public static boolean isLocalFun(DeclarationDescriptor fd, BindingContext bindingContext) { - PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, fd); - if (psiElement instanceof JetNamedFunction && psiElement.getParent() instanceof JetBlockExpression) { - return true; - } - return false; - } - - - public static boolean isNamedFun(DeclarationDescriptor fd, BindingContext bindingContext) { - PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, fd); - if (psiElement instanceof JetNamedFunction) { - return true; - } - return false; - } public static String generateTmpVariableName(Collection existingNames) { String prefix = "tmp"; @@ -246,7 +220,7 @@ public class CodegenUtil { } } - public static T peekFromStack(com.intellij.util.containers.Stack stack) { + public static T peekFromStack(Stack stack) { return stack.empty() ? null : stack.peek(); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 5ec69a6d8b3..7955fc1e504 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -25,6 +25,7 @@ import org.jetbrains.asm4.MethodVisitor; import org.jetbrains.asm4.Type; import org.jetbrains.asm4.commons.InstructionAdapter; import org.jetbrains.asm4.commons.Method; +import org.jetbrains.jet.codegen.context.CodegenBinding; import org.jetbrains.jet.codegen.context.CodegenContext; import org.jetbrains.jet.codegen.signature.JvmMethodSignature; import org.jetbrains.jet.codegen.signature.kotlin.JetMethodAnnotationWriter; @@ -43,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import java.util.*; import static org.jetbrains.asm4.Opcodes.*; +import static org.jetbrains.jet.codegen.context.CodegenBinding.*; /** * @author max @@ -299,7 +301,7 @@ public class FunctionCodegen { mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++); } else if (fun instanceof JetFunctionLiteralExpression || - CodegenUtil.isLocalFun(functionDescriptor, state.getBindingContext())) { + isLocalFun(state.getBindingContext(), functionDescriptor)) { Type type = state.getInjector().getJetTypeMapper().mapType( context.getThisDescriptor().getDefaultType(), MapTypeMode.VALUE); mv.visitLocalVariable("this", type.getDescriptor(), null, methodBegin, methodEnd, k++); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index a35573cfba8..ea7a3a1ee47 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -907,7 +907,7 @@ public class JetTypeMapper { if(superDescriptor instanceof ConstructorDescriptor) { final ConstructorDescriptor superConstructor = (ConstructorDescriptor) superDescriptor; - if (CodegenUtil.isObjectLiteral(descriptor.getContainingDeclaration(), bindingContext)) { + if (isObjectLiteral(bindingContext, descriptor.getContainingDeclaration())) { CallableMethod superCallable = mapToCallableMethod(superConstructor, getCalculatedClosure(superConstructor.getContainingDeclaration())); final List types = superCallable.getSignature().getKotlinParameterTypes(); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenBinding.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenBinding.java index 45591138f09..ab41d77fe84 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenBinding.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenBinding.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.codegen.context; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.CodegenUtil; @@ -23,6 +24,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.BindingContextUtils; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.JvmClassName; @@ -214,4 +216,28 @@ public class CodegenBinding { final Collection jetFiles = bindingContext.get(NAMESPACE_TO_FILES, namespaceDescriptor); return jetFiles != null && jetFiles.size() > 1; } + + public static boolean isObjectLiteral(BindingContext bindingContext, ClassDescriptor declaration) { + PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, declaration); + if (psiElement instanceof JetObjectDeclaration && ((JetObjectDeclaration) psiElement).isObjectLiteral()) { + return true; + } + return false; + } + + public static boolean isLocalFun(BindingContext bindingContext, DeclarationDescriptor fd) { + PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, fd); + if (psiElement instanceof JetNamedFunction && psiElement.getParent() instanceof JetBlockExpression) { + return true; + } + return false; + } + + public static boolean isNamedFun(BindingContext bindingContext, DeclarationDescriptor fd) { + PsiElement psiElement = BindingContextUtils.descriptorToDeclaration(bindingContext, fd); + if (psiElement instanceof JetNamedFunction) { + return true; + } + return false; + } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java index 9c61a95052a..846dd41bec6 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/LocalLookup.java @@ -65,7 +65,7 @@ public interface LocalLookup { LOCAL_NAMED_FUNCTION { @Override public boolean isCase(DeclarationDescriptor d, GenerationState state) { - return CodegenUtil.isNamedFun(d, state.getBindingContext()) && (d.getContainingDeclaration() instanceof FunctionDescriptor); + return isNamedFun(state.getBindingContext(), d) && (d.getContainingDeclaration() instanceof FunctionDescriptor); } @Override