mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
[java-highlighting] Stabilize the order of missing branches
GitOrigin-RevId: cca86a5d95906306a0a4c68b976e8d6950e3cb72
This commit is contained in:
committed by
intellij-monorepo-bot
parent
69efc5b45b
commit
c977930e50
@@ -317,7 +317,8 @@ public class SwitchBlockHighlightingModel {
|
||||
}
|
||||
|
||||
void checkEnumCompleteness(@NotNull PsiClass selectorClass, @NotNull List<String> enumElements, @NotNull List<HighlightInfo> results) {
|
||||
Set<String> missingConstants = StreamEx.of(selectorClass.getFields()).select(PsiEnumConstant.class).map(PsiField::getName).toSet();
|
||||
LinkedHashSet<String> missingConstants =
|
||||
StreamEx.of(selectorClass.getFields()).select(PsiEnumConstant.class).map(PsiField::getName).toCollection(LinkedHashSet::new);
|
||||
if (!enumElements.isEmpty()) {
|
||||
enumElements.forEach(missingConstants::remove);
|
||||
if (missingConstants.isEmpty()) return;
|
||||
@@ -843,7 +844,7 @@ public class SwitchBlockHighlightingModel {
|
||||
}
|
||||
HighlightInfo info = createCompletenessInfoForSwitch(!elements.isEmpty());
|
||||
List<String> allNames = collectLabelElementNames(elements, missingClasses, patternClasses);
|
||||
Set<String> missingCases = ContainerUtil.map2Set(missingClasses, PsiClass::getQualifiedName);
|
||||
Set<String> missingCases = ContainerUtil.map2LinkedSet(missingClasses, PsiClass::getQualifiedName);
|
||||
IntentionAction fix = getFixFactory().createAddMissingSealedClassBranchesFix(myBlock, missingCases, allNames);
|
||||
QuickFixAction.registerQuickFixAction(info, fix);
|
||||
return info;
|
||||
@@ -877,10 +878,13 @@ public class SwitchBlockHighlightingModel {
|
||||
private static Collection<PsiClass> getPermittedClasses(@NotNull PsiClass psiClass) {
|
||||
PsiReferenceList permitsList = psiClass.getPermitsList();
|
||||
if (permitsList == null) {
|
||||
TreeSet<PsiClass> result = new TreeSet<>(Comparator.comparing(aClass -> aClass.getName()));
|
||||
GlobalSearchScope fileScope = GlobalSearchScope.fileScope(psiClass.getContainingFile());
|
||||
return new ArrayList<>(DirectClassInheritorsSearch.search(psiClass, fileScope).findAll());
|
||||
result.addAll(DirectClassInheritorsSearch.search(psiClass, fileScope).findAll());
|
||||
return result;
|
||||
}
|
||||
return Stream.of(permitsList.getReferencedTypes()).map(type -> type.resolve()).filter(Objects::nonNull).collect(Collectors.toSet());
|
||||
return Stream.of(permitsList.getReferencedTypes()).map(type -> type.resolve()).filter(Objects::nonNull)
|
||||
.collect(Collectors.toCollection(LinkedHashSet::new));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -1,14 +1,19 @@
|
||||
// "Create missing branches: 'B', and 'C'" "true"
|
||||
// "Create missing branches: 'AA', 'AB', and 'AC'" "true"
|
||||
abstract sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case B b -> {
|
||||
case AA aa -> {
|
||||
}
|
||||
case C c -> {
|
||||
case AB ab -> {
|
||||
}
|
||||
case AC ac -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ final class Aaa implements Aa {}
|
||||
final class Aab implements Aa {}
|
||||
final class Ab implements A {}
|
||||
|
||||
public class Test {
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case Aaa x -> {
|
||||
@@ -1,18 +0,0 @@
|
||||
// "Create missing branches: 'A', 'B', and 'C'" "true"
|
||||
sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case B b && b.hashCode() > 21 -> {}
|
||||
case B b -> {
|
||||
}
|
||||
case C c -> {
|
||||
}
|
||||
case A a1 -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,19 @@
|
||||
// "Create missing branches: 'A', 'B', and 'C'" "true"
|
||||
// "Create missing branches: 'AA', 'AB', 'AC', and 'A'" "true"
|
||||
sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case B b -> {
|
||||
case AA aa -> {
|
||||
}
|
||||
case C c -> {
|
||||
case AB ab -> {
|
||||
}
|
||||
case AC ac -> {
|
||||
}
|
||||
case A a1 -> {
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// "Create missing branches: 'Ab', and 'A'" "true"
|
||||
sealed class A {}
|
||||
abstract sealed class Aa extends A {}
|
||||
final class Aaa extends Aa {}
|
||||
final class Aab extends Aa {}
|
||||
final class Ab extends A {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case Aaa x -> {
|
||||
}
|
||||
case Aab x -> {
|
||||
}
|
||||
case Ab ab -> {
|
||||
}
|
||||
case A a1 -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
// "Create missing branches: 'AC', 'AA', 'AB', and 'A'" "true"
|
||||
sealed class A permits AC, AA, AB {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A permits ABC, ABA {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a) {
|
||||
case AC ac -> {
|
||||
}
|
||||
case AA aa -> {
|
||||
}
|
||||
case AB ab -> {
|
||||
}
|
||||
case A a1 -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
// "Create missing branches: 'B', and 'C'" "true"
|
||||
// "Create missing branches: 'AA', 'AB', and 'AC'" "true"
|
||||
abstract sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
|
||||
@@ -5,7 +5,7 @@ final class Aaa implements Aa {}
|
||||
final class Aab implements Aa {}
|
||||
final class Ab implements A {}
|
||||
|
||||
public class Test {
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a<caret>) {
|
||||
case Aaa x -> {
|
||||
@@ -1,12 +0,0 @@
|
||||
// "Create missing branches: 'A', 'B', and 'C'" "true"
|
||||
sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a<caret>) {
|
||||
case B b && b.hashCode() > 21 -> {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
// "Create missing branches: 'A', 'B', and 'C'" "true"
|
||||
// "Create missing branches: 'AA', 'AB', 'AC', and 'A'" "true"
|
||||
sealed class A {}
|
||||
final class B extends A {}
|
||||
final class C extends A {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// "Create missing branches: 'Ab', and 'A'" "true"
|
||||
sealed class A {}
|
||||
abstract sealed class Aa extends A {}
|
||||
final class Aaa extends Aa {}
|
||||
final class Aab extends Aa {}
|
||||
final class Ab extends A {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a<caret>) {
|
||||
case Aaa x -> {
|
||||
}
|
||||
case Aab x -> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
// "Create missing branches: 'AC', 'AA', 'AB', and 'A'" "true"
|
||||
sealed class A permits AC, AA, AB {}
|
||||
final class AA extends A {}
|
||||
sealed class AB extends A permits ABC, ABA {}
|
||||
non-sealed class AC extends A {}
|
||||
final class ABA extends AB {}
|
||||
non-sealed class ABC extends AB {}
|
||||
|
||||
class Test {
|
||||
void test(A a) {
|
||||
switch (a<caret>) {
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user