[lombok] Experimental lombok plugin prototype

Add extension point for java descriptors
Add simple usage of this point to generate getter method
Add simple test infrastructure to test compilation with lombok plugin
This commit is contained in:
Andrey Zinovyev
2021-03-24 13:09:50 +03:00
committed by TeamCityServer
parent ac86ad252f
commit f71e08df4d
30 changed files with 606 additions and 3 deletions
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.resolve.*
import org.jetbrains.kotlin.resolve.calls.tower.ImplicitsExtensionsResolutionFilter
import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver
import org.jetbrains.kotlin.resolve.jvm.JvmDiagnosticComponents
import org.jetbrains.kotlin.resolve.jvm.extensions.SyntheticJavaResolveExtension
import org.jetbrains.kotlin.resolve.jvm.multiplatform.OptionalAnnotationPackageFragmentProvider
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory
@@ -116,6 +117,8 @@ fun StorageComponentContainer.configureJavaSpecificComponents(
useInstance(JavaDeprecationSettings)
useInstance(moduleClassResolver)
useInstance(SyntheticJavaResolveExtension.getProvider(moduleContext.project))
if (configureJavaClassFinder != null) {
configureJavaClassFinder()
} else {
@@ -0,0 +1,32 @@
/*
* Copyright 2010-2021 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.resolve.jvm.extensions
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.resolve.jvm.CompositeSyntheticJavaPartsProvider
import org.jetbrains.kotlin.resolve.jvm.SyntheticJavaPartsProvider
interface SyntheticJavaResolveExtension {
companion object : ProjectExtensionDescriptor<SyntheticJavaResolveExtension>(
"org.jetbrains.kotlin.syntheticJavaResolveExtension", SyntheticJavaResolveExtension::class.java
) {
fun getProvider(project: Project): SyntheticJavaPartsProvider {
val instances = getInstances(project)
val providers = instances.map { it.getProvider() }
return if (providers.isEmpty()) {
SyntheticJavaPartsProvider.EMPTY
} else {
CompositeSyntheticJavaPartsProvider(providers)
}
}
}
fun getProvider(): SyntheticJavaPartsProvider
}