Правило Java Sempgrep Java для имени поля затенения с переменнойJAVA

Программисты JAVA общаются здесь
Anonymous
Правило Java Sempgrep Java для имени поля затенения с переменной

Сообщение Anonymous »

У нас есть SEMGREP, который нам разрешено использовать в качестве инструмента анализа статического кода. Я пытаюсь написать правило Java, которое проверяет, имеет ли имя переменной точно такое же имя, что и имя поля в одном классе. Теперь мне интересно, возможно ли это вообще.

Код: Выделить всё

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);
}
}
Первый подход, который, как я думал, это может сработать (я включаю шаблоны блокировать только потому, что остальное здесь не имеет значения):

Код: Выделить всё

patterns:
- pattern: |
class $CLASS_NAME {
...
$FIELD_TYPE $SHADOW_NAME;
...
$RETURN_TYPE $METHOD_NAME(...) {
...
$VARL_TYPE $SHADOW_NAME =...;
...
}
}
Я думал, что это может сработать, потому что он использует ту же самую и тот же Shadow_name , что и имя поля, и в качестве имени переменной. Однако он показывает 0 совпадений для приведенного выше кода Java. < /P>
Второй подход, который я использовал, был похож: < /p>

Код: Выделить всё

patterns:
- pattern-inside: |
class $CLASS_NAME {
$FIELD_TYPE $SHADOW_NAME;
...
}
- pattern: |
$RET $M(...) {
...
$VAR_TYPE $SHADOW_NAME = ...;
...
}
Этот подход показывают результаты для обоих шаблонов в разделении, но блокировки , который соединяет их с и по умолчанию, не генерирует никаких выводов.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>
Я ожидал, что это сравнение подтвердит имена этих двух метавариальных. Два первых шаблона генерируют совпадения, но когда дело доходит до сравнения, он генерирует 0 результатов


Подробнее здесь: https://stackoverflow.com/questions/797 ... e-variable

Вернуться в «JAVA»