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())
}
}