Move dangerous ClassId.fromString() to test
This commit is contained in:
@@ -113,15 +113,4 @@ public final class ClassId {
|
|||||||
if (packageFqName.isRoot()) return "/" + relativeClassName;
|
if (packageFqName.isRoot()) return "/" + relativeClassName;
|
||||||
return packageFqName.toString().replace('.', '/') + "/" + 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.search.allScope
|
||||||
import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase
|
import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.*
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
import org.jetbrains.kotlin.name.isSubpackageOf
|
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies
|
||||||
@@ -108,7 +105,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun renameJavaClassTest(renameParamsObject: JsonObject, context: TestContext) {
|
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")
|
val newName = renameParamsObject.getString("newName")
|
||||||
|
|
||||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||||
@@ -120,7 +117,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun renameJavaMethodTest(renameParamsObject: JsonObject, context: TestContext) {
|
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 methodSignature = renameParamsObject.getString("methodSignature")
|
||||||
val newName = renameParamsObject.getString("newName")
|
val newName = renameParamsObject.getString("newName")
|
||||||
|
|
||||||
@@ -166,7 +163,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
|
|
||||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||||
val mainFile = rootDir.findChild(mainFilePath)!!
|
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 jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
|
||||||
|
|
||||||
val fileFqn = jetFile.getPackageFqName()
|
val fileFqn = jetFile.getPackageFqName()
|
||||||
@@ -185,13 +182,13 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
private fun doRenameInKotlinClass(
|
private fun doRenameInKotlinClass(
|
||||||
renameParamsObject: JsonObject, context: TestContext, findDescriptorToRename: (ClassDescriptor) -> DeclarationDescriptor
|
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 newName = renameParamsObject.getString("newName")
|
||||||
val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt"
|
val mainFilePath = renameParamsObject.getNullableString("mainFile") ?: "${getTestDirName(false)}.kt"
|
||||||
|
|
||||||
doTestCommittingDocuments { rootDir, rootAfter ->
|
doTestCommittingDocuments { rootDir, rootAfter ->
|
||||||
val mainFile = rootDir.findChild(mainFilePath)!!
|
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 jetFile = PsiDocumentManager.getInstance(context.project).getPsiFile(document) as JetFile
|
||||||
|
|
||||||
val module = jetFile.analyzeFullyAndGetResult().moduleDescriptor
|
val module = jetFile.analyzeFullyAndGetResult().moduleDescriptor
|
||||||
@@ -228,7 +225,7 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
action(rootDir, rootAfter)
|
action(rootDir, rootAfter)
|
||||||
|
|
||||||
PsiDocumentManager.getInstance(getProject()!!).commitAllDocuments()
|
PsiDocumentManager.getInstance(getProject()!!).commitAllDocuments()
|
||||||
FileDocumentManager.getInstance()?.saveAllDocuments()
|
FileDocumentManager.getInstance().saveAllDocuments()
|
||||||
},
|
},
|
||||||
getTestDirName(true))
|
getTestDirName(true))
|
||||||
}
|
}
|
||||||
@@ -241,3 +238,14 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() {
|
|||||||
return PluginTestCaseBase.getTestDataPathBase()
|
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