L'analyseur de code source PMD permet d'écrire des règles comme Expressions XPath a >. Je travaille au nettoyage de la base de code APEX où je trouve fréquemment l'erreur suivante: Le Une approche correcte serait de vérifier NULL d'abord: Utilisation de mon Editeur de confiance Je peux utiliser une regex pour trouver ces éléments: ! Somécollection.Impty () && Somécollection! = Null code>. P>
somécollection! = null &&! Somécollection.Isempty () code>. p>
&& [a-za-z0-9] *! = null code>. Fonctionne comme un charme. Maintenant, j'essaie de créer une règle PMD personnalisée pour cela, mais mon XPath Regex ne renvoie aucune valeur dans le concepteur PMD: P>
global void execute(List<Case> caseShareList){
if(!caseShareList.isEmpty() && caseShareList != null) {
insert caseShareList;
}
}
3 Réponses :
Êtes-vous sûr que PMD prend en charge XPath 2.0? D'un coup d'œil rapide à la documentation, ce n'est pas évident. Très souvent, les gens qui parlent de xpath sans numéro de version font référence à XPath 1.0, ce qui n'a bien sûr aucun correspondant () code> fonction. P>
Bonjour Michael, Thx pour avoir chipping. Oui PMD a des capacités de XPath 2.0. L'épreuve que je suis bloquée est probablement sur le côté analyseur AST pour APEX. Les exemples Java fonctionnent bien et le concepteur accepte la fonction correspondance ()
PMD utilise un analyseur Apex pour convertir le code source en une syntaxe abstraite (AST). Vos expressions XPath sont appliquées sur l'AST, et non le code source. Par exemple. L'AST pour la déclaration IF ressemblerait à ceci:
IfElseBlockStatement { IfBlockStatement { StandardCondition { BooleanExpression { PrefixExpression { MethodCallExpression { ReferenceExpression } } BooleanExpression { VariableExpression LiteralExpression } } } BlockStatement { DmlInsertStatement { VariableExpression } } } }
Voir aussi github.com/pmd/pmd/issues/1568 - L'opérateur (comme "&&" ou "||") sur BooleanExpression n'est actuellement pas exposée à être disponible via XPath. Ceci est un bug d'un bug sera résolu prochainement.
se révèle, ce que j'avais besoin de faire n'était pas possible avec PMD 6.10. La dernière version 6.11.0 n'a pas exposé au @Image CODE> Propriété Comme j'espérais, mais ajouté suffisamment de nouvelles propriétés dans l'opérateur booléen pour former une expression XPath digne de @ Michael-Kay sans avoir à ajouter RegEx au mélange:
//BooleanExpression[@Op="&&"][
child::*[2][
self::BooleanExpression[@Op="!="][
child::*[1][self::VariableExpression] and
child::*[2][self::LiteralExpression[@LiteralType="NULL"]]
]
]
]