KtReferenceResolver: implement resolveToPsiElements() via FE IR (~60% supported)

This commit is contained in:
Mikhail Glukhikh
2019-07-26 17:26:24 +03:00
parent 809b7d8381
commit 900227fdfa
8 changed files with 834 additions and 5 deletions
@@ -55,7 +55,6 @@ import org.jetbrains.kotlin.idea.conversion.copy.AbstractLiteralKotlinToKotlinCo
import org.jetbrains.kotlin.idea.conversion.copy.AbstractLiteralTextToKotlinCopyPasteTest
import org.jetbrains.kotlin.idea.conversion.copy.AbstractTextJavaToKotlinCopyPasteConversionTest
import org.jetbrains.kotlin.idea.coverage.AbstractKotlinCoverageOutputFilesTest
import org.jetbrains.kotlin.idea.debugger.*
import org.jetbrains.kotlin.idea.debugger.evaluate.*
import org.jetbrains.kotlin.idea.debugger.test.sequence.exec.AbstractSequenceTraceTestCase
import org.jetbrains.kotlin.idea.debugger.test.*
@@ -500,6 +499,10 @@ fun main(args: Array<String>) {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractFirReferenceResolveTest> {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractReferenceResolveInJavaTest> {
model("resolve/referenceInJava/binaryAndSource", extension = "java")
model("resolve/referenceInJava/sourceOnly", extension = "java")
@@ -502,6 +502,10 @@ fun main(args: Array<String>) {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractFirReferenceResolveTest> {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractReferenceResolveInJavaTest> {
model("resolve/referenceInJava/binaryAndSource", extension = "java")
model("resolve/referenceInJava/sourceOnly", extension = "java")
@@ -490,6 +490,10 @@ fun main(args: Array<String>) {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractFirReferenceResolveTest> {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractReferenceResolveInJavaTest> {
model("resolve/referenceInJava/binaryAndSource", extension = "java")
model("resolve/referenceInJava/sourceOnly", extension = "java")
@@ -490,6 +490,10 @@ fun main(args: Array<String>) {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractFirReferenceResolveTest> {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractReferenceResolveInJavaTest> {
model("resolve/referenceInJava/binaryAndSource", extension = "java")
model("resolve/referenceInJava/sourceOnly", extension = "java")
@@ -490,6 +490,10 @@ fun main(args: Array<String>) {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractFirReferenceResolveTest> {
model("resolve/references", pattern = KT_WITHOUT_DOTS_IN_NAME)
}
testClass<AbstractReferenceResolveInJavaTest> {
model("resolve/referenceInJava/binaryAndSource", extension = "java")
model("resolve/referenceInJava/sourceOnly", extension = "java")
@@ -21,11 +21,30 @@ import com.intellij.psi.impl.source.resolve.ResolveCache
import com.intellij.util.IncorrectOperationException
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PackageViewDescriptor
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.types.ConeLookupTagBasedType
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.fir.FirResolution
import org.jetbrains.kotlin.idea.fir.firResolveState
import org.jetbrains.kotlin.idea.fir.getOrBuildFir
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtPackageDirective
import org.jetbrains.kotlin.psi.KtReferenceExpression
import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.bindingContextUtil.getReferenceTargets
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
@@ -74,15 +93,160 @@ abstract class AbstractKtReference<T : KtElement>(element: T) : PsiPolyVariantRe
override fun toString() = this::class.java.simpleName + ": " + expression.text
companion object {
private object FirReferenceResolveHelper {
fun FirResolvedTypeRef.toTargetPsi(session: FirSession): PsiElement? {
val type = type as? ConeLookupTagBasedType ?: return null
return (type.lookupTag.toSymbol(session) as? AbstractFirBasedSymbol<*>)?.fir?.psi
}
fun ClassId.toTargetPsi(session: FirSession, calleeReference: FirReference? = null): PsiElement? {
val classLikeDeclaration = ConeClassLikeLookupTagImpl(this).toSymbol(session)?.fir
if (classLikeDeclaration is FirRegularClass) {
if (calleeReference is FirResolvedNamedReference) {
val callee = calleeReference.resolvedSymbol.fir as? FirCallableMemberDeclaration
// TODO: check callee owner directly?
if (callee !is FirConstructor && callee?.isStatic != true) {
classLikeDeclaration.companionObject?.let { return it.psi }
}
}
}
return classLikeDeclaration?.psi
}
fun FirReference.toTargetPsi(session: FirSession): PsiElement? {
return when (this) {
is FirResolvedNamedReference -> {
resolvedSymbol.fir.psi
}
is FirResolvedCallableReference -> {
resolvedSymbol.fir.psi
}
is FirThisReference -> {
boundSymbol?.fir?.psi
}
is FirSuperReference -> {
(superTypeRef as? FirResolvedTypeRef)?.toTargetPsi(session)
}
else -> {
null
}
}
}
fun resolveToPsiElements(ref: AbstractKtReference<KtElement>): Collection<PsiElement> {
val expression = ref.expression
val state = expression.firResolveState()
val session = state.getSession(expression)
when (val fir = expression.getOrBuildFir(state)) {
is FirResolvable -> {
return listOfNotNull(fir.calleeReference.toTargetPsi(session))
}
is FirResolvedTypeRef -> {
return listOfNotNull(fir.toTargetPsi(session))
}
is FirResolvedQualifier -> {
val classId = fir.classId ?: return emptyList()
// Distinguish A.foo() from A(.Companion).foo()
// Make expression.parent as? KtDotQualifiedExpression local function
var parent = expression.parent as? KtDotQualifiedExpression
while (parent != null) {
val selectorExpression = parent.selectorExpression ?: break
if (selectorExpression === expression) {
parent = parent.parent as? KtDotQualifiedExpression
continue
}
val parentFir = selectorExpression.getOrBuildFir(state)
if (parentFir is FirQualifiedAccess) {
return listOfNotNull(classId.toTargetPsi(session, parentFir.calleeReference))
}
parent = parent.parent as? KtDotQualifiedExpression
}
return listOfNotNull(classId.toTargetPsi(session))
}
is FirAnnotationCall -> {
val type = fir.typeRef as? FirResolvedTypeRef ?: return emptyList()
return listOfNotNull(type.toTargetPsi(session))
}
is FirResolvedImport -> {
var parent = expression.parent
while (parent is KtDotQualifiedExpression) {
if (parent.selectorExpression !== expression) {
// Special: package reference in the middle of import directive
// import a.<caret>b.c.SomeClass
// TODO: return reference to PsiPackage
return listOf(expression)
}
parent = parent.parent
}
val classId = fir.resolvedClassId
if (classId != null) {
return listOfNotNull(classId.toTargetPsi(session))
}
val name = fir.importedName ?: return emptyList()
val symbolProvider = session.firSymbolProvider
return symbolProvider.getTopLevelCallableSymbols(fir.packageFqName, name).mapNotNull { it.fir.psi } +
listOfNotNull(symbolProvider.getClassLikeSymbolByFqName(ClassId(fir.packageFqName, name))?.fir?.psi)
}
is FirFile -> {
if (expression.getNonStrictParentOfType<KtPackageDirective>() != null) {
// Special: package reference in the middle of package directive
return listOf(expression)
}
return listOfNotNull(fir.psi)
}
is FirArrayOfCall -> {
// We can't yet find PsiElement for arrayOf, intArrayOf, etc.
return emptyList()
}
is FirErrorNamedReference -> {
return emptyList()
}
else -> {
// Handle situation when we're in the middle/beginning of qualifier
// <caret>A.B.C.foo() or A.<caret>B.C.foo()
// NB: in this case we get some parent FIR, like FirBlock, FirProperty, FirFunction or the like
var parent = expression.parent as? KtDotQualifiedExpression
var unresolvedCounter = 1
while (parent != null) {
val selectorExpression = parent.selectorExpression ?: break
if (selectorExpression === expression) {
parent = parent.parent as? KtDotQualifiedExpression
continue
}
val parentFir = selectorExpression.getOrBuildFir(state)
if (parentFir is FirResolvedQualifier) {
var classId = parentFir.classId
while (unresolvedCounter > 0) {
unresolvedCounter--
classId = classId?.outerClassId
}
return listOfNotNull(classId?.toTargetPsi(session))
}
parent = parent.parent as? KtDotQualifiedExpression
unresolvedCounter++
}
return emptyList()
}
}
}
}
class KotlinReferenceResolver : ResolveCache.PolyVariantResolver<AbstractKtReference<KtElement>> {
class KotlinResolveResult(element: PsiElement) : PsiElementResolveResult(element)
private fun resolveToPsiElements(ref: AbstractKtReference<KtElement>): Collection<PsiElement> {
if (FirResolution.enabled) {
return FirReferenceResolveHelper.resolveToPsiElements(ref)
}
val bindingContext = ref.expression.analyze(BodyResolveMode.PARTIAL)
return resolveToPsiElements(ref, bindingContext, ref.getTargetDescriptors(bindingContext))
}
private fun resolveToPsiElements(ref: AbstractKtReference<KtElement>, context: BindingContext, targetDescriptors: Collection<DeclarationDescriptor>): Collection<PsiElement> {
private fun resolveToPsiElements(
ref: AbstractKtReference<KtElement>,
context: BindingContext,
targetDescriptors: Collection<DeclarationDescriptor>
): Collection<PsiElement> {
if (targetDescriptors.isNotEmpty()) {
return targetDescriptors.flatMap { target -> resolveToPsiElements(ref, target) }.toSet()
}
@@ -95,13 +259,15 @@ abstract class AbstractKtReference<T : KtElement>(element: T) : PsiPolyVariantRe
return Collections.emptySet()
}
private fun resolveToPsiElements(ref: AbstractKtReference<KtElement>, targetDescriptor: DeclarationDescriptor): Collection<PsiElement> {
private fun resolveToPsiElements(
ref: AbstractKtReference<KtElement>,
targetDescriptor: DeclarationDescriptor
): Collection<PsiElement> {
return if (targetDescriptor is PackageViewDescriptor) {
val psiFacade = JavaPsiFacade.getInstance(ref.expression.project)
val fqName = targetDescriptor.fqName.asString()
listOfNotNull(psiFacade.findPackage(fqName))
}
else {
} else {
DescriptorToSourceUtilsIde.getAllDeclarations(ref.expression.project, targetDescriptor, ref.expression.resolveScope)
}
}
@@ -0,0 +1,20 @@
/*
* Copyright 2010-2019 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.idea.resolve
import org.jetbrains.kotlin.idea.fir.FirResolution
abstract class AbstractFirReferenceResolveTest : AbstractReferenceResolveTest() {
override fun setUp() {
super.setUp()
FirResolution.enabled = true
}
override fun tearDown() {
FirResolution.enabled = false
super.tearDown()
}
}
@@ -0,0 +1,624 @@
/*
* Copyright 2010-2019 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.idea.resolve;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
import org.jetbrains.kotlin.test.KotlinTestUtils;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.runner.RunWith;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("idea/testData/resolve/references")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public class FirReferenceResolveTestGenerated extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInReferences() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("AnnotationForClass.kt")
public void testAnnotationForClass() throws Exception {
runTest("idea/testData/resolve/references/AnnotationForClass.kt");
}
@TestMetadata("AnnotationInsideFunction.kt")
public void testAnnotationInsideFunction() throws Exception {
runTest("idea/testData/resolve/references/AnnotationInsideFunction.kt");
}
@TestMetadata("AnnotationOnFile.kt")
public void testAnnotationOnFile() throws Exception {
runTest("idea/testData/resolve/references/AnnotationOnFile.kt");
}
@TestMetadata("AnnotationOnFileWithImport.kt")
public void testAnnotationOnFileWithImport() throws Exception {
runTest("idea/testData/resolve/references/AnnotationOnFileWithImport.kt");
}
@TestMetadata("AnnotationParameter.kt")
public void testAnnotationParameter() throws Exception {
runTest("idea/testData/resolve/references/AnnotationParameter.kt");
}
@TestMetadata("AnnotationTypeParameter.kt")
public void testAnnotationTypeParameter() throws Exception {
runTest("idea/testData/resolve/references/AnnotationTypeParameter.kt");
}
@TestMetadata("ClassInTypeConstraint.kt")
public void testClassInTypeConstraint() throws Exception {
runTest("idea/testData/resolve/references/ClassInTypeConstraint.kt");
}
@TestMetadata("ClassNameBeforeDot.kt")
public void testClassNameBeforeDot() throws Exception {
runTest("idea/testData/resolve/references/ClassNameBeforeDot.kt");
}
@TestMetadata("ClassObjectClassLiteralReference.kt")
public void testClassObjectClassLiteralReference() throws Exception {
runTest("idea/testData/resolve/references/ClassObjectClassLiteralReference.kt");
}
@TestMetadata("ClassObjectClassLiteralReferenceWithField.kt")
public void testClassObjectClassLiteralReferenceWithField() throws Exception {
runTest("idea/testData/resolve/references/ClassObjectClassLiteralReferenceWithField.kt");
}
@TestMetadata("ClassQualifierForNestedClassConstructorCall.kt")
public void testClassQualifierForNestedClassConstructorCall() throws Exception {
runTest("idea/testData/resolve/references/ClassQualifierForNestedClassConstructorCall.kt");
}
@TestMetadata("ClassReferenceInImport.kt")
public void testClassReferenceInImport() throws Exception {
runTest("idea/testData/resolve/references/ClassReferenceInImport.kt");
}
@TestMetadata("CollectionLiteralLeft.kt")
public void testCollectionLiteralLeft() throws Exception {
runTest("idea/testData/resolve/references/CollectionLiteralLeft.kt");
}
@TestMetadata("CollectionLiteralRight.kt")
public void testCollectionLiteralRight() throws Exception {
runTest("idea/testData/resolve/references/CollectionLiteralRight.kt");
}
@TestMetadata("CoroutineSuspensionPoint.kt")
public void testCoroutineSuspensionPoint() throws Exception {
runTest("idea/testData/resolve/references/CoroutineSuspensionPoint.kt");
}
@TestMetadata("CtrlClickResolve.kt")
public void testCtrlClickResolve() throws Exception {
runTest("idea/testData/resolve/references/CtrlClickResolve.kt");
}
@TestMetadata("DataClassCopy.kt")
public void testDataClassCopy() throws Exception {
runTest("idea/testData/resolve/references/DataClassCopy.kt");
}
@TestMetadata("DefaultObjectAsExtensionReceiverForFunction.kt")
public void testDefaultObjectAsExtensionReceiverForFunction() throws Exception {
runTest("idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForFunction.kt");
}
@TestMetadata("DefaultObjectAsExtensionReceiverForProperty.kt")
public void testDefaultObjectAsExtensionReceiverForProperty() throws Exception {
runTest("idea/testData/resolve/references/DefaultObjectAsExtensionReceiverForProperty.kt");
}
@TestMetadata("DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt")
public void testDefaultObjectAsReceiverForExtensionFunctionOnSuperType() throws Exception {
runTest("idea/testData/resolve/references/DefaultObjectAsReceiverForExtensionFunctionOnSuperType.kt");
}
@TestMetadata("DefaultObjectAsReceiverForMemberPropertyInSuperType.kt")
public void testDefaultObjectAsReceiverForMemberPropertyInSuperType() throws Exception {
runTest("idea/testData/resolve/references/DefaultObjectAsReceiverForMemberPropertyInSuperType.kt");
}
@TestMetadata("DefaultObjectInShortReferenceFormCall.kt")
public void testDefaultObjectInShortReferenceFormCall() throws Exception {
runTest("idea/testData/resolve/references/DefaultObjectInShortReferenceFormCall.kt");
}
@TestMetadata("EnumValues.kt")
public void testEnumValues() throws Exception {
runTest("idea/testData/resolve/references/EnumValues.kt");
}
@TestMetadata("FakeJavaLang1.kt")
public void testFakeJavaLang1() throws Exception {
runTest("idea/testData/resolve/references/FakeJavaLang1.kt");
}
@TestMetadata("FakeJavaLang2.kt")
public void testFakeJavaLang2() throws Exception {
runTest("idea/testData/resolve/references/FakeJavaLang2.kt");
}
@TestMetadata("FakeJavaLang3.kt")
public void testFakeJavaLang3() throws Exception {
runTest("idea/testData/resolve/references/FakeJavaLang3.kt");
}
@TestMetadata("FakeJavaLang4.kt")
public void testFakeJavaLang4() throws Exception {
runTest("idea/testData/resolve/references/FakeJavaLang4.kt");
}
@TestMetadata("fileRefInRawStringLiteral.kt")
public void testFileRefInRawStringLiteral() throws Exception {
runTest("idea/testData/resolve/references/fileRefInRawStringLiteral.kt");
}
@TestMetadata("fileRefInStringLiteral.kt")
public void testFileRefInStringLiteral() throws Exception {
runTest("idea/testData/resolve/references/fileRefInStringLiteral.kt");
}
@TestMetadata("GenericFunctionParameter.kt")
public void testGenericFunctionParameter() throws Exception {
runTest("idea/testData/resolve/references/GenericFunctionParameter.kt");
}
@TestMetadata("GenericTypeInFunctionParameter.kt")
public void testGenericTypeInFunctionParameter() throws Exception {
runTest("idea/testData/resolve/references/GenericTypeInFunctionParameter.kt");
}
@TestMetadata("ImportFromRootScope.kt")
public void testImportFromRootScope() throws Exception {
runTest("idea/testData/resolve/references/ImportFromRootScope.kt");
}
@TestMetadata("InClassParameter.kt")
public void testInClassParameter() throws Exception {
runTest("idea/testData/resolve/references/InClassParameter.kt");
}
@TestMetadata("InClassParameterField.kt")
public void testInClassParameterField() throws Exception {
runTest("idea/testData/resolve/references/InClassParameterField.kt");
}
@TestMetadata("InEnumEntry.kt")
public void testInEnumEntry() throws Exception {
runTest("idea/testData/resolve/references/InEnumEntry.kt");
}
@TestMetadata("InFunctionParameterType.kt")
public void testInFunctionParameterType() throws Exception {
runTest("idea/testData/resolve/references/InFunctionParameterType.kt");
}
@TestMetadata("InMethodParameter.kt")
public void testInMethodParameter() throws Exception {
runTest("idea/testData/resolve/references/InMethodParameter.kt");
}
@TestMetadata("InObjectClassObject.kt")
public void testInObjectClassObject() throws Exception {
runTest("idea/testData/resolve/references/InObjectClassObject.kt");
}
@TestMetadata("InSecondClassObject.kt")
public void testInSecondClassObject() throws Exception {
runTest("idea/testData/resolve/references/InSecondClassObject.kt");
}
@TestMetadata("JavaAnnotationParameter.kt")
public void testJavaAnnotationParameter() throws Exception {
runTest("idea/testData/resolve/references/JavaAnnotationParameter.kt");
}
@TestMetadata("JavaConstructorNotNullParameter.kt")
public void testJavaConstructorNotNullParameter() throws Exception {
runTest("idea/testData/resolve/references/JavaConstructorNotNullParameter.kt");
}
@TestMetadata("JavaEnumEntry.kt")
public void testJavaEnumEntry() throws Exception {
runTest("idea/testData/resolve/references/JavaEnumEntry.kt");
}
@TestMetadata("JavaEnumValueOf.kt")
public void testJavaEnumValueOf() throws Exception {
runTest("idea/testData/resolve/references/JavaEnumValueOf.kt");
}
@TestMetadata("JavaParameter.kt")
public void testJavaParameter() throws Exception {
runTest("idea/testData/resolve/references/JavaParameter.kt");
}
@TestMetadata("JavaReference.kt")
public void testJavaReference() throws Exception {
runTest("idea/testData/resolve/references/JavaReference.kt");
}
@TestMetadata("MultiDeclarationExtension.kt")
public void testMultiDeclarationExtension() throws Exception {
runTest("idea/testData/resolve/references/MultiDeclarationExtension.kt");
}
@TestMetadata("MultiDeclarationMember.kt")
public void testMultiDeclarationMember() throws Exception {
runTest("idea/testData/resolve/references/MultiDeclarationMember.kt");
}
@TestMetadata("NamedClassObject.kt")
public void testNamedClassObject() throws Exception {
runTest("idea/testData/resolve/references/NamedClassObject.kt");
}
@TestMetadata("PackageReference.kt")
public void testPackageReference() throws Exception {
runTest("idea/testData/resolve/references/PackageReference.kt");
}
@TestMetadata("PackageReferenceInImport.kt")
public void testPackageReferenceInImport() throws Exception {
runTest("idea/testData/resolve/references/PackageReferenceInImport.kt");
}
@TestMetadata("PropertyPlaceInClassObjectInObject.kt")
public void testPropertyPlaceInClassObjectInObject() throws Exception {
runTest("idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt");
}
@TestMetadata("ReferenceInClassWhereConstraint.kt")
public void testReferenceInClassWhereConstraint() throws Exception {
runTest("idea/testData/resolve/references/ReferenceInClassWhereConstraint.kt");
}
@TestMetadata("ReferenceInFunWhereConstraint.kt")
public void testReferenceInFunWhereConstraint() throws Exception {
runTest("idea/testData/resolve/references/ReferenceInFunWhereConstraint.kt");
}
@TestMetadata("ReferenceToSam.kt")
public void testReferenceToSam() throws Exception {
runTest("idea/testData/resolve/references/ReferenceToSam.kt");
}
@TestMetadata("ResolveClass.kt")
public void testResolveClass() throws Exception {
runTest("idea/testData/resolve/references/ResolveClass.kt");
}
@TestMetadata("ResolvePackageInProperty.kt")
public void testResolvePackageInProperty() throws Exception {
runTest("idea/testData/resolve/references/ResolvePackageInProperty.kt");
}
@TestMetadata("SamAdapter.kt")
public void testSamAdapter() throws Exception {
runTest("idea/testData/resolve/references/SamAdapter.kt");
}
@TestMetadata("SamConstructor.kt")
public void testSamConstructor() throws Exception {
runTest("idea/testData/resolve/references/SamConstructor.kt");
}
@TestMetadata("SamConstructorTypeArguments.kt")
public void testSamConstructorTypeArguments() throws Exception {
runTest("idea/testData/resolve/references/SamConstructorTypeArguments.kt");
}
@TestMetadata("SeveralOverrides.kt")
public void testSeveralOverrides() throws Exception {
runTest("idea/testData/resolve/references/SeveralOverrides.kt");
}
@TestMetadata("SyntheticProperty.kt")
public void testSyntheticProperty() throws Exception {
runTest("idea/testData/resolve/references/SyntheticProperty.kt");
}
@TestMetadata("TypeAlias.kt")
public void testTypeAlias() throws Exception {
runTest("idea/testData/resolve/references/TypeAlias.kt");
}
@TestMetadata("TypeAliasAsSupertypeConstructor.kt")
public void testTypeAliasAsSupertypeConstructor() throws Exception {
runTest("idea/testData/resolve/references/TypeAliasAsSupertypeConstructor.kt");
}
@TestMetadata("TypeAliasRHS.kt")
public void testTypeAliasRHS() throws Exception {
runTest("idea/testData/resolve/references/TypeAliasRHS.kt");
}
@TestMetadata("TypeArgumentBeforeDot.kt")
public void testTypeArgumentBeforeDot() throws Exception {
runTest("idea/testData/resolve/references/TypeArgumentBeforeDot.kt");
}
@TestMetadata("TypeArgumentBeforeDot2.kt")
public void testTypeArgumentBeforeDot2() throws Exception {
runTest("idea/testData/resolve/references/TypeArgumentBeforeDot2.kt");
}
@TestMetadata("TypeArgumentUnresolvedClass.kt")
public void testTypeArgumentUnresolvedClass() throws Exception {
runTest("idea/testData/resolve/references/TypeArgumentUnresolvedClass.kt");
}
@TestMetadata("TypeArgumentUnresolvedConstructor.kt")
public void testTypeArgumentUnresolvedConstructor() throws Exception {
runTest("idea/testData/resolve/references/TypeArgumentUnresolvedConstructor.kt");
}
@TestMetadata("TypeArgumentWrongNumber.kt")
public void testTypeArgumentWrongNumber() throws Exception {
runTest("idea/testData/resolve/references/TypeArgumentWrongNumber.kt");
}
@TestMetadata("TypeParameterInAnonymousObject.kt")
public void testTypeParameterInAnonymousObject() throws Exception {
runTest("idea/testData/resolve/references/TypeParameterInAnonymousObject.kt");
}
@TestMetadata("TypeParameterInFunctionLiteral.kt")
public void testTypeParameterInFunctionLiteral() throws Exception {
runTest("idea/testData/resolve/references/TypeParameterInFunctionLiteral.kt");
}
@TestMetadata("ValueParameter.kt")
public void testValueParameter() throws Exception {
runTest("idea/testData/resolve/references/ValueParameter.kt");
}
@TestMetadata("WrongNumberOfTypeArguments.kt")
public void testWrongNumberOfTypeArguments() throws Exception {
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments.kt");
}
@TestMetadata("WrongNumberOfTypeArguments2.kt")
public void testWrongNumberOfTypeArguments2() throws Exception {
runTest("idea/testData/resolve/references/WrongNumberOfTypeArguments2.kt");
}
@TestMetadata("WrongNumberOfTypeArgumentsInSupertype.kt")
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
runTest("idea/testData/resolve/references/WrongNumberOfTypeArgumentsInSupertype.kt");
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class DelegatedPropertyAccessors extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInDelegatedPropertyAccessors() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/delegatedPropertyAccessors"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("unresolved.kt")
public void testUnresolved() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/unresolved.kt");
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inSource")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class InSource extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInInSource() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/delegatedPropertyAccessors/inSource"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("getExtension.kt")
public void testGetExtension() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getExtension.kt");
}
@TestMetadata("getMember.kt")
public void testGetMember() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getMember.kt");
}
@TestMetadata("getMultipleDeclarations.kt")
public void testGetMultipleDeclarations() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getMultipleDeclarations.kt");
}
@TestMetadata("getOneFakeOverride.kt")
public void testGetOneFakeOverride() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inSource/getOneFakeOverride.kt");
}
}
@TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class InStandardLibrary extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInInStandardLibrary() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("lazy.kt")
public void testLazy() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary/lazy.kt");
}
@TestMetadata("notNull.kt")
public void testNotNull() throws Exception {
runTest("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary/notNull.kt");
}
}
}
@TestMetadata("idea/testData/resolve/references/forLoopIn")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class ForLoopIn extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInForLoopIn() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/forLoopIn"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("unresolvedIterator.kt")
public void testUnresolvedIterator() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/unresolvedIterator.kt");
}
@TestMetadata("idea/testData/resolve/references/forLoopIn/inBuiltIns")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class InBuiltIns extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInInBuiltIns() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/forLoopIn/inBuiltIns"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("extension.kt")
public void testExtension() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inBuiltIns/extension.kt");
}
@TestMetadata("member.kt")
public void testMember() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inBuiltIns/member.kt");
}
}
@TestMetadata("idea/testData/resolve/references/forLoopIn/inLibrary")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class InLibrary extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInInLibrary() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/forLoopIn/inLibrary"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("extension.kt")
public void testExtension() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inLibrary/extension.kt");
}
}
@TestMetadata("idea/testData/resolve/references/forLoopIn/inSource")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class InSource extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
@TestMetadata("allExtensions.kt")
public void testAllExtensions() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inSource/allExtensions.kt");
}
public void testAllFilesPresentInInSource() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/forLoopIn/inSource"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("allMembers.kt")
public void testAllMembers() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inSource/allMembers.kt");
}
@TestMetadata("nextMissing.kt")
public void testNextMissing() throws Exception {
runTest("idea/testData/resolve/references/forLoopIn/inSource/nextMissing.kt");
}
}
}
@TestMetadata("idea/testData/resolve/references/invoke")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class Invoke extends AbstractFirReferenceResolveTest {
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
public void testAllFilesPresentInInvoke() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/resolve/references/invoke"), Pattern.compile("^([^.]+)\\.kt$"), true);
}
@TestMetadata("lambdaAndParens.kt")
public void testLambdaAndParens() throws Exception {
runTest("idea/testData/resolve/references/invoke/lambdaAndParens.kt");
}
@TestMetadata("lambdaNoPar.kt")
public void testLambdaNoPar() throws Exception {
runTest("idea/testData/resolve/references/invoke/lambdaNoPar.kt");
}
@TestMetadata("lambdaNoParLabel.kt")
public void testLambdaNoParLabel() throws Exception {
runTest("idea/testData/resolve/references/invoke/lambdaNoParLabel.kt");
}
@TestMetadata("lambdaNoParRCurly.kt")
public void testLambdaNoParRCurly() throws Exception {
runTest("idea/testData/resolve/references/invoke/lambdaNoParRCurly.kt");
}
@TestMetadata("noParams.kt")
public void testNoParams() throws Exception {
runTest("idea/testData/resolve/references/invoke/noParams.kt");
}
@TestMetadata("noParamsRPar.kt")
public void testNoParamsRPar() throws Exception {
runTest("idea/testData/resolve/references/invoke/noParamsRPar.kt");
}
@TestMetadata("nonemptyLambdaRPar.kt")
public void testNonemptyLambdaRPar() throws Exception {
runTest("idea/testData/resolve/references/invoke/nonemptyLambdaRPar.kt");
}
@TestMetadata("oneParam.kt")
public void testOneParam() throws Exception {
runTest("idea/testData/resolve/references/invoke/oneParam.kt");
}
@TestMetadata("oneParamRPar.kt")
public void testOneParamRPar() throws Exception {
runTest("idea/testData/resolve/references/invoke/oneParamRPar.kt");
}
}
}