Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java] LawOfDemeter: False positive with static property access - should treat class-level property as global object, not dot-accessed property #2179

Closed
linusjf opened this issue Dec 21, 2019 · 1 comment · Fixed by #3510
Labels
a:false-positive PMD flags a piece of code that is not problematic
Milestone

Comments

@linusjf
Copy link

linusjf commented Dec 21, 2019

#2160 (comment)
Affects PMD Version:
6.20.0
Rule:
LawOfDemeter.
Description:
Static property access warning must not be flagged for Law of Demeter when it can be mitigated by static import. The access of a static property is double-counted; the dot accessor count must start from the static property, not the class in which it exists. A very special case for this would be the static property at the class level 'class'. This should be treated as a global variable as well.

Code Sample demonstrating the issue:

package pmdtests;
import java.util.concurrent.TimeUnit;
import static java.util.concurrent.TimeUnit.SECONDS;

public enum Test {
  ;

  public static void main(String[] args) {
    try {
     
        TimeUnit.MILLISECONDS.sleep(300);
SECONDS.sleep(2);
       
  
    } catch (InterruptedException ie) {
      System.err.println(ie);
    }
  }
}

Running PMD through: [CLI | Ant | Maven | Gradle | Designer | Other]

@linusjf linusjf changed the title [Java] Static property access should treat property as global object, not dot-accessed property. [Java] False positive (Law of Demeter) Static property access should treat class-level property as global object, not dot-accessed property. Dec 21, 2019
@linusjf linusjf changed the title [Java] False positive (Law of Demeter) Static property access should treat class-level property as global object, not dot-accessed property. [Java] False positive (Law of Demeter): Static property access should treat class-level property as global object, not dot-accessed property. Dec 21, 2019
oowekyala added a commit to oowekyala/pmd that referenced this issue Feb 16, 2022
- Fixes pmd#2175
- Fixes pmd#2179
- Fixes pmd#1605: same fix as pmd#2179, since enum constants are static fields they are trusted.
- Fixes pmd#2180: the fix is not to special-case Thread, but to consider all static methods as trusted (consistent with the treatment of static fields in pmd#2179)
- Fixes pmd#2182: the fix is not to allow package-private access, but to allow a class to access fields of instances of the same class.
- Fixes pmd#1014
- Fixes pmd#2188
@adangel adangel added this to the 7.0.0 milestone Feb 25, 2022
@adangel adangel changed the title [Java] False positive (Law of Demeter): Static property access should treat class-level property as global object, not dot-accessed property. [java] LawOfDemeter: False positive with static property access - should treat class-level property as global object, not dot-accessed property Feb 25, 2022
@adangel adangel linked a pull request Feb 25, 2022 that will close this issue
5 tasks
@adangel adangel mentioned this issue Jan 23, 2023
55 tasks
@jsotuyod jsotuyod added a:false-positive PMD flags a piece of code that is not problematic and removed needs-backport labels Apr 24, 2023
@jsotuyod
Copy link
Member

This is fixed in PMD 7.0.0-rc1. It won't be backported to PMD 6.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a:false-positive PMD flags a piece of code that is not problematic
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants