Deneyebilirsin
Https://checkstyle.sourceforge.io/config_filters.html#SuppressionXpathFilter'i
Bunu şu şekilde yapılandırabilirsiniz:
<module name="SuppressionXpathFilter">
<property name="file" value="suppressions-xpath.xml"/>
<property name="optional" value="false"/>
</module>
-G seçeneğiyle CLI kullanarak Xpath baskılamaları oluşturun ve -o anahtarını kullanarak çıktıyı belirtin.
https://checkstyle.sourceforge.io/cmdline.html#Command_line_usage
İşte Checkstyle bastırmaları otomatik oluşturmanızı ayarlamanıza yardımcı olacak bir karınca snippet'i; Antrun eklentisini kullanarak Maven'e entegre edebilirsiniz .
<target name="checkstyleg">
<move file="suppressions-xpath.xml"
tofile="suppressions-xpath.xml.bak"
preservelastmodified="true"
force="true"
failonerror="false"
verbose="true"/>
<fileset dir="${basedir}"
id="javasrcs">
<include name="**/*.java" />
</fileset>
<pathconvert property="sources"
refid="javasrcs"
pathsep=" " />
<loadfile property="cs.cp"
srcFile="../${cs.classpath.file}" />
<java classname="${cs.main.class}"
logError="true">
<arg line="-c ../${cs.config} -p ${cs.properties} -o ${ant.project.name}-xpath.xml -g ${sources}" />
<classpath>
<pathelement path="${cs.cp}" />
<pathelement path="${java.class.path}" />
</classpath>
</java>
<condition property="file.is.empty" else="false">
<length file="${ant.project.name}-xpath.xml" when="equal" length="0" />
</condition>
<if>
<equals arg1="${file.is.empty}" arg2="false"/>
<then>
<move file="${ant.project.name}-xpath.xml"
tofile="suppressions-xpath.xml"
preservelastmodified="true"
force="true"
failonerror="true"
verbose="true"/>
</then>
</if>
</target>
Suppressions-xpath.xml, Checkstyle kuralları yapılandırmasında Xpath supressions kaynağı olarak belirtilir. Yukarıdaki snippet'te, bir cs.cp dosyasından Checkstyle sınıfyolunu bir özelliğe yüklüyorum. Sınıf yolunu doğrudan belirtmeyi seçebilirsiniz.
Ya da Maven ( veya Ant ) içindeki mükemmel olanı kullanarak aynı şeyi yapabilirsiniz:
import java.nio.file.Files
import java.nio.file.StandardCopyOption
import java.nio.file.Paths
def backupSuppressions() {
def supprFileName =
project.properties["checkstyle.suppressionsFile"]
def suppr = Paths.get(supprFileName)
def target = null
if (Files.exists(suppr)) {
def supprBak = Paths.get(supprFileName + ".bak")
target = Files.move(suppr, supprBak,
StandardCopyOption.REPLACE_EXISTING)
println "Backed up " + supprFileName
}
return target
}
def renameSuppressions() {
def supprFileName =
project.properties["checkstyle.suppressionsFile"]
def suppr = Paths.get(project.name + "-xpath.xml")
def target = null
if (Files.exists(suppr)) {
def supprNew = Paths.get(supprFileName)
target = Files.move(suppr, supprNew)
println "Renamed " + suppr + " to " + supprFileName
}
return target
}
def getClassPath(classLoader, sb) {
classLoader.getURLs().each {url->
sb.append("${url.getFile().toString()}:")
}
if (classLoader.parent) {
getClassPath(classLoader.parent, sb)
}
return sb.toString()
}
backupSuppressions()
def cp = getClassPath(this.class.classLoader,
new StringBuilder())
def csMainClass =
project.properties["cs.main.class"]
def csRules =
project.properties["checkstyle.rules"]
def csProps =
project.properties["checkstyle.properties"]
String[] args = ["java", "-cp", cp,
csMainClass,
"-c", csRules,
"-p", csProps,
"-o", project.name + "-xpath.xml",
"-g", "src"]
ProcessBuilder pb = new ProcessBuilder(args)
pb = pb.inheritIO()
Process proc = pb.start()
proc.waitFor()
renameSuppressions()
Xpath baskılamalarını kullanmanın tek dezavantajı - desteklemediği kontrollerin yanında --- aşağıdaki gibi bir kodunuz varsa:
package cstests;
public interface TestMagicNumber {
static byte[] getAsciiRotator() {
byte[] rotation = new byte[95 * 2];
for (byte i = ' '; i <= '~'; i++) {
rotation[i - ' '] = i;
rotation[i + 95 - ' '] = i;
}
return rotation;
}
}
Bu durumda üretilen Xpath bastırma Checkstyle tarafından yutulmaz ve denetleyici oluşturulan bastırmada bir istisna dışında başarısız olur:
<suppress-xpath
files="TestMagicNumber.java"
checks="MagicNumberCheck"
query="/INTERFACE_DEF[./IDENT[@text='TestMagicNumber']]/OBJBLOCK/METHOD_DEF[./IDENT[@text='getAsciiRotator']]/SLIST/LITERAL_FOR/SLIST/EXPR/ASSIGN[./IDENT[@text='i']]/INDEX_OP[./IDENT[@text='rotation']]/EXPR/MINUS[./CHAR_LITERAL[@text='' '']]/PLUS[./IDENT[@text='i']]/NUM_INT[@text='95']"/>
Diğer tüm ihlalleri giderdiğinizde ve gerisini bastırmak istediğinizde Xpath bastırması oluşturmanız önerilir. Gizlemek için koddaki belirli örnekleri seçmenize izin vermez. Ancak, bunu yapmak için oluşturulan dosyadan baskıları seçebilir ve seçebilirsiniz.
SuppressionXpathSingleFilter, belirli bir kuralı, dosyayı veya hata mesajını tanımlamak ve bastırmak için daha uygundur. Her birini id özelliğine göre tanımlayan birden çok filtre yapılandırabilirsiniz.
https://checkstyle.sourceforge.io/config_filters.html#SuppressionXpathSingleFilter