Multi-platform refactoring: get rid of PlatformKind (replace with MultiTargetPlatform)
This commit is contained in:
+2
-2
@@ -29,13 +29,13 @@ import org.jetbrains.kotlin.analyzer.ResolverForProject
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.context.GlobalContextImpl
|
||||
import org.jetbrains.kotlin.context.withProject
|
||||
import org.jetbrains.kotlin.descriptors.PlatformKind
|
||||
import org.jetbrains.kotlin.descriptors.SourceKind
|
||||
import org.jetbrains.kotlin.idea.project.IdeaEnvironment
|
||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmPlatformParameters
|
||||
|
||||
fun createModuleResolverProvider(
|
||||
@@ -78,7 +78,7 @@ fun createModuleResolverProvider(
|
||||
sdk?.let { SdkInfo(project, it) },
|
||||
modulePlatforms = { moduleInfo ->
|
||||
val module = (moduleInfo as? ModuleSourceInfo)?.module
|
||||
module?.let { TargetPlatformDetector.getPlatform(module).kind } ?: PlatformKind.DEFAULT
|
||||
module?.let { TargetPlatformDetector.getPlatform(module).multiTargetPlatform }
|
||||
},
|
||||
moduleSources = { moduleInfo ->
|
||||
when (moduleInfo) {
|
||||
|
||||
+1
-1
@@ -236,7 +236,7 @@ public class SourceNavigationHelper {
|
||||
@NotNull Project project
|
||||
) {
|
||||
MutableModuleContext newModuleContext = ContextKt.ContextForNewModule(
|
||||
ContextKt.ProjectContext(project), Name.special("<library module>"), DefaultBuiltIns.getInstance()
|
||||
ContextKt.ProjectContext(project), Name.special("<library module>"), DefaultBuiltIns.getInstance(), null
|
||||
);
|
||||
|
||||
newModuleContext.setDependencies(newModuleContext.getModule(), newModuleContext.getModule().getBuiltIns().getBuiltInsModule());
|
||||
|
||||
+2
-3
@@ -22,7 +22,6 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||
import org.jetbrains.kotlin.descriptors.MemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.PlatformKind
|
||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
@@ -30,6 +29,7 @@ import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.TargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
|
||||
import org.jetbrains.kotlin.resolve.diagnostics.SimpleDiagnostics
|
||||
@@ -40,8 +40,7 @@ class PlatformHeaderAnnotator : Annotator {
|
||||
val declaration = element as? KtDeclaration ?: return
|
||||
if (!declaration.hasModifier(KtTokens.HEADER_KEYWORD)) return
|
||||
|
||||
val platform = TargetPlatformDetector.getPlatform(declaration.containingKtFile)
|
||||
if (platform.kind != PlatformKind.DEFAULT) return
|
||||
if (TargetPlatformDetector.getPlatform(declaration.containingKtFile) !is TargetPlatform.Default) return
|
||||
|
||||
val defaultModuleDescriptor = declaration.findModuleDescriptor()
|
||||
val dependentDescriptors = defaultModuleDescriptor.allImplementingModules
|
||||
|
||||
@@ -22,10 +22,12 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
|
||||
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
|
||||
|
||||
fun ModuleDescriptor.commonModuleOrNull() = allDependencyModules.filter {
|
||||
it.platformKind == PlatformKind.DEFAULT && it.sourceKind == sourceKind
|
||||
it.getMultiTargetPlatform() == MultiTargetPlatform.Common && it.sourceKind == sourceKind
|
||||
}.firstOrNull()
|
||||
|
||||
fun ModuleDescriptor.hasDeclarationOf(descriptor: MemberDescriptor) = declarationOf(descriptor) != null
|
||||
|
||||
@@ -24,7 +24,9 @@ import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor
|
||||
import org.jetbrains.kotlin.idea.core.toDescriptor
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
|
||||
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
|
||||
import java.awt.event.MouseEvent
|
||||
|
||||
fun ModuleDescriptor.hasImplementationsOf(descriptor: MemberDescriptor) =
|
||||
@@ -49,7 +51,7 @@ fun getPlatformImplementationTooltip(declaration: KtDeclaration): String? {
|
||||
if (platformModulesWithImplementation.isEmpty()) return null
|
||||
|
||||
return platformModulesWithImplementation.joinToString(prefix = "Has implementations in ") {
|
||||
it.platformKind.name
|
||||
(it.getMultiTargetPlatform() as MultiTargetPlatform.Specific).platform
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+15
-13
@@ -41,10 +41,12 @@ import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.MultiTargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.getMultiTargetPlatform
|
||||
|
||||
sealed class CreateHeaderImplementationFix<out D : KtNamedDeclaration>(
|
||||
declaration: D,
|
||||
private val implPlatformKind: PlatformKind,
|
||||
private val implPlatform: MultiTargetPlatform.Specific,
|
||||
private val generateIt: KtPsiFactory.(Project, D) -> D?
|
||||
) : KotlinQuickFixAction<D>(declaration) {
|
||||
|
||||
@@ -52,7 +54,7 @@ sealed class CreateHeaderImplementationFix<out D : KtNamedDeclaration>(
|
||||
|
||||
protected abstract val elementType: String
|
||||
|
||||
override fun getText() = "Create header $elementType implementation for platform ${implPlatformKind.name}"
|
||||
override fun getText() = "Create header $elementType implementation for platform ${implPlatform.platform}"
|
||||
|
||||
override fun startInWriteAction() = false
|
||||
|
||||
@@ -86,7 +88,7 @@ sealed class CreateHeaderImplementationFix<out D : KtNamedDeclaration>(
|
||||
|
||||
private fun Project.implementationModuleOf(headerModule: Module) =
|
||||
allModules().firstOrNull {
|
||||
TargetPlatformDetector.getPlatform(it).kind == implPlatformKind &&
|
||||
TargetPlatformDetector.getPlatform(it).multiTargetPlatform == implPlatform &&
|
||||
headerModule in ModuleRootManager.getInstance(it).dependencies
|
||||
}
|
||||
|
||||
@@ -136,11 +138,11 @@ sealed class CreateHeaderImplementationFix<out D : KtNamedDeclaration>(
|
||||
val declaration = d.psiElement as? KtNamedDeclaration ?: return null
|
||||
val compatibility = d.c
|
||||
if (compatibility.isNotEmpty()) return null
|
||||
val implPlatformKind = d.b.platformKind
|
||||
val implPlatform = d.b.getMultiTargetPlatform() as? MultiTargetPlatform.Specific ?: return null
|
||||
return when (declaration) {
|
||||
is KtClassOrObject -> CreateHeaderClassImplementationFix(declaration, implPlatformKind)
|
||||
is KtFunction -> CreateHeaderFunctionImplementationFix(declaration, implPlatformKind)
|
||||
is KtProperty -> CreateHeaderPropertyImplementationFix(declaration, implPlatformKind)
|
||||
is KtClassOrObject -> CreateHeaderClassImplementationFix(declaration, implPlatform)
|
||||
is KtFunction -> CreateHeaderFunctionImplementationFix(declaration, implPlatform)
|
||||
is KtProperty -> CreateHeaderPropertyImplementationFix(declaration, implPlatform)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
@@ -149,8 +151,8 @@ sealed class CreateHeaderImplementationFix<out D : KtNamedDeclaration>(
|
||||
|
||||
class CreateHeaderClassImplementationFix(
|
||||
klass: KtClassOrObject,
|
||||
implPlatformKind: PlatformKind
|
||||
) : CreateHeaderImplementationFix<KtClassOrObject>(klass, implPlatformKind, { project, element ->
|
||||
implPlatform: MultiTargetPlatform.Specific
|
||||
) : CreateHeaderImplementationFix<KtClassOrObject>(klass, implPlatform, { project, element ->
|
||||
generateClassOrObject(project, element, implNeeded = true)
|
||||
}) {
|
||||
|
||||
@@ -159,8 +161,8 @@ class CreateHeaderClassImplementationFix(
|
||||
|
||||
class CreateHeaderPropertyImplementationFix(
|
||||
property: KtProperty,
|
||||
implPlatformKind: PlatformKind
|
||||
) : CreateHeaderImplementationFix<KtProperty>(property, implPlatformKind, { project, element ->
|
||||
implPlatform: MultiTargetPlatform.Specific
|
||||
) : CreateHeaderImplementationFix<KtProperty>(property, implPlatform, { project, element ->
|
||||
val descriptor = element.toDescriptor() as? PropertyDescriptor
|
||||
descriptor?.let { generateProperty(project, element, descriptor, implNeeded = true) }
|
||||
}) {
|
||||
@@ -170,8 +172,8 @@ class CreateHeaderPropertyImplementationFix(
|
||||
|
||||
class CreateHeaderFunctionImplementationFix(
|
||||
function: KtFunction,
|
||||
implPlatformKind: PlatformKind
|
||||
) : CreateHeaderImplementationFix<KtFunction>(function, implPlatformKind, { project, element ->
|
||||
implPlatform: MultiTargetPlatform.Specific
|
||||
) : CreateHeaderImplementationFix<KtFunction>(function, implPlatform, { project, element ->
|
||||
val descriptor = element.toDescriptor() as? FunctionDescriptor
|
||||
descriptor?.let { generateFunction(project, element, descriptor, implNeeded = true) }
|
||||
}) {
|
||||
|
||||
Reference in New Issue
Block a user