[LL FIR] get rid of on-air resolve of partial type qualifiers

It's very slow and leads to performance problems (see KT-58125)

Instead, we do the following:

- For a fully resolved type qualifier, when we want to resolve its part,
 we are looking for the corresponding symbol by traversing nested classes
 bottom up.
 - For an error qualifier, we are trying to resolve the maximum possible
  qualifier in the types transformer where all the type scopes are
  already available.

^KT-58125 fixed
This commit is contained in:
Ilya Kirillov
2023-05-27 15:11:20 +02:00
committed by Space Team
parent 51cf0ce3e5
commit 481962d5f6
42 changed files with 600 additions and 33 deletions
@@ -2158,5 +2158,75 @@ public class Fe10IdeNormalAnalysisSourceModuleReferenceResolveTestGenerated exte
public void testWrongNumberOfTypeArgumentsInSupertype() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/WrongNumberOfTypeArgumentsInSupertype.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier")
@TestDataPath("$PROJECT_ROOT")
public class PartiallyUnresolvedTypeQualifier {
@Test
public void testAllFilesPresentInPartiallyUnresolvedTypeQualifier() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("ClassNameBeforeOneUnsresolvedClass.kt")
public void testClassNameBeforeOneUnsresolvedClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeOneUnsresolvedClass.kt");
}
@Test
@TestMetadata("ClassNameBeforeOneUnsresolvedClassWithDot.kt")
public void testClassNameBeforeOneUnsresolvedClassWithDot() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeOneUnsresolvedClassWithDot.kt");
}
@Test
@TestMetadata("ClassNameBeforeOneUnsresolvedClassWithTwoResolved.kt")
public void testClassNameBeforeOneUnsresolvedClassWithTwoResolved() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeOneUnsresolvedClassWithTwoResolved.kt");
}
@Test
@TestMetadata("ClassNameBeforeOneUnsresolvedClassWithTwoResolvedWithDot.kt")
public void testClassNameBeforeOneUnsresolvedClassWithTwoResolvedWithDot() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeOneUnsresolvedClassWithTwoResolvedWithDot.kt");
}
@Test
@TestMetadata("ClassNameBeforeTwoUnsresolvedClasses.kt")
public void testClassNameBeforeTwoUnsresolvedClasses() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeTwoUnsresolvedClasses.kt");
}
@Test
@TestMetadata("ClassNameBeforeTwoUnsresolvedClassesTwoResolved.kt")
public void testClassNameBeforeTwoUnsresolvedClassesTwoResolved() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeTwoUnsresolvedClassesTwoResolved.kt");
}
@Test
@TestMetadata("ClassNameBeforeTwoUnsresolvedClassesWithDot.kt")
public void testClassNameBeforeTwoUnsresolvedClassesWithDot() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameBeforeTwoUnsresolvedClassesWithDot.kt");
}
@Test
@TestMetadata("ClassNameSecondQualifierBeforeOneUnsresolvedClass.kt")
public void testClassNameSecondQualifierBeforeOneUnsresolvedClass() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameSecondQualifierBeforeOneUnsresolvedClass.kt");
}
@Test
@TestMetadata("ClassNameSecondQualifierBeforeOneUnsresolvedClassWithDot.kt")
public void testClassNameSecondQualifierBeforeOneUnsresolvedClassWithDot() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameSecondQualifierBeforeOneUnsresolvedClassWithDot.kt");
}
@Test
@TestMetadata("ClassNameSecondQualifierBeforeOneUnsresolvedClassWithTwoResolvedWithDot.kt")
public void testClassNameSecondQualifierBeforeOneUnsresolvedClassWithTwoResolvedWithDot() throws Exception {
runTest("analysis/analysis-api/testData/referenceResolve/withErrors/partiallyUnresolvedTypeQualifier/ClassNameSecondQualifierBeforeOneUnsresolvedClassWithTwoResolvedWithDot.kt");
}
}
}
}