From ea59ea8aa2dd475e6bc5a49b6dc8b0b6841cae03 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Tue, 17 Mar 2020 12:17:22 +0300 Subject: [PATCH] NI: avoid creating useless captured types during incorporation ^KT-37546 Fixed --- .../definetelyNotNullForTypeParameter.txt | 2 +- ...irOldFrontendDiagnosticsTestGenerated.java | 5 + .../components/ConstraintIncorporator.kt | 104 +- .../avoidCreatingUselessCapturedTypes.kt | 2238 +++++++++++++++++ .../avoidCreatingUselessCapturedTypes.txt | 9 + .../checkers/DiagnosticsTestGenerated.java | 5 + .../DiagnosticsUsingJavacTestGenerated.java | 5 + 7 files changed, 2337 insertions(+), 31 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt create mode 100644 compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.txt diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/definetelyNotNullForTypeParameter.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/definetelyNotNullForTypeParameter.txt index a98d52191d6..f659d303353 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/definetelyNotNullForTypeParameter.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/definetelyNotNullForTypeParameter.txt @@ -6,5 +6,5 @@ FILE: definetelyNotNullForTypeParameter.kt } public final fun foo(computable: R|Out|): R|kotlin/Unit| public final fun bar(computable: R|Out|): R|kotlin/Unit| { - R|/foo|(R|/id|(R|/computable|)) + R|/foo|(R|/id|(R|/computable|)) } diff --git a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index 48762dee97a..e8884bfce29 100644 --- a/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -10278,6 +10278,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/approximateBeforeFixation.kt"); } + @TestMetadata("avoidCreatingUselessCapturedTypes.kt") + public void testAvoidCreatingUselessCapturedTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt"); + } + @TestMetadata("cannotCaptureInProjection.kt") public void testCannotCaptureInProjection() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/cannotCaptureInProjection.kt"); diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt index fc792fb9d6c..29406d5a581 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt @@ -113,50 +113,94 @@ class ConstraintIncorporator( } } + private fun Context.approximateIfNeededAndAddNewConstraint( + baseConstraint: Constraint, + type: KotlinTypeMarker, + targetVariable: TypeVariableMarker, + otherVariable: TypeVariableMarker, + otherConstraint: Constraint, + needApproximation: Boolean = true + ) { + val typeWithSubstitution = baseConstraint.type.substitute(this, otherVariable, type) + val prepareType = { toSuper: Boolean -> + if (needApproximation) approximateCapturedTypes(typeWithSubstitution, toSuper) else typeWithSubstitution + } + + when (baseConstraint.kind) { + ConstraintKind.EQUALITY -> { + addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, typeWithSubstitution, isSubtype = false) + addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, typeWithSubstitution, isSubtype = true) + } + ConstraintKind.UPPER -> { + addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, prepareType(true), isSubtype = false) + } + ConstraintKind.LOWER -> { + addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, prepareType(false), isSubtype = true) + } + } + } + private fun Context.generateNewConstraint( targetVariable: TypeVariableMarker, baseConstraint: Constraint, otherVariable: TypeVariableMarker, otherConstraint: Constraint ) { - val typeWithSubstitution = when (otherConstraint.kind) { + val isBaseGenericType = baseConstraint.type.argumentsCount() != 0 + val isOtherCapturedType = otherConstraint.type.isCapturedType() + val (type, needApproximation) = when (otherConstraint.kind) { ConstraintKind.EQUALITY -> { - baseConstraint.type.substitute(this, otherVariable, otherConstraint.type) + otherConstraint.type to true } ConstraintKind.UPPER -> { - val temporaryCapturedType = createCapturedType( - createTypeArgument(otherConstraint.type, TypeVariance.OUT), - listOf(otherConstraint.type), - null, - CaptureStatus.FOR_INCORPORATION - ) - baseConstraint.type.substitute(this, otherVariable, temporaryCapturedType) + /* + * Creating a captured type isn't needed due to its future approximation to `Nothing` or itself + * Example: + * targetVariable = TypeVariable(A) + * baseConstraint = LOWER(TypeVariable(B)) + * otherConstraint = UPPER(Number) + * incorporatedConstraint = Approx(CapturedType(out Number)) <: TypeVariable(A) => Nothing <: TypeVariable(A) + * TODO: implement this for generics and captured types + */ + if (baseConstraint.kind == ConstraintKind.LOWER && !isBaseGenericType && !isOtherCapturedType) { + nothingType() to false + } else if (baseConstraint.kind == ConstraintKind.UPPER && !isBaseGenericType && !isOtherCapturedType) { + otherConstraint.type to false + } else { + createCapturedType( + createTypeArgument(otherConstraint.type, TypeVariance.OUT), + listOf(otherConstraint.type), + null, + CaptureStatus.FOR_INCORPORATION + ) to true + } } ConstraintKind.LOWER -> { - val temporaryCapturedType = createCapturedType( - createTypeArgument(otherConstraint.type, TypeVariance.IN), - emptyList(), - otherConstraint.type, - CaptureStatus.FOR_INCORPORATION - ) - baseConstraint.type.substitute(this, otherVariable, temporaryCapturedType) + /* + * Creating a captured type isn't needed due to its future approximation to `Any?` or itself + * Example: + * targetVariable = TypeVariable(A) + * baseConstraint = UPPER(TypeVariable(B)) + * otherConstraint = LOWER(Number) + * incorporatedConstraint = TypeVariable(A) <: Approx(CapturedType(in Number)) => TypeVariable(A) <: Any? + * TODO: implement this for generics and captured types + */ + if (baseConstraint.kind == ConstraintKind.UPPER && !isBaseGenericType && !isOtherCapturedType) { + nullableAnyType() to false + } else if (baseConstraint.kind == ConstraintKind.LOWER && !isBaseGenericType && !isOtherCapturedType) { + otherConstraint.type to false + } else { + createCapturedType( + createTypeArgument(otherConstraint.type, TypeVariance.IN), + emptyList(), + otherConstraint.type, + CaptureStatus.FOR_INCORPORATION + ) to true + } } } - when (baseConstraint.kind) { - ConstraintKind.EQUALITY -> { - addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, typeWithSubstitution, isSubtype = true) - addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, typeWithSubstitution, isSubtype = false) - } - ConstraintKind.UPPER -> { - val generatedConstraintType = approximateCapturedTypes(typeWithSubstitution, toSuper = true) - addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, generatedConstraintType, isSubtype = false) - } - ConstraintKind.LOWER -> { - val generatedConstraintType = approximateCapturedTypes(typeWithSubstitution, toSuper = false) - addNewConstraint(targetVariable, baseConstraint, otherVariable, otherConstraint, generatedConstraintType, isSubtype = true) - } - } + approximateIfNeededAndAddNewConstraint(baseConstraint, type, targetVariable, otherVariable, otherConstraint, needApproximation) } private fun Context.addNewConstraint( diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt b/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt new file mode 100644 index 00000000000..b7758a20fdb --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt @@ -0,0 +1,2238 @@ +// FIR_IDENTICAL +// WITH_RUNTIME + +object Entities { + val map: Map = hashMapOf( + "Á" to 193, + "Á" to 193, + "á" to 225, + "á" to 225, + "Ă" to 258, + "ă" to 259, + "∾" to 8766, + "∿" to 8767, + "∾̳" to 8766, + "Â" to 194, + "Â" to 194, + "â" to 226, + "â" to 226, + "´" to 180, + "´" to 180, + "А" to 1040, + "а" to 1072, + "Æ" to 198, + "Æ" to 198, + "æ" to 230, + "æ" to 230, + "⁡" to 8289, + "𝔄" to 120068, + "𝔞" to 120094, + "À" to 192, + "À" to 192, + "à" to 224, + "à" to 224, + "ℵ" to 8501, + "ℵ" to 8501, + "Α" to 913, + "α" to 945, + "Ā" to 256, + "ā" to 257, + "⨿" to 10815, + "&" to 38, + "&" to 38, + "&" to 38, + "&" to 38, + "⩕" to 10837, + "⩓" to 10835, + "∧" to 8743, + "⩜" to 10844, + "⩘" to 10840, + "⩚" to 10842, + "∠" to 8736, + "⦤" to 10660, + "∠" to 8736, + "⦨" to 10664, + "⦩" to 10665, + "⦪" to 10666, + "⦫" to 10667, + "⦬" to 10668, + "⦭" to 10669, + "⦮" to 10670, + "⦯" to 10671, + "∡" to 8737, + "∟" to 8735, + "⊾" to 8894, + "⦝" to 10653, + "∢" to 8738, + "Å" to 197, + "⍼" to 9084, + "Ą" to 260, + "ą" to 261, + "𝔸" to 120120, + "𝕒" to 120146, + "⩯" to 10863, + "≈" to 8776, + "⩰" to 10864, + "≊" to 8778, + "≋" to 8779, + "'" to 39, + "⁡" to 8289, + "≈" to 8776, + "≊" to 8778, + "Å" to 197, + "Å" to 197, + "å" to 229, + "å" to 229, + "𝒜" to 119964, + "𝒶" to 119990, + "≔" to 8788, + "*" to 42, + "≈" to 8776, + "≍" to 8781, + "Ã" to 195, + "Ã" to 195, + "ã" to 227, + "ã" to 227, + "Ä" to 196, + "Ä" to 196, + "ä" to 228, + "ä" to 228, + "∳" to 8755, + "⨑" to 10769, + "≌" to 8780, + "϶" to 1014, + "‵" to 8245, + "∽" to 8765, + "⋍" to 8909, + "∖" to 8726, + "⫧" to 10983, + "⊽" to 8893, + "⌅" to 8965, + "⌆" to 8966, + "⌅" to 8965, + "⎵" to 9141, + "⎶" to 9142, + "≌" to 8780, + "Б" to 1041, + "б" to 1073, + "„" to 8222, + "∵" to 8757, + "∵" to 8757, + "∵" to 8757, + "⦰" to 10672, + "϶" to 1014, + "ℬ" to 8492, + "ℬ" to 8492, + "Β" to 914, + "β" to 946, + "ℶ" to 8502, + "≬" to 8812, + "𝔅" to 120069, + "𝔟" to 120095, + "⋂" to 8898, + "◯" to 9711, + "⋃" to 8899, + "⨀" to 10752, + "⨁" to 10753, + "⨂" to 10754, + "⨆" to 10758, + "★" to 9733, + "▽" to 9661, + "△" to 9651, + "⨄" to 10756, + "⋁" to 8897, + "⋀" to 8896, + "⤍" to 10509, + "⧫" to 10731, + "▪" to 9642, + "▴" to 9652, + "▾" to 9662, + "◂" to 9666, + "▸" to 9656, + "␣" to 9251, + "▒" to 9618, + "░" to 9617, + "▓" to 9619, + "█" to 9608, + "=⃥" to 61, + "≡⃥" to 8801, + "⫭" to 10989, + "⌐" to 8976, + "𝔹" to 120121, + "𝕓" to 120147, + "⊥" to 8869, + "⊥" to 8869, + "⋈" to 8904, + "⧉" to 10697, + "┐" to 9488, + "╕" to 9557, + "╖" to 9558, + "╗" to 9559, + "┌" to 9484, + "╒" to 9554, + "╓" to 9555, + "╔" to 9556, + "─" to 9472, + "═" to 9552, + "┬" to 9516, + "╤" to 9572, + "╥" to 9573, + "╦" to 9574, + "┴" to 9524, + "╧" to 9575, + "╨" to 9576, + "╩" to 9577, + "⊟" to 8863, + "⊞" to 8862, + "⊠" to 8864, + "┘" to 9496, + "╛" to 9563, + "╜" to 9564, + "╝" to 9565, + "└" to 9492, + "╘" to 9560, + "╙" to 9561, + "╚" to 9562, + "│" to 9474, + "║" to 9553, + "┼" to 9532, + "╪" to 9578, + "╫" to 9579, + "╬" to 9580, + "┤" to 9508, + "╡" to 9569, + "╢" to 9570, + "╣" to 9571, + "├" to 9500, + "╞" to 9566, + "╟" to 9567, + "╠" to 9568, + "‵" to 8245, + "˘" to 728, + "˘" to 728, + "¦" to 166, + "¦" to 166, + "𝒷" to 119991, + "ℬ" to 8492, + "⁏" to 8271, + "∽" to 8765, + "⋍" to 8909, + "⧅" to 10693, + "\" to 92, + "⟈" to 10184, + "•" to 8226, + "•" to 8226, + "≎" to 8782, + "⪮" to 10926, + "≏" to 8783, + "≎" to 8782, + "≏" to 8783, + "Ć" to 262, + "ć" to 263, + "⩄" to 10820, + "⩉" to 10825, + "⩋" to 10827, + "∩" to 8745, + "⋒" to 8914, + "⩇" to 10823, + "⩀" to 10816, + "ⅅ" to 8517, + "∩︀" to 8745, + "⁁" to 8257, + "ˇ" to 711, + "ℭ" to 8493, + "⩍" to 10829, + "Č" to 268, + "č" to 269, + "Ç" to 199, + "Ç" to 199, + "ç" to 231, + "ç" to 231, + "Ĉ" to 264, + "ĉ" to 265, + "∰" to 8752, + "⩌" to 10828, + "⩐" to 10832, + "Ċ" to 266, + "ċ" to 267, + "¸" to 184, + "¸" to 184, + "¸" to 184, + "⦲" to 10674, + "¢" to 162, + "¢" to 162, + "·" to 183, + "·" to 183, + "𝔠" to 120096, + "ℭ" to 8493, + "Ч" to 1063, + "ч" to 1095, + "✓" to 10003, + "✓" to 10003, + "Χ" to 935, + "χ" to 967, + "ˆ" to 710, + "≗" to 8791, + "↺" to 8634, + "↻" to 8635, + "⊛" to 8859, + "⊚" to 8858, + "⊝" to 8861, + "⊙" to 8857, + "®" to 174, + "Ⓢ" to 9416, + "⊖" to 8854, + "⊕" to 8853, + "⊗" to 8855, + "○" to 9675, + "⧃" to 10691, + "≗" to 8791, + "⨐" to 10768, + "⫯" to 10991, + "⧂" to 10690, + "∲" to 8754, + "”" to 8221, + "’" to 8217, + "♣" to 9827, + "♣" to 9827, + ":" to 58, + "∷" to 8759, + "⩴" to 10868, + "≔" to 8788, + "≔" to 8788, + "," to 44, + "@" to 64, + "∁" to 8705, + "∘" to 8728, + "∁" to 8705, + "ℂ" to 8450, + "≅" to 8773, + "⩭" to 10861, + "≡" to 8801, + "∮" to 8750, + "∯" to 8751, + "∮" to 8750, + "𝕔" to 120148, + "ℂ" to 8450, + "∐" to 8720, + "∐" to 8720, + "©" to 169, + "©" to 169, + "©" to 169, + "©" to 169, + "℗" to 8471, + "∳" to 8755, + "↵" to 8629, + "✗" to 10007, + "⨯" to 10799, + "𝒞" to 119966, + "𝒸" to 119992, + "⫏" to 10959, + "⫑" to 10961, + "⫐" to 10960, + "⫒" to 10962, + "⋯" to 8943, + "⤸" to 10552, + "⤵" to 10549, + "⋞" to 8926, + "⋟" to 8927, + "↶" to 8630, + "⤽" to 10557, + "⩈" to 10824, + "⩆" to 10822, + "≍" to 8781, + "∪" to 8746, + "⋓" to 8915, + "⩊" to 10826, + "⊍" to 8845, + "⩅" to 10821, + "∪︀" to 8746, + "↷" to 8631, + "⤼" to 10556, + "⋞" to 8926, + "⋟" to 8927, + "⋎" to 8910, + "⋏" to 8911, + "¤" to 164, + "¤" to 164, + "↶" to 8630, + "↷" to 8631, + "⋎" to 8910, + "⋏" to 8911, + "∲" to 8754, + "∱" to 8753, + "⌭" to 9005, + "†" to 8224, + "‡" to 8225, + "ℸ" to 8504, + "↓" to 8595, + "↡" to 8609, + "⇓" to 8659, + "‐" to 8208, + "⫤" to 10980, + "⊣" to 8867, + "⤏" to 10511, + "˝" to 733, + "Ď" to 270, + "ď" to 271, + "Д" to 1044, + "д" to 1076, + "‡" to 8225, + "⇊" to 8650, + "ⅅ" to 8517, + "ⅆ" to 8518, + "⤑" to 10513, + "⩷" to 10871, + "°" to 176, + "°" to 176, + "∇" to 8711, + "Δ" to 916, + "δ" to 948, + "⦱" to 10673, + "⥿" to 10623, + "𝔇" to 120071, + "𝔡" to 120097, + "⥥" to 10597, + "⇃" to 8643, + "⇂" to 8642, + "´" to 180, + "˙" to 729, + "˝" to 733, + "`" to 96, + "˜" to 732, + "⋄" to 8900, + "⋄" to 8900, + "⋄" to 8900, + "♦" to 9830, + "♦" to 9830, + "¨" to 168, + "ⅆ" to 8518, + "ϝ" to 989, + "⋲" to 8946, + "÷" to 247, + "÷" to 247, + "÷" to 247, + "⋇" to 8903, + "⋇" to 8903, + "Ђ" to 1026, + "ђ" to 1106, + "⌞" to 8990, + "⌍" to 8973, + "$" to 36, + "𝔻" to 120123, + "𝕕" to 120149, + "¨" to 168, + "˙" to 729, + "⃜" to 8412, + "≐" to 8784, + "≑" to 8785, + "≐" to 8784, + "∸" to 8760, + "∔" to 8724, + "⊡" to 8865, + "⌆" to 8966, + "∯" to 8751, + "¨" to 168, + "⇓" to 8659, + "⇐" to 8656, + "⇔" to 8660, + "⫤" to 10980, + "⟸" to 10232, + "⟺" to 10234, + "⟹" to 10233, + "⇒" to 8658, + "⊨" to 8872, + "⇑" to 8657, + "⇕" to 8661, + "∥" to 8741, + "⤓" to 10515, + "↓" to 8595, + "↓" to 8595, + "⇓" to 8659, + "⇵" to 8693, + "̑" to 785, + "⇊" to 8650, + "⇃" to 8643, + "⇂" to 8642, + "⥐" to 10576, + "⥞" to 10590, + "⥖" to 10582, + "↽" to 8637, + "⥟" to 10591, + "⥗" to 10583, + "⇁" to 8641, + "↧" to 8615, + "⊤" to 8868, + "⤐" to 10512, + "⌟" to 8991, + "⌌" to 8972, + "𝒟" to 119967, + "𝒹" to 119993, + "Ѕ" to 1029, + "ѕ" to 1109, + "⧶" to 10742, + "Đ" to 272, + "đ" to 273, + "⋱" to 8945, + "▿" to 9663, + "▾" to 9662, + "⇵" to 8693, + "⥯" to 10607, + "⦦" to 10662, + "Џ" to 1039, + "џ" to 1119, + "⟿" to 10239, + "É" to 201, + "É" to 201, + "é" to 233, + "é" to 233, + "⩮" to 10862, + "Ě" to 282, + "ě" to 283, + "Ê" to 202, + "Ê" to 202, + "ê" to 234, + "ê" to 234, + "≖" to 8790, + "≕" to 8789, + "Э" to 1069, + "э" to 1101, + // It's computed too long, uncomment this for testing relevant changes +// "⩷" to 10871, +// "Ė" to 278, +// "ė" to 279, +// "≑" to 8785, +// "ⅇ" to 8519, +// "≒" to 8786, +// "𝔈" to 120072, +// "𝔢" to 120098, +// "⪚" to 10906, +// "È" to 200, +// "È" to 200, +// "è" to 232, +// "è" to 232, +// "⪖" to 10902, +// "⪘" to 10904, +// "⪙" to 10905, +// "∈" to 8712, +// "⏧" to 9191, +// "ℓ" to 8467, +// "⪕" to 10901, +// "⪗" to 10903, +// "Ē" to 274, +// "ē" to 275, +// "∅" to 8709, +// "∅" to 8709, +// "◻" to 9723, +// "∅" to 8709, +// "▫" to 9643, +// " " to 8196, +// " " to 8197, +// " " to 8195, +// "Ŋ" to 330, +// "ŋ" to 331, +// " " to 8194, +// "Ę" to 280, +// "ę" to 281, +// "𝔼" to 120124, +// "𝕖" to 120150, +// "⋕" to 8917, +// "⧣" to 10723, +// "⩱" to 10865, +// "ε" to 949, +// "Ε" to 917, +// "ε" to 949, +// "ϵ" to 1013, +// "≖" to 8790, +// "≕" to 8789, +// "≂" to 8770, +// "⪖" to 10902, +// "⪕" to 10901, +// "⩵" to 10869, +// "=" to 61, +// "≂" to 8770, +// "≟" to 8799, +// "⇌" to 8652, +// "≡" to 8801, +// "⩸" to 10872, +// "⧥" to 10725, +// "⥱" to 10609, +// "≓" to 8787, +// "ℯ" to 8495, +// "ℰ" to 8496, +// "≐" to 8784, +// "⩳" to 10867, +// "≂" to 8770, +// "Η" to 919, +// "η" to 951, +// "Ð" to 208, +// "Ð" to 208, +// "ð" to 240, +// "ð" to 240, +// "Ë" to 203, +// "Ë" to 203, +// "ë" to 235, +// "ë" to 235, +// "€" to 8364, +// "!" to 33, +// "∃" to 8707, +// "∃" to 8707, +// "ℰ" to 8496, +// "ⅇ" to 8519, +// "ⅇ" to 8519, +// "≒" to 8786, +// "Ф" to 1060, +// "ф" to 1092, +// "♀" to 9792, +// "ffi" to 64259, +// "ff" to 64256, +// "ffl" to 64260, +// "𝔉" to 120073, +// "𝔣" to 120099, +// "fi" to 64257, +// "◼" to 9724, +// "▪" to 9642, +// "fj" to 102, +// "♭" to 9837, +// "fl" to 64258, +// "▱" to 9649, +// "ƒ" to 402, +// "𝔽" to 120125, +// "𝕗" to 120151, +// "∀" to 8704, +// "∀" to 8704, +// "⋔" to 8916, +// "⫙" to 10969, +// "ℱ" to 8497, +// "⨍" to 10765, +// "½" to 189, +// "½" to 189, +// "⅓" to 8531, +// "¼" to 188, +// "¼" to 188, +// "⅕" to 8533, +// "⅙" to 8537, +// "⅛" to 8539, +// "⅔" to 8532, +// "⅖" to 8534, +// "¾" to 190, +// "¾" to 190, +// "⅗" to 8535, +// "⅜" to 8540, +// "⅘" to 8536, +// "⅚" to 8538, +// "⅝" to 8541, +// "⅞" to 8542, +// "⁄" to 8260, +// "⌢" to 8994, +// "𝒻" to 119995, +// "ℱ" to 8497, +// "ǵ" to 501, +// "Γ" to 915, +// "γ" to 947, +// "Ϝ" to 988, +// "ϝ" to 989, +// "⪆" to 10886, +// "Ğ" to 286, +// "ğ" to 287, +// "Ģ" to 290, +// "Ĝ" to 284, +// "ĝ" to 285, +// "Г" to 1043, +// "г" to 1075, +// "Ġ" to 288, +// "ġ" to 289, +// "≥" to 8805, +// "≧" to 8807, +// "⪌" to 10892, +// "⋛" to 8923, +// "≥" to 8805, +// "≧" to 8807, +// "⩾" to 10878, +// "⪩" to 10921, +// "⩾" to 10878, +// "⪀" to 10880, +// "⪂" to 10882, +// "⪄" to 10884, +// "⋛︀" to 8923, +// "⪔" to 10900, +// "𝔊" to 120074, +// "𝔤" to 120100, +// "≫" to 8811, +// "⋙" to 8921, +// "⋙" to 8921, +// "ℷ" to 8503, +// "Ѓ" to 1027, +// "ѓ" to 1107, +// "⪥" to 10917, +// "≷" to 8823, +// "⪒" to 10898, +// "⪤" to 10916, +// "⪊" to 10890, +// "⪊" to 10890, +// "⪈" to 10888, +// "≩" to 8809, +// "⪈" to 10888, +// "≩" to 8809, +// "⋧" to 8935, +// "𝔾" to 120126, +// "𝕘" to 120152, +// "`" to 96, +// "≥" to 8805, +// "⋛" to 8923, +// "≧" to 8807, +// "⪢" to 10914, +// "≷" to 8823, +// "⩾" to 10878, +// "≳" to 8819, +// "𝒢" to 119970, +// "ℊ" to 8458, +// "≳" to 8819, +// "⪎" to 10894, +// "⪐" to 10896, +// "⪧" to 10919, +// "⩺" to 10874, +// ">" to 62, +// ">" to 62, +// ">" to 62, +// ">" to 62, +// "≫" to 8811, +// "⋗" to 8919, +// "⦕" to 10645, +// "⩼" to 10876, +// "⪆" to 10886, +// "⥸" to 10616, +// "⋗" to 8919, +// "⋛" to 8923, +// "⪌" to 10892, +// "≷" to 8823, +// "≳" to 8819, +// "≩︀" to 8809, +// "≩︀" to 8809, +// "ˇ" to 711, +// " " to 8202, +// "½" to 189, +// "ℋ" to 8459, +// "Ъ" to 1066, +// "ъ" to 1098, +// "⥈" to 10568, +// "↔" to 8596, +// "⇔" to 8660, +// "↭" to 8621, +// "^" to 94, +// "ℏ" to 8463, +// "Ĥ" to 292, +// "ĥ" to 293, +// "♥" to 9829, +// "♥" to 9829, +// "…" to 8230, +// "⊹" to 8889, +// "𝔥" to 120101, +// "ℌ" to 8460, +// "ℋ" to 8459, +// "⤥" to 10533, +// "⤦" to 10534, +// "⇿" to 8703, +// "∻" to 8763, +// "↩" to 8617, +// "↪" to 8618, +// "𝕙" to 120153, +// "ℍ" to 8461, +// "―" to 8213, +// "─" to 9472, +// "𝒽" to 119997, +// "ℋ" to 8459, +// "ℏ" to 8463, +// "Ħ" to 294, +// "ħ" to 295, +// "≎" to 8782, +// "≏" to 8783, +// "⁃" to 8259, +// "‐" to 8208, +// "Í" to 205, +// "Í" to 205, +// "í" to 237, +// "í" to 237, +// "⁣" to 8291, +// "Î" to 206, +// "Î" to 206, +// "î" to 238, +// "î" to 238, +// "И" to 1048, +// "и" to 1080, +// "İ" to 304, +// "Е" to 1045, +// "е" to 1077, +// "¡" to 161, +// "¡" to 161, +// "⇔" to 8660, +// "𝔦" to 120102, +// "ℑ" to 8465, +// "Ì" to 204, +// "Ì" to 204, +// "ì" to 236, +// "ì" to 236, +// "ⅈ" to 8520, +// "⨌" to 10764, +// "∭" to 8749, +// "⧜" to 10716, +// "℩" to 8489, +// "IJ" to 306, +// "ij" to 307, +// "Ī" to 298, +// "ī" to 299, +// "ℑ" to 8465, +// "ⅈ" to 8520, +// "ℐ" to 8464, +// "ℑ" to 8465, +// "ı" to 305, +// "ℑ" to 8465, +// "⊷" to 8887, +// "Ƶ" to 437, +// "⇒" to 8658, +// "℅" to 8453, +// "∈" to 8712, +// "∞" to 8734, +// "⧝" to 10717, +// "ı" to 305, +// "⊺" to 8890, +// "∫" to 8747, +// "∬" to 8748, +// "ℤ" to 8484, +// "∫" to 8747, +// "⊺" to 8890, +// "⋂" to 8898, +// "⨗" to 10775, +// "⨼" to 10812, +// "⁣" to 8291, +// "⁢" to 8290, +// "Ё" to 1025, +// "ё" to 1105, +// "Į" to 302, +// "į" to 303, +// "𝕀" to 120128, +// "𝕚" to 120154, +// "Ι" to 921, +// "ι" to 953, +// "⨼" to 10812, +// "¿" to 191, +// "¿" to 191, +// "𝒾" to 119998, +// "ℐ" to 8464, +// "∈" to 8712, +// "⋵" to 8949, +// "⋹" to 8953, +// "⋴" to 8948, +// "⋳" to 8947, +// "∈" to 8712, +// "⁢" to 8290, +// "Ĩ" to 296, +// "ĩ" to 297, +// "І" to 1030, +// "і" to 1110, +// "Ï" to 207, +// "Ï" to 207, +// "ï" to 239, +// "ï" to 239, +// "Ĵ" to 308, +// "ĵ" to 309, +// "Й" to 1049, +// "й" to 1081, +// "𝔍" to 120077, +// "𝔧" to 120103, +// "ȷ" to 567, +// "𝕁" to 120129, +// "𝕛" to 120155, +// "𝒥" to 119973, +// "𝒿" to 119999, +// "Ј" to 1032, +// "ј" to 1112, +// "Є" to 1028, +// "є" to 1108, +// "Κ" to 922, +// "κ" to 954, +// "ϰ" to 1008, +// "Ķ" to 310, +// "ķ" to 311, +// "К" to 1050, +// "к" to 1082, +// "𝔎" to 120078, +// "𝔨" to 120104, +// "ĸ" to 312, +// "Х" to 1061, +// "х" to 1093, +// "Ќ" to 1036, +// "ќ" to 1116, +// "𝕂" to 120130, +// "𝕜" to 120156, +// "𝒦" to 119974, +// "𝓀" to 120000, +// "⇚" to 8666, +// "Ĺ" to 313, +// "ĺ" to 314, +// "⦴" to 10676, +// "ℒ" to 8466, +// "Λ" to 923, +// "λ" to 955, +// "⟨" to 10216, +// "⟪" to 10218, +// "⦑" to 10641, +// "⟨" to 10216, +// "⪅" to 10885, +// "ℒ" to 8466, +// "«" to 171, +// "«" to 171, +// "⇤" to 8676, +// "⤟" to 10527, +// "←" to 8592, +// "↞" to 8606, +// "⇐" to 8656, +// "⤝" to 10525, +// "↩" to 8617, +// "↫" to 8619, +// "⤹" to 10553, +// "⥳" to 10611, +// "↢" to 8610, +// "⤙" to 10521, +// "⤛" to 10523, +// "⪫" to 10923, +// "⪭" to 10925, +// "⪭︀" to 10925, +// "⤌" to 10508, +// "⤎" to 10510, +// "❲" to 10098, +// "{" to 123, +// "[" to 91, +// "⦋" to 10635, +// "⦏" to 10639, +// "⦍" to 10637, +// "Ľ" to 317, +// "ľ" to 318, +// "Ļ" to 315, +// "ļ" to 316, +// "⌈" to 8968, +// "{" to 123, +// "Л" to 1051, +// "л" to 1083, +// "⤶" to 10550, +// "“" to 8220, +// "„" to 8222, +// "⥧" to 10599, +// "⥋" to 10571, +// "↲" to 8626, +// "≤" to 8804, +// "≦" to 8806, +// "⟨" to 10216, +// "⇤" to 8676, +// "←" to 8592, +// "←" to 8592, +// "⇐" to 8656, +// "⇆" to 8646, +// "↢" to 8610, +// "⌈" to 8968, +// "⟦" to 10214, +// "⥡" to 10593, +// "⥙" to 10585, +// "⇃" to 8643, +// "⌊" to 8970, +// "↽" to 8637, +// "↼" to 8636, +// "⇇" to 8647, +// "↔" to 8596, +// "↔" to 8596, +// "⇔" to 8660, +// "⇆" to 8646, +// "⇋" to 8651, +// "↭" to 8621, +// "⥎" to 10574, +// "↤" to 8612, +// "⊣" to 8867, +// "⥚" to 10586, +// "⋋" to 8907, +// "⧏" to 10703, +// "⊲" to 8882, +// "⊴" to 8884, +// "⥑" to 10577, +// "⥠" to 10592, +// "⥘" to 10584, +// "↿" to 8639, +// "⥒" to 10578, +// "↼" to 8636, +// "⪋" to 10891, +// "⋚" to 8922, +// "≤" to 8804, +// "≦" to 8806, +// "⩽" to 10877, +// "⪨" to 10920, +// "⩽" to 10877, +// "⩿" to 10879, +// "⪁" to 10881, +// "⪃" to 10883, +// "⋚︀" to 8922, +// "⪓" to 10899, +// "⪅" to 10885, +// "⋖" to 8918, +// "⋚" to 8922, +// "⪋" to 10891, +// "⋚" to 8922, +// "≦" to 8806, +// "≶" to 8822, +// "≶" to 8822, +// "⪡" to 10913, +// "≲" to 8818, +// "⩽" to 10877, +// "≲" to 8818, +// "⥼" to 10620, +// "⌊" to 8970, +// "𝔏" to 120079, +// "𝔩" to 120105, +// "≶" to 8822, +// "⪑" to 10897, +// "⥢" to 10594, +// "↽" to 8637, +// "↼" to 8636, +// "⥪" to 10602, +// "▄" to 9604, +// "Љ" to 1033, +// "љ" to 1113, +// "⇇" to 8647, +// "≪" to 8810, +// "⋘" to 8920, +// "⌞" to 8990, +// "⇚" to 8666, +// "⥫" to 10603, +// "◺" to 9722, +// "Ŀ" to 319, +// "ŀ" to 320, +// "⎰" to 9136, +// "⎰" to 9136, +// "⪉" to 10889, +// "⪉" to 10889, +// "⪇" to 10887, +// "≨" to 8808, +// "⪇" to 10887, +// "≨" to 8808, +// "⋦" to 8934, +// "⟬" to 10220, +// "⇽" to 8701, +// "⟦" to 10214, +// "⟵" to 10229, +// "⟵" to 10229, +// "⟸" to 10232, +// "⟷" to 10231, +// "⟷" to 10231, +// "⟺" to 10234, +// "⟼" to 10236, +// "⟶" to 10230, +// "⟶" to 10230, +// "⟹" to 10233, +// "↫" to 8619, +// "↬" to 8620, +// "⦅" to 10629, +// "𝕃" to 120131, +// "𝕝" to 120157, +// "⨭" to 10797, +// "⨴" to 10804, +// "∗" to 8727, +// "_" to 95, +// "↙" to 8601, +// "↘" to 8600, +// "◊" to 9674, +// "◊" to 9674, +// "⧫" to 10731, +// "(" to 40, +// "⦓" to 10643, +// "⇆" to 8646, +// "⌟" to 8991, +// "⇋" to 8651, +// "⥭" to 10605, +// "‎" to 8206, +// "⊿" to 8895, +// "‹" to 8249, +// "𝓁" to 120001, +// "ℒ" to 8466, +// "↰" to 8624, +// "↰" to 8624, +// "≲" to 8818, +// "⪍" to 10893, +// "⪏" to 10895, +// "[" to 91, +// "‘" to 8216, +// "‚" to 8218, +// "Ł" to 321, +// "ł" to 322, +// "⪦" to 10918, +// "⩹" to 10873, +// "<" to 60, +// "<" to 60, +// "<" to 60, +// "<" to 60, +// "≪" to 8810, +// "⋖" to 8918, +// "⋋" to 8907, +// "⋉" to 8905, +// "⥶" to 10614, +// "⩻" to 10875, +// "◃" to 9667, +// "⊴" to 8884, +// "◂" to 9666, +// "⦖" to 10646, +// "⥊" to 10570, +// "⥦" to 10598, +// "≨︀" to 8808, +// "≨︀" to 8808, +// "¯" to 175, +// "¯" to 175, +// "♂" to 9794, +// "✠" to 10016, +// "✠" to 10016, +// "⤅" to 10501, +// "↦" to 8614, +// "↦" to 8614, +// "↧" to 8615, +// "↤" to 8612, +// "↥" to 8613, +// "▮" to 9646, +// "⨩" to 10793, +// "М" to 1052, +// "м" to 1084, +// "—" to 8212, +// "∺" to 8762, +// "∡" to 8737, +// " " to 8287, +// "ℳ" to 8499, +// "𝔐" to 120080, +// "𝔪" to 120106, +// "℧" to 8487, +// "µ" to 181, +// "µ" to 181, +// "*" to 42, +// "⫰" to 10992, +// "∣" to 8739, +// "·" to 183, +// "·" to 183, +// "⊟" to 8863, +// "−" to 8722, +// "∸" to 8760, +// "⨪" to 10794, +// "∓" to 8723, +// "⫛" to 10971, +// "…" to 8230, +// "∓" to 8723, +// "⊧" to 8871, +// "𝕄" to 120132, +// "𝕞" to 120158, +// "∓" to 8723, +// "𝓂" to 120002, +// "ℳ" to 8499, +// "∾" to 8766, +// "Μ" to 924, +// "μ" to 956, +// "⊸" to 8888, +// "⊸" to 8888, +// "∇" to 8711, +// "Ń" to 323, +// "ń" to 324, +// "∠⃒" to 8736, +// "≉" to 8777, +// "⩰̸" to 10864, +// "≋̸" to 8779, +// "ʼn" to 329, +// "≉" to 8777, +// "♮" to 9838, +// "ℕ" to 8469, +// "♮" to 9838, +// " " to 160, +// " " to 160, +// "≎̸" to 8782, +// "≏̸" to 8783, +// "⩃" to 10819, +// "Ň" to 327, +// "ň" to 328, +// "Ņ" to 325, +// "ņ" to 326, +// "≇" to 8775, +// "⩭̸" to 10861, +// "⩂" to 10818, +// "Н" to 1053, +// "н" to 1085, +// "–" to 8211, +// "⤤" to 10532, +// "↗" to 8599, +// "⇗" to 8663, +// "↗" to 8599, +// "≠" to 8800, +// "≐̸" to 8784, +// "​" to 8203, +// "​" to 8203, +// "​" to 8203, +// "​" to 8203, +// "≢" to 8802, +// "⤨" to 10536, +// "≂̸" to 8770, +// "≫" to 8811, +// "≪" to 8810, +// " " to 10, +// "∄" to 8708, +// "∄" to 8708, +// "𝔑" to 120081, +// "𝔫" to 120107, +// "≧̸" to 8807, +// "≱" to 8817, +// "≱" to 8817, +// "≧̸" to 8807, +// "⩾̸" to 10878, +// "⩾̸" to 10878, +// "⋙̸" to 8921, +// "≵" to 8821, +// "≫⃒" to 8811, +// "≯" to 8815, +// "≯" to 8815, +// "≫̸" to 8811, +// "↮" to 8622, +// "⇎" to 8654, +// "⫲" to 10994, +// "∋" to 8715, +// "⋼" to 8956, +// "⋺" to 8954, +// "∋" to 8715, +// "Њ" to 1034, +// "њ" to 1114, +// "↚" to 8602, +// "⇍" to 8653, +// "‥" to 8229, +// "≦̸" to 8806, +// "≰" to 8816, +// "↚" to 8602, +// "⇍" to 8653, +// "↮" to 8622, +// "⇎" to 8654, +// "≰" to 8816, +// "≦̸" to 8806, +// "⩽̸" to 10877, +// "⩽̸" to 10877, +// "≮" to 8814, +// "⋘̸" to 8920, +// "≴" to 8820, +// "≪⃒" to 8810, +// "≮" to 8814, +// "⋪" to 8938, +// "⋬" to 8940, +// "≪̸" to 8810, +// "∤" to 8740, +// "⁠" to 8288, +// " " to 160, +// "𝕟" to 120159, +// "ℕ" to 8469, +// "⫬" to 10988, +// "¬" to 172, +// "¬" to 172, +// "≢" to 8802, +// "≭" to 8813, +// "∦" to 8742, +// "∉" to 8713, +// "≠" to 8800, +// "≂̸" to 8770, +// "∄" to 8708, +// "≯" to 8815, +// "≱" to 8817, +// "≧̸" to 8807, +// "≫̸" to 8811, +// "≹" to 8825, +// "⩾̸" to 10878, +// "≵" to 8821, +// "≎̸" to 8782, +// "≏̸" to 8783, +// "∉" to 8713, +// "⋵̸" to 8949, +// "⋹̸" to 8953, +// "∉" to 8713, +// "⋷" to 8951, +// "⋶" to 8950, +// "⧏̸" to 10703, +// "⋪" to 8938, +// "⋬" to 8940, +// "≮" to 8814, +// "≰" to 8816, +// "≸" to 8824, +// "≪̸" to 8810, +// "⩽̸" to 10877, +// "≴" to 8820, +// "⪢̸" to 10914, +// "⪡̸" to 10913, +// "∌" to 8716, +// "∌" to 8716, +// "⋾" to 8958, +// "⋽" to 8957, +// "⊀" to 8832, +// "⪯̸" to 10927, +// "⋠" to 8928, +// "∌" to 8716, +// "⧐̸" to 10704, +// "⋫" to 8939, +// "⋭" to 8941, +// "⊏̸" to 8847, +// "⋢" to 8930, +// "⊐̸" to 8848, +// "⋣" to 8931, +// "⊂⃒" to 8834, +// "⊈" to 8840, +// "⊁" to 8833, +// "⪰̸" to 10928, +// "⋡" to 8929, +// "≿̸" to 8831, +// "⊃⃒" to 8835, +// "⊉" to 8841, +// "≁" to 8769, +// "≄" to 8772, +// "≇" to 8775, +// "≉" to 8777, +// "∤" to 8740, +// "∦" to 8742, +// "∦" to 8742, +// "⫽⃥" to 11005, +// "∂̸" to 8706, +// "⨔" to 10772, +// "⊀" to 8832, +// "⋠" to 8928, +// "⊀" to 8832, +// "⪯̸" to 10927, +// "⪯̸" to 10927, +// "⤳̸" to 10547, +// "↛" to 8603, +// "⇏" to 8655, +// "↝̸" to 8605, +// "↛" to 8603, +// "⇏" to 8655, +// "⋫" to 8939, +// "⋭" to 8941, +// "⊁" to 8833, +// "⋡" to 8929, +// "⪰̸" to 10928, +// "𝒩" to 119977, +// "𝓃" to 120003, +// "∤" to 8740, +// "∦" to 8742, +// "≁" to 8769, +// "≄" to 8772, +// "≄" to 8772, +// "∤" to 8740, +// "∦" to 8742, +// "⋢" to 8930, +// "⋣" to 8931, +// "⊄" to 8836, +// "⫅̸" to 10949, +// "⊈" to 8840, +// "⊂⃒" to 8834, +// "⊈" to 8840, +// "⫅̸" to 10949, +// "⊁" to 8833, +// "⪰̸" to 10928, +// "⊅" to 8837, +// "⫆̸" to 10950, +// "⊉" to 8841, +// "⊃⃒" to 8835, +// "⊉" to 8841, +// "⫆̸" to 10950, +// "≹" to 8825, +// "Ñ" to 209, +// "Ñ" to 209, +// "ñ" to 241, +// "ñ" to 241, +// "≸" to 8824, +// "⋪" to 8938, +// "⋬" to 8940, +// "⋫" to 8939, +// "⋭" to 8941, +// "Ν" to 925, +// "ν" to 957, +// "#" to 35, +// "№" to 8470, +// " " to 8199, +// "≍⃒" to 8781, +// "⊬" to 8876, +// "⊭" to 8877, +// "⊮" to 8878, +// "⊯" to 8879, +// "≥⃒" to 8805, +// ">⃒" to 62, +// "⤄" to 10500, +// "⧞" to 10718, +// "⤂" to 10498, +// "≤⃒" to 8804, +// "<⃒" to 60, +// "⊴⃒" to 8884, +// "⤃" to 10499, +// "⊵⃒" to 8885, +// "∼⃒" to 8764, +// "⤣" to 10531, +// "↖" to 8598, +// "⇖" to 8662, +// "↖" to 8598, +// "⤧" to 10535, +// "Ó" to 211, +// "Ó" to 211, +// "ó" to 243, +// "ó" to 243, +// "⊛" to 8859, +// "Ô" to 212, +// "Ô" to 212, +// "ô" to 244, +// "ô" to 244, +// "⊚" to 8858, +// "О" to 1054, +// "о" to 1086, +// "⊝" to 8861, +// "Ő" to 336, +// "ő" to 337, +// "⨸" to 10808, +// "⊙" to 8857, +// "⦼" to 10684, +// "Œ" to 338, +// "œ" to 339, +// "⦿" to 10687, +// "𝔒" to 120082, +// "𝔬" to 120108, +// "˛" to 731, +// "Ò" to 210, +// "Ò" to 210, +// "ò" to 242, +// "ò" to 242, +// "⧁" to 10689, +// "⦵" to 10677, +// "Ω" to 937, +// "∮" to 8750, +// "↺" to 8634, +// "⦾" to 10686, +// "⦻" to 10683, +// "‾" to 8254, +// "⧀" to 10688, +// "Ō" to 332, +// "ō" to 333, +// "Ω" to 937, +// "ω" to 969, +// "Ο" to 927, +// "ο" to 959, +// "⦶" to 10678, +// "⊖" to 8854, +// "𝕆" to 120134, +// "𝕠" to 120160, +// "⦷" to 10679, +// "“" to 8220, +// "‘" to 8216, +// "⦹" to 10681, +// "⊕" to 8853, +// "↻" to 8635, +// "⩔" to 10836, +// "∨" to 8744, +// "⩝" to 10845, +// "ℴ" to 8500, +// "ℴ" to 8500, +// "ª" to 170, +// "ª" to 170, +// "º" to 186, +// "º" to 186, +// "⊶" to 8886, +// "⩖" to 10838, +// "⩗" to 10839, +// "⩛" to 10843, +// "Ⓢ" to 9416, +// "𝒪" to 119978, +// "ℴ" to 8500, +// "Ø" to 216, +// "Ø" to 216, +// "ø" to 248, +// "ø" to 248, +// "⊘" to 8856, +// "Õ" to 213, +// "Õ" to 213, +// "õ" to 245, +// "õ" to 245, +// "⨶" to 10806, +// "⨷" to 10807, +// "⊗" to 8855, +// "Ö" to 214, +// "Ö" to 214, +// "ö" to 246, +// "ö" to 246, +// "⌽" to 9021, +// "‾" to 8254, +// "⏞" to 9182, +// "⎴" to 9140, +// "⏜" to 9180, +// "¶" to 182, +// "¶" to 182, +// "∥" to 8741, +// "∥" to 8741, +// "⫳" to 10995, +// "⫽" to 11005, +// "∂" to 8706, +// "∂" to 8706, +// "П" to 1055, +// "п" to 1087, +// "%" to 37, +// "." to 46, +// "‰" to 8240, +// "⊥" to 8869, +// "‱" to 8241, +// "𝔓" to 120083, +// "𝔭" to 120109, +// "Φ" to 934, +// "φ" to 966, +// "ϕ" to 981, +// "ℳ" to 8499, +// "☎" to 9742, +// "Π" to 928, +// "π" to 960, +// "⋔" to 8916, +// "ϖ" to 982, +// "ℏ" to 8463, +// "ℎ" to 8462, +// "ℏ" to 8463, +// "⨣" to 10787, +// "⊞" to 8862, +// "⨢" to 10786, +// "+" to 43, +// "∔" to 8724, +// "⨥" to 10789, +// "⩲" to 10866, +// "±" to 177, +// "±" to 177, +// "±" to 177, +// "⨦" to 10790, +// "⨧" to 10791, +// "±" to 177, +// "ℌ" to 8460, +// "⨕" to 10773, +// "𝕡" to 120161, +// "ℙ" to 8473, +// "£" to 163, +// "£" to 163, +// "⪷" to 10935, +// "⪻" to 10939, +// "≺" to 8826, +// "≼" to 8828, +// "⪷" to 10935, +// "≺" to 8826, +// "≼" to 8828, +// "≺" to 8826, +// "⪯" to 10927, +// "≼" to 8828, +// "≾" to 8830, +// "⪯" to 10927, +// "⪹" to 10937, +// "⪵" to 10933, +// "⋨" to 8936, +// "⪯" to 10927, +// "⪳" to 10931, +// "≾" to 8830, +// "′" to 8242, +// "″" to 8243, +// "ℙ" to 8473, +// "⪹" to 10937, +// "⪵" to 10933, +// "⋨" to 8936, +// "∏" to 8719, +// "∏" to 8719, +// "⌮" to 9006, +// "⌒" to 8978, +// "⌓" to 8979, +// "∝" to 8733, +// "∝" to 8733, +// "∷" to 8759, +// "∝" to 8733, +// "≾" to 8830, +// "⊰" to 8880, +// "𝒫" to 119979, +// "𝓅" to 120005, +// "Ψ" to 936, +// "ψ" to 968, +// " " to 8200, +// "𝔔" to 120084, +// "𝔮" to 120110, +// "⨌" to 10764, +// "𝕢" to 120162, +// "ℚ" to 8474, +// "⁗" to 8279, +// "𝒬" to 119980, +// "𝓆" to 120006, +// "ℍ" to 8461, +// "⨖" to 10774, +// "?" to 63, +// "≟" to 8799, +// """ to 34, +// """ to 34, +// """ to 34, +// """ to 34, +// "⇛" to 8667, +// "∽̱" to 8765, +// "Ŕ" to 340, +// "ŕ" to 341, +// "√" to 8730, +// "⦳" to 10675, +// "⟩" to 10217, +// "⟫" to 10219, +// "⦒" to 10642, +// "⦥" to 10661, +// "⟩" to 10217, +// "»" to 187, +// "»" to 187, +// "⥵" to 10613, +// "⇥" to 8677, +// "⤠" to 10528, +// "⤳" to 10547, +// "→" to 8594, +// "↠" to 8608, +// "⇒" to 8658, +// "⤞" to 10526, +// "↪" to 8618, +// "↬" to 8620, +// "⥅" to 10565, +// "⥴" to 10612, +// "⤖" to 10518, +// "↣" to 8611, +// "↝" to 8605, +// "⤚" to 10522, +// "⤜" to 10524, +// "∶" to 8758, +// "ℚ" to 8474, +// "⤍" to 10509, +// "⤏" to 10511, +// "⤐" to 10512, +// "❳" to 10099, +// "}" to 125, +// "]" to 93, +// "⦌" to 10636, +// "⦎" to 10638, +// "⦐" to 10640, +// "Ř" to 344, +// "ř" to 345, +// "Ŗ" to 342, +// "ŗ" to 343, +// "⌉" to 8969, +// "}" to 125, +// "Р" to 1056, +// "р" to 1088, +// "⤷" to 10551, +// "⥩" to 10601, +// "”" to 8221, +// "”" to 8221, +// "↳" to 8627, +// "ℜ" to 8476, +// "ℛ" to 8475, +// "ℜ" to 8476, +// "ℝ" to 8477, +// "ℜ" to 8476, +// "▭" to 9645, +// "®" to 174, +// "®" to 174, +// "®" to 174, +// "®" to 174, +// "∋" to 8715, +// "⇋" to 8651, +// "⥯" to 10607, +// "⥽" to 10621, +// "⌋" to 8971, +// "𝔯" to 120111, +// "ℜ" to 8476, +// "⥤" to 10596, +// "⇁" to 8641, +// "⇀" to 8640, +// "⥬" to 10604, +// "Ρ" to 929, +// "ρ" to 961, +// "ϱ" to 1009, +// "⟩" to 10217, +// "⇥" to 8677, +// "→" to 8594, +// "→" to 8594, +// "⇒" to 8658, +// "⇄" to 8644, +// "↣" to 8611, +// "⌉" to 8969, +// "⟧" to 10215, +// "⥝" to 10589, +// "⥕" to 10581, +// "⇂" to 8642, +// "⌋" to 8971, +// "⇁" to 8641, +// "⇀" to 8640, +// "⇄" to 8644, +// "⇌" to 8652, +// "⇉" to 8649, +// "↝" to 8605, +// "↦" to 8614, +// "⊢" to 8866, +// "⥛" to 10587, +// "⋌" to 8908, +// "⧐" to 10704, +// "⊳" to 8883, +// "⊵" to 8885, +// "⥏" to 10575, +// "⥜" to 10588, +// "⥔" to 10580, +// "↾" to 8638, +// "⥓" to 10579, +// "⇀" to 8640, +// "˚" to 730, +// "≓" to 8787, +// "⇄" to 8644, +// "⇌" to 8652, +// "‏" to 8207, +// "⎱" to 9137, +// "⎱" to 9137, +// "⫮" to 10990, +// "⟭" to 10221, +// "⇾" to 8702, +// "⟧" to 10215, +// "⦆" to 10630, +// "𝕣" to 120163, +// "ℝ" to 8477, +// "⨮" to 10798, +// "⨵" to 10805, +// "⥰" to 10608, +// ")" to 41, +// "⦔" to 10644, +// "⨒" to 10770, +// "⇉" to 8649, +// "⇛" to 8667, +// "›" to 8250, +// "𝓇" to 120007, +// "ℛ" to 8475, +// "↱" to 8625, +// "↱" to 8625, +// "]" to 93, +// "’" to 8217, +// "’" to 8217, +// "⋌" to 8908, +// "⋊" to 8906, +// "▹" to 9657, +// "⊵" to 8885, +// "▸" to 9656, +// "⧎" to 10702, +// "⧴" to 10740, +// "⥨" to 10600, +// "℞" to 8478, +// "Ś" to 346, +// "ś" to 347, +// "‚" to 8218, +// "⪸" to 10936, +// "Š" to 352, +// "š" to 353, +// "⪼" to 10940, +// "≻" to 8827, +// "≽" to 8829, +// "⪰" to 10928, +// "⪴" to 10932, +// "Ş" to 350, +// "ş" to 351, +// "Ŝ" to 348, +// "ŝ" to 349, +// "⪺" to 10938, +// "⪶" to 10934, +// "⋩" to 8937, +// "⨓" to 10771, +// "≿" to 8831, +// "С" to 1057, +// "с" to 1089, +// "⊡" to 8865, +// "⋅" to 8901, +// "⩦" to 10854, +// "⤥" to 10533, +// "↘" to 8600, +// "⇘" to 8664, +// "↘" to 8600, +// "§" to 167, +// "§" to 167, +// ";" to 59, +// "⤩" to 10537, +// "∖" to 8726, +// "∖" to 8726, +// "✶" to 10038, +// "𝔖" to 120086, +// "𝔰" to 120112, +// "⌢" to 8994, +// "♯" to 9839, +// "Щ" to 1065, +// "щ" to 1097, +// "Ш" to 1064, +// "ш" to 1096, +// "↓" to 8595, +// "←" to 8592, +// "∣" to 8739, +// "∥" to 8741, +// "→" to 8594, +// "↑" to 8593, +// "­" to 173, +// "­" to 173, +// "Σ" to 931, +// "σ" to 963, +// "ς" to 962, +// "ς" to 962, +// "∼" to 8764, +// "⩪" to 10858, +// "≃" to 8771, +// "≃" to 8771, +// "⪞" to 10910, +// "⪠" to 10912, +// "⪝" to 10909, +// "⪟" to 10911, +// "≆" to 8774, +// "⨤" to 10788, +// "⥲" to 10610, +// "←" to 8592, +// "∘" to 8728, +// "∖" to 8726, +// "⨳" to 10803, +// "⧤" to 10724, +// "∣" to 8739, +// "⌣" to 8995, +// "⪪" to 10922, +// "⪬" to 10924, +// "⪬︀" to 10924, +// "Ь" to 1068, +// "ь" to 1100, +// "⌿" to 9023, +// "⧄" to 10692, +// "/" to 47, +// "𝕊" to 120138, +// "𝕤" to 120164, +// "♠" to 9824, +// "♠" to 9824, +// "∥" to 8741, +// "⊓" to 8851, +// "⊓︀" to 8851, +// "⊔" to 8852, +// "⊔︀" to 8852, +// "√" to 8730, +// "⊏" to 8847, +// "⊑" to 8849, +// "⊏" to 8847, +// "⊑" to 8849, +// "⊐" to 8848, +// "⊒" to 8850, +// "⊐" to 8848, +// "⊒" to 8850, +// "□" to 9633, +// "□" to 9633, +// "⊓" to 8851, +// "⊏" to 8847, +// "⊑" to 8849, +// "⊐" to 8848, +// "⊒" to 8850, +// "⊔" to 8852, +// "▪" to 9642, +// "□" to 9633, +// "▪" to 9642, +// "→" to 8594, +// "𝒮" to 119982, +// "𝓈" to 120008, +// "∖" to 8726, +// "⌣" to 8995, +// "⋆" to 8902, +// "⋆" to 8902, +// "☆" to 9734, +// "★" to 9733, +// "ϵ" to 1013, +// "ϕ" to 981, +// "¯" to 175, +// "⊂" to 8834, +// "⋐" to 8912, +// "⪽" to 10941, +// "⫅" to 10949, +// "⊆" to 8838, +// "⫃" to 10947, +// "⫁" to 10945, +// "⫋" to 10955, +// "⊊" to 8842, +// "⪿" to 10943, +// "⥹" to 10617, +// "⊂" to 8834, +// "⋐" to 8912, +// "⊆" to 8838, +// "⫅" to 10949, +// "⊆" to 8838, +// "⊊" to 8842, +// "⫋" to 10955, +// "⫇" to 10951, +// "⫕" to 10965, +// "⫓" to 10963, +// "⪸" to 10936, +// "≻" to 8827, +// "≽" to 8829, +// "≻" to 8827, +// "⪰" to 10928, +// "≽" to 8829, +// "≿" to 8831, +// "⪰" to 10928, +// "⪺" to 10938, +// "⪶" to 10934, +// "⋩" to 8937, +// "≿" to 8831, +// "∋" to 8715, +// "∑" to 8721, +// "∑" to 8721, +// "♪" to 9834, +// "¹" to 185, +// "¹" to 185, +// "²" to 178, +// "²" to 178, +// "³" to 179, +// "³" to 179, +// "⊃" to 8835, +// "⋑" to 8913, +// "⪾" to 10942, +// "⫘" to 10968, +// "⫆" to 10950, +// "⊇" to 8839, +// "⫄" to 10948, +// "⊃" to 8835, +// "⊇" to 8839, +// "⟉" to 10185, +// "⫗" to 10967, +// "⥻" to 10619, +// "⫂" to 10946, +// "⫌" to 10956, +// "⊋" to 8843, +// "⫀" to 10944, +// "⊃" to 8835, +// "⋑" to 8913, +// "⊇" to 8839, +// "⫆" to 10950, +// "⊋" to 8843, +// "⫌" to 10956, +// "⫈" to 10952, +// "⫔" to 10964, +// "⫖" to 10966, +// "⤦" to 10534, +// "↙" to 8601, +// "⇙" to 8665, +// "↙" to 8601, +// "⤪" to 10538, +// "ß" to 223, +// "ß" to 223, +// " " to 9, +// "⌖" to 8982, +// "Τ" to 932, +// "τ" to 964, +// "⎴" to 9140, +// "Ť" to 356, +// "ť" to 357, +// "Ţ" to 354, +// "ţ" to 355, +// "Т" to 1058, +// "т" to 1090, +// "⃛" to 8411, +// "⌕" to 8981, +// "𝔗" to 120087, +// "𝔱" to 120113, +// "∴" to 8756, +// "∴" to 8756, +// "∴" to 8756, +// "Θ" to 920, +// "θ" to 952, +// "ϑ" to 977, +// "ϑ" to 977, +// "≈" to 8776, +// "∼" to 8764, +// "  " to 8287, +// " " to 8201, +// " " to 8201, +// "≈" to 8776, +// "∼" to 8764, +// "Þ" to 222, +// "Þ" to 222, +// "þ" to 254, +// "þ" to 254, +// "˜" to 732, +// "∼" to 8764, +// "≃" to 8771, +// "≅" to 8773, +// "≈" to 8776, +// "⨱" to 10801, +// "⊠" to 8864, +// "×" to 215, +// "×" to 215, +// "⨰" to 10800, +// "∭" to 8749, +// "⤨" to 10536, +// "⌶" to 9014, +// "⫱" to 10993, +// "⊤" to 8868, +// "𝕋" to 120139, +// "𝕥" to 120165, +// "⫚" to 10970, +// "⤩" to 10537, +// "‴" to 8244, +// "™" to 8482, +// "™" to 8482, +// "▵" to 9653, +// "▿" to 9663, +// "◃" to 9667, +// "⊴" to 8884, +// "≜" to 8796, +// "▹" to 9657, +// "⊵" to 8885, +// "◬" to 9708, +// "≜" to 8796, +// "⨺" to 10810, +// "⃛" to 8411, +// "⨹" to 10809, +// "⧍" to 10701, +// "⨻" to 10811, +// "⏢" to 9186, +// "𝒯" to 119983, +// "𝓉" to 120009, +// "Ц" to 1062, +// "ц" to 1094, +// "Ћ" to 1035, +// "ћ" to 1115, +// "Ŧ" to 358, +// "ŧ" to 359, +// "≬" to 8812, +// "↞" to 8606, +// "↠" to 8608, +// "Ú" to 218, +// "Ú" to 218, +// "ú" to 250, +// "ú" to 250, +// "↑" to 8593, +// "↟" to 8607, +// "⇑" to 8657, +// "⥉" to 10569, +// "Ў" to 1038, +// "ў" to 1118, +// "Ŭ" to 364, +// "ŭ" to 365, +// "Û" to 219, +// "Û" to 219, +// "û" to 251, +// "û" to 251, +// "У" to 1059, +// "у" to 1091, +// "⇅" to 8645, +// "Ű" to 368, +// "ű" to 369, +// "⥮" to 10606, +// "⥾" to 10622, +// "𝔘" to 120088, +// "𝔲" to 120114, +// "Ù" to 217, +// "Ù" to 217, +// "ù" to 249, +// "ù" to 249, +// "⥣" to 10595, +// "↿" to 8639, +// "↾" to 8638, +// "▀" to 9600, +// "⌜" to 8988, +// "⌜" to 8988, +// "⌏" to 8975, +// "◸" to 9720, +// "Ū" to 362, +// "ū" to 363, +// "¨" to 168, +// "¨" to 168, +// "_" to 95, +// "⏟" to 9183, +// "⎵" to 9141, +// "⏝" to 9181, +// "⋃" to 8899, +// "⊎" to 8846, +// "Ų" to 370, +// "ų" to 371, +// "𝕌" to 120140, +// "𝕦" to 120166, +// "⤒" to 10514, +// "↑" to 8593, +// "↑" to 8593, +// "⇑" to 8657, +// "⇅" to 8645, +// "↕" to 8597, +// "↕" to 8597, +// "⇕" to 8661, +// "⥮" to 10606, +// "↿" to 8639, +// "↾" to 8638, +// "⊎" to 8846, +// "↖" to 8598, +// "↗" to 8599, +// "υ" to 965, +// "ϒ" to 978, +// "ϒ" to 978, +// "Υ" to 933, +// "υ" to 965, +// "↥" to 8613, +// "⊥" to 8869, +// "⇈" to 8648, +// "⌝" to 8989, +// "⌝" to 8989, +// "⌎" to 8974, +// "Ů" to 366, +// "ů" to 367, +// "◹" to 9721, +// "𝒰" to 119984, +// "𝓊" to 120010, +// "⋰" to 8944, +// "Ũ" to 360, +// "ũ" to 361, +// "▵" to 9653, +// "▴" to 9652, +// "⇈" to 8648, +// "Ü" to 220, +// "Ü" to 220, +// "ü" to 252, +// "ü" to 252, +// "⦧" to 10663, +// "⦜" to 10652, +// "ϵ" to 1013, +// "ϰ" to 1008, +// "∅" to 8709, +// "ϕ" to 981, +// "ϖ" to 982, +// "∝" to 8733, +// "↕" to 8597, +// "⇕" to 8661, +// "ϱ" to 1009, +// "ς" to 962, +// "⊊︀" to 8842, +// "⫋︀" to 10955, +// "⊋︀" to 8843, +// "⫌︀" to 10956, +// "ϑ" to 977, +// "⊲" to 8882, +// "⊳" to 8883, +// "⫨" to 10984, +// "⫫" to 10987, +// "⫩" to 10985, +// "В" to 1042, +// "в" to 1074, +// "⊢" to 8866, +// "⊨" to 8872, +// "⊩" to 8873, +// "⊫" to 8875, +// "⫦" to 10982, +// "⊻" to 8891, +// "∨" to 8744, +// "⋁" to 8897, +// "≚" to 8794, +// "⋮" to 8942, +// "|" to 124, +// "‖" to 8214, +// "|" to 124, +// "‖" to 8214, +// "∣" to 8739, +// "|" to 124, +// "❘" to 10072, +// "≀" to 8768, +// " " to 8202, +// "𝔙" to 120089, +// "𝔳" to 120115, +// "⊲" to 8882, +// "⊂⃒" to 8834, +// "⊃⃒" to 8835, +// "𝕍" to 120141, +// "𝕧" to 120167, +// "∝" to 8733, +// "⊳" to 8883, +// "𝒱" to 119985, +// "𝓋" to 120011, +// "⫋︀" to 10955, +// "⊊︀" to 8842, +// "⫌︀" to 10956, +// "⊋︀" to 8843, +// "⊪" to 8874, +// "⦚" to 10650, +// "Ŵ" to 372, +// "ŵ" to 373, +// "⩟" to 10847, +// "∧" to 8743, +// "⋀" to 8896, +// "≙" to 8793, +// "℘" to 8472, +// "𝔚" to 120090, +// "𝔴" to 120116, +// "𝕎" to 120142, +// "𝕨" to 120168, +// "℘" to 8472, +// "≀" to 8768, +// "≀" to 8768, +// "𝒲" to 119986, +// "𝓌" to 120012, +// "⋂" to 8898, +// "◯" to 9711, +// "⋃" to 8899, +// "▽" to 9661, +// "𝔛" to 120091, +// "𝔵" to 120117, +// "⟷" to 10231, +// "⟺" to 10234, +// "Ξ" to 926, +// "ξ" to 958, +// "⟵" to 10229, +// "⟸" to 10232, +// "⟼" to 10236, +// "⋻" to 8955, +// "⨀" to 10752, +// "𝕏" to 120143, +// "𝕩" to 120169, +// "⨁" to 10753, +// "⨂" to 10754, +// "⟶" to 10230, +// "⟹" to 10233, +// "𝒳" to 119987, +// "𝓍" to 120013, +// "⨆" to 10758, +// "⨄" to 10756, +// "△" to 9651, +// "⋁" to 8897, +// "⋀" to 8896, +// "Ý" to 221, +// "Ý" to 221, +// "ý" to 253, +// "ý" to 253, +// "Я" to 1071, +// "я" to 1103, +// "Ŷ" to 374, +// "ŷ" to 375, +// "Ы" to 1067, +// "ы" to 1099, +// "¥" to 165, +// "¥" to 165, +// "𝔜" to 120092, +// "𝔶" to 120118, +// "Ї" to 1031, +// "ї" to 1111, +// "𝕐" to 120144, +// "𝕪" to 120170, +// "𝒴" to 119988, +// "𝓎" to 120014, +// "Ю" to 1070, +// "ю" to 1102, +// "ÿ" to 255, +// "ÿ" to 255, +// "Ÿ" to 376, +// "Ź" to 377, +// "ź" to 378, +// "Ž" to 381, +// "ž" to 382, +// "З" to 1047, +// "з" to 1079, +// "Ż" to 379, +// "ż" to 380, +// "ℨ" to 8488, +// "​" to 8203, +// "Ζ" to 918, +// "ζ" to 950, +// "𝔷" to 120119, +// "ℨ" to 8488, +// "Ж" to 1046, +// "ж" to 1078, +// "⇝" to 8669, +// "𝕫" to 120171, +// "ℤ" to 8484, +// "𝒵" to 119989, +// "𝓏" to 120015, +// "‍" to 8205, + "‌" to 8204) +} diff --git a/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.txt b/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.txt new file mode 100644 index 00000000000..be373b95481 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.txt @@ -0,0 +1,9 @@ +package + +public object Entities { + private constructor Entities() + public final val map: kotlin.collections.Map + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index ad672b9bf6e..25e77c8bc9c 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -10285,6 +10285,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/approximateBeforeFixation.kt"); } + @TestMetadata("avoidCreatingUselessCapturedTypes.kt") + public void testAvoidCreatingUselessCapturedTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt"); + } + @TestMetadata("cannotCaptureInProjection.kt") public void testCannotCaptureInProjection() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/cannotCaptureInProjection.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 43ea8baa030..10ed4fedbf0 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -10280,6 +10280,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/approximateBeforeFixation.kt"); } + @TestMetadata("avoidCreatingUselessCapturedTypes.kt") + public void testAvoidCreatingUselessCapturedTypes() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/avoidCreatingUselessCapturedTypes.kt"); + } + @TestMetadata("cannotCaptureInProjection.kt") public void testCannotCaptureInProjection() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/capturedTypes/cannotCaptureInProjection.kt");