Generate enum entries in create actual / expected fixes as all other
This makes code a bit cleaner
This commit is contained in:
@@ -200,12 +200,7 @@ internal fun KtPsiFactory.generateClassOrObjectByExpectedClass(
|
||||
|
||||
val actualClass = createClassCopyByText(expectedClass)
|
||||
actualClass.declarations.forEach {
|
||||
if (it.exists()) {
|
||||
it.delete()
|
||||
return@forEach
|
||||
}
|
||||
when (it) {
|
||||
is KtEnumEntry -> return@forEach
|
||||
is KtClassOrObject -> it.delete()
|
||||
is KtCallableDeclaration -> it.delete()
|
||||
}
|
||||
@@ -229,17 +224,16 @@ internal fun KtPsiFactory.generateClassOrObjectByExpectedClass(
|
||||
}
|
||||
}
|
||||
}
|
||||
actualClass.replaceExpectModifier(actualNeeded)
|
||||
if (actualClass !is KtEnumEntry) {
|
||||
actualClass.replaceExpectModifier(actualNeeded)
|
||||
}
|
||||
|
||||
declLoop@ for (expectedDeclaration in expectedClass.declarations.filter { !it.exists() }) {
|
||||
val descriptor = expectedDeclaration.toDescriptor() ?: continue
|
||||
val actualDeclaration: KtDeclaration = when (expectedDeclaration) {
|
||||
is KtClassOrObject ->
|
||||
if (expectedDeclaration !is KtEnumEntry) {
|
||||
generateClassOrObjectByExpectedClass(project, expectedDeclaration, actualNeeded = true)
|
||||
} else {
|
||||
continue@declLoop
|
||||
}
|
||||
is KtClassOrObject -> {
|
||||
generateClassOrObjectByExpectedClass(project, expectedDeclaration, actualNeeded = true)
|
||||
}
|
||||
is KtCallableDeclaration -> {
|
||||
when (expectedDeclaration) {
|
||||
is KtFunction -> generateFunction(project, expectedDeclaration, descriptor as FunctionDescriptor, actualClass)
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction
|
||||
import org.jetbrains.kotlin.idea.refactoring.introduce.showErrorHint
|
||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
||||
import org.jetbrains.kotlin.idea.util.hasDeclarationOf
|
||||
import org.jetbrains.kotlin.idea.util.isEffectivelyActual
|
||||
import org.jetbrains.kotlin.idea.util.liftToExpected
|
||||
import org.jetbrains.kotlin.idea.util.module
|
||||
import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName
|
||||
@@ -188,7 +189,6 @@ private fun KtPsiFactory.generateClassOrObjectByActualClass(
|
||||
val expectedClass = createClassCopyByText(actualClass)
|
||||
expectedClass.declarations.forEach {
|
||||
when (it) {
|
||||
is KtEnumEntry -> return@forEach
|
||||
is KtClassOrObject -> it.delete()
|
||||
is KtCallableDeclaration -> it.delete()
|
||||
is KtAnonymousInitializer -> it.delete()
|
||||
@@ -214,14 +214,11 @@ private fun KtPsiFactory.generateClassOrObjectByActualClass(
|
||||
|
||||
declLoop@ for (actualDeclaration in actualClass.declarations) {
|
||||
val descriptor = actualDeclaration.toDescriptor() ?: continue
|
||||
if (!actualDeclaration.hasActualModifier()) continue@declLoop
|
||||
if (!actualDeclaration.isEffectivelyActual()) continue@declLoop
|
||||
val expectedDeclaration: KtDeclaration = when (actualDeclaration) {
|
||||
is KtClassOrObject ->
|
||||
if (actualDeclaration !is KtEnumEntry) {
|
||||
generateClassOrObjectByActualClass(project, actualDeclaration, outerExpectedClasses + expectedClass)
|
||||
} else {
|
||||
continue@declLoop
|
||||
}
|
||||
is KtClassOrObject -> {
|
||||
generateClassOrObjectByActualClass(project, actualDeclaration, outerExpectedClasses + expectedClass)
|
||||
}
|
||||
is KtCallableDeclaration -> {
|
||||
when (actualDeclaration) {
|
||||
is KtFunction ->
|
||||
|
||||
@@ -49,14 +49,14 @@ fun createFileForDeclaration(module: Module, declaration: KtNamedDeclaration): K
|
||||
|
||||
fun KtPsiFactory.createClassCopyByText(originalClass: KtClassOrObject): KtClassOrObject {
|
||||
val text = originalClass.text
|
||||
return if (originalClass is KtObjectDeclaration) {
|
||||
if (originalClass.isCompanion()) {
|
||||
return when (originalClass) {
|
||||
is KtObjectDeclaration -> if (originalClass.isCompanion()) {
|
||||
createCompanionObject(text)
|
||||
} else {
|
||||
createObject(text)
|
||||
}
|
||||
} else {
|
||||
createClass(text)
|
||||
is KtEnumEntry -> createEnumEntry(text)
|
||||
else -> createClass(text)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// MyEnum: to be implemented
|
||||
actual enum class MyEnum {
|
||||
FIRST,
|
||||
SECOND,
|
||||
LAST;
|
||||
FIRST, SECOND, LAST;
|
||||
|
||||
actual val num: Int
|
||||
get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templates.
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
// My: to be implemented
|
||||
// DISABLE-ERRORS
|
||||
expect enum class My {
|
||||
FIRST,
|
||||
SECOND,
|
||||
LAST;
|
||||
FIRST, SECOND, LAST;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
expect enum class Complex {
|
||||
FIRST {
|
||||
};
|
||||
|
||||
abstract fun foo()
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Create expected enum class in common module testModule_Common" "true"
|
||||
// DISABLE-ERRORS
|
||||
|
||||
actual enum class <caret>Complex {
|
||||
FIRST {
|
||||
override fun foo() {}
|
||||
};
|
||||
|
||||
actual abstract fun foo()
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Create expected enum class in common module testModule_Common" "true"
|
||||
// DISABLE-ERRORS
|
||||
|
||||
actual enum class Complex {
|
||||
FIRST {
|
||||
override fun foo() {}
|
||||
};
|
||||
|
||||
actual abstract fun foo()
|
||||
}
|
||||
+5
@@ -324,6 +324,11 @@ public class QuickFixMultiModuleTestGenerated extends AbstractQuickFixMultiModul
|
||||
runTest("idea/testData/multiModuleQuickFix/expectEnum/");
|
||||
}
|
||||
|
||||
@TestMetadata("expectEnumComplex")
|
||||
public void testExpectEnumComplex() throws Exception {
|
||||
runTest("idea/testData/multiModuleQuickFix/expectEnumComplex/");
|
||||
}
|
||||
|
||||
@TestMetadata("expectEnumEmpty")
|
||||
public void testExpectEnumEmpty() throws Exception {
|
||||
runTest("idea/testData/multiModuleQuickFix/expectEnumEmpty/");
|
||||
|
||||
Reference in New Issue
Block a user