c.s.tools.ide.analysis.modernize/src/com/sun/tools/ide/analysis/modernize/impl/CsmResponseMerger.java
author Ilia Gromov <ilia@netbeans.org>
Thu, 15 Jun 2017 13:26:38 +0300
branchrelease82
changeset 18425 4b288c339c55
parent 18415 c.s.tools.ide.analysis.modernize/src/com/sun/tools/ide/analysis/modernize/impl/ResponseMerger.java@35b6125ef00c
permissions -rw-r--r--
[clang-tidy] merge analyser errors (only DEV compatible)
(transplanted from 853976f2c6166dbb19b482e2247ec824b7183371)
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.List;
ilia@18415
    44
import java.util.Optional;
ilia@18415
    45
import org.netbeans.modules.cnd.api.model.syntaxerr.CsmErrorInfo;
ilia@18415
    46
import org.netbeans.modules.cnd.api.model.syntaxerr.CsmErrorProvider;
ilia@18415
    47
ilia@18415
    48
/**
ilia@18415
    49
 *
ilia@18415
    50
 * @author Ilia Gromov
ilia@18415
    51
 */
ilia@18417
    52
public class CsmResponseMerger implements CsmErrorProvider.Response {
ilia@18415
    53
ilia@18415
    54
    private final List<ModernizeErrorInfo> bag = new ArrayList<>();
ilia@18415
    55
    private final CsmErrorProvider.Response delegate;
ilia@18415
    56
ilia@18417
    57
    public CsmResponseMerger(CsmErrorProvider.Response delegate) {
ilia@18415
    58
        this.delegate = delegate;
ilia@18415
    59
    }
ilia@18415
    60
ilia@18415
    61
    @Override
ilia@18415
    62
    public void addError(CsmErrorInfo errorInfo) {
ilia@18415
    63
        ModernizeErrorInfo o2 = (ModernizeErrorInfo) errorInfo;
ilia@18415
    64
        Optional<ModernizeErrorInfo> found = bag.stream()
ilia@18415
    65
                .filter(o1 -> isSame(o1, o2))
ilia@18415
    66
                .findAny();
ilia@18415
    67
ilia@18415
    68
        if (found.isPresent()) {
ilia@18415
    69
            found.get().addMessageInfixes(o2.getMessageInfixes());
ilia@18415
    70
        } else {
ilia@18415
    71
            bag.add(o2);
ilia@18415
    72
        }
ilia@18415
    73
    }
ilia@18415
    74
ilia@18415
    75
    @Override
ilia@18415
    76
    public void done() {
ilia@18415
    77
        bag.forEach(delegate::addError);
ilia@18415
    78
        delegate.done();
ilia@18415
    79
        bag.clear();
ilia@18415
    80
    }
ilia@18415
    81
ilia@18415
    82
    public boolean isSame(ModernizeErrorInfo o1, ModernizeErrorInfo o2) {
ilia@18415
    83
        return o1.getStartOffset() == o2.getStartOffset()
ilia@18415
    84
                && o1.getEndOffset() == o2.getEndOffset()
ilia@18415
    85
                && o1.getDiagnostics().getCheckName().equals(o2.getDiagnostics().getCheckName());
ilia@18415
    86
    }
ilia@18415
    87
}