c.s.tools.ide.analysis.modernize/src/com/sun/tools/ide/analysis/modernize/impl/ModernizeErrorInfo.java
author Ilia Gromov <ilia@netbeans.org>
Wed, 07 Jun 2017 20:23:29 +0300
branchrelease82
changeset 18423 b9d9af239a0c
permissions -rw-r--r--
Fixing #270763 - Move clang-tidy integration to nb contrib
* * *
Fixing #270763 - Move clang-tidy integration to nb contrib - move wrapper
* * *
Fixing #270763 - Move clang-tidy integration to nb contrib - sign nbm
* * *
Fixing #270763 - Move clang-tidy integration to nb contrib - move tests
* * *
Fixing #270763 - Move clang-tidy integration to nb contrib - data for a new test
* * *
Fixed #270839 - [clang-tidy] Group checks in Editor hints
(transplanted from 35b6125ef00c470655dac6673075f5c12ec74593)
ilia@18415
     1
/*
ilia@18415
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
ilia@18415
     3
 *
ilia@18415
     4
 * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
ilia@18415
     5
 *
ilia@18415
     6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
ilia@18415
     7
 * Other names may be trademarks of their respective owners.
ilia@18415
     8
 *
ilia@18415
     9
 * The contents of this file are subject to the terms of either the GNU
ilia@18415
    10
 * General Public License Version 2 only ("GPL") or the Common
ilia@18415
    11
 * Development and Distribution License("CDDL") (collectively, the
ilia@18415
    12
 * "License"). You may not use this file except in compliance with the
ilia@18415
    13
 * License. You can obtain a copy of the License at
ilia@18415
    14
 * http://www.netbeans.org/cddl-gplv2.html
ilia@18415
    15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
ilia@18415
    16
 * specific language governing permissions and limitations under the
ilia@18415
    17
 * License.  When distributing the software, include this License Header
ilia@18415
    18
 * Notice in each file and include the License file at
ilia@18415
    19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
ilia@18415
    20
 * particular file as subject to the "Classpath" exception as provided
ilia@18415
    21
 * by Oracle in the GPL Version 2 section of the License file that
ilia@18415
    22
 * accompanied this code. If applicable, add the following below the
ilia@18415
    23
 * License Header, with the fields enclosed by brackets [] replaced by
ilia@18415
    24
 * your own identifying information:
ilia@18415
    25
 * "Portions Copyrighted [year] [name of copyright owner]"
ilia@18415
    26
 *
ilia@18415
    27
 * If you wish your version of this file to be governed by only the CDDL
ilia@18415
    28
 * or only the GPL Version 2, indicate your decision by adding
ilia@18415
    29
 * "[Contributor] elects to include this software in this distribution
ilia@18415
    30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
ilia@18415
    31
 * single choice of license, a recipient has the option to distribute
ilia@18415
    32
 * your version of this file under either the CDDL, the GPL Version 2 or
ilia@18415
    33
 * to extend the choice of license to its licensees as provided above.
ilia@18415
    34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
ilia@18415
    35
 * Version 2 license, then the option applies only if the new code is
ilia@18415
    36
 * made subject to such option by the copyright holder.
ilia@18415
    37
 *
ilia@18415
    38
 * Contributor(s): Ilia Gromov
ilia@18415
    39
 */
ilia@18415
    40
package com.sun.tools.ide.analysis.modernize.impl;
ilia@18415
    41
ilia@18415
    42
import java.util.ArrayList;
ilia@18415
    43
import java.util.Arrays;
ilia@18415
    44
import java.util.Collections;
ilia@18415
    45
import java.util.List;
ilia@18415
    46
import org.netbeans.modules.cnd.api.model.syntaxerr.CsmErrorInfo;
ilia@18415
    47
import org.netbeans.modules.cnd.api.project.NativeProject;
ilia@18415
    48
import org.openide.util.Lookup;
ilia@18415
    49
ilia@18415
    50
