diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index 64760e040f6..0031cee29b1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -161,6 +161,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { KotlinTypeInfo typeInfo = callExpressionResolver.getSimpleNameExpressionTypeInfo(expression, null, null, context); checkNull(expression, context, typeInfo.getType()); + components.constantExpressionEvaluator.evaluateExpression(expression, context.trace, context.expectedType); return components.dataFlowAnalyzer.checkType(typeInfo, expression, context); // TODO : Extensions to this } diff --git a/compiler/testData/codegen/bytecodeText/whenEnumOptimization/importedEnumEntry.kt b/compiler/testData/codegen/bytecodeText/whenEnumOptimization/importedEnumEntry.kt new file mode 100644 index 00000000000..17176b04d73 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/whenEnumOptimization/importedEnumEntry.kt @@ -0,0 +1,13 @@ +import Color.RED + +enum class Color { RED, GREEN, BLUE } + +fun fifth(arg: Color) = when (arg) { + RED -> 1 + Color.GREEN -> 2 + Color.BLUE -> 3 +} + + +// 1 TABLESWITCH +// 0 LOOKUPSWITCH \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/when/When.kt b/compiler/testData/diagnostics/tests/when/When.kt index f887f0ebb4b..e4b246c6854 100644 --- a/compiler/testData/diagnostics/tests/when/When.kt +++ b/compiler/testData/diagnostics/tests/when/When.kt @@ -26,7 +26,7 @@ fun test() { when (x) { s -> 1 - "" -> 1 + "" -> 1 x -> 1 1 -> 1 } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index f530c5d533c..c30ac648e2d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1429,6 +1429,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("importedEnumEntry.kt") + public void testImportedEnumEntry() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/whenEnumOptimization/importedEnumEntry.kt"); + doTest(fileName); + } + @TestMetadata("manyWhensWithinClass.kt") public void testManyWhensWithinClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/whenEnumOptimization/manyWhensWithinClass.kt"); diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log b/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log index ff1a4bbd2cb..6475e307e9f 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log +++ b/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryAdded/build.log @@ -16,6 +16,7 @@ Cleaning output files: out/production/module/GetRandomEnumEntryKt.class out/production/module/META-INF/module.kotlin_module out/production/module/UseEnumImplicitlyKt.class + out/production/module/UseKt$WhenMappings.class out/production/module/UseKt.class End of files Compiling files: diff --git a/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log b/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log index 41bafdcc2fb..e18e538942d 100644 --- a/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log +++ b/jps-plugin/testData/incremental/classHierarchyAffected/enumEntryRemoved/build.log @@ -16,6 +16,7 @@ Cleaning output files: out/production/module/GetRandomEnumEntryKt.class out/production/module/META-INF/module.kotlin_module out/production/module/UseEnumImplicitlyKt.class + out/production/module/UseKt$WhenMappings.class out/production/module/UseKt.class End of files Compiling files: diff --git a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryAdded/build.log b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryAdded/build.log index 43d2c5501a4..f9695c15cb5 100644 --- a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryAdded/build.log +++ b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryAdded/build.log @@ -13,6 +13,7 @@ End of files Cleaning output files: out/production/module/META-INF/module.kotlin_module + out/production/module/UseKt$WhenMappings.class out/production/module/UseKt.class End of files Compiling files: diff --git a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryRemoved/build.log b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryRemoved/build.log index fbad2c8600c..36bbe755ca3 100644 --- a/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryRemoved/build.log +++ b/jps-plugin/testData/incremental/withJava/javaUsedInKotlin/enumEntryRemoved/build.log @@ -10,6 +10,7 @@ Compiling files: End of files Cleaning output files: out/production/module/META-INF/module.kotlin_module + out/production/module/UseKt$WhenMappings.class out/production/module/UseKt.class End of files Compiling files: diff --git a/plugins/uast-kotlin/testData/lint/alarm.kt b/plugins/uast-kotlin/testData/lint/alarm.kt index fc067effaad..eaa7dfb1f70 100644 --- a/plugins/uast-kotlin/testData/lint/alarm.kt +++ b/plugins/uast-kotlin/testData/lint/alarm.kt @@ -12,10 +12,9 @@ class TestAlarm { alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 5000, // ERROR OtherClass.MY_INTERVAL, null); // ERROR - // Check value flow analysis, currently unsupported val interval = 10; val interval2 = 2L * interval; - alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 5000, interval2, null); // ERROR + alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, 5000, interval2, null); // ERROR } private object OtherClass { diff --git a/plugins/uast-kotlin/testData/lint/log.kt b/plugins/uast-kotlin/testData/lint/log.kt index 7ce3a11e3c9..e17ec748260 100644 --- a/plugins/uast-kotlin/testData/lint/log.kt +++ b/plugins/uast-kotlin/testData/lint/log.kt @@ -26,8 +26,8 @@ class LogTest { } fun checkWrongTag(tag: String) { - if (Log.isLoggable(TAG1, Log.DEBUG)) { - Log.d(TAG2, "message") // warn: mismatched tags! + if (Log.isLoggable(TAG1, Log.DEBUG)) { + Log.d(TAG2, "message") // warn: mismatched tags! } if (Log.isLoggable("my_tag", Log.DEBUG)) { Log.d("other_tag", "message") // warn: mismatched tags! @@ -50,12 +50,12 @@ class LogTest { Log.d(TAG1, "message") // ok: short Log.d(TAG22, "message") // ok: short Log.d(TAG23, "message") // ok: threshold - Log.d(TAG24, "message") // error: too long - Log.d(LONG_TAG, "message") // error: way too long + Log.d(TAG24, "message") // error: too long + Log.d(LONG_TAG, "message") // error: way too long // Locally defined variable tags val LOCAL_TAG = "MyReallyReallyReallyReallyReallyLongTag" - Log.d(LOCAL_TAG, "message") // error: too long + Log.d(LOCAL_TAG, "message") // error: too long // Concatenated tags Log.d(TAG22 + TAG1, "message") // error: too long