package com.intellij.codeInspection.tests.kotlin import com.intellij.jvm.analysis.internal.testFramework.JavaApiUsageInspectionTestBase import com.intellij.jvm.analysis.testFramework.JvmLanguage import com.intellij.pom.java.LanguageLevel import org.jetbrains.kotlin.idea.test.ExpectedPluginModeProvider import org.jetbrains.kotlin.idea.test.setUpWithKotlinPlugin abstract class KotlinJavaApiUsageInspectionTest : JavaApiUsageInspectionTestBase(), ExpectedPluginModeProvider { override fun setUp() { setUpWithKotlinPlugin(testRootDisposable) { super.setUp() } } fun `test constructor`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_4) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ fun foo() { throw IllegalArgumentException("", RuntimeException()); } """.trimIndent()) } fun `test ignored`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.addClass(""" package java.awt.geom; public class GeneralPath { public void moveTo(int x, int y) { } } """.trimIndent()) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ import java.awt.geom.GeneralPath fun foo() { val path = GeneralPath() path.moveTo(0, 0) } """.trimIndent()) } fun `test qualified reference`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ import java.nio.charset.StandardCharsets fun main() { StandardCharsets.UTF_8 } """.trimIndent()) } fun `test reference in callable reference`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) val withErrorMessage = "\"default charset \${StandardCharsets.UTF_8}\"::toString" myFixture.testHighlighting(JvmLanguage.KOTLIN, """ import java.nio.charset.StandardCharsets fun main() { ${withErrorMessage} } """.trimIndent()) ""::toString } fun `test annotation`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ @file:Suppress("UNUSED_PARAMETER") class Annotation { @SafeVarargs fun foo(vararg ls: List) { } } """.trimIndent()) } fun `test override annotation`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ @file:Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") import java.util.Map abstract class OverrideAnnotation : Map { override fun getOrDefault(key: Any?, defaultValue: String?): String { return "" } } """.trimIndent()) } fun `test default methods`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ @file:Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN", "UNUSED_VARIABLE") import java.util.Iterator class DefaultMethods : Iterator { override fun hasNext(): Boolean { return false } override fun next(): String { return "" } class T : Iterator { override fun hasNext(): Boolean { return false } override fun next(): String { return "" } override fun remove() { } } init { val it = object : Iterator { override fun hasNext(): Boolean { return false } override fun next(): String { return "" } } } } """.trimIndent()) } fun `test single method multiple overrides`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ class CustomList : java.util.AbstractList() { override val size: Int = 0 override fun get(index: Int): Int = 0 override fun spliterator(): java.util.Spliterator = java.util.Spliterators.spliterator(this, 0) } """.trimIndent()) } fun `test raw inherit from newly generified`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.addClass(""" package javax.swing; public class AbstractListModel {} """.trimIndent()) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ class RawInheritFromNewlyGenerified { private lateinit var myModel: AbstractCCM } abstract class AbstractCCM : javax.swing.AbstractListModel() { } """.trimIndent()) } fun `test generified`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_6) myFixture.addClass(""" package javax.swing; public interface ListModel { } """.trimIndent()) myFixture.addClass(""" package javax.swing; public class AbstractListModel implements ListModel { } """.trimIndent()) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ import javax.swing.AbstractListModel abstract class AbstractCCM : AbstractListModel() { } """.trimIndent()) } fun `test no highlighting in kdoc`() { myFixture.setLanguageLevel(LanguageLevel.JDK_1_7) myFixture.testHighlighting(JvmLanguage.KOTLIN, """ class Javadoc { /** * [java.util.function.Predicate] */ fun test() { return } } """.trimIndent()) } }