compiler: cleanup 'public', property access syntax

This commit is contained in:
Dmitry Jemerov
2016-01-07 17:57:35 +01:00
parent b72ea1ff07
commit 117a0d8b7b
488 changed files with 3147 additions and 3287 deletions
@@ -18,14 +18,14 @@ package org.jetbrains.kotlin.fileClasses
import org.jetbrains.kotlin.name.FqName
public interface JvmFileClassInfo {
public val fileClassFqName: FqName
public val facadeClassFqName: FqName
public val withJvmName: Boolean
public val withJvmMultifileClass: Boolean
interface JvmFileClassInfo {
val fileClassFqName: FqName
val facadeClassFqName: FqName
val withJvmName: Boolean
val withJvmMultifileClass: Boolean
}
public class JvmSimpleFileClassInfo(
class JvmSimpleFileClassInfo(
override val fileClassFqName: FqName,
override val withJvmName: Boolean
) : JvmFileClassInfo {
@@ -33,7 +33,7 @@ public class JvmSimpleFileClassInfo(
override val withJvmMultifileClass: Boolean get() = false
}
public class JvmMultifileClassPartInfo(
class JvmMultifileClassPartInfo(
override val fileClassFqName: FqName,
override val facadeClassFqName: FqName
) : JvmFileClassInfo {
@@ -26,61 +26,51 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
public object JvmFileClassUtil {
public val JVM_NAME: FqName = FqName("kotlin.jvm.JvmName")
public val JVM_NAME_SHORT: String = JVM_NAME.shortName().asString()
object JvmFileClassUtil {
val JVM_NAME: FqName = FqName("kotlin.jvm.JvmName")
val JVM_NAME_SHORT: String = JVM_NAME.shortName().asString()
public val JVM_MULTIFILE_CLASS: FqName = FqName("kotlin.jvm.JvmMultifileClass")
public val JVM_MULTIFILE_CLASS_SHORT = JVM_MULTIFILE_CLASS.shortName().asString()
val JVM_MULTIFILE_CLASS: FqName = FqName("kotlin.jvm.JvmMultifileClass")
val JVM_MULTIFILE_CLASS_SHORT = JVM_MULTIFILE_CLASS.shortName().asString()
@JvmStatic
public fun getFileClassInfo(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations?): JvmFileClassInfo =
@JvmStatic fun getFileClassInfo(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations?): JvmFileClassInfo =
if (jvmFileClassAnnotations != null)
getFileClassInfoForAnnotation(file, jvmFileClassAnnotations)
else
getDefaultFileClassInfo(file)
@JvmStatic
public fun getFileClassInfoForAnnotation(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): JvmFileClassInfo =
@JvmStatic fun getFileClassInfoForAnnotation(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): JvmFileClassInfo =
if (jvmFileClassAnnotations.multipleFiles)
JvmMultifileClassPartInfo(getHiddenPartFqName(file, jvmFileClassAnnotations),
getFacadeFqName(file, jvmFileClassAnnotations))
else
JvmSimpleFileClassInfo(getFacadeFqName(file, jvmFileClassAnnotations), true)
@JvmStatic
public fun getDefaultFileClassInfo(file: KtFile): JvmFileClassInfo =
@JvmStatic fun getDefaultFileClassInfo(file: KtFile): JvmFileClassInfo =
JvmSimpleFileClassInfo(PackagePartClassUtils.getPackagePartFqName(file.packageFqName, file.name), false)
@JvmStatic
public fun getFacadeFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
@JvmStatic fun getFacadeFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
file.packageFqName.child(Name.identifier(jvmFileClassAnnotations.name))
@JvmStatic
public fun getPartFqNameForDeserializedCallable(callable: DeserializedCallableMemberDescriptor): FqName {
@JvmStatic fun getPartFqNameForDeserializedCallable(callable: DeserializedCallableMemberDescriptor): FqName {
val implClassName = getImplClassName(callable) ?: error("No implClassName for $callable")
val packageFqName = (callable.containingDeclaration as PackageFragmentDescriptor).fqName
return packageFqName.child(implClassName)
}
@JvmStatic
public fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
@JvmStatic fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? =
callable.getImplClassNameForDeserialized()
@JvmStatic
public fun getHiddenPartFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
@JvmStatic fun getHiddenPartFqName(file: KtFile, jvmFileClassAnnotations: ParsedJvmFileClassAnnotations): FqName =
file.packageFqName.child(Name.identifier(manglePartName(jvmFileClassAnnotations.name, file.name)))
@JvmStatic
public fun manglePartName(facadeName: String, fileName: String): String =
@JvmStatic fun manglePartName(facadeName: String, fileName: String): String =
"${facadeName}__${PackagePartClassUtils.getFilePartShortName(fileName)}"
@JvmStatic
public fun getFileClassInfoNoResolve(file: KtFile): JvmFileClassInfo =
@JvmStatic fun getFileClassInfoNoResolve(file: KtFile): JvmFileClassInfo =
getFileClassInfo(file, parseJvmNameOnFileNoResolve(file))
@JvmStatic
public fun parseJvmNameOnFileNoResolve(file: KtFile): ParsedJvmFileClassAnnotations? {
@JvmStatic fun parseJvmNameOnFileNoResolve(file: KtFile): ParsedJvmFileClassAnnotations? {
val jvmName = findAnnotationEntryOnFileNoResolve(file, JVM_NAME_SHORT) ?: return null
val nameExpr = jvmName.valueArguments.firstOrNull()?.getArgumentExpression() ?: return null
val name = getLiteralStringFromRestrictedConstExpression(nameExpr) ?: return null
@@ -89,8 +79,7 @@ public object JvmFileClassUtil {
return ParsedJvmFileClassAnnotations(name, isMultifileClassPart)
}
@JvmStatic
public fun findAnnotationEntryOnFileNoResolve(file: KtFile, shortName: String): KtAnnotationEntry? =
@JvmStatic fun findAnnotationEntryOnFileNoResolve(file: KtFile, shortName: String): KtAnnotationEntry? =
file.fileAnnotationList?.annotationEntries?.firstOrNull {
it.calleeExpression?.constructorReferenceExpression?.getReferencedName() == shortName
}
@@ -105,9 +94,9 @@ public object JvmFileClassUtil {
}
}
private class ParsedJvmFileClassAnnotations(public val name: String, public val multipleFiles: Boolean)
private class ParsedJvmFileClassAnnotations(val name: String, val multipleFiles: Boolean)
public val KtFile.javaFileFacadeFqName: FqName
val KtFile.javaFileFacadeFqName: FqName
get() {
return CachedValuesManager.getCachedValue(this) {
val facadeFqName =
@@ -117,7 +106,7 @@ public val KtFile.javaFileFacadeFqName: FqName
}
}
public fun KtDeclaration.isInsideJvmMultifileClassFile() = JvmFileClassUtil.findAnnotationEntryOnFileNoResolve(
fun KtDeclaration.isInsideJvmMultifileClassFile() = JvmFileClassUtil.findAnnotationEntryOnFileNoResolve(
getContainingKtFile(),
JvmFileClassUtil.JVM_MULTIFILE_CLASS_SHORT
) != null
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.fileClasses
import org.jetbrains.kotlin.psi.KtFile
public object NoResolveFileClassesProvider : JvmFileClassesProvider {
object NoResolveFileClassesProvider : JvmFileClassesProvider {
override fun getFileClassInfo(file: KtFile): JvmFileClassInfo =
JvmFileClassUtil.getFileClassInfo(file, JvmFileClassUtil.parseJvmNameOnFileNoResolve(file))
}
@@ -42,7 +42,7 @@ import org.jetbrains.kotlin.resolve.lazy.FileScopeProviderImpl
import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project, lookupTracker: LookupTracker) {
fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentScope: GlobalSearchScope, project: Project, lookupTracker: LookupTracker) {
useInstance(moduleContentScope)
useInstance(lookupTracker)
useImpl<ResolveSession>()
@@ -66,7 +66,7 @@ public fun StorageComponentContainer.configureJavaTopDownAnalysis(moduleContentS
useImpl<JavaFlexibleTypeCapabilitiesProvider>()
}
public fun createContainerForLazyResolveWithJava(
fun createContainerForLazyResolveWithJava(
moduleContext: ModuleContext, bindingTrace: BindingTrace, declarationProviderFactory: DeclarationProviderFactory,
moduleContentScope: GlobalSearchScope, moduleClassResolver: ModuleClassResolver,
targetEnvironment: TargetEnvironment = CompilerEnvironment,
@@ -91,7 +91,7 @@ public fun createContainerForLazyResolveWithJava(
}
public fun createContainerForTopDownAnalyzerForJvm(
fun createContainerForTopDownAnalyzerForJvm(
moduleContext: ModuleContext,
bindingTrace: BindingTrace,
declarationProviderFactory: DeclarationProviderFactory,
@@ -121,7 +121,7 @@ private fun StorageComponentContainer.javaAnalysisInit() {
get<JavaClassFinderPostConstruct>().postCreate()
}
public class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContainer) {
class ContainerForTopDownAnalyzerForJvm(container: StorageComponentContainer) {
val lazyTopDownAnalyzerForTopLevel: LazyTopDownAnalyzerForTopLevel by container
val javaDescriptorResolver: JavaDescriptorResolver by container
val deserializationComponentsForJava: DeserializationComponentsForJava by container
@@ -25,7 +25,7 @@ import org.jetbrains.kotlin.serialization.deserialization.TypeTable
import org.jetbrains.kotlin.serialization.jvm.BitEncoding
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
public fun inlineFunctionsJvmNames(bytes: ByteArray): Set<String> {
fun inlineFunctionsJvmNames(bytes: ByteArray): Set<String> {
val header = readKotlinHeader(bytes)
val annotationData = header.annotationData
val strings = header.strings
@@ -30,8 +30,8 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
public class RuntimeAssertionInfo(public val needNotNullAssertion: Boolean, public val message: String) {
public interface DataFlowExtras {
class RuntimeAssertionInfo(val needNotNullAssertion: Boolean, val message: String) {
interface DataFlowExtras {
class OnlyMessage(message: String) : DataFlowExtras {
override val canBeNull: Boolean get() = true
override val possibleTypes: Set<KotlinType> get() = setOf()
@@ -44,8 +44,7 @@ public class RuntimeAssertionInfo(public val needNotNullAssertion: Boolean, publ
}
companion object {
@JvmStatic
public fun create(
@JvmStatic fun create(
expectedType: KotlinType,
expressionType: KotlinType,
dataFlowExtras: DataFlowExtras
@@ -77,11 +76,11 @@ public class RuntimeAssertionInfo(public val needNotNullAssertion: Boolean, publ
}
private fun KotlinType.hasEnhancedNullability()
= getAnnotations().findAnnotation(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION) != null
= annotations.findAnnotation(JvmAnnotationNames.ENHANCED_NULLABILITY_ANNOTATION) != null
}
}
public object RuntimeAssertionsTypeChecker : AdditionalTypeChecker {
object RuntimeAssertionsTypeChecker : AdditionalTypeChecker {
override fun checkType(expression: KtExpression, expressionType: KotlinType, expressionTypeWithSmartCast: KotlinType, c: ResolutionContext<*>) {
if (TypeUtils.noExpectedType(c.expectedType)) return
@@ -94,7 +93,7 @@ public object RuntimeAssertionsTypeChecker : AdditionalTypeChecker {
override val possibleTypes: Set<KotlinType>
get() = c.dataFlowInfo.getCollectedTypes(dataFlowValue)
override val presentableText: String
get() = StringUtil.trimMiddle(expression.getText(), 50)
get() = StringUtil.trimMiddle(expression.text, 50)
private val dataFlowValue = DataFlowValueFactory.createDataFlowValue(expression, expressionType, c)
}
@@ -23,4 +23,4 @@ import org.jetbrains.kotlin.util.slicedMap.RewritePolicy
import org.jetbrains.kotlin.util.slicedMap.WritableSlice
import org.jetbrains.kotlin.utils.DO_NOTHING
public val RUNTIME_ASSERTION_INFO: WritableSlice<KtExpression, RuntimeAssertionInfo> = BasicWritableSlice(RewritePolicy.DO_NOTHING)
val RUNTIME_ASSERTION_INFO: WritableSlice<KtExpression, RuntimeAssertionInfo> = BasicWritableSlice(RewritePolicy.DO_NOTHING)
@@ -23,22 +23,22 @@ import javax.annotation.PostConstruct
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
public open class JavaClassFinderPostConstruct {
open class JavaClassFinderPostConstruct {
@PostConstruct
public open fun postCreate() {}
open fun postCreate() {}
}
public class JavaLazyAnalyzerPostConstruct : JavaClassFinderPostConstruct() {
public var project: Project? = null
class JavaLazyAnalyzerPostConstruct : JavaClassFinderPostConstruct() {
var project: Project? = null
@Inject set
public var trace: BindingTrace? = null
var trace: BindingTrace? = null
@Inject set
public var codeAnalyzer: KotlinCodeAnalyzer? = null
var codeAnalyzer: KotlinCodeAnalyzer? = null
@Inject set
@PostConstruct override fun postCreate() {
CodeAnalyzerInitializer.getInstance(project!!).initialize(trace!!, codeAnalyzer!!.getModuleDescriptor(), codeAnalyzer!!)
CodeAnalyzerInitializer.getInstance(project!!).initialize(trace!!, codeAnalyzer!!.moduleDescriptor, codeAnalyzer!!)
}
}
@@ -20,6 +20,6 @@ import org.jetbrains.kotlin.resolve.TypeResolver.FlexibleTypeCapabilitiesProvide
import org.jetbrains.kotlin.types.FlexibleTypeCapabilities
import org.jetbrains.kotlin.load.java.lazy.types.LazyJavaTypeResolver
public class JavaFlexibleTypeCapabilitiesProvider : FlexibleTypeCapabilitiesProvider() {
class JavaFlexibleTypeCapabilitiesProvider : FlexibleTypeCapabilitiesProvider() {
override fun getCapabilities(): FlexibleTypeCapabilities = LazyJavaTypeResolver.FlexibleJavaClassifierTypeCapabilities
}
@@ -25,9 +25,9 @@ import org.jetbrains.kotlin.load.java.sources.JavaSourceElement
private class JavaSourceElementImpl(override val javaElement: JavaElement) : PsiSourceElement, JavaSourceElement {
override val psi: PsiElement?
get() = (javaElement as JavaElementImpl<*>).getPsi()
get() = (javaElement as JavaElementImpl<*>).psi
}
public class JavaSourceElementFactoryImpl : JavaSourceElementFactory {
class JavaSourceElementFactoryImpl : JavaSourceElementFactory {
override fun source(javaElement: JavaElement): JavaSourceElement = JavaSourceElementImpl(javaElement)
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.resolve.BindingContext.*
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.BindingContextUtils
public class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaResolverCache {
class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaResolverCache {
private val trace: BindingTrace get() = resolveSession.trace
@@ -37,23 +37,23 @@ public class LazyResolveBasedCache(private val resolveSession: ResolveSession) :
}
override fun recordMethod(method: JavaMethod, descriptor: SimpleFunctionDescriptor) {
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, (method as JavaMethodImpl).getPsi(), descriptor)
BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, (method as JavaMethodImpl).psi, descriptor)
}
override fun recordConstructor(element: JavaElement, descriptor: ConstructorDescriptor) {
trace.record(CONSTRUCTOR, (element as JavaElementImpl<*>).getPsi(), descriptor)
trace.record(CONSTRUCTOR, (element as JavaElementImpl<*>).psi, descriptor)
}
override fun recordField(field: JavaField, descriptor: PropertyDescriptor) {
trace.record(VARIABLE, (field as JavaFieldImpl).getPsi(), descriptor)
trace.record(VARIABLE, (field as JavaFieldImpl).psi, descriptor)
}
override fun recordClass(javaClass: JavaClass, descriptor: ClassDescriptor) {
trace.record(CLASS, (javaClass as JavaClassImpl).getPsi(), descriptor)
trace.record(CLASS, (javaClass as JavaClassImpl).psi, descriptor)
}
private fun findInPackageFragments(fullFqName: FqName): ClassDescriptor? {
var fqName = if (fullFqName.isRoot()) fullFqName else fullFqName.parent()
var fqName = if (fullFqName.isRoot) fullFqName else fullFqName.parent()
while (true) {
val packageDescriptor = resolveSession.getPackageFragment(fqName)
@@ -62,7 +62,7 @@ public class LazyResolveBasedCache(private val resolveSession: ResolveSession) :
val result = ResolveSessionUtils.findClassByRelativePath(packageDescriptor.getMemberScope(), fullFqName.tail(fqName))
if (result != null) return result
if (fqName.isRoot()) break
if (fqName.isRoot) break
fqName = fqName.parent()
}
@@ -27,23 +27,21 @@ import org.jetbrains.kotlin.serialization.deserialization.ErrorReporter
import org.jetbrains.kotlin.util.slicedMap.Slices
import org.jetbrains.kotlin.util.slicedMap.WritableSlice
public class TraceBasedErrorReporter(private val trace: BindingTrace) : ErrorReporter {
class TraceBasedErrorReporter(private val trace: BindingTrace) : ErrorReporter {
companion object {
private val LOG = Logger.getInstance(TraceBasedErrorReporter::class.java)
@JvmField
public val ABI_VERSION_ERRORS: WritableSlice<String, AbiVersionErrorData> = Slices.createCollectiveSlice()
@JvmField val ABI_VERSION_ERRORS: WritableSlice<String, AbiVersionErrorData> = Slices.createCollectiveSlice()
// TODO: MutableList is a workaround for KT-5792 Covariant types in Kotlin translated to wildcard types in Java
@JvmField
public val INCOMPLETE_HIERARCHY: WritableSlice<ClassDescriptor, MutableList<String>> = Slices.createCollectiveSlice()
@JvmField val INCOMPLETE_HIERARCHY: WritableSlice<ClassDescriptor, MutableList<String>> = Slices.createCollectiveSlice()
}
public data class AbiVersionErrorData(
public val actualVersion: BinaryVersion,
public val filePath: String,
public val classId: ClassId
data class AbiVersionErrorData(
val actualVersion: BinaryVersion,
val filePath: String,
val classId: ClassId
)
override fun reportIncompatibleAbiVersion(classId: ClassId, filePath: String, actualVersion: BinaryVersion) {
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
import java.util.*
public object SamConversionResolverImpl : SamConversionResolver {
object SamConversionResolverImpl : SamConversionResolver {
override fun resolveSamConstructor(constructorOwner: DeclarationDescriptor, classifier: () -> ClassifierDescriptor?): SamConstructorDescriptor? {
val classifierDescriptor = classifier()
if (classifierDescriptor !is LazyJavaClassDescriptor || classifierDescriptor.functionTypeForSamInterface == null) return null
@@ -55,13 +55,13 @@ public object SamConversionResolverImpl : SamConversionResolver {
classDescriptor: JavaClassDescriptor,
resolveMethod: (JavaMethod) -> FunctionDescriptor
): KotlinType? {
val jClass = (classDescriptor.getSource() as? JavaSourceElement)?.javaElement as? JavaClass ?: return null
val jClass = (classDescriptor.source as? JavaSourceElement)?.javaElement as? JavaClass ?: return null
val samInterfaceMethod = SingleAbstractMethodUtils.getSamInterfaceMethod(jClass) ?: return null
val abstractMethod = if (jClass.getFqName() == samInterfaceMethod.getContainingClass().getFqName()) {
val abstractMethod = if (jClass.fqName == samInterfaceMethod.containingClass.fqName) {
resolveMethod(samInterfaceMethod)
}
else {
findFunctionWithMostSpecificReturnType(TypeUtils.getAllSupertypes(classDescriptor.getDefaultType()))
findFunctionWithMostSpecificReturnType(TypeUtils.getAllSupertypes(classDescriptor.defaultType))
}
return SingleAbstractMethodUtils.getFunctionTypeForAbstractMethod(abstractMethod)
}
@@ -79,8 +79,8 @@ public object SamConversionResolverImpl : SamConversionResolver {
}
var currentMostSpecificType = candidates[0]
for (candidate in candidates) {
val candidateReturnType = candidate.getReturnType()
val currentMostSpecificReturnType = currentMostSpecificType.getReturnType()
val candidateReturnType = candidate.returnType
val currentMostSpecificReturnType = currentMostSpecificType.returnType
assert(candidateReturnType != null && currentMostSpecificReturnType != null) { "$candidate, $currentMostSpecificReturnType" }
if (KotlinTypeChecker.DEFAULT.isSubtypeOf(candidateReturnType!!, currentMostSpecificReturnType!!)) {
currentMostSpecificType = candidate
@@ -25,17 +25,17 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaElementCollectionFromPs
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
public class JavaPackageImpl(psiPackage: PsiPackage, private val scope: GlobalSearchScope) : JavaElementImpl<PsiPackage>(psiPackage), JavaPackage {
class JavaPackageImpl(psiPackage: PsiPackage, private val scope: GlobalSearchScope) : JavaElementImpl<PsiPackage>(psiPackage), JavaPackage {
override fun getClasses(nameFilter: (Name) -> Boolean): Collection<JavaClass> {
val psiClasses = getPsi().getClasses(scope).filter {
val name = it.getName()
val psiClasses = psi.getClasses(scope).filter {
val name = it.name
name != null && nameFilter(Name.identifier(name))
}
return classes(psiClasses)
}
override fun getSubPackages() = packages(getPsi().getSubPackages(scope), scope)
override fun getSubPackages() = packages(psi.getSubPackages(scope), scope)
override fun getFqName() = FqName(getPsi().getQualifiedName())
override fun getFqName() = FqName(psi.qualifiedName)
}
@@ -25,16 +25,16 @@ import org.jetbrains.kotlin.resolve.constants.ConstantValue
import org.jetbrains.kotlin.resolve.constants.ConstantValueFactory
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
public class JavaPropertyInitializerEvaluatorImpl : JavaPropertyInitializerEvaluator {
class JavaPropertyInitializerEvaluatorImpl : JavaPropertyInitializerEvaluator {
override fun getInitializerConstant(field: JavaField, descriptor: PropertyDescriptor): ConstantValue<*>? {
val initializer = (field as JavaFieldImpl).getInitializer()
val initializer = (field as JavaFieldImpl).initializer
val evaluated = JavaConstantExpressionEvaluator.computeConstantExpression(initializer, false) ?: return null
val factory = ConstantValueFactory(descriptor.builtIns)
when (evaluated) {
//Note: evaluated expression may be of class that does not match field type in some cases
// tested for Int, left other checks just in case
is Byte, is Short, is Int, is Long -> {
return factory.createIntegerConstantValue((evaluated as Number).toLong(), descriptor.getType())
return factory.createIntegerConstantValue((evaluated as Number).toLong(), descriptor.type)
}
else -> {
return factory.createConstantValue(evaluated)
@@ -45,6 +45,6 @@ public class JavaPropertyInitializerEvaluatorImpl : JavaPropertyInitializerEvalu
override fun isNotNullCompileTimeConstant(field: JavaField): Boolean {
// PsiUtil.isCompileTimeConstant returns false for null-initialized fields,
// see com.intellij.psi.util.IsConstantExpressionVisitor.visitLiteralExpression()
return PsiUtil.isCompileTimeConstant((field as JavaFieldImpl).getPsi())
return PsiUtil.isCompileTimeConstant((field as JavaFieldImpl).psi)
}
}
@@ -25,7 +25,7 @@ abstract class JavaAnnotationArgumentImpl(
) : JavaAnnotationArgument {
companion object Factory {
fun create(argument: PsiAnnotationMemberValue, name: Name?): JavaAnnotationArgument {
val value = JavaPsiFacade.getInstance(argument.getProject()).getConstantEvaluationHelper().computeConstantExpression(argument)
val value = JavaPsiFacade.getInstance(argument.project).constantEvaluationHelper.computeConstantExpression(argument)
if (value is Enum<*>) {
return JavaEnumValueAnnotationArgumentImpl(argument as PsiReferenceExpression, name)
}
@@ -53,7 +53,7 @@ class JavaArrayAnnotationArgumentImpl(
private val psiValue: PsiArrayInitializerMemberValue,
name: Name?
) : JavaAnnotationArgumentImpl(name), JavaArrayAnnotationArgument {
override fun getElements() = psiValue.getInitializers().map { JavaAnnotationArgumentImpl.create(it, null) }
override fun getElements() = psiValue.initializers.map { JavaAnnotationArgumentImpl.create(it, null) }
}
class JavaEnumValueAnnotationArgumentImpl(
@@ -65,7 +65,7 @@ class JavaEnumValueAnnotationArgumentImpl(
return when (element) {
null -> null
is PsiEnumConstant -> JavaFieldImpl(element)
else -> throw IllegalStateException("Reference argument should be an enum value, but was $element: ${element.getText()}")
else -> throw IllegalStateException("Reference argument should be an enum value, but was $element: ${element.text}")
}
}
}
@@ -74,7 +74,7 @@ class JavaClassObjectAnnotationArgumentImpl(
private val psiExpression: PsiClassObjectAccessExpression,
name: Name?
) : JavaAnnotationArgumentImpl(name), JavaClassObjectAnnotationArgument {
override fun getReferencedType() = JavaTypeImpl.create(psiExpression.getOperand().getType())
override fun getReferencedType() = JavaTypeImpl.create(psiExpression.operand.type)
}
class JavaAnnotationAsAnnotationArgumentImpl(
@@ -41,11 +41,11 @@ import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
import java.lang.annotation.Target
public class JavaAnnotationCallChecker : CallChecker {
class JavaAnnotationCallChecker : CallChecker {
override fun <F : CallableDescriptor> check(resolvedCall: ResolvedCall<F>, context: BasicCallResolutionContext) {
val resultingDescriptor = resolvedCall.getResultingDescriptor().getOriginal()
val resultingDescriptor = resolvedCall.resultingDescriptor.original
if (resultingDescriptor !is JavaConstructorDescriptor ||
resultingDescriptor.getContainingDeclaration().getKind() != ClassKind.ANNOTATION_CLASS) return
resultingDescriptor.containingDeclaration.kind != ClassKind.ANNOTATION_CLASS) return
reportErrorsOnPositionedArguments(resolvedCall, context)
reportDeprecatedJavaAnnotation(resolvedCall, context)
@@ -73,7 +73,7 @@ public class JavaAnnotationCallChecker : CallChecker {
argument: Map.Entry<ValueParameterDescriptor, ResolvedValueArgument>,
diagnostic: DiagnosticFactory0<KtExpression>
) {
argument.value.getArguments().forEach {
argument.value.arguments.forEach {
if (it.getArgumentExpression() != null) {
context.trace.report(
diagnostic.on(
@@ -20,10 +20,9 @@ import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
public interface JvmVirtualFileFinder : VirtualFileFinder, KotlinClassFinder {
public object SERVICE {
@JvmStatic
public fun getInstance(project: Project): JvmVirtualFileFinder =
interface JvmVirtualFileFinder : VirtualFileFinder, KotlinClassFinder {
object SERVICE {
@JvmStatic fun getInstance(project: Project): JvmVirtualFileFinder =
ServiceManager.getService(project, JvmVirtualFileFinderFactory::class.java).create(GlobalSearchScope.allScope(project))
}
}
@@ -20,12 +20,11 @@ import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project
import com.intellij.psi.search.GlobalSearchScope
public interface JvmVirtualFileFinderFactory : VirtualFileFinderFactory {
interface JvmVirtualFileFinderFactory : VirtualFileFinderFactory {
override fun create(scope: GlobalSearchScope): JvmVirtualFileFinder
public object SERVICE {
@JvmStatic
public fun getInstance(project: Project): JvmVirtualFileFinderFactory =
object SERVICE {
@JvmStatic fun getInstance(project: Project): JvmVirtualFileFinderFactory =
ServiceManager.getService(project, JvmVirtualFileFinderFactory::class.java)
}
}
@@ -29,14 +29,13 @@ import org.jetbrains.kotlin.psi.KtScript
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
import java.util.*
public object PackagePartClassUtils {
@JvmStatic
public fun getPathHashCode(file: VirtualFile): Int =
object PackagePartClassUtils {
@JvmStatic fun getPathHashCode(file: VirtualFile): Int =
file.path.toLowerCase().hashCode()
private val PART_CLASS_NAME_SUFFIX = "Kt"
public @JvmStatic fun getPartClassName(str: String): String =
@JvmStatic fun getPartClassName(str: String): String =
if (str.isEmpty())
"_$PART_CLASS_NAME_SUFFIX"
else
@@ -51,45 +50,37 @@ public object PackagePartClassUtils {
"_$str"
@TestOnly
@JvmStatic
public fun getDefaultFileClassFqName(packageFqName: FqName, file: VirtualFile): FqName =
@JvmStatic fun getDefaultFileClassFqName(packageFqName: FqName, file: VirtualFile): FqName =
getPackagePartFqName(packageFqName, file.name)
@TestOnly
@JvmStatic
public fun getDefaultPartFqName(facadeClassFqName: FqName, file: VirtualFile): FqName =
@JvmStatic fun getDefaultPartFqName(facadeClassFqName: FqName, file: VirtualFile): FqName =
getPackagePartFqName(facadeClassFqName.parent(), file.name)
@JvmStatic
public fun getPackagePartFqName(packageFqName: FqName, fileName: String): FqName {
@JvmStatic fun getPackagePartFqName(packageFqName: FqName, fileName: String): FqName {
val partClassName = getFilePartShortName(fileName)
return packageFqName.child(Name.identifier(partClassName))
}
@Deprecated("Migrate to JvmFileClassesProvider")
@JvmStatic
public fun getPackagePartInternalName(file: KtFile): String =
@JvmStatic fun getPackagePartInternalName(file: KtFile): String =
JvmClassName.byFqNameWithoutInnerClasses(getPackagePartFqName(file)).internalName
@Deprecated("Migrate to JvmFileClassesProvider")
@JvmStatic
public fun getPackagePartFqName(file: KtFile): FqName =
@JvmStatic fun getPackagePartFqName(file: KtFile): FqName =
getPackagePartFqName(file.packageFqName, file.name)
@JvmStatic
public fun getFilesWithCallables(files: Collection<KtFile>): List<KtFile> =
@JvmStatic fun getFilesWithCallables(files: Collection<KtFile>): List<KtFile> =
files.filter { fileHasTopLevelCallables(it) }
@JvmStatic
public fun fileHasTopLevelCallables(file: KtFile): Boolean =
@JvmStatic fun fileHasTopLevelCallables(file: KtFile): Boolean =
file.declarations.any {
it is KtProperty ||
it is KtNamedFunction ||
it is KtScript
}
@JvmStatic
public fun getFilePartShortName(fileName: String): String =
@JvmStatic fun getFilePartShortName(fileName: String): String =
getPartClassName(FileUtil.getNameWithoutExtension(fileName))
}
@@ -26,14 +26,14 @@ import org.jetbrains.kotlin.utils.rethrow
import java.io.FileNotFoundException
import java.io.IOException
public class VirtualFileKotlinClass private constructor(
public val file: VirtualFile,
class VirtualFileKotlinClass private constructor(
val file: VirtualFile,
className: ClassId,
classHeader: KotlinClassHeader,
innerClasses: FileBasedKotlinClass.InnerClassesInfo
) : FileBasedKotlinClass(className, classHeader, innerClasses) {
override fun getLocation() = file.getPath()
override fun getLocation() = file.path
override fun getFileContents(): ByteArray {
try {
@@ -47,7 +47,7 @@ public class VirtualFileKotlinClass private constructor(
override fun equals(other: Any?) = other is VirtualFileKotlinClass && other.file == file
override fun hashCode() = file.hashCode()
override fun toString() = "${javaClass.getSimpleName()}: $file"
override fun toString() = "${javaClass.simpleName}: $file"
companion object Factory {
private val LOG = Logger.getInstance(VirtualFileKotlinClass::class.java)
@@ -56,7 +56,7 @@ public class VirtualFileKotlinClass private constructor(
@Deprecated("Use KotlinBinaryClassCache")
fun create(file: VirtualFile, fileContent: ByteArray?): VirtualFileKotlinClass? {
return perfCounter.time {
assert(file.getFileType() == JavaClassFileType.INSTANCE) { "Trying to read binary data from a non-class file $file" }
assert(file.fileType == JavaClassFileType.INSTANCE) { "Trying to read binary data from a non-class file $file" }
try {
val byteContent = fileContent ?: file.contentsToByteArray(false)
@@ -78,6 +78,6 @@ public class VirtualFileKotlinClass private constructor(
}
private fun renderFileReadingErrorMessage(file: VirtualFile): String =
"Could not read file: ${file.getPath()}; size in bytes: ${file.getLength()}; file type: ${file.getFileType().getName()}"
"Could not read file: ${file.path}; size in bytes: ${file.length}; file type: ${file.fileType.name}"
}
}
@@ -21,29 +21,29 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.utils.sure
public abstract class VirtualFileKotlinClassFinder : JvmVirtualFileFinder {
abstract class VirtualFileKotlinClassFinder : JvmVirtualFileFinder {
override fun findKotlinClass(classId: ClassId): KotlinJvmBinaryClass? {
val file = findVirtualFileWithHeader(classId) ?: return null
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
}
override fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? {
var file = (javaClass as JavaClassImpl).getPsi().getContainingFile()!!.getVirtualFile() ?: return null
var file = (javaClass as JavaClassImpl).psi.containingFile!!.virtualFile ?: return null
if (javaClass.getOuterClass() != null) {
// For nested classes we get a file of the containing class, to get the actual class file for A.B.C,
// we take the file for A, take its parent directory, then in this directory we look for A$B$C.class
file = file.getParent()!!.findChild(classFileName(javaClass) + ".class").sure { "Virtual file not found for $javaClass" }
file = file.parent!!.findChild(classFileName(javaClass) + ".class").sure { "Virtual file not found for $javaClass" }
}
return KotlinBinaryClassCache.getKotlinBinaryClass(file)
}
private fun classFileName(jClass: JavaClass): String {
val outerClass = jClass.getOuterClass()
val outerClass = jClass.outerClass
if (outerClass == null) {
return jClass.getName().asString()
return jClass.name.asString()
}
return classFileName(outerClass) + "$" + jClass.getName().asString()
return classFileName(outerClass) + "$" + jClass.name.asString()
}
}
@@ -23,10 +23,10 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument
fun getJavaAnnotationCallValueArgumentsThatShouldBeNamed(resolvedCall: ResolvedCall<*>): Map<ValueParameterDescriptor, ResolvedValueArgument> =
resolvedCall.getValueArguments().filter {
resolvedCall.valueArguments.filter {
p ->
p.key.getName() != JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME &&
p.key.name != JvmAnnotationNames.DEFAULT_ANNOTATION_MEMBER_NAME &&
p.value is ExpressionValueArgument &&
!((p.value as ExpressionValueArgument).getValueArgument()?.isNamed() ?: true)
!((p.value as ExpressionValueArgument).valueArgument?.isNamed() ?: true)
}
@@ -41,7 +41,7 @@ import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.utils.addToStdlib.singletonOrEmptyList
import java.util.*
public class IncrementalPackageFragmentProvider(
class IncrementalPackageFragmentProvider(
sourceFiles: Collection<KtFile>,
val moduleDescriptor: ModuleDescriptor,
val storageManager: StorageManager,
@@ -51,7 +51,7 @@ public class IncrementalPackageFragmentProvider(
) : PackageFragmentProvider {
companion object {
public fun fqNamesToLoad(obsoletePackageParts: Collection<String>, sourceFiles: Collection<KtFile>): Set<FqName> =
fun fqNamesToLoad(obsoletePackageParts: Collection<String>, sourceFiles: Collection<KtFile>): Set<FqName> =
(obsoletePackageParts.map { JvmClassName.byInternalName(it).packageFqName }
+ PackagePartClassUtils.getFilesWithCallables(sourceFiles).map { it.packageFqName }).toSet()
}
@@ -67,7 +67,7 @@ public class IncrementalPackageFragmentProvider(
return
}
if (!fqName.isRoot()) {
if (!fqName.isRoot) {
val parent = fqName.parent()
createPackageFragment(parent)
fqNameToSubFqNames.putValue(parent, fqName)
@@ -88,8 +88,8 @@ public class IncrementalPackageFragmentProvider(
}
public inner class IncrementalPackageFragment(fqName: FqName) : PackageFragmentDescriptorImpl(moduleDescriptor, fqName) {
public val target: TargetId
inner class IncrementalPackageFragment(fqName: FqName) : PackageFragmentDescriptorImpl(moduleDescriptor, fqName) {
val target: TargetId
get() = this@IncrementalPackageFragmentProvider.target
val memberScope: NotNullLazyValue<MemberScope> = storageManager.createLazyValue {
@@ -126,7 +126,7 @@ public class IncrementalPackageFragmentProvider(
}
}
public fun getPackageFragmentForMultifileClass(multifileClassFqName: FqName): IncrementalMultifileClassPackageFragment? {
fun getPackageFragmentForMultifileClass(multifileClassFqName: FqName): IncrementalMultifileClassPackageFragment? {
val facadeInternalName = JvmClassName.byFqNameWithoutInnerClasses(multifileClassFqName).internalName
val partsNames = incrementalCache.getStableMultifileFacadeParts(facadeInternalName) ?: return null
return IncrementalMultifileClassPackageFragment(multifileClassFqName, partsNames)
@@ -134,7 +134,7 @@ public class IncrementalPackageFragmentProvider(
override fun getMemberScope(): MemberScope = memberScope()
public inner class IncrementalMultifileClassPackageFragment(
inner class IncrementalMultifileClassPackageFragment(
val multifileClassFqName: FqName,
val partsNames: Collection<String>
) : PackageFragmentDescriptorImpl(moduleDescriptor, multifileClassFqName.parent()) {
@@ -43,8 +43,7 @@ internal class IncrementalPackagePartProvider private constructor(
}
companion object {
@JvmStatic
public fun create(
@JvmStatic fun create(
parent: PackagePartProvider,
sourceFiles: Collection<KtFile>,
targets: List<TargetId>?,
@@ -20,22 +20,22 @@ import java.io.Serializable
data class JvmPackagePartProto(val data: ByteArray, val strings: Array<String>) : Serializable
public interface IncrementalCache {
public fun getObsoletePackageParts(): Collection<String>
interface IncrementalCache {
fun getObsoletePackageParts(): Collection<String>
public fun getObsoleteMultifileClasses(): Collection<String>
fun getObsoleteMultifileClasses(): Collection<String>
public fun getStableMultifileFacadeParts(facadeInternalName: String): Collection<String>?
fun getStableMultifileFacadeParts(facadeInternalName: String): Collection<String>?
public fun getMultifileFacade(partInternalName: String): String?
fun getMultifileFacade(partInternalName: String): String?
public fun getPackagePartData(partInternalName: String): JvmPackagePartProto?
fun getPackagePartData(partInternalName: String): JvmPackagePartProto?
public fun getModuleMappingData(): ByteArray?
fun getModuleMappingData(): ByteArray?
public fun registerInline(fromPath: String, jvmSignature: String, toPath: String)
fun registerInline(fromPath: String, jvmSignature: String, toPath: String)
public fun getClassFilePath(internalClassName: String): String
fun getClassFilePath(internalClassName: String): String
public fun close()
fun close()
}
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.load.kotlin.incremental.components
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.modules.TargetId
public interface IncrementalCompilationComponents {
public fun getIncrementalCache(target: TargetId): IncrementalCache
public fun getLookupTracker(): LookupTracker
interface IncrementalCompilationComponents {
fun getIncrementalCache(target: TargetId): IncrementalCache
fun getLookupTracker(): LookupTracker
}
@@ -34,18 +34,17 @@ interface ModuleVisibilityManager {
fun addModule(module: Module)
fun addFriendPath(path: String)
public object SERVICE {
@JvmStatic
public fun getInstance(project: Project): ModuleVisibilityManager =
object SERVICE {
@JvmStatic fun getInstance(project: Project): ModuleVisibilityManager =
ServiceManager.getService(project, ModuleVisibilityManager::class.java)
}
}
public val DeclarationDescriptor.isFromIncrementalPackageFragment: Boolean
val DeclarationDescriptor.isFromIncrementalPackageFragment: Boolean
get() =
DescriptorUtils.getParentOfType(this, PackageFragmentDescriptor::class.java, false) is IncrementalPackageFragmentProvider.IncrementalPackageFragment
public fun isContainedByCompiledPartOfOurModule(descriptor: DeclarationDescriptor, outDirectory: File?): Boolean {
fun isContainedByCompiledPartOfOurModule(descriptor: DeclarationDescriptor, outDirectory: File?): Boolean {
val packageFragment = DescriptorUtils.getParentOfType(descriptor, PackageFragmentDescriptor::class.java, false)
if (packageFragment is IncrementalPackageFragmentProvider.IncrementalPackageFragment) return true
@@ -26,11 +26,11 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.inline.InlineUtil
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
public fun DeclarationDescriptor.hasNativeAnnotation(): Boolean {
fun DeclarationDescriptor.hasNativeAnnotation(): Boolean {
return this is FunctionDescriptor && this.isExternal
}
public class NativeFunChecker : DeclarationChecker {
class NativeFunChecker : DeclarationChecker {
override fun check(
declaration: KtDeclaration,
descriptor: DeclarationDescriptor,
@@ -39,11 +39,11 @@ public class NativeFunChecker : DeclarationChecker {
) {
if (!descriptor.hasNativeAnnotation()) return
if (DescriptorUtils.isInterface(descriptor.getContainingDeclaration())) {
if (DescriptorUtils.isInterface(descriptor.containingDeclaration)) {
diagnosticHolder.report(ErrorsJvm.EXTERNAL_DECLARATION_IN_INTERFACE.on(declaration))
}
else if (descriptor is CallableMemberDescriptor &&
descriptor.getModality() == Modality.ABSTRACT) {
descriptor.modality == Modality.ABSTRACT) {
diagnosticHolder.report(ErrorsJvm.EXTERNAL_DECLARATION_CANNOT_BE_ABSTRACT.on(declaration))
}
@@ -39,12 +39,12 @@ import org.jetbrains.kotlin.resolve.lazy.ResolveSession
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactoryService
import java.util.*
public class JvmPlatformParameters(
public val moduleByJavaClass: (JavaClass) -> ModuleInfo?
class JvmPlatformParameters(
val moduleByJavaClass: (JavaClass) -> ModuleInfo?
) : PlatformAnalysisParameters
public object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
override fun <M : ModuleInfo> createResolverForModule(
moduleInfo: M,
moduleDescriptor: ModuleDescriptorImpl,
@@ -105,8 +105,7 @@ public object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
return ResolverForModule(CompositePackageFragmentProvider(providersForModule), container)
}
@JvmStatic
public fun getAllFilesToAnalyze(project: Project, moduleInfo: ModuleInfo?, baseFiles: Collection<KtFile>): List<KtFile> {
@JvmStatic fun getAllFilesToAnalyze(project: Project, moduleInfo: ModuleInfo?, baseFiles: Collection<KtFile>): List<KtFile> {
val allFiles = ArrayList(baseFiles)
for (externalDeclarationsProvider in ExternalDeclarationsProvider.getInstances(project)) {
allFiles.addAll(externalDeclarationsProvider.getExternalDeclarations(moduleInfo))
@@ -21,6 +21,6 @@ import com.intellij.psi.impl.file.impl.JavaFileManager
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.name.ClassId
public interface KotlinCliJavaFileManager : JavaFileManager {
public fun findClass(classId: ClassId, searchScope: GlobalSearchScope): PsiClass?
interface KotlinCliJavaFileManager : JavaFileManager {
fun findClass(classId: ClassId, searchScope: GlobalSearchScope): PsiClass?
}
@@ -23,11 +23,11 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.DescriptorUtils
public fun DeclarationDescriptor.hasJvmOverloadsAnnotation(): Boolean {
return getAnnotations().findAnnotation(FqName("kotlin.jvm.JvmOverloads")) != null
fun DeclarationDescriptor.hasJvmOverloadsAnnotation(): Boolean {
return annotations.findAnnotation(FqName("kotlin.jvm.JvmOverloads")) != null
}
public fun DeclarationDescriptor.findJvmFieldAnnotation(): AnnotationDescriptor? {
fun DeclarationDescriptor.findJvmFieldAnnotation(): AnnotationDescriptor? {
val fqName = FqName("kotlin.jvm.JvmField")
val annotation = annotations.findAnnotation(fqName)
if (annotation != null) {
@@ -37,11 +37,11 @@ public fun DeclarationDescriptor.findJvmFieldAnnotation(): AnnotationDescriptor?
return annotations.getUseSiteTargetedAnnotations().asSequence().filter {
it.target == AnnotationUseSiteTarget.FIELD
}.map { it.annotation }.firstOrNull {
val descriptor = it.getType().getConstructor().getDeclarationDescriptor()
val descriptor = it.type.constructor.declarationDescriptor
descriptor is ClassDescriptor && fqName.toUnsafe() == DescriptorUtils.getFqName(descriptor)
}
}
public fun DeclarationDescriptor.hasJvmFieldAnnotation(): Boolean {
fun DeclarationDescriptor.hasJvmFieldAnnotation(): Boolean {
return findJvmFieldAnnotation() != null
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.types.KotlinTypeImpl
import org.jetbrains.kotlin.types.TypeProjectionImpl
public class JavaClassOnCompanionChecker : CallChecker {
class JavaClassOnCompanionChecker : CallChecker {
override fun <F : CallableDescriptor> check(resolvedCall: ResolvedCall<F>, context: BasicCallResolutionContext) {
val descriptor = resolvedCall.resultingDescriptor
if (descriptor !is PropertyDescriptor || descriptor.name.asString() != "javaClass") return
@@ -42,22 +42,22 @@ import org.jetbrains.kotlin.types.expressions.SenselessComparisonChecker
import org.jetbrains.kotlin.types.flexibility
import org.jetbrains.kotlin.types.isFlexible
public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
private fun KotlinType.mayBeNull(): ErrorsJvm.NullabilityInformationSource? {
if (!isError() && !isFlexible() && TypeUtils.isNullableType(this)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (!isError && !isFlexible() && TypeUtils.isNullableType(this)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (isFlexible() && TypeUtils.isNullableType(flexibility().lowerBound)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (getAnnotations().isMarkedNullable()) return ErrorsJvm.NullabilityInformationSource.JAVA
if (annotations.isMarkedNullable()) return ErrorsJvm.NullabilityInformationSource.JAVA
return null
}
private fun KotlinType.mustNotBeNull(): ErrorsJvm.NullabilityInformationSource? {
if (!isError() && !isFlexible() && !TypeUtils.isNullableType(this)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (!isError && !isFlexible() && !TypeUtils.isNullableType(this)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (isFlexible() && !TypeUtils.isNullableType(flexibility().upperBound)) return ErrorsJvm.NullabilityInformationSource.KOTLIN
if (!isMarkedNullable() && getAnnotations().isMarkedNotNull()) return ErrorsJvm.NullabilityInformationSource.JAVA
if (!isMarkedNullable && annotations.isMarkedNotNull()) return ErrorsJvm.NullabilityInformationSource.JAVA
return null
}
@@ -99,10 +99,10 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
when (expression) {
is KtWhenExpression ->
if (expression.getElseExpression() == null) {
if (expression.elseExpression == null) {
// Check for conditionally-exhaustive when on platform enums, see KT-6399
val type = expression.getSubjectExpression()?.let { c.trace.getType(it) } ?: return
if (type.isFlexible() && TypeUtils.isNullableType(type.flexibility().upperBound) && !type.getAnnotations().isMarkedNotNull()) {
val type = expression.subjectExpression?.let { c.trace.getType(it) } ?: return
if (type.isFlexible() && TypeUtils.isNullableType(type.flexibility().upperBound) && !type.annotations.isMarkedNotNull()) {
val enumClassDescriptor = WhenChecker.getClassDescriptorOfTypeIfEnum(type) ?: return
if (WhenChecker.isWhenOnEnumExhaustive(expression, c.trace, enumClassDescriptor)
@@ -113,8 +113,8 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
}
}
is KtPostfixExpression ->
if (expression.getOperationToken() == KtTokens.EXCLEXCL) {
val baseExpression = expression.getBaseExpression() ?: return
if (expression.operationToken == KtTokens.EXCLEXCL) {
val baseExpression = expression.baseExpression ?: return
val baseExpressionType = c.trace.getType(baseExpression) ?: return
doIfNotNull(
DataFlowValueFactory.createDataFlowValue(baseExpression, baseExpressionType, c),
@@ -124,9 +124,9 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
}
}
is KtBinaryExpression ->
when (expression.getOperationToken()) {
when (expression.operationToken) {
KtTokens.ELVIS -> {
val baseExpression = expression.getLeft()
val baseExpression = expression.left
val baseExpressionType = baseExpression?.let{ c.trace.getType(it) } ?: return
doIfNotNull(
DataFlowValueFactory.createDataFlowValue(baseExpression!!, baseExpressionType, c),
@@ -139,9 +139,9 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
KtTokens.EXCLEQ,
KtTokens.EQEQEQ,
KtTokens.EXCLEQEQEQ -> {
if (expression.getLeft() != null && expression.getRight() != null) {
if (expression.left != null && expression.right != null) {
SenselessComparisonChecker.checkSenselessComparisonWithNull(
expression, expression.getLeft()!!, expression.getRight()!!, c,
expression, expression.left!!, expression.right!!, c,
{ c.trace.getType(it) },
{
value ->
@@ -171,8 +171,8 @@ public class JavaNullabilityWarningsChecker : AdditionalTypeChecker {
val dataFlowValue = DataFlowValueFactory.createDataFlowValue(receiverArgument, c)
if (!safeAccess) {
doCheckType(
receiverArgument.getType(),
receiverParameter.getType(),
receiverArgument.type,
receiverParameter.type,
dataFlowValue,
c.dataFlowInfo
) {
@@ -48,15 +48,15 @@ class ReflectionAPICallChecker(private val module: ModuleDescriptor, storageMana
override fun <F : CallableDescriptor> check(resolvedCall: ResolvedCall<F>, context: BasicCallResolutionContext) {
if (isReflectionAvailable) return
val descriptor = resolvedCall.getResultingDescriptor()
val containingClass = descriptor.getContainingDeclaration() as? ClassDescriptor ?: return
val descriptor = resolvedCall.resultingDescriptor
val containingClass = descriptor.containingDeclaration as? ClassDescriptor ?: return
if (!ReflectionTypes.isReflectionClass(containingClass)) return
// Skip some symbols which are supposed to work fine without kotlin-reflect.jar:
// - 'name' on anything
// - 'invoke' on functions (or on anything else for that matter)
// - 'get'/'set' on properties
val name = descriptor.getName()
val name = descriptor.name
when {
name == OperatorNameConventions.INVOKE -> return
name.asString() == "name" -> return
@@ -28,13 +28,13 @@ import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
public class TraitDefaultMethodCallChecker : CallChecker {
class TraitDefaultMethodCallChecker : CallChecker {
override fun <F : CallableDescriptor> check(resolvedCall: ResolvedCall<F>, context: BasicCallResolutionContext) {
if (getSuperCallExpression(resolvedCall.getCall()) == null) return
val targetDescriptor = resolvedCall.getResultingDescriptor().getOriginal()
val containerDescriptor = targetDescriptor.getContainingDeclaration()
val targetDescriptor = resolvedCall.resultingDescriptor.original
val containerDescriptor = targetDescriptor.containingDeclaration
if (containerDescriptor is JavaClassDescriptor && DescriptorUtils.isInterface(containerDescriptor)) {
//is java interface default method called from trait
@@ -33,7 +33,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeUtils
public object RepeatableAnnotationChecker: AdditionalAnnotationChecker {
object RepeatableAnnotationChecker: AdditionalAnnotationChecker {
override fun checkEntries(entries: List<KtAnnotationEntry>, actualTargets: List<KotlinTarget>, trace: BindingTrace) {
val entryTypesWithAnnotations = hashMapOf<KotlinType, MutableList<AnnotationUseSiteTarget?>>()
@@ -57,7 +57,7 @@ public object RepeatableAnnotationChecker: AdditionalAnnotationChecker {
}
}
public object FileClassAnnotationsChecker: AdditionalAnnotationChecker {
object FileClassAnnotationsChecker: AdditionalAnnotationChecker {
// JvmName & JvmMultifileClass annotations are applicable to multi-file class parts regardless of their retention.
private val ALWAYS_APPLICABLE = hashSetOf(JvmFileClassUtil.JVM_NAME, JvmFileClassUtil.JVM_MULTIFILE_CLASS)
@@ -34,7 +34,7 @@ import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmFieldAnnotation
import org.jetbrains.kotlin.resolve.jvm.annotations.hasJvmOverloadsAnnotation
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
public class LocalFunInlineChecker : DeclarationChecker {
class LocalFunInlineChecker : DeclarationChecker {
override fun check(
declaration: KtDeclaration,
@@ -44,13 +44,13 @@ public class LocalFunInlineChecker : DeclarationChecker {
if (InlineUtil.isInline(descriptor) &&
declaration is KtNamedFunction &&
descriptor is FunctionDescriptor &&
descriptor.getVisibility() == Visibilities.LOCAL) {
descriptor.visibility == Visibilities.LOCAL) {
diagnosticHolder.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(declaration, declaration, descriptor))
}
}
}
public class PlatformStaticAnnotationChecker : DeclarationChecker {
class PlatformStaticAnnotationChecker : DeclarationChecker {
override fun check(
declaration: KtDeclaration,
@@ -98,7 +98,7 @@ public class PlatformStaticAnnotationChecker : DeclarationChecker {
}
}
public class JvmNameAnnotationChecker : DeclarationChecker {
class JvmNameAnnotationChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, diagnosticHolder: DiagnosticSink, bindingContext: BindingContext) {
val platformNameAnnotation = DescriptorUtils.getJvmNameAnnotation(descriptor)
if (platformNameAnnotation != null) {
@@ -135,7 +135,7 @@ public class JvmNameAnnotationChecker : DeclarationChecker {
}
}
public class VolatileAnnotationChecker : DeclarationChecker {
class VolatileAnnotationChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration,
descriptor: DeclarationDescriptor,
@@ -150,7 +150,7 @@ public class VolatileAnnotationChecker : DeclarationChecker {
}
}
public class SynchronizedAnnotationChecker : DeclarationChecker {
class SynchronizedAnnotationChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration,
descriptor: DeclarationDescriptor,
@@ -165,7 +165,7 @@ public class SynchronizedAnnotationChecker : DeclarationChecker {
}
}
public class OverloadsAnnotationChecker: DeclarationChecker {
class OverloadsAnnotationChecker: DeclarationChecker {
override fun check(
declaration: KtDeclaration,
descriptor: DeclarationDescriptor,
@@ -181,20 +181,20 @@ public class OverloadsAnnotationChecker: DeclarationChecker {
if (descriptor !is CallableDescriptor) {
return
}
if (descriptor is FunctionDescriptor && descriptor.getModality() == Modality.ABSTRACT) {
if (descriptor is FunctionDescriptor && descriptor.modality == Modality.ABSTRACT) {
diagnosticHolder.report(ErrorsJvm.OVERLOADS_ABSTRACT.on(declaration))
}
else if ((!descriptor.getVisibility().isPublicAPI && descriptor.getVisibility() != Visibilities.INTERNAL) ||
else if ((!descriptor.visibility.isPublicAPI && descriptor.visibility != Visibilities.INTERNAL) ||
DescriptorUtils.isLocal(descriptor)) {
diagnosticHolder.report(ErrorsJvm.OVERLOADS_PRIVATE.on(declaration))
}
else if (descriptor.getValueParameters().none { it.declaresDefaultValue() }) {
else if (descriptor.valueParameters.none { it.declaresDefaultValue() }) {
diagnosticHolder.report(ErrorsJvm.OVERLOADS_WITHOUT_DEFAULT_ARGUMENTS.on(declaration))
}
}
}
public class TypeParameterBoundIsNotArrayChecker : DeclarationChecker {
class TypeParameterBoundIsNotArrayChecker : DeclarationChecker {
override fun check(
declaration: KtDeclaration,
descriptor: DeclarationDescriptor,
@@ -214,7 +214,7 @@ public class TypeParameterBoundIsNotArrayChecker : DeclarationChecker {
}
}
public class ReifiedTypeParameterAnnotationChecker : DeclarationChecker {
class ReifiedTypeParameterAnnotationChecker : DeclarationChecker {
override fun check(
declaration: KtDeclaration,
@@ -223,7 +223,7 @@ public class ReifiedTypeParameterAnnotationChecker : DeclarationChecker {
bindingContext: BindingContext
) {
if (descriptor is CallableDescriptor && !InlineUtil.isInline(descriptor)) {
checkTypeParameterDescriptorsAreNotReified(descriptor.getTypeParameters(), diagnosticHolder)
checkTypeParameterDescriptorsAreNotReified(descriptor.typeParameters, diagnosticHolder)
}
if (descriptor is ClassDescriptor) {
@@ -236,7 +236,7 @@ public class ReifiedTypeParameterAnnotationChecker : DeclarationChecker {
typeParameterDescriptors: List<TypeParameterDescriptor>,
diagnosticHolder: DiagnosticSink
) {
for (reifiedTypeParameterDescriptor in typeParameterDescriptors.filter { it.isReified() }) {
for (reifiedTypeParameterDescriptor in typeParameterDescriptors.filter { it.isReified }) {
val typeParameterDeclaration = DescriptorToSourceUtils.descriptorToDeclaration(reifiedTypeParameterDescriptor)
if (typeParameterDeclaration !is KtTypeParameter) throw AssertionError("JetTypeParameter expected")
@@ -16,9 +16,9 @@
package org.jetbrains.kotlin.resolve.jvm.diagnostics
public class ConflictingJvmDeclarationsData(
public val classInternalName: String?,
public val classOrigin: JvmDeclarationOrigin,
public val signature: RawSignature,
public val signatureOrigins: Collection<JvmDeclarationOrigin>
class ConflictingJvmDeclarationsData(
val classInternalName: String?,
val classOrigin: JvmDeclarationOrigin,
val signature: RawSignature,
val signatureOrigins: Collection<JvmDeclarationOrigin>
)
@@ -24,11 +24,11 @@ import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.*
public enum class MemberKind { FIELD, METHOD }
enum class MemberKind { FIELD, METHOD }
public data class RawSignature(public val name: String, public val desc: String, public val kind: MemberKind)
data class RawSignature(val name: String, val desc: String, val kind: MemberKind)
public enum class JvmDeclarationOriginKind {
enum class JvmDeclarationOriginKind {
OTHER,
PACKAGE_PART,
INTERFACE_DEFAULT_IMPL,
@@ -40,43 +40,42 @@ public enum class JvmDeclarationOriginKind {
SYNTHETIC // this means that there's no proper descriptor for this jvm declaration
}
public class JvmDeclarationOrigin(
public val originKind: JvmDeclarationOriginKind,
public val element: PsiElement?,
public val descriptor: DeclarationDescriptor?
class JvmDeclarationOrigin(
val originKind: JvmDeclarationOriginKind,
val element: PsiElement?,
val descriptor: DeclarationDescriptor?
) {
companion object {
@JvmField
public val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(OTHER, null, null)
@JvmField val NO_ORIGIN: JvmDeclarationOrigin = JvmDeclarationOrigin(OTHER, null, null)
}
}
public fun OtherOrigin(element: PsiElement?, descriptor: DeclarationDescriptor?): JvmDeclarationOrigin =
fun OtherOrigin(element: PsiElement?, descriptor: DeclarationDescriptor?): JvmDeclarationOrigin =
if (element == null && descriptor == null)
JvmDeclarationOrigin.NO_ORIGIN
else JvmDeclarationOrigin(OTHER, element, descriptor)
public fun OtherOrigin(element: PsiElement): JvmDeclarationOrigin = OtherOrigin(element, null)
fun OtherOrigin(element: PsiElement): JvmDeclarationOrigin = OtherOrigin(element, null)
public fun OtherOrigin(descriptor: DeclarationDescriptor): JvmDeclarationOrigin = OtherOrigin(null, descriptor)
fun OtherOrigin(descriptor: DeclarationDescriptor): JvmDeclarationOrigin = OtherOrigin(null, descriptor)
public fun Bridge(descriptor: DeclarationDescriptor, element: PsiElement? = DescriptorToSourceUtils.descriptorToDeclaration(descriptor)): JvmDeclarationOrigin =
fun Bridge(descriptor: DeclarationDescriptor, element: PsiElement? = DescriptorToSourceUtils.descriptorToDeclaration(descriptor)): JvmDeclarationOrigin =
JvmDeclarationOrigin(BRIDGE, element, descriptor)
public fun PackagePart(file: KtFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(PACKAGE_PART, file, descriptor)
fun PackagePart(file: KtFile, descriptor: PackageFragmentDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(PACKAGE_PART, file, descriptor)
/**
* @param representativeFile one of the files representing this multifile class (will be used for diagnostics)
*/
public fun MultifileClass(representativeFile: KtFile?, descriptor: PackageFragmentDescriptor, multifileClassFqName: FqName): JvmDeclarationOrigin =
fun MultifileClass(representativeFile: KtFile?, descriptor: PackageFragmentDescriptor, multifileClassFqName: FqName): JvmDeclarationOrigin =
JvmDeclarationOrigin(MULTIFILE_CLASS, representativeFile, descriptor)
public fun MultifileClassPart(file: KtFile, descriptor: PackageFragmentDescriptor, multifileClassFqName: FqName): JvmDeclarationOrigin =
fun MultifileClassPart(file: KtFile, descriptor: PackageFragmentDescriptor, multifileClassFqName: FqName): JvmDeclarationOrigin =
JvmDeclarationOrigin(MULTIFILE_CLASS_PART, file, descriptor)
public fun TraitImpl(element: KtClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(INTERFACE_DEFAULT_IMPL, element, descriptor)
public fun DelegationToTraitImpl(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin =
fun TraitImpl(element: KtClassOrObject, descriptor: ClassDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(INTERFACE_DEFAULT_IMPL, element, descriptor)
fun DelegationToTraitImpl(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin =
JvmDeclarationOrigin(DELEGATION_TO_DEFAULT_IMPLS, element, descriptor)
public fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(DELEGATION, element, descriptor)
fun Delegation(element: PsiElement?, descriptor: FunctionDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(DELEGATION, element, descriptor)
public fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, descriptor)
fun Synthetic(element: PsiElement?, descriptor: CallableMemberDescriptor): JvmDeclarationOrigin = JvmDeclarationOrigin(SYNTHETIC, element, descriptor)
@@ -24,13 +24,13 @@ import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.BindingContext
public interface AnalysisCompletedHandlerExtension {
interface AnalysisCompletedHandlerExtension {
companion object : ProjectExtensionDescriptor<AnalysisCompletedHandlerExtension>(
"org.jetbrains.kotlin.analyzeCompleteHandlerExtension",
AnalysisCompletedHandlerExtension::class.java
)
public fun analysisCompleted(
fun analysisCompleted(
project: Project,
module: ModuleDescriptor,
bindingContext: BindingContext,
@@ -23,13 +23,13 @@ import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.storage.StorageManager
public interface PackageFragmentProviderExtension {
interface PackageFragmentProviderExtension {
companion object : ProjectExtensionDescriptor<PackageFragmentProviderExtension>(
"org.jetbrains.kotlin.packageFragmentProviderExtension",
PackageFragmentProviderExtension::class.java
)
public fun getPackageFragmentProvider(
fun getPackageFragmentProvider(
project: Project,
module: ModuleDescriptor,
storageManager: StorageManager,
@@ -18,18 +18,18 @@ package org.jetbrains.kotlin.resolve.jvm.jvmSignature
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
public interface KotlinToJvmSignatureMapper {
public fun mapToJvmMethodSignature(function: FunctionDescriptor): JvmMethodSignature
interface KotlinToJvmSignatureMapper {
fun mapToJvmMethodSignature(function: FunctionDescriptor): JvmMethodSignature
}
fun erasedSignaturesEqualIgnoringReturnTypes(subFunction: JvmMethodSignature, superFunction: JvmMethodSignature): Boolean {
val subParams = subFunction.getValueParameters()
val superParams = superFunction.getValueParameters()
val subParams = subFunction.valueParameters
val superParams = superFunction.valueParameters
if (subParams.size != superParams.size) return false
return subParams.zip(superParams).all {
p -> val (subParam, superParam) = p
subParam.getAsmType() == superParam.getAsmType()
subParam.asmType == superParam.asmType
}
}
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.checker.KotlinTypeChecker
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
public object JavaGenericVarianceViolationTypeChecker : AdditionalTypeChecker {
object JavaGenericVarianceViolationTypeChecker : AdditionalTypeChecker {
// Prohibits covariant type argument conversions `List<String> -> (MutableList<Any>..List<Any>)` when expected type's lower bound is invariant.
// It's needed to prevent accident unsafe covariant conversions of mutable collections.
//
@@ -29,7 +29,7 @@ import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.MemberScope
import java.util.*
public object JvmPlatform : TargetPlatform("JVM") {
object JvmPlatform : TargetPlatform("JVM") {
override val defaultModuleParameters = object : ModuleParameters {
override val platformToKotlinClassMap: PlatformToKotlinClassMap
get() = JavaToKotlinClassMap.INSTANCE
@@ -28,7 +28,7 @@ import org.jetbrains.kotlin.synthetic.JavaSyntheticScopes
import org.jetbrains.kotlin.types.DynamicTypesSettings
public object JvmPlatformConfigurator : PlatformConfigurator(
object JvmPlatformConfigurator : PlatformConfigurator(
DynamicTypesSettings(),
additionalDeclarationCheckers = listOf(
PlatformStaticAnnotationChecker(),
@@ -49,12 +49,12 @@ interface SyntheticJavaPropertyDescriptor : PropertyDescriptor {
companion object {
fun findByGetterOrSetter(getterOrSetter: FunctionDescriptor, syntheticScopes: SyntheticScopes): SyntheticJavaPropertyDescriptor? {
val name = getterOrSetter.getName()
if (name.isSpecial()) return null
val identifier = name.getIdentifier()
val name = getterOrSetter.name
if (name.isSpecial) return null
val identifier = name.identifier
if (!identifier.startsWith("get") && !identifier.startsWith("is") && !identifier.startsWith("set")) return null // optimization
val owner = getterOrSetter.getContainingDeclaration() as? ClassDescriptor ?: return null
val owner = getterOrSetter.containingDeclaration as? ClassDescriptor ?: return null
val originalGetterOrSetter = getterOrSetter.original
return syntheticScopes.collectSyntheticExtensionProperties(listOf(owner.defaultType))
@@ -209,7 +209,7 @@ class JavaSyntheticPropertiesScope(storageManager: StorageManager, private val l
val classifier = type.declarationDescriptor
if (classifier is ClassDescriptor) {
for (descriptor in classifier.getUnsubstitutedMemberScope().getContributedDescriptors(DescriptorKindFilter.FUNCTIONS)) {
for (descriptor in classifier.unsubstitutedMemberScope.getContributedDescriptors(DescriptorKindFilter.FUNCTIONS)) {
if (descriptor is FunctionDescriptor) {
val propertyName = SyntheticJavaPropertyDescriptor.propertyNameByGetMethodName(descriptor.getName()) ?: continue
addIfNotNull(syntheticPropertyInClass(Pair(classifier, propertyName)).descriptor)
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.resolve.scopes.SyntheticScopes
import org.jetbrains.kotlin.storage.StorageManager
public class JavaSyntheticScopes(storageManager: StorageManager, lookupTracker: LookupTracker): SyntheticScopes {
class JavaSyntheticScopes(storageManager: StorageManager, lookupTracker: LookupTracker): SyntheticScopes {
override val scopes = listOf(JavaSyntheticPropertiesScope(storageManager, lookupTracker), SamAdapterFunctionsScope(storageManager))
}