SempGrep Java -Regel für den Schattenfeldname mit der VariablenJava

Java-Forum
Anonymous
 SempGrep Java -Regel für den Schattenfeldname mit der Variablen

Post by Anonymous »

Wir haben SEMGREP, das wir als statisches Codeanalyse -Tool verwenden dürfen. Ich versuche, eine Java -Regel zu schreiben, die überprüft, ob der variable Name genau den gleichen Namen wie der Feldname in derselben Klasse hat. Jetzt frage ich mich, ob es überhaupt möglich ist.

Code: Select all

public class ShadowingExample {
// This is a class field.
private String name = "Class Field";

public void example() {
String name = "Local Variable"; // The local variable 'name' shadows the field.

System.out.println("The class field is: " + this.name);
System.out.println("The local variable is: " + name);
}

public void anotherExample() {
System.out.println("Do something else first")
String name = "Local Variable"; // The local variable 'name' also shadows the field.

System.out.println("The class field is: " + this.name);
System.out.println("The local variable is: " + name);
}
}
Erster Ansatz, von dem ich dachte

Code: Select all

patterns:
- pattern: |
class $CLASS_NAME {
...
$FIELD_TYPE $SHADOW_NAME;
...
$RETURN_TYPE $METHOD_NAME(...) {
...
$VARL_TYPE $SHADOW_NAME =...;
...
}
}
Ich dachte, es könnte funktionieren, da es denselben Shadow_Name wie der Feldname und als Variablenname verwendet. Es zeigt jedoch 0 Übereinstimmungen für den obigen Java-Code. < /P>
Der zweite Ansatz, den ich verwendet habe

Code: Select all

patterns:
- pattern-inside: |
class $CLASS_NAME {
$FIELD_TYPE $SHADOW_NAME;
...
}
- pattern: |
$RET $M(...) {
...
$VAR_TYPE $SHADOW_NAME = ...;
...
}
Dieser Ansatz zeigt Ergebnisse für beide Muster in der Trennung, aber die Muster , die sie mit und standardmäßig anschließen.patterns:
- pattern: |
class $CLASS_NAME {
...
$FIELD_TYPE $FIELD_NAME = ... ;
...
}
- pattern: |
$RETURN_TYPE $METHOD_NAME(...) {
...
$VAR_TYPE $VAR_NAME = ...;
...
}
- metavariable-comparison:
comparison: $VAR_NAME == $FIELD_NAME
< /code>
Ich habe diesen Vergleich erwartet, um die Namen dieser beiden Metavariablen zu überprüfen. Zwei erste Muster erzeugen Übereinstimmungen, aber wenn es um den Vergleich geht, erzeugt es 0 Erkenntnisse

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post