c.s.tools.ide.analysis.modernize/src/com/sun/tools/ide/analysis/modernize/impl/ModernizeFix.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)
     1 /*
     2  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
     3  *
     4  * Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved.
     5  *
     6  * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
     7  * Other names may be trademarks of their respective owners.
     8  *
     9  * The contents of this file are subject to the terms of either the GNU
    10  * General Public License Version 2 only ("GPL") or the Common
    11  * Development and Distribution License("CDDL") (collectively, the
    12  * "License"). You may not use this file except in compliance with the
    13  * License. You can obtain a copy of the License at
    14  * http://www.netbeans.org/cddl-gplv2.html
    15  * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
    16  * specific language governing permissions and limitations under the
    17  * License.  When distributing the software, include this License Header
    18  * Notice in each file and include the License file at
    19  * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
    20  * particular file as subject to the "Classpath" exception as provided
    21  * by Oracle in the GPL Version 2 section of the License file that
    22  * accompanied this code. If applicable, add the following below the
    23  * License Header, with the fields enclosed by brackets [] replaced by
    24  * your own identifying information:
    25  * "Portions Copyrighted [year] [name of copyright owner]"
    26  *
    27  * If you wish your version of this file to be governed by only the CDDL
    28  * or only the GPL Version 2, indicate your decision by adding
    29  * "[Contributor] elects to include this software in this distribution
    30  * under the [CDDL or GPL Version 2] license." If you do not indicate a
    31  * single choice of license, a recipient has the option to distribute
    32  * your version of this file under either the CDDL, the GPL Version 2 or
    33  * to extend the choice of license to its licensees as provided above.
    34  * However, if you add GPL Version 2 code and therefore, elected the GPL
    35  * Version 2 license, then the option applies only if the new code is
    36  * made subject to such option by the copyright holder.
    37  *
    38  * Contributor(s): Ilia Gromov
    39  */
    40 package com.sun.tools.ide.analysis.modernize.impl;
    41 
    42 import java.io.File;
    43 import java.util.List;
    44 import javax.swing.text.Document;
    45 import javax.swing.text.Position;
    46 import org.netbeans.editor.BaseDocument;
    47 import org.netbeans.modules.cnd.api.model.CsmFile;
    48 import org.netbeans.modules.cnd.modelutil.CsmUtilities;
    49 import org.netbeans.spi.editor.hints.ChangeInfo;
    50 import org.netbeans.spi.editor.hints.EnhancedFix;
    51 import org.openide.filesystems.FileObject;
    52 import org.openide.filesystems.FileUtil;
    53 import org.openide.text.CloneableEditorSupport;
    54 import org.openide.text.PositionRef;
    55 
    56 /**
    57  *
    58  * @author Ilia Gromov
    59  */
    60 public class ModernizeFix implements EnhancedFix {
    61     
    62     private final YamlParser.Replacement[] replacements;
    63     private final String text;
    64     private CloneableEditorSupport ces;
    65     private final PositionRef[] beg;
    66     private final PositionRef[] end;
    67 
    68     public ModernizeFix(List<YamlParser.Replacement> replacementList, String id) {
    69         this.beg = new PositionRef[replacementList.size()];
    70         this.end = new PositionRef[replacementList.size()];
    71         this.replacements = replacementList.toArray(new YamlParser.Replacement[replacementList.size()]);
    72         this.text = (id.startsWith("-")) ? id.substring(1) : id; //NOI18N
    73         for (int i = 0; i < replacements.length; i++) {
    74             YamlParser.Replacement replacement = replacements[i];
    75             FileObject fo = FileUtil.toFileObject(new File(replacement.filePath));
    76             CsmFile csmFile = CsmUtilities.getCsmFile(fo, false, false);
    77             if (csmFile != null) {
    78                 ces = CsmUtilities.findCloneableEditorSupport(csmFile);
    79                 if (ces != null) {
    80                     beg[i] = ces.createPositionRef(replacement.offset, Position.Bias.Forward);
    81                     end[i] = ces.createPositionRef(replacement.offset + replacement.length, Position.Bias.Backward);
    82                 } else {
    83                 }
    84             }
    85         }
    86     } //NOI18N
    87 
    88     @Override
    89     public String getText() {
    90         return "Apply replacement - " + text; //NOI18N
    91     }
    92 
    93     @Override
    94     public ChangeInfo implement() throws Exception {
    95         Document doc = CsmUtilities.openDocument(ces);
    96         if (doc instanceof BaseDocument) {
    97             Position min = beg[0];
    98             Position max = end[0];
    99             for (int i = 0; i < replacements.length; i++) {
   100                 YamlParser.Replacement replacement = replacements[i];
   101                 PositionRef b = beg[i];
   102                 PositionRef e = end[i];
   103                 if (b != null && e != null) {
   104                     int newBeg = b.getOffset();
   105                     int newLength = e.getOffset() - b.getOffset();
   106                     if (b.getOffset() < min.getOffset()) {
   107                         min = b;
   108                     }
   109                     if (e.getOffset() > max.getOffset()) {
   110                         max = e;
   111                     }
   112                     if (newLength < 1) {
   113                         // TODO: temp fix
   114                         newLength = 0;
   115                     }
   116                     ((BaseDocument) doc).replace(newBeg, newLength, replacement.replacementText, null);
   117                 }
   118             }
   119             return new ChangeInfo(min, max);
   120         }
   121         return null;
   122     }
   123 
   124     @Override
   125     public CharSequence getSortText() {
   126         return Integer.toString(Integer.MIN_VALUE);
   127     }
   128 
   129     public YamlParser.Replacement[] getReplacements() {
   130         return replacements;
   131     }
   132     
   133 }