More tolerant header detection.
Project: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/commit/ab25500a Tree: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/tree/ab25500a Diff: http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/diff/ab25500a Branch: refs/heads/master Commit: ab25500a7d21423227127ee6aa49b67035a4bea2 Parents: 7687b93 Author: Jan Lahoda <[email protected]> Authored: Thu Sep 14 10:20:36 2017 +0200 Committer: Jan Lahoda <[email protected]> Committed: Thu Sep 14 10:20:36 2017 +0200 ---------------------------------------------------------------------- convert/src/convert/CategorizeLicenses.java | 66 ++++++++++++++++++------ convert/src/convert/Convert.java | 14 ++--- 2 files changed, 53 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/blob/ab25500a/convert/src/convert/CategorizeLicenses.java ---------------------------------------------------------------------- diff --git a/convert/src/convert/CategorizeLicenses.java b/convert/src/convert/CategorizeLicenses.java index 576a0d0..0928f10 100644 --- a/convert/src/convert/CategorizeLicenses.java +++ b/convert/src/convert/CategorizeLicenses.java @@ -32,6 +32,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -122,23 +123,44 @@ public class CategorizeLicenses { } } + private static final Map<String, Function<String, Description>> extension2Convertor = new HashMap<>(); + + static { + enterExtensions(code -> snipLicense(code, "/\\*+", "\\*+/", "^[ \t]*\\**[ \t]*", CommentType.JAVA), + "javx", "c", "h", "cpp", "pass", "hint", "css", "java"); + enterExtensions(code -> snipLicense(code, "<!--+", "-+->", "^[ \t]*(-[ \t]*)?", CommentType.XML), + "html", "xsd", "xsl", "dtd", "settings", "wstcgrp", "wstcref", + "wsgrp", "xml"); + enterExtensions(code -> snipLicenseBundle(code, "#!.*"), "sh"); + enterExtensions(code -> snipLicenseBundle(code, null), "properties"); + } + + private static void enterExtensions(Function<String, Description> convertor, String... extensions) { + for (String ext : extensions) { + extension2Convertor.put(ext, convertor); + } + } + public static Description snipUnifiedLicenseOrNull(String code, Path file) { String fn = file.getFileName().toString(); - switch (fn.substring(fn.lastIndexOf('.') + 1)) { - case "javx": case "c": case "h": case "cpp": - case "java": return snipLicense(code, "/\\*+", "\\*+/", "^[ \t]*\\**[ \t]*"); - case "html": case "xsd": case "xsl": case "dtd": - case "settings": case "wstcgrp": case "wstcref": - case "wsgrp": - case "xml": return snipLicense(code, "<!--+", "-+->", "^[ \t]*(-[ \t]*)?"); - case "sh": return snipLicenseBundle(code, "#!.*"); - case "properties": return snipLicenseBundle(code, null); + String ext = fn.substring(fn.lastIndexOf('.') + 1); + Function<String, Description> preferredConvertor = extension2Convertor.get(ext); + Description desc = preferredConvertor != null ? preferredConvertor.apply(ext) : null; + + if (desc == null) { + for (Function<String, Description> convertor : extension2Convertor.values()) { + desc = convertor.apply(code); + + if (desc != null) { + return desc; + } + } } return null; } - private static Description snipLicense(String code, String commentStart, String commentEnd, String normalizeLines) { + private static Description snipLicense(String code, String commentStart, String commentEnd, String normalizeLines, CommentType commentType) { Matcher startM = Pattern.compile(commentStart).matcher(code); if (!startM.find()) return null; @@ -151,7 +173,7 @@ public class CategorizeLicenses { .map(l -> l.replaceAll(normalizeLines, "")) .collect(Collectors.joining("\n")); } - return createUnifiedDescriptionOrNull(startM.start(), endM.end(), lic); + return createUnifiedDescriptionOrNull(startM.start(), endM.end(), lic, commentType); } private static Description snipLicenseBundle(String code, String firstLinePattern) { @@ -168,6 +190,8 @@ public class CategorizeLicenses { line = line.trim(); if (firstLine && firstLinePattern != null && Pattern.compile(firstLinePattern).matcher(line).matches()) continue; + if (firstLine && line.trim().isEmpty()) + continue; if (firstLine) { start = pos; } @@ -176,13 +200,13 @@ public class CategorizeLicenses { res.append(line.substring(1).trim()); res.append("\n"); } else { - return createUnifiedDescriptionOrNull(start, next, res.toString()); + return createUnifiedDescriptionOrNull(start, next, res.toString(), CommentType.PROPERTIES); } } - return createUnifiedDescriptionOrNull(start, next, res.toString()); + return createUnifiedDescriptionOrNull(start, next, res.toString(), CommentType.PROPERTIES); } - private static Description createUnifiedDescriptionOrNull(int start, int end, String lic) { + private static Description createUnifiedDescriptionOrNull(int start, int end, String lic, CommentType commentType) { if (lic != null && lic.contains("CDDL")) { if (start == (-1)) { System.err.println("!!!"); @@ -194,7 +218,7 @@ public class CategorizeLicenses { lic = lic.replaceAll("\n+", "\n"); lic = lic.replaceAll("^\n+", ""); lic = lic.replaceAll("\n+$", ""); - return new Description(start, end, lic); + return new Description(start, end, lic, commentType); } return null; @@ -204,12 +228,20 @@ public class CategorizeLicenses { public final int start; public final int end; public final String header; + public final CommentType commentType; - public Description(int start, int end, String header) { + public Description(int start, int end, String header, CommentType commentType) { this.start = start; this.end = end; this.header = header; + this.commentType = commentType; } - } + } + + public enum CommentType { + JAVA, + XML, + PROPERTIES; + } } http://git-wip-us.apache.org/repos/asf/incubator-netbeans-tools/blob/ab25500a/convert/src/convert/Convert.java ---------------------------------------------------------------------- diff --git a/convert/src/convert/Convert.java b/convert/src/convert/Convert.java index fcf6bb8..c8fc1fa 100644 --- a/convert/src/convert/Convert.java +++ b/convert/src/convert/Convert.java @@ -173,17 +173,11 @@ public class Convert { } private static void fixHeader(Path file, String code, Description desc) { - String fn = file.getFileName().toString(); String outputLicense; - switch (fn.substring(fn.lastIndexOf('.') + 1)) { - case "javx": case "c": case "h": case "cpp": - case "java": outputLicense = JAVA_OUTPUT; break; - case "html": case "xsd": case "xsl": case "dtd": - case "settings": case "wstcgrp": case "wstcref": - case "wsgrp": - case "xml": outputLicense = XML_OUTPUT; break; - case "sh": - case "properties": outputLicense = BUNDLE_OUTPUT; break; + switch (desc.commentType) { + case JAVA: outputLicense = JAVA_OUTPUT; break; + case XML: outputLicense = XML_OUTPUT; break; + case PROPERTIES: outputLicense = BUNDLE_OUTPUT; break; default: System.err.println("cannot rewrite: " + file); return ;
