2016-06-08 10 views
3

Ich versuche, Projekt Lombok in meinem Code zu verwenden, und ich verwende SonarQube und SonarLint (in IntelliJ IDEA).SonarQube @NoArgsConstructor (Projekt Lombok)

Wenn ich eine neue Klasse mit einem privaten Feld wie folgt zu erstellen:

public class Test { 
    private String testfield; 
} 

dann bekomme ich die richtige Warnung von Sonarqube/SonarLint „Entfernen Sie diese nicht genutzten privaten Bereich“ (squid:S1068) ... (Also ich wissen, dass die Grundkonfiguration arbeitet)

Wenn ich die @Getter @Setter Anmerkungen zum Feld hinzufügen.

public class Test { 
    @Getter @Setter 
    private String testfield; 
} 

dann die Warnung disapears (korrekt!). (Also ich weiß, dass Sonarqube versteht im Grunde Lombok Anmerkungen.)

Und wenn ich jetzt erstellen Sie eine andere Klasse wie dieses

public class Test2 { 
    public static void doSomething() { 
     System.out.println("hey"); 
    } 
} 

ich die Warnung erhalten „einen privaten Konstruktor hinzufügen“ (squid:S1118) ... (diese ist wieder richtig und erwarteten)

Aber wenn ich die @NoArgsConstructor Anmerkung wie dieser die Warnung noch

@NoArgsConstructor(access = AccessLevel.PRIVATE) 
public class Test2 { 
    public static void doSomething() { 
     System.out.println("hey"); 
    } 
} 

jetzt hinzufügen bleibt.

Wird diese Anmerkung nicht von SonarQube unterstützt? Ich habe diese (und viele Diskussionen auf Stackoverflow, Github, ...) gefunden, und ich denke, es sollte funktionieren.

(Ich benutze IntelliJ 2016.01.03; SonarLint 2.2; lombok 1.16.8; Sonarqube 5,5; Sonarqube Java Plugin 3.13.1)

Jede Hilfe?

Antwort

1

Edit: Ab SonarQube Java 3.14, in „[SONARJAVA-1642] - Filter Fragen im Zusammenhang mit Lombok Anmerkungen mit einem speziellen Thema Filter“ gibt es Unterstützung Klassen mit @lombok.experimental.UtilityClass für Anmerkungen versehen, ohne dass Warnung auslöst. @NoArgsConstructor kann eine Pull-Anfrage benötigen.

(source diff)


Lombok kennt die @NoArgsConstructor aber es nutzt es nur, um zu bestimmen, ob ein Typ nicht verwendet wird oder nicht. Es wird nicht berücksichtigt, wenn nach Konstruktoren von Dienstprogrammklassen gesucht wird.

+ private static final Set<String> USED_TYPES_ANNOTATIONS = new HashSet<String>(Arrays.asList(
+ "lombok.Getter", 
+ "lombok.Setter", 
+ "lombok.Data", 
+ "lombok.Value", 
+ "lombok.Builder", 
+ "lombok.ToString", 
+ "lombok.EqualsAndHashCode", 
+ "lombok.AllArgsConstructor", 
+ "lombok.NoArgsConstructor", 
+ "lombok.RequiredArgsConstructor")); 

pull-request für das Ticket.

+0

Danke für Ihre Antwort. Ich habe diese Pull-Anfrage bereits gesehen. Weißt du, ob es Pläne gibt, diesen Fall von SonarQube zu unterstützen? Gibt es eine bessere Lösung, als die Klasse mit '@SuppressWarnings (" squid: S1118 ") annotieren? –

+0

@CptS siehe bearbeiten, ich hoffe, ich habe dieses Mal nicht übersehen. – zapl

+0

Das klingt großartig! Ich werde das bald nach dem Upgrade des SonarQube Java Plugins versuchen. Vielen Dank! :) –

Verwandte Themen