Generate enum entries in create actual / expected fixes as all other

This makes code a bit cleaner
This commit is contained in:
Mikhail Glukhikh
2018-11-15 13:26:39 +03:00
parent a9280cdbcd
commit d3fada89b7
9 changed files with 49 additions and 30 deletions
@@ -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 -3
View File
@@ -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()
}
@@ -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/");