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.KtFunctionSymbol
|
||||
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.light.classes.symbol.classes.analyseForLightClasses
|
||||
import org.jetbrains.kotlin.light.classes.symbol.classes.createField
|
||||
@@ -92,6 +92,7 @@ class FirLightClassForFacade(
|
||||
for (callableSymbol in fileSymbol.getFileScope().getCallableSymbols()) {
|
||||
if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue
|
||||
if (callableSymbol !is KtSymbolWithVisibility) continue
|
||||
if ((callableSymbol as? KtAnnotatedSymbol)?.hasInlineOnlyAnnotation() == true) continue
|
||||
val isPrivate = callableSymbol.toPsiVisibilityForMember(isTopLevel = true) == PsiModifier.PRIVATE
|
||||
if (isPrivate && multiFileClass) continue
|
||||
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.api.symbols.*
|
||||
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.tokens.HackToForceAllowRunningAnalyzeOnEDT
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.hackyAllowRunningOnEdt
|
||||
@@ -192,7 +193,10 @@ internal fun FirLightClassBase.createMethods(
|
||||
fun handleDeclaration(declaration: KtCallableSymbol) {
|
||||
when (declaration) {
|
||||
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
|
||||
result.add(
|
||||
@@ -259,7 +263,7 @@ internal fun FirLightClassBase.createPropertyAccessors(
|
||||
if (declaration.hasJvmFieldAnnotation()) return
|
||||
|
||||
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
||||
if (isInline) return false
|
||||
if (declaration.hasReifiedParameters) return false
|
||||
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
||||
if (declaration.isHiddenOrSynthetic(project, siteTarget)) 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*/ {
|
||||
@kotlin.Suppress(names = "INVISIBLE_REFERENCE")
|
||||
@kotlin.internal.InlineOnly()
|
||||
private final void foo();// foo()
|
||||
|
||||
public A();// .ctor()
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user