Introduced ParameterDescriptor type

This commit is contained in:
Michael Bogdanov
2015-04-23 14:00:38 +03:00
parent 53b8a1d56e
commit df2900c4e4
9 changed files with 49 additions and 38 deletions
@@ -22,7 +22,6 @@ import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.CodegenUtil;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.codegen.*;
import org.jetbrains.kotlin.codegen.context.CodegenContext;
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext;
@@ -463,8 +462,8 @@ public class InlineCodegen extends CallGenerator {
if (field instanceof StackValue.Field) {
DeclarationDescriptor varDescriptor = ((StackValue.Field) field).descriptor;
//check that variable is inline function parameter
return !(varDescriptor instanceof CallableDescriptor &&
InlineUtil.isInlineLambdaParameter((CallableDescriptor) varDescriptor) &&
return !(varDescriptor instanceof ParameterDescriptor &&
InlineUtil.isInlineLambdaParameter((ParameterDescriptor) varDescriptor) &&
InlineUtil.isInline(varDescriptor.getContainingDeclaration()));
}
@@ -218,11 +218,8 @@ class InlineChecker implements CallChecker {
}
}
private static boolean isInlinableParameter(@NotNull CallableDescriptor descriptor) {
JetType type = descriptor.getReturnType();
return type != null &&
InlineUtil.isInlineLambdaParameter(descriptor) &&
!type.isMarkedNullable();
private static boolean isInlinableParameter(@NotNull ParameterDescriptor descriptor) {
return InlineUtil.isInlineLambdaParameter(descriptor) && !descriptor.getType().isMarkedNullable();
}
private static boolean isInvokeOrInlineExtension(@NotNull CallableDescriptor descriptor) {
@@ -132,14 +132,13 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz
}
public static boolean checkInlinableParameter(
@NotNull CallableDescriptor parameter,
@NotNull ParameterDescriptor parameter,
@NotNull JetElement expression,
@NotNull CallableDescriptor functionDescriptor,
@Nullable BindingTrace trace
) {
JetType type = parameter.getReturnType();
if (type != null && InlineUtil.isInlineLambdaParameter(parameter)) {
if (type.isMarkedNullable()) {
if (InlineUtil.isInlineLambdaParameter(parameter)) {
if (parameter.getType().isMarkedNullable()) {
if (trace != null) {
trace.report(Errors.NULLABLE_INLINE_PARAMETER.on(expression, expression, functionDescriptor));
}
@@ -35,16 +35,13 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.constants.ArrayValue;
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
import org.jetbrains.kotlin.resolve.constants.EnumValue;
import org.jetbrains.kotlin.types.JetType;
import static kotlin.KotlinPackage.firstOrNull;
public class InlineUtil {
public static boolean isInlineLambdaParameter(@NotNull CallableDescriptor valueParameterOrReceiver) {
JetType type = valueParameterOrReceiver.getOriginal().getReturnType();
return type != null &&
!KotlinBuiltIns.isNoinline(valueParameterOrReceiver) &&
KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(type);
public static boolean isInlineLambdaParameter(@NotNull ParameterDescriptor valueParameterOrReceiver) {
return !KotlinBuiltIns.isNoinline(valueParameterOrReceiver) &&
KotlinBuiltIns.isExactFunctionOrExtensionFunctionType(valueParameterOrReceiver.getOriginal().getType());
}
public static boolean isInline(@Nullable DeclarationDescriptor descriptor) {