Move dangerous ClassId.fromString() to test
This commit is contained in:
@@ -113,15 +113,4 @@ public final class ClassId {
|
||||
if (packageFqName.isRoot()) return "/" + relativeClassName;
|
||||
return packageFqName.toString().replace('.', '/') + "/" + relativeClassName;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ClassId fromString(@NotNull String string) {
|
||||
int lastSlash = string.lastIndexOf("/");
|
||||
if (lastSlash == -1) {
|
||||
throw new IllegalArgumentException("Class id should contain slash: " + string);
|
||||
}
|
||||
FqName relativeClassName = new FqName(string.substring(lastSlash + 1));
|
||||
FqName packageFqName = new FqName(string.substring(0, lastSlash).replace('/', '.'));
|
||||
return new ClassId(packageFqName, relativeClassName, false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,10 +42,7 @@ import org.jetbrains.kotlin.idea.refactoring.move.getString
|
||||
import org.jetbrains.kotlin.idea.search.allScope
|
||||
import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase
|
||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.isSubpackageOf
|
||||
import org.jetbrains.kotlin.name.*
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
||||
@@ -108,7 +105,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
}
|
||||
|
||||
private fun renameJavaClassTest(renameParamsObject: JsonObject, context: TestContext) {
|
||||
val classFQN = ClassId.fromString(renameParamsObject.getString("classId")).asSingleFqName().asString()
|
||||
val classFQN = renameParamsObject.getString("classId").toClassId().asSingleFqName().asString()
|
||||
val newName = renameParamsObject.getString("newName")
|
||||
|
||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||
@@ -120,7 +117,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
}
|
||||
|
||||
private fun renameJavaMethodTest(renameParamsObject: JsonObject, context: TestContext) {
|
||||
val classFQN = ClassId.fromString(renameParamsObject.getString("classId")).asSingleFqName().asString()
|
||||
val classFQN = renameParamsObject.getString("classId").toClassId().asSingleFqName().asString()
|
||||
val methodSignature = renameParamsObject.getString("methodSignature")
|
||||
val newName = renameParamsObject.getString("newName")
|
||||
|
||||
@@ -166,7 +163,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
|
||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||
val mainFile = rootDir.findChild(mainFilePath)!!
|
||||
val document = FileDocumentManager.getInstance()!!.getDocument(mainFile)!!
|
||||
val document = FileDocumentManager.getInstance().getDocument(mainFile)!!
|
||||
val jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
|
||||
|
||||
val fileFqn = jetFile.getPackageFqName()
|
||||
@@ -185,13 +182,13 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
private fun doRenameInKotlinClass(
|
||||
renameParamsObject: JsonObject, context: TestContext, findDescriptorToRename: (ClassDescriptor) -> DeclarationDescriptor
|
||||
) {
|
||||
val classId = ClassId.fromString(renameParamsObject.getString("classId"))
|
||||
val classId = renameParamsObject.getString("classId").toClassId()
|
||||
val newName = renameParamsObject.getString("newName")
|
||||
val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt"
|
||||
|
||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||
val mainFile = rootDir.findChild(mainFilePath)!!
|
||||
val document = FileDocumentManager.getInstance()!!.getDocument(mainFile)!!
|
||||
val document = FileDocumentManager.getInstance().getDocument(mainFile)!!
|
||||
val jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
|
||||
|
||||
val module = jetFile.analyzeFullyAndGetResult().moduleDescriptor
|
||||
@@ -228,7 +225,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
action(rootDir, rootAfter)
|
||||
|
||||
PsiDocumentManager.getInstance(getProject()!!).commitAllDocuments()
|
||||
FileDocumentManager.getInstance()?.saveAllDocuments()
|
||||
FileDocumentManager.getInstance().saveAllDocuments()
|
||||
},
|
||||
getTestDirName(true))
|
||||
}
|
||||
@@ -241,3 +238,14 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
||||
return PluginTestCaseBase.getTestDataPathBase()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun String.toClassId(): ClassId {
|
||||
val lastSlash = lastIndexOf("/")
|
||||
if (lastSlash == -1) {
|
||||
throw IllegalArgumentException("Class id should contain slash: $this")
|
||||
}
|
||||
val relativeClassName = FqName(substring(lastSlash + 1))
|
||||
val packageFqName = FqName(substring(0, lastSlash).replace('/', '.'))
|
||||
return ClassId(packageFqName, relativeClassName, false)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user