public class ModernizeErrorInfo implements CsmErrorInfo, ModernizeErrorProvider.ErrorInfoWithId {
ilia@18415
    51
ilia@18415
    52
    private final YamlParser.Diagnostics diag;
ilia@18415
    53
    private final String messagePrefix;
ilia@18415
    54
    private final List<String> messageInfixes;
ilia@18415
    55
    private final String messageBody;
ilia@18415
    56
    private final NativeProject project;
ilia@18415
    57
ilia@18415
    58
    private final int startOffset;
ilia@18415
    59
    private final int endOffset;
ilia@18415
    60
ilia@18415
    61
    public ModernizeErrorInfo(YamlParser.Diagnostics diag, String messagePrefix, List<String> messageInfixes, String messageBody, Lookup.Provider project) {
ilia@18415
    62
        this.diag = diag;
ilia@18415
    63
        this.messagePrefix = messagePrefix;
ilia@18415
    64
        this.messageInfixes = messageInfixes;
ilia@18415
    65
        this.messageBody = messageBody;
ilia@18415
    66
        this.project = project.getLookup().lookup(NativeProject.class);
ilia@18415
    67
ilia@18415
    68
        if (diag.getReplacements().isEmpty()) {
ilia@18415
    69
            startOffset = diag.getMessageFileOffset();
ilia@18415
    70
            endOffset = diag.getMessageFileOffset();
ilia@18415
    71
        } else {
ilia@18415
    72
            YamlParser.Replacement first = diag.getReplacements().get(0);
ilia@18415
    73
            startOffset = first.offset;
ilia@18415
    74
            endOffset = first.offset + first.length;
ilia@18415
    75
        }
ilia@18415
    76
    }
ilia@18415
    77
ilia@18415
    78
    public static ModernizeErrorInfo withFixedMessage(YamlParser.Diagnostics diag, String messageBody, Lookup.Provider project) {
ilia@18415
    79
        return new ModernizeErrorInfo(diag, "", new ArrayList<>(), messageBody, project);
ilia@18415
    80
    }
ilia@18415
    81
ilia@18415
    82
    public static ModernizeErrorInfo withMutableMessage(YamlParser.Diagnostics diag, String messagePrefix, String messageInfix, String messageBody, Lookup.Provider project) {
ilia@18415
    83
        List<String> list = new ArrayList<>();
ilia@18415
    84
        list.add(messageInfix);
ilia@18415
    85
        return new ModernizeErrorInfo(diag, messagePrefix, list, messageBody, project);
ilia@18415
    86
    }
ilia@18415
    87
ilia@18415
    88
    public static ModernizeErrorInfo withMutableMessage(YamlParser.Diagnostics diag, String messagePrefix, List<String> messageInfixes, String messageBody, Lookup.Provider project) {
ilia@18415
    89
        return new ModernizeErrorInfo(diag, messagePrefix, messageInfixes, messageBody, project);
ilia@18415
    90
    }
ilia@18415
    91
ilia@18415
    92
    public void addMessageInfixes(List<String> infix) {
ilia@18415
    93
        messageInfixes.addAll(infix);
ilia@18415
    94
    }
ilia@18415
    95
ilia@18415
    96
    public List<String> getMessageInfixes() {
ilia@18415
    97
        return Collections.unmodifiableList(messageInfixes);
ilia@18415
    98
    }
ilia@18415
    99
ilia@18415
   100
    public NativeProject getProject() {
ilia@18415
   101
        return project;
ilia@18415
   102
    }
ilia@18415
   103
ilia@18415
   104
    @Override
ilia@18415
   105
    public String getMessage() {
ilia@18415
   106
        StringBuilder sb = new StringBuilder();
ilia@18415
   107
        sb.append(messagePrefix).append(' ');
ilia@18415
   108
        if (messageInfixes.size() < 4) {
ilia@18415
   109
            sb.append(messageInfixes.toString());
ilia@18415
   110
        } else {
ilia@18415
   111
            ArrayList<String> list = new ArrayList<>(messageInfixes.subList(0, 2));
ilia@18415
   112
            list.add(String.format("... (%s more)", messageInfixes.size() - 2));
ilia@18415
   113
            sb.append(list.toString());
ilia@18415
   114
        }
ilia@18415
   115
        sb.append(": "); //NOI18N
ilia@18415
   116
        sb.append(messageBody);
ilia@18415
   117
        return sb.toString();
ilia@18415
   118
    }
ilia@18415
   119
ilia@18415
   120
    @Override
ilia@18415
   121
    public Severity getSeverity() {
ilia@18415
   122
        return Severity.valueOf(diag.getLevel().toString().toUpperCase());
ilia@18415
   123
    }
ilia@18415
   124
ilia@18415
   125
    @Override
ilia@18415
   126
    public int getStartOffset() {
ilia@18415
   127
        return startOffset;
ilia@18415
   128
    }
ilia@18415
   129
ilia@18415
   130
    @Override
ilia@18415
   131
    public int getEndOffset() {
ilia@18415
   132
        return endOffset;
ilia@18415
   133
    }
ilia@18415
   134
ilia@18415
   135
    public YamlParser.Diagnostics getDiagnostics() {
ilia@18415
   136
        return diag;
ilia@18415
   137
    }
ilia@18415
   138
ilia@18415
   139
    @Override
ilia@18415
   140
    public String getId() {
ilia@18415
   141
        return diag.getCheckName();
ilia@18415
   142
    }
ilia@18415
   143
ilia@18415
   144
    public boolean isNeedConfigureHint() {
ilia@18415
   145
        return true;
ilia@18415
   146
    }
ilia@18415
   147
}