Quick Fixes: Support cross-language "Create from Usage" with Kotlin target
This commit is contained in:
@@ -310,6 +310,8 @@ class KtPsiFactory @JvmOverloads constructor(private val project: Project, val m
|
||||
return createProperty(text + " val x").modifierList!!
|
||||
}
|
||||
|
||||
fun createEmptyModifierList() = createModifierList(KtTokens.PRIVATE_KEYWORD).apply { firstChild.delete() }
|
||||
|
||||
fun createModifier(modifier: KtModifierKeywordToken): PsiElement {
|
||||
return createModifierList(modifier.value).getModifier(modifier)!!
|
||||
}
|
||||
|
||||
@@ -143,20 +143,20 @@ private val MODIFIERS_TO_REPLACE = mapOf(
|
||||
ACTUAL_KEYWORD to listOf(HEADER_KEYWORD, EXPECT_KEYWORD, IMPL_KEYWORD)
|
||||
)
|
||||
|
||||
private val MODIFIERS_ORDER = listOf(PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD, INTERNAL_KEYWORD,
|
||||
HEADER_KEYWORD, IMPL_KEYWORD, EXPECT_KEYWORD, ACTUAL_KEYWORD,
|
||||
FINAL_KEYWORD, OPEN_KEYWORD, ABSTRACT_KEYWORD, SEALED_KEYWORD,
|
||||
CONST_KEYWORD,
|
||||
EXTERNAL_KEYWORD,
|
||||
OVERRIDE_KEYWORD,
|
||||
LATEINIT_KEYWORD,
|
||||
TAILREC_KEYWORD,
|
||||
VARARG_KEYWORD,
|
||||
SUSPEND_KEYWORD,
|
||||
INNER_KEYWORD,
|
||||
ENUM_KEYWORD, ANNOTATION_KEYWORD,
|
||||
COMPANION_KEYWORD,
|
||||
INLINE_KEYWORD,
|
||||
INFIX_KEYWORD,
|
||||
OPERATOR_KEYWORD,
|
||||
DATA_KEYWORD)
|
||||
val MODIFIERS_ORDER = listOf(PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD, INTERNAL_KEYWORD,
|
||||
HEADER_KEYWORD, IMPL_KEYWORD, EXPECT_KEYWORD, ACTUAL_KEYWORD,
|
||||
FINAL_KEYWORD, OPEN_KEYWORD, ABSTRACT_KEYWORD, SEALED_KEYWORD,
|
||||
CONST_KEYWORD,
|
||||
EXTERNAL_KEYWORD,
|
||||
OVERRIDE_KEYWORD,
|
||||
LATEINIT_KEYWORD,
|
||||
TAILREC_KEYWORD,
|
||||
VARARG_KEYWORD,
|
||||
SUSPEND_KEYWORD,
|
||||
INNER_KEYWORD,
|
||||
ENUM_KEYWORD, ANNOTATION_KEYWORD,
|
||||
COMPANION_KEYWORD,
|
||||
INLINE_KEYWORD,
|
||||
INFIX_KEYWORD,
|
||||
OPERATOR_KEYWORD,
|
||||
DATA_KEYWORD)
|
||||
|
||||
@@ -411,18 +411,24 @@ fun KtLambdaArgument.getLambdaArgumentName(bindingContext: BindingContext): Name
|
||||
fun KtExpression.asAssignment(): KtBinaryExpression? =
|
||||
if (KtPsiUtil.isAssignment(this)) this as KtBinaryExpression else null
|
||||
|
||||
private fun KtDeclaration.modifierFromTokenSet(set: TokenSet): PsiElement? {
|
||||
val modifierList = modifierList ?: return null
|
||||
private fun KtModifierList.modifierFromTokenSet(set: TokenSet): PsiElement? {
|
||||
return set.types
|
||||
.asSequence()
|
||||
.map { modifierList.getModifier(it as KtModifierKeywordToken) }
|
||||
.map { getModifier(it as KtModifierKeywordToken) }
|
||||
.firstOrNull { it != null }
|
||||
|
||||
}
|
||||
|
||||
fun KtDeclaration.visibilityModifier() = modifierFromTokenSet(KtTokens.VISIBILITY_MODIFIERS)
|
||||
private fun KtModifierListOwner.modifierFromTokenSet(set: TokenSet) = modifierList?.modifierFromTokenSet(set)
|
||||
|
||||
fun KtDeclaration.visibilityModifierType(): KtModifierKeywordToken?
|
||||
fun KtModifierList.visibilityModifier() = modifierFromTokenSet(KtTokens.VISIBILITY_MODIFIERS)
|
||||
|
||||
fun KtModifierList.visibilityModifierType(): KtModifierKeywordToken?
|
||||
= visibilityModifier()?.node?.elementType as KtModifierKeywordToken?
|
||||
|
||||
fun KtModifierListOwner.visibilityModifier() = modifierList?.modifierFromTokenSet(KtTokens.VISIBILITY_MODIFIERS)
|
||||
|
||||
fun KtModifierListOwner.visibilityModifierType(): KtModifierKeywordToken?
|
||||
= visibilityModifier()?.node?.elementType as KtModifierKeywordToken?
|
||||
|
||||
private val MODALITY_MODIFIERS = TokenSet.create(
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.constants.ErrorValue
|
||||
|
||||
private val JVM_STATIC_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmStatic")
|
||||
val JVM_STATIC_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmStatic")
|
||||
|
||||
val JVM_FIELD_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.JvmField")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user