From f48cea56e1efb8196da2f54b6aa0e81c2918b67e Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 17 Jun 2025 10:17:02 +0200 Subject: [PATCH] Java: avoid false positive in broken code with cyclic inheritance for "Subclass field hides superclass field" inspection GitOrigin-RevId: 2da814fb51c92618cf528260c0ee585b894ca65a --- .../visibility/FieldHidesSuperclassFieldInspection.java | 3 ++- .../FieldHidesSuperclassField.java | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java b/java/java-impl/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java index d0a021a49e7c..96df354d85b0 100644 --- a/java/java-impl/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java +++ b/java/java-impl/src/com/siyeh/ig/visibility/FieldHidesSuperclassFieldInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2019 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2025 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -97,6 +97,7 @@ public final class FieldHidesSuperclassFieldInspection extends BaseInspection { } PsiClass ancestorClass = aClass.getSuperClass(); final Set visitedClasses = new HashSet<>(); + visitedClasses.add(aClass); while (ancestorClass != null) { if (!visitedClasses.add(ancestorClass)) { return; diff --git a/java/java-tests/testData/ig/com/siyeh/igtest/visibility/field_hides_superclass_field/FieldHidesSuperclassField.java b/java/java-tests/testData/ig/com/siyeh/igtest/visibility/field_hides_superclass_field/FieldHidesSuperclassField.java index 5320e6746d44..1edbff4f0e54 100644 --- a/java/java-tests/testData/ig/com/siyeh/igtest/visibility/field_hides_superclass_field/FieldHidesSuperclassField.java +++ b/java/java-tests/testData/ig/com/siyeh/igtest/visibility/field_hides_superclass_field/FieldHidesSuperclassField.java @@ -10,4 +10,13 @@ class Sub extends FieldHidesSuperclassField { class Sub2 extends FieldHidesSuperclassField { String a; String s; +} +class A extends B { + String s = ""; + + void f() { } +} + +class B extends A { + void f() { } } \ No newline at end of file