blob: 28bc286bbb0bc72b19789fb023a13ff9c4dc5c51 [file] [log] [blame]
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.nj2k.symbols
import com.intellij.psi.PsiTypeParameter
import org.jetbrains.kotlin.nj2k.JKSymbolProvider
import org.jetbrains.kotlin.nj2k.tree.JKTypeParameter
import org.jetbrains.kotlin.nj2k.tree.JKTypeParameterListOwner
import org.jetbrains.kotlin.nj2k.types.JKTypeFactory
import org.jetbrains.kotlin.psi.KtTypeParameter
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
sealed class JKTypeParameterSymbol : JKSymbol {
abstract val index: Int
}
class JKMultiverseTypeParameterSymbol(
override val target: PsiTypeParameter,
override val typeFactory: JKTypeFactory
) : JKTypeParameterSymbol(), JKMultiverseSymbol<PsiTypeParameter> {
override val index: Int
get() = target.index
}
class JKUniverseTypeParameterSymbol(
override val typeFactory: JKTypeFactory
) : JKTypeParameterSymbol(), JKUniverseSymbol<JKTypeParameter> {
override val index: Int
get() = declaredIn?.safeAs<JKTypeParameterListOwner>()?.typeParameterList?.typeParameters?.indexOf(target) ?: -1
override lateinit var target: JKTypeParameter
}
class JKMultiverseKtTypeParameterSymbol(
override val target: KtTypeParameter,
override val typeFactory: JKTypeFactory
) : JKTypeParameterSymbol(), JKMultiverseKtSymbol<KtTypeParameter> {
override val index: Int
get() = target.getParentOfType<KtTypeParameterListOwner>(strict = false)?.typeParameters?.indexOf(target) ?: -1
}