/* * Copyright (c) 2023 - 2024. KeyWare.Co.Ltd All rights reserved. * 项目名称:C++ 信息安全性设计准则 * 项目描述:用于检查C++源代码的安全性设计准则的Sonarqube插件 * 版权说明:本软件属北京关键科技股份有限公司所有,在未获得北京关键科技股份有限公司正式授权情况下,任何企业和个人,不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。 */ package com.keyware.sonar.cxx; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import org.sonar.api.config.Configuration; import org.sonar.api.config.PropertyDefinition; import org.sonar.api.resources.AbstractLanguage; import org.sonar.api.resources.Qualifiers; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * {@inheritDoc} */ public class CxxLanguage extends AbstractLanguage { /** * cxx language key */ public static final String KEY = "cxx"; /** * cxx language name */ public static final String NAME = "CXX"; /** * Key of the file suffix parameter */ public static final String FILE_SUFFIXES_KEY = "sonar.cxx.file.suffixes"; /** * Default cxx files knows suffixes */ public static final String DEFAULT_FILE_SUFFIXES = "-"; /** * Settings of the plugin. */ private final Configuration config; public CxxLanguage(Configuration config) { super(KEY, NAME); this.config = config; } public static List properties() { return Collections.unmodifiableList(Arrays.asList( PropertyDefinition.builder(FILE_SUFFIXES_KEY) .defaultValue(DEFAULT_FILE_SUFFIXES) .name("File suffixes") .multiValues(true) .description( "List of suffixes for files to analyze (e.g. `.cxx,.cpp,.cc,.c,.hxx,.hpp,.hh,.h`)." + " In the SonarQube UI, enter one file suffixe per field." + " To turn off the CXX language, set the first entry to `-`." ) .category("CXX") .subCategory("(1) General") .onQualifiers(Qualifiers.PROJECT) .build() )); } /** * {@inheritDoc} * * @see AbstractLanguage#getFileSuffixes() */ @Override public String[] getFileSuffixes() { String[] suffixes = Arrays.stream(config.getStringArray(FILE_SUFFIXES_KEY)) .filter(s -> s != null && !s.trim().isEmpty()).toArray(String[]::new); if (suffixes.length == 0) { suffixes = Iterables.toArray(Splitter.on(',').split(DEFAULT_FILE_SUFFIXES), String.class); } if ("-".equals(suffixes[0])) { suffixes = new String[]{"disabled"}; } return suffixes; } }