diff --git a/analysis/symbol-light-classes/testData/structure/Annotations.inheritors.txt b/analysis/symbol-light-classes/testData/structure/Annotations.inheritors.txt index 235f1b289c6..4ba669f7e2a 100644 --- a/analysis/symbol-light-classes/testData/structure/Annotations.inheritors.txt +++ b/analysis/symbol-light-classes/testData/structure/Annotations.inheritors.txt @@ -1,5 +1,5 @@ -one.MyAnnotationClass|java.lang.annotation.Annotation|false| -> true -one.MyAnnotationClass|java.lang.annotation.Annotation|true| -> true -one.MyAnnotationClass|java.lang.Object|false| -> true -one.MyAnnotationClass|java.lang.Object|true| -> true -one.MyAnnotationClass|java.util.Collection|true| -> false +subClass: one.MyAnnotationClass, superClass: java.lang.annotation.Annotation, deepSearch: false -> true +subClass: one.MyAnnotationClass, superClass: java.lang.annotation.Annotation, deepSearch: true -> true +subClass: one.MyAnnotationClass, superClass: java.lang.Object, deepSearch: false -> true +subClass: one.MyAnnotationClass, superClass: java.lang.Object, deepSearch: true -> true +subClass: one.MyAnnotationClass, superClass: java.util.Collection, deepSearch: true -> false diff --git a/analysis/symbol-light-classes/testData/structure/Classes.inheritors.txt b/analysis/symbol-light-classes/testData/structure/Classes.inheritors.txt index df8397d5b37..c09c63b8b34 100644 --- a/analysis/symbol-light-classes/testData/structure/Classes.inheritors.txt +++ b/analysis/symbol-light-classes/testData/structure/Classes.inheritors.txt @@ -1,12 +1,12 @@ -cba.ChildOfOpen|cba.OpenClassFromAbstractClass|false| -> true -cba.ChildOfOpen|cba.OpenClassFromAbstractClass|true| -> true -cba.ChildOfOpen|java.lang.Object|false| -> false -cba.ChildOfOpen|java.lang.Object|true| -> true -cba.ChildOfOpen|cba.AbstractClass|false| -> false -cba.ChildOfOpen|cba.AbstractClass|true| -> true -cba.OpenClassFromAbstractClass|cba.AbstractClass|false| -> true -cba.OpenClassFromAbstractClass|cba.AbstractClass|true| -> true -cba.OpenClassFromAbstractClass|cba.OpenClassFromAbstractClass|false| -> false -cba.OpenClassFromAbstractClass|cba.OpenClassFromAbstractClass|true| -> false -cba.OpenClassFromAbstractClass|cba.FinalClass|false| -> false -cba.OpenClassFromAbstractClass|cba.FinalClass|true| -> false \ No newline at end of file +subClass: cba.ChildOfOpen, superClass: cba.OpenClassFromAbstractClass, deepSearch: false -> true +subClass: cba.ChildOfOpen, superClass: cba.OpenClassFromAbstractClass, deepSearch: true -> true +subClass: cba.ChildOfOpen, superClass: java.lang.Object, deepSearch: false -> false +subClass: cba.ChildOfOpen, superClass: java.lang.Object, deepSearch: true -> true +subClass: cba.ChildOfOpen, superClass: cba.AbstractClass, deepSearch: false -> false +subClass: cba.ChildOfOpen, superClass: cba.AbstractClass, deepSearch: true -> true +subClass: cba.OpenClassFromAbstractClass, superClass: cba.AbstractClass, deepSearch: false -> true +subClass: cba.OpenClassFromAbstractClass, superClass: cba.AbstractClass, deepSearch: true -> true +subClass: cba.OpenClassFromAbstractClass, superClass: cba.OpenClassFromAbstractClass, deepSearch: false -> false +subClass: cba.OpenClassFromAbstractClass, superClass: cba.OpenClassFromAbstractClass, deepSearch: true -> false +subClass: cba.OpenClassFromAbstractClass, superClass: cba.FinalClass, deepSearch: false -> false +subClass: cba.OpenClassFromAbstractClass, superClass: cba.FinalClass, deepSearch: true -> false diff --git a/analysis/symbol-light-classes/testData/structure/EnumEntries.inheritors.txt b/analysis/symbol-light-classes/testData/structure/EnumEntries.inheritors.txt index 7f7cd80b422..f1a86cf283a 100644 --- a/analysis/symbol-light-classes/testData/structure/EnumEntries.inheritors.txt +++ b/analysis/symbol-light-classes/testData/structure/EnumEntries.inheritors.txt @@ -1,14 +1,14 @@ -one.two.EnumEntries|java.lang.Object|false| -> false -one.two.EnumEntries|java.lang.Object|true| -> true -one.two.EnumEntries|java.lang.Enum|false| -> true -one.two.EnumEntries|java.lang.Enum|true| -> true -one.two.EnumEntries.SecondEntryWithBody|java.lang.Enum|false| -> false -one.two.EnumEntries.SecondEntryWithBody|java.lang.Enum|true| -> true -one.two.EnumEntries.SecondEntryWithBody|one.two.EnumEntries|false| -> true -one.two.EnumEntries.SecondEntryWithBody|one.two.EnumEntries|true| -> true -one.two.EnumEntries.SecondEntryWithBody|java.lang.Object|false| -> false -one.two.EnumEntries.SecondEntryWithBody|java.lang.Object|true| -> true -one.two.EnumEntries.SecondEntryWithBody|one.two.BaseInterface|false| -> false -one.two.EnumEntries.SecondEntryWithBody|one.two.BaseInterface|true| -> false -one.two.EnumClassWithInterface.NewSecondEntryWithBody|one.two.BaseInterface|false| -> false -one.two.EnumClassWithInterface.NewSecondEntryWithBody|one.two.BaseInterface|true| -> true +subClass: one.two.EnumEntries, superClass: java.lang.Object, deepSearch: false -> false +subClass: one.two.EnumEntries, superClass: java.lang.Object, deepSearch: true -> true +subClass: one.two.EnumEntries, superClass: java.lang.Enum, deepSearch: false -> true +subClass: one.two.EnumEntries, superClass: java.lang.Enum, deepSearch: true -> true +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: java.lang.Enum, deepSearch: false -> false +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: java.lang.Enum, deepSearch: true -> true +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: one.two.EnumEntries, deepSearch: false -> true +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: one.two.EnumEntries, deepSearch: true -> true +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: java.lang.Object, deepSearch: false -> false +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: java.lang.Object, deepSearch: true -> true +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: one.two.BaseInterface, deepSearch: false -> false +subClass: one.two.EnumEntries.SecondEntryWithBody, superClass: one.two.BaseInterface, deepSearch: true -> false +subClass: one.two.EnumClassWithInterface.NewSecondEntryWithBody, superClass: one.two.BaseInterface, deepSearch: false -> false +subClass: one.two.EnumClassWithInterface.NewSecondEntryWithBody, superClass: one.two.BaseInterface, deepSearch: true -> true diff --git a/analysis/symbol-light-classes/testData/structure/Objects.inheritors.txt b/analysis/symbol-light-classes/testData/structure/Objects.inheritors.txt index eb676df9b91..ff17bf56507 100644 --- a/analysis/symbol-light-classes/testData/structure/Objects.inheritors.txt +++ b/analysis/symbol-light-classes/testData/structure/Objects.inheritors.txt @@ -1,22 +1,22 @@ -two.Object|java.lang.Object|false| -> true -two.Object|java.lang.Object|true| -> true -two.Object|two.BaseInterface|false| -> false -two.Object|two.BaseInterface|true| -> false -two.ObjectWithInterface|two.BaseInterface|false| -> true -two.ObjectWithInterface|two.BaseInterface|true| -> true -two.ObjectWithInterface|java.lang.Object|false| -> true -two.ObjectWithInterface|java.lang.Object|true| -> true -two.ObjectWithClassAndInterface|java.lang.Object|false| -> false -two.ObjectWithClassAndInterface|java.lang.Object|true| -> true -two.ObjectWithClassAndInterface|two.NonBaseClass|false| -> true -two.ObjectWithClassAndInterface|two.NonBaseClass|true| -> true -two.ObjectWithClassAndInterface|two.NonBaseInterface|false| -> true -two.ObjectWithClassAndInterface|two.NonBaseInterface|true| -> true -two.ObjectWithClassAndJavaInterface|java.lang.Object|false| -> false -two.ObjectWithClassAndJavaInterface|java.lang.Object|true| -> true -two.ObjectWithClassAndJavaInterface|two.NonBaseClass|false| -> true -two.ObjectWithClassAndJavaInterface|two.NonBaseClass|true| -> true -two.ObjectWithClassAndJavaInterface|two.NonBaseInterface|false| -> false -two.ObjectWithClassAndJavaInterface|two.NonBaseInterface|true| -> false -two.ObjectWithClassAndJavaInterface|java.lang.Runnable|false| -> true -two.ObjectWithClassAndJavaInterface|java.lang.Runnable|true| -> true +subClass: two.Object, superClass: java.lang.Object, deepSearch: false -> true +subClass: two.Object, superClass: java.lang.Object, deepSearch: true -> true +subClass: two.Object, superClass: two.BaseInterface, deepSearch: false -> false +subClass: two.Object, superClass: two.BaseInterface, deepSearch: true -> false +subClass: two.ObjectWithInterface, superClass: two.BaseInterface, deepSearch: false -> true +subClass: two.ObjectWithInterface, superClass: two.BaseInterface, deepSearch: true -> true +subClass: two.ObjectWithInterface, superClass: java.lang.Object, deepSearch: false -> true +subClass: two.ObjectWithInterface, superClass: java.lang.Object, deepSearch: true -> true +subClass: two.ObjectWithClassAndInterface, superClass: java.lang.Object, deepSearch: false -> false +subClass: two.ObjectWithClassAndInterface, superClass: java.lang.Object, deepSearch: true -> true +subClass: two.ObjectWithClassAndInterface, superClass: two.NonBaseClass, deepSearch: false -> true +subClass: two.ObjectWithClassAndInterface, superClass: two.NonBaseClass, deepSearch: true -> true +subClass: two.ObjectWithClassAndInterface, superClass: two.NonBaseInterface, deepSearch: false -> true +subClass: two.ObjectWithClassAndInterface, superClass: two.NonBaseInterface, deepSearch: true -> true +subClass: two.ObjectWithClassAndJavaInterface, superClass: java.lang.Object, deepSearch: false -> false +subClass: two.ObjectWithClassAndJavaInterface, superClass: java.lang.Object, deepSearch: true -> true +subClass: two.ObjectWithClassAndJavaInterface, superClass: two.NonBaseClass, deepSearch: false -> true +subClass: two.ObjectWithClassAndJavaInterface, superClass: two.NonBaseClass, deepSearch: true -> true +subClass: two.ObjectWithClassAndJavaInterface, superClass: two.NonBaseInterface, deepSearch: false -> false +subClass: two.ObjectWithClassAndJavaInterface, superClass: two.NonBaseInterface, deepSearch: true -> false +subClass: two.ObjectWithClassAndJavaInterface, superClass: java.lang.Runnable, deepSearch: false -> true +subClass: two.ObjectWithClassAndJavaInterface, superClass: java.lang.Runnable, deepSearch: true -> true diff --git a/analysis/symbol-light-classes/testData/structureByFqName/DefaultImpls.inheritors.txt b/analysis/symbol-light-classes/testData/structureByFqName/DefaultImpls.inheritors.txt index 6bb5f9310fe..099d5472dab 100644 --- a/analysis/symbol-light-classes/testData/structureByFqName/DefaultImpls.inheritors.txt +++ b/analysis/symbol-light-classes/testData/structureByFqName/DefaultImpls.inheritors.txt @@ -1,2 +1,2 @@ -one.two.MyInterface.DefaultImpls|java.lang.Object|false| -> true -one.two.MyInterface.DefaultImpls|java.lang.Object|true| -> true +subClass: one.two.MyInterface.DefaultImpls, superClass: java.lang.Object, deepSearch: false -> true +subClass: one.two.MyInterface.DefaultImpls, superClass: java.lang.Object, deepSearch: true -> true diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesStructureTest.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesStructureTest.kt index 5ac6e7c7d68..f6f3489bcf9 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesStructureTest.kt +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesStructureTest.kt @@ -25,6 +25,8 @@ import kotlin.io.path.forEachLine import kotlin.io.path.notExists private const val INHERITORS_EXTENSION = "inheritors.txt" +private const val PAIRS_DELIMITER = ", " +private const val VALUE_DELIMITER = ": " abstract class AbstractSymbolLightClassesStructureTest( configurator: AnalysisApiTestConfigurator, @@ -60,12 +62,21 @@ abstract class AbstractSymbolLightClassesStructureTest( val queries = parseInheritorsFile(testData) val result = buildString { for (query in queries) { + append("subClass") + append(VALUE_DELIMITER) append(query.fqNameToCheck) - append('|') + append(PAIRS_DELIMITER) + + append("superClass") + append(VALUE_DELIMITER) append(query.baseFqName) - append('|') + append(PAIRS_DELIMITER) + + append("deepSearch") + append(VALUE_DELIMITER) append(query.deep.toString()) - append("| -> ") + + append(" -> ") appendLine(query.isInheritor(project).toString()) } } @@ -89,10 +100,21 @@ abstract class AbstractSymbolLightClassesStructureTest( path.forEachLine { line: String -> if (line.isBlank()) return@forEachLine - val arguments = line.split('|') - val fqNameToCheck = arguments.getOrNull(0) ?: wrongInheritorStructure(line) - val baseFqName = arguments.getOrNull(1) ?: wrongInheritorStructure(line) - val deep = arguments.getOrNull(2)?.toBoolean() ?: wrongInheritorStructure(line) + val arguments = line.split(PAIRS_DELIMITER) + val fqNameToCheck = arguments.getOrNull(0) + ?.substringAfter(VALUE_DELIMITER) + ?: wrongInheritorStructure(line) + + val baseFqName = arguments.getOrNull(1) + ?.substringAfter(VALUE_DELIMITER) + ?: wrongInheritorStructure(line) + + val deep = arguments.getOrNull(2) + ?.substringAfter(VALUE_DELIMITER) + ?.substringBefore(' ') + ?.toBoolean() + ?: wrongInheritorStructure(line) + add(InheritorStructure(fqNameToCheck = fqNameToCheck, baseFqName = baseFqName, deep = deep)) } }.toSet()