使用RPG

时间:2015-12-17 16:20:13

标签: plugins sonarqube rpg

我想为RPG语言创建自己的SonarQube插件。我有以下问题。

我首先创建了扩展到AbstractLanguage的RpgLanguage类。在本课程中,我定义了我的新语言" Rpg"。您可以在以下代码中查看我的课程:

public class RpgLanguage extends AbstractLanguage{


     public static final String KEY = "rpg";

      private Settings settings;

      public RpgLanguage(Settings settings) {
        super(KEY, "Rpg");
        this.settings = settings;
      }

      public String[] getFileSuffixes() {
        String[] suffixes = settings.getStringArray("");
        if (suffixes == null || suffixes.length == 0) {
          suffixes = StringUtils.split(".RPG", ",");
        }
        return suffixes;
      }
}

之后,我创建了实现RulesDefinition的RpgRulesDefinition类。在这个类中,我为语言RPG创建了一个新的存储库,我想在这个存储库中添加一个规则(空规则)。代码如下:

public static final String REPOSITORY_KEY = "rpg_repository_mkoza";

    public void define(Context context) {

        NewRepository repo = context.createRepository(REPOSITORY_KEY, "rpg");
        repo.setName("Mkoza Analyser rules RPG");

        // We could use a XML or JSON file to load all rule metadata, but
        // we prefer use annotations in order to have all information in a single place
        RulesDefinitionAnnotationLoader annotationLoader = new RulesDefinitionAnnotationLoader();
        annotationLoader.load(repo, RpgFileCheckRegistrar.checkClasses());

        repo.done();
    }

我的班级RpgFileCheckRegistrar调用我的规则:

 /**
       * Register the classes that will be used to instantiate checks during analysis.
       */
    public void register(RegistrarContext registrarContext) {
        // Call to registerClassesForRepository to associate the classes with the correct repository key
        registrarContext.registerClassesForRepository(RpgRulesDefinition.REPOSITORY_KEY, Arrays.asList(checkClasses()), Arrays.asList(testCheckClasses()));

    }

      /**
       * Lists all the checks provided by the plugin
       */
      public static Class<? extends JavaCheck>[] checkClasses() {
        return new Class[] {
          RulesExampleCheck.class
          };
      }

      /**
       * Lists all the test checks provided by the plugin
       */
      public static Class<? extends JavaCheck>[] testCheckClasses() {
        return new Class[] {};
      }

我的规则类(仍为空):

 @Rule(
      key = "Rule1",
      name = "Rule that make nothing",
      priority = Priority.MAJOR,
      tags = {"example"}
      )
public class RulesExampleCheck extends BaseTreeVisitor{

    /**
     * Right in java code your rule
     */

}

调用所有这些扩展名的SonarPlugin类:

public final class RpgSonarPlugin extends SonarPlugin
{
     // This is where you're going to declare all your Sonar extensions
      public List getExtensions() {
       return Arrays.asList(
            RpgLanguage.class,
            RpgRulesDefinition.class,
            RpgFileCheckRegistrar.class
        );
      }
}

当我想启动服务器声纳的问题时,我得到了这个错误堆栈:

Exception sending context initialized event to listener instance of class org.sonar.server.platform.PlatformServletContextListener
java.lang.IllegalStateException: One of HTML description or Markdown description must be defined for rule [repository=rpg_repository_mkoza, key=Rule1]

我尝试了不同的东西,但我不明白为什么会出现这些错误。 当然我想要我的存储库&#34; rpg_repository_mkoza&#34;使用规则:RulesExampleCheck显示在SonarQube的RPG存储库中。

我的声纳插件版本是3.7.1

0 个答案:

没有答案