KtLightMemberModifierList:hasExplicitModifier("default") returns false
#KT-18070 Fixed
This commit is contained in:
@@ -79,6 +79,7 @@ private class KtLightMemberModifierList(
|
|||||||
) : KtLightModifierList<KtLightMember<*>>(owner) {
|
) : KtLightModifierList<KtLightMember<*>>(owner) {
|
||||||
override fun hasModifierProperty(name: String) = when {
|
override fun hasModifierProperty(name: String) = when {
|
||||||
name == PsiModifier.ABSTRACT && isImplementationInInterface() -> false
|
name == PsiModifier.ABSTRACT && isImplementationInInterface() -> false
|
||||||
|
// pretend this method behaves like a default method
|
||||||
name == PsiModifier.DEFAULT && isImplementationInInterface() -> true
|
name == PsiModifier.DEFAULT && isImplementationInInterface() -> true
|
||||||
dummyDelegate != null -> {
|
dummyDelegate != null -> {
|
||||||
when {
|
when {
|
||||||
@@ -90,6 +91,10 @@ private class KtLightMemberModifierList(
|
|||||||
else -> clsDelegate.hasModifierProperty(name)
|
else -> clsDelegate.hasModifierProperty(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun hasExplicitModifier(name: String) =
|
||||||
|
// kotlin methods can't be truly default atm, that way we can avoid being reported on by diagnostics, namely android lint
|
||||||
|
if (name == PsiModifier.DEFAULT) false else super.hasExplicitModifier(name)
|
||||||
|
|
||||||
private fun isMethodOverride() = owner is KtLightMethod && owner.kotlinOrigin?.hasModifier(KtTokens.OVERRIDE_KEYWORD) ?: false
|
private fun isMethodOverride() = owner is KtLightMethod && owner.kotlinOrigin?.hasModifier(KtTokens.OVERRIDE_KEYWORD) ?: false
|
||||||
|
|
||||||
private fun isImplementationInInterface()
|
private fun isImplementationInInterface()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.jetbrains.uast.test.kotlin
|
package org.jetbrains.uast.test.kotlin
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiModifier
|
||||||
import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry
|
import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry
|
||||||
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
import org.jetbrains.kotlin.psi.KtStringTemplateExpression
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
|
||||||
@@ -53,4 +54,12 @@ class KotlinUastApiTest : AbstractKotlinUastTest() {
|
|||||||
assertEquals(file.psi, xyzzy.nameIdentifier!!.containingFile)
|
assertEquals(file.psi, xyzzy.nameIdentifier!!.containingFile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test fun testInterfaceMethodWithBody() {
|
||||||
|
doTest("DefaultImpls") { _, file ->
|
||||||
|
val bar = file.findElementByText<UMethod>("fun bar() = \"Hello!\"")
|
||||||
|
assertFalse(bar.containingFile.text!!, bar.psi.modifierList.hasExplicitModifier(PsiModifier.DEFAULT))
|
||||||
|
assertTrue(bar.containingFile.text!!, bar.psi.modifierList.hasModifierProperty(PsiModifier.DEFAULT))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user