FIR LC: create inline methods
unless the functions (or accessors) have reified type parameters or inline-only annotations
This commit is contained in:
committed by
Ilya Kirillov
parent
2954769296
commit
a153a1fefb
+2
-1
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.analysis.api.scopes.KtScope
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithDeclarations
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.analyseForLightClasses
|
import org.jetbrains.kotlin.light.classes.symbol.classes.analyseForLightClasses
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.createField
|
import org.jetbrains.kotlin.light.classes.symbol.classes.createField
|
||||||
@@ -92,6 +92,7 @@ class FirLightClassForFacade(
|
|||||||
for (callableSymbol in fileSymbol.getFileScope().getCallableSymbols()) {
|
for (callableSymbol in fileSymbol.getFileScope().getCallableSymbols()) {
|
||||||
if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue
|
if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue
|
||||||
if (callableSymbol !is KtSymbolWithVisibility) continue
|
if (callableSymbol !is KtSymbolWithVisibility) continue
|
||||||
|
if ((callableSymbol as? KtAnnotatedSymbol)?.hasInlineOnlyAnnotation() == true) continue
|
||||||
val isPrivate = callableSymbol.toPsiVisibilityForMember(isTopLevel = true) == PsiModifier.PRIVATE
|
val isPrivate = callableSymbol.toPsiVisibilityForMember(isTopLevel = true) == PsiModifier.PRIVATE
|
||||||
if (isPrivate && multiFileClass) continue
|
if (isPrivate && multiFileClass) continue
|
||||||
yield(callableSymbol)
|
yield(callableSymbol)
|
||||||
|
|||||||
+9
-2
@@ -13,6 +13,7 @@ import com.intellij.psi.util.CachedValuesManager
|
|||||||
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
import org.jetbrains.kotlin.analysis.providers.createProjectWideOutOfBlockModificationTracker
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers
|
||||||
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.isPrivateOrPrivateToThis
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
|
import org.jetbrains.kotlin.analysis.api.tokens.HackToForceAllowRunningAnalyzeOnEDT
|
||||||
import org.jetbrains.kotlin.analysis.api.tokens.hackyAllowRunningOnEdt
|
import org.jetbrains.kotlin.analysis.api.tokens.hackyAllowRunningOnEdt
|
||||||
@@ -192,7 +193,10 @@ internal fun FirLightClassBase.createMethods(
|
|||||||
fun handleDeclaration(declaration: KtCallableSymbol) {
|
fun handleDeclaration(declaration: KtCallableSymbol) {
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is KtFunctionSymbol -> {
|
is KtFunctionSymbol -> {
|
||||||
if (declaration.isInline || declaration.isHiddenOrSynthetic(project)) return
|
// TODO: check if it has expect modifier
|
||||||
|
if (declaration.hasReifiedParameters ||
|
||||||
|
declaration.isHiddenOrSynthetic(project)
|
||||||
|
) return
|
||||||
|
|
||||||
var methodIndex = METHOD_INDEX_BASE
|
var methodIndex = METHOD_INDEX_BASE
|
||||||
result.add(
|
result.add(
|
||||||
@@ -259,7 +263,7 @@ internal fun FirLightClassBase.createPropertyAccessors(
|
|||||||
if (declaration.hasJvmFieldAnnotation()) return
|
if (declaration.hasJvmFieldAnnotation()) return
|
||||||
|
|
||||||
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
||||||
if (isInline) return false
|
if (declaration.hasReifiedParameters) return false
|
||||||
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
||||||
if (declaration.isHiddenOrSynthetic(project, siteTarget)) return false
|
if (declaration.isHiddenOrSynthetic(project, siteTarget)) return false
|
||||||
if (isHiddenOrSynthetic(project)) return false
|
if (isHiddenOrSynthetic(project)) return false
|
||||||
@@ -443,3 +447,6 @@ internal fun KtClassOrObject.checkIsInheritor(baseClassOrigin: KtClassOrObject,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val KtSymbolWithTypeParameters.hasReifiedParameters: Boolean
|
||||||
|
get() = typeParameters.any { it.isReified }
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
public final class A /* A*/ {
|
|
||||||
@kotlin.PublishedApi()
|
|
||||||
public final int access$test(int);// access$test(int)
|
|
||||||
|
|
||||||
public A();// .ctor()
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
public final class A /* A*/ {
|
public final class A /* A*/ {
|
||||||
|
@kotlin.Suppress(names = "INVISIBLE_REFERENCE")
|
||||||
|
@kotlin.internal.InlineOnly()
|
||||||
|
private final void foo();// foo()
|
||||||
|
|
||||||
public A();// .ctor()
|
public A();// .ctor()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user