From f8d19718c8662756023db77334933d2b82f48d1d Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Fri, 20 Jul 2018 01:36:42 +0300 Subject: [PATCH] Fix exception on trying to evaluate red code with inline classes #KT-25600 Fixed --- .../constants/evaluate/ConstantExpressionEvaluator.kt | 2 +- .../callDefaultConstructorOfUnsignedType.kt | 1 + .../callDefaultConstructorOfUnsignedType.txt | 3 +++ .../checkers/DiagnosticsWithUnsignedTypesGenerated.java | 5 +++++ 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.kt create mode 100644 compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index 99309422e45..26dde803f2f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -810,7 +810,7 @@ private class ConstantExpressionEvaluatorVisitor( val underlyingType = classDescriptor.underlyingRepresentation()?.type ?: return null - val argument = valueArguments.values.single().arguments.single() + val argument = valueArguments.values.singleOrNull()?.arguments?.singleOrNull() ?: return null val argumentExpression = argument.getArgumentExpression() ?: return null val compileTimeConstant = evaluate(argumentExpression, underlyingType) diff --git a/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.kt b/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.kt new file mode 100644 index 00000000000..dc90b5324df --- /dev/null +++ b/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.kt @@ -0,0 +1 @@ +val foo = UInt() \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.txt b/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.txt new file mode 100644 index 00000000000..19e90e69134 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.txt @@ -0,0 +1,3 @@ +package + +public val foo: kotlin.UInt diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithUnsignedTypesGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithUnsignedTypesGenerated.java index c5f7c870cee..d61a2778c40 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithUnsignedTypesGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsWithUnsignedTypesGenerated.java @@ -34,6 +34,11 @@ public class DiagnosticsWithUnsignedTypesGenerated extends AbstractDiagnosticsWi runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/allowedVarargsOfUnsignedTypes.kt"); } + @TestMetadata("callDefaultConstructorOfUnsignedType.kt") + public void testCallDefaultConstructorOfUnsignedType() throws Exception { + runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/callDefaultConstructorOfUnsignedType.kt"); + } + @TestMetadata("explicitUnsignedLongTypeCheck.kt") public void testExplicitUnsignedLongTypeCheck() throws Exception { runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/explicitUnsignedLongTypeCheck.kt");