Как добавить пользовательское правило в checkstyle.xml для Codacy в андроид студии? - PullRequest
0 голосов
/ 04 марта 2019

Я хочу добавить пользовательские правила в checkstyle, чтобы я мог просматривать их в кодовой панели инструментов.Но он также не отображается на панели инструментов codacy и также выдает ошибку в Android Studio. Подробности см. Ниже.Я написал собственный класс, который расширяет класс Check, но не может добавить класс в checkstyle.xml.Он показывает введите описание изображения здесь ошибка не может создать экземпляр класса.

<?xml version="1.0"?><!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.2//EN"
"http://www.puppycrawl.com/dtds/configuration_1_2.dtd">

<module name="Checker">
<module name="NewlineAtEndOfFile" />
<module name="FileLength" />
<module name="FileTabCharacter" />
<module name="TreeWalker">
    <module name="packageName.MethodCallWithoutObjectCreation" />
    <module name="ArrayTypeStyle" />
    <module name="UpperEll" />
    <module name="Indentation">
        <property name="caseIndent" value="4" />
    </module>
</module>

Вышеупомянутый модуль можно найти ниже как класс Java MethodCallWithoutObjectCreation.Ява

public class MethodCallWithoutObjectCreation extends Check {

    @Override
    public int[] getDefaultTokens() {
            return new int[]{TokenTypes.METHOD_DEF};
    }

    /**
     * @see com.puppycrawl.tools.checkstyle.api.Check#visitToken(com.puppycrawl.tools.checkstyle.api.DetailAST)
     */
    @Override
    public void visitToken(DetailAST aast) {
            super.visitToken(aast);
            DetailAST slist = aast.findFirstToken(TokenTypes.SLIST);
            List<DetailAST> variables = DetailASTUtil.getDetailASTsForTypeInBranch(
                    slist, TokenTypes.VARIABLE_DEF);
            List<DetailAST> uninitializedVars = new ArrayList<DetailAST>();
            for (DetailAST variable : variables) {
                    boolean initialized = JavaClassUtil
                            .isVariableInitialized(variable);
                    if (!initialized)
                            uninitializedVars.add(variable);
            }

            for (DetailAST uninitializedVar : uninitializedVars) {
                    String uninitializedVarName = uninitializedVar.findFirstToken(
                            TokenTypes.IDENT).getText();
                    List<DetailAST> siblingsBelow = DetailASTUtil
                            .getAllSiblingsBelow(uninitializedVar);
                    List<FullIdentComparable> methodCallsFullIdents = new ArrayList<FullIdentComparable>();
                    List<FullIdentComparable> assignmentFullIdents = new ArrayList<FullIdentComparable>();
                    for (DetailAST siblingBelow : siblingsBelow) {
                            getListOfMethodCallsOnVariable(uninitializedVarName,
                                    siblingBelow, methodCallsFullIdents);
                            getListOfVariableAssignment(uninitializedVarName, siblingBelow,
                                    assignmentFullIdents);
                    }
                    Collections.sort(methodCallsFullIdents);
                    Collections.sort(assignmentFullIdents);
                    FullIdentComparable assignFullIdent = null;
                    if (assignmentFullIdents.size() > 0) {
                            assignFullIdent = assignmentFullIdents.get(0);
                    }

                    FullIdentComparable methodCallFullIdent = null;
                    if (methodCallsFullIdents.size() > 0)
                            methodCallFullIdent = methodCallsFullIdents.get(0);
                    if (methodCallFullIdent != null
                            && (methodCallFullIdent.compareTo(assignFullIdent) < 0))
                            log(uninitializedVar, "Method called without checking null "
                                    + methodCallFullIdent.getFullIdent().getText());
            }
    }

    private void getListOfMethodCallsOnVariable(String uninitializedVarName,
                                                DetailAST siblingBelow,
                                                List<FullIdentComparable> methodCallsFullIdents) {
            List<DetailAST> dotsInBranch = DetailASTUtil
                    .getDetailASTsForTypeInBranch(siblingBelow, TokenTypes.DOT);
            for (DetailAST dotInBranch : dotsInBranch) {
                    List<DetailAST> dotChildren = DetailASTUtil
                            .getDetailASTsForTypeInChildren(dotInBranch,
                                    TokenTypes.IDENT);
                    if (dotChildren != null) {
                            DetailAST dotChild = dotChildren.get(0);
                            if (dotChild.getText().equals(uninitializedVarName)) {
                                    FullIdent fullIdent = FullIdent
                                            .createFullIdent(dotInBranch);
                                    methodCallsFullIdents
                                            .add(new FullIdentComparable(fullIdent));
                            }
                    }
            }
    }

    private void getListOfVariableAssignment(String uninitializedVarName,
                                             DetailAST siblingBelow,
                                             List<FullIdentComparable> assignmentFullIdents) {
            List<DetailAST> assignmentsInBranch = DetailASTUtil
                    .getDetailASTsForTypeInBranch(siblingBelow, TokenTypes.ASSIGN);
            for (DetailAST assignInBranch : assignmentsInBranch) {
                    DetailAST ident = assignInBranch.findFirstToken(TokenTypes.IDENT);
                    if (ident != null) {
                            if (ident.getText().equals(uninitializedVarName)) {
                                    FullIdent fullIdent = FullIdent
                                            .createFullIdent(assignInBranch);
                                    assignmentFullIdents
                                            .add(new FullIdentComparable(fullIdent));
                            }
                    }
            }
    }

}

1 Ответ

0 голосов
/ 13 марта 2019

На данный момент Codacy не поддерживает пользовательские правила для xml и java с использованием checkstyle, хотя вы можете настроить их предопределенные правила, которые перечислены в разделе шаблонов кода на Codacy Dashboard

...