three utility functions moved from CodegenUtil to CodegenBinding

This commit is contained in:
Alex Tkachman
2012-08-28 14:06:14 +03:00
parent 16845f62d6
commit 36ae1079d6
6 changed files with 34 additions and 32 deletions
@@ -276,7 +276,7 @@ public class ClosureCodegen {
: typeMapper.mapType(((VariableDescriptor) descriptor).getType(), MapTypeMode.VALUE);
args.add(new Pair<String, Type>("$" + 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,
@@ -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<String> existingNames) {
String prefix = "tmp";
@@ -246,7 +220,7 @@ public class CodegenUtil {
}
}
public static <T> T peekFromStack(com.intellij.util.containers.Stack<T> stack) {
public static <T> T peekFromStack(Stack<T> stack) {
return stack.empty() ? null : stack.peek();
}
}
@@ -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++);
@@ -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<JvmMethodParameterSignature> types = superCallable.getSignature().getKotlinParameterTypes();
@@ -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<JetFile> 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;
}
}
@@ -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