[FIR] Introduce new Visibility class which not depends on descriptors

This commit is contained in:
Dmitriy Novozhilov
2020-08-14 18:37:19 +03:00
parent 9d9f9c52c0
commit 43821b681c
70 changed files with 347 additions and 176 deletions
@@ -20,8 +20,8 @@ import com.intellij.util.ArrayUtil
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.Visibilities
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
@@ -11,8 +11,6 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.*
@@ -157,7 +155,7 @@ class JavaSymbolProvider(
session = this@JavaSymbolProvider.session
symbol = firSymbol
name = javaClass.name
visibility = javaClass.visibility
visibility = javaClass.visibility.toFirVisibility()
modality = javaClass.modality
classKind = javaClass.classKind
this.isTopLevel = outerClassId == null
@@ -174,7 +172,7 @@ class JavaSymbolProvider(
}
}
status = FirResolvedDeclarationStatusImpl(
javaClass.visibility,
javaClass.visibility.toFirVisibility(),
javaClass.modality
).apply {
this.isInner = !isTopLevel && !this@buildJavaClass.isStatic
@@ -197,7 +195,7 @@ class JavaSymbolProvider(
symbol = FirVariableSymbol(fieldId)
name = fieldName
status = FirResolvedDeclarationStatusImpl(
javaField.visibility,
javaField.visibility.toFirVisibility(),
javaField.modality
).apply {
isStatic = javaField.isStatic
@@ -216,7 +214,7 @@ class JavaSymbolProvider(
symbol = FirFieldSymbol(fieldId)
name = fieldName
status = FirResolvedDeclarationStatusImpl(
javaField.visibility,
javaField.visibility.toFirVisibility(),
javaField.modality
).apply {
isStatic = javaField.isStatic
@@ -224,7 +222,7 @@ class JavaSymbolProvider(
isActual = false
isOverride = false
}
visibility = javaField.visibility
visibility = javaField.visibility.toFirVisibility()
modality = javaField.modality
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
isVar = !javaField.isFinal
@@ -248,7 +246,7 @@ class JavaSymbolProvider(
source = (javaMethod as? JavaElementImpl<*>)?.psi?.toFirPsiSourceElement()
symbol = methodSymbol
name = methodName
visibility = javaMethod.visibility
visibility = javaMethod.visibility.toFirVisibility()
modality = javaMethod.modality
returnTypeRef = returnType.toFirJavaTypeRef(this@JavaSymbolProvider.session, javaTypeParameterStack)
isStatic = javaMethod.isStatic
@@ -260,7 +258,7 @@ class JavaSymbolProvider(
)
}
status = FirResolvedDeclarationStatusImpl(
javaMethod.visibility,
javaMethod.visibility.toFirVisibility(),
javaMethod.modality
).apply {
isStatic = javaMethod.isStatic
@@ -342,7 +340,7 @@ class JavaSymbolProvider(
}
for (javaConstructor in javaClassDeclaredConstructors) {
declarations += prepareJavaConstructor(
visibility = javaConstructor.visibility,
visibility = javaConstructor.visibility.toFirVisibility(),
psi = (javaConstructor as? JavaElementImpl<*>)?.psi,
).apply {
this.typeParameters += javaConstructor.typeParameters.convertTypeParameters(javaTypeParameterStack)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.java
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.*
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.toFirPsiSourceElement
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
@@ -41,6 +40,9 @@ import org.jetbrains.kotlin.load.java.typeEnhancement.TypeComponentPosition
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.Variance.*
import org.jetbrains.kotlin.descriptors.Visibilities as OldVisibilities
import org.jetbrains.kotlin.descriptors.Visibility as OldVisibility
import org.jetbrains.kotlin.load.java.JavaVisibilities as OldJavaVisibilities
internal val JavaModifierListOwner.modality: Modality
get() = when {
@@ -524,3 +526,17 @@ private fun JavaType.toFirResolvedTypeRef(
}
}
fun OldVisibility.toFirVisibility(): Visibility = when (this) {
OldVisibilities.PRIVATE -> Visibilities.PRIVATE
OldVisibilities.PRIVATE_TO_THIS -> Visibilities.PRIVATE_TO_THIS
OldVisibilities.PROTECTED -> Visibilities.PROTECTED
OldVisibilities.INTERNAL -> Visibilities.INTERNAL
OldVisibilities.PUBLIC -> Visibilities.PUBLIC
OldVisibilities.LOCAL -> Visibilities.LOCAL
OldVisibilities.INVISIBLE_FAKE -> Visibilities.INVISIBLE_FAKE
OldVisibilities.UNKNOWN -> Visibilities.UNKNOWN
OldJavaVisibilities.PACKAGE_VISIBILITY -> JavaVisibilities.PACKAGE_VISIBILITY
OldJavaVisibilities.PROTECTED_AND_PACKAGE -> JavaVisibilities.PROTECTED_AND_PACKAGE
OldJavaVisibilities.PROTECTED_STATIC_VISIBILITY -> JavaVisibilities.PROTECTED_STATIC_VISIBILITY
else -> error("Unknown visiblity: $this")
}
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.Visibility
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.*
@@ -173,4 +173,4 @@ internal class FirJavaClassBuilder : FirRegularClassBuilder(), FirAnnotationCont
internal inline fun buildJavaClass(init: FirJavaClassBuilder.() -> Unit): FirJavaClass {
return FirJavaClassBuilder().apply(init).build()
}
}
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.Visibility
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirConstructorBuilder
@@ -6,10 +6,10 @@
package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.Visibility
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.FirFieldBuilder
@@ -6,10 +6,10 @@
package org.jetbrains.kotlin.fir.java.declarations
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.Visibility
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription
import org.jetbrains.kotlin.fir.declarations.*
@@ -110,4 +110,4 @@ class FirJavaMethodBuilder : FirSimpleFunctionBuilder() {
inline fun buildJavaMethod(init: FirJavaMethodBuilder.() -> Unit): FirJavaMethod {
return FirJavaMethodBuilder().apply(init).build()
}
}