001
014
015 package com.liferay.portal.tools;
016
017 import com.liferay.portal.kernel.io.unsync.UnsyncBufferedReader;
018 import com.liferay.portal.kernel.io.unsync.UnsyncStringReader;
019 import com.liferay.portal.kernel.util.CharPool;
020 import com.liferay.portal.kernel.util.ClassUtil;
021 import com.liferay.portal.kernel.util.StringBundler;
022 import com.liferay.portal.kernel.util.StringUtil;
023 import com.liferay.portal.kernel.util.Validator;
024
025 import java.io.IOException;
026
027 import java.util.Set;
028 import java.util.regex.Matcher;
029 import java.util.regex.Pattern;
030
031
036 public class JavaImportsFormatter extends ImportsFormatter {
037
038 public static String getImports(String content) {
039 Matcher matcher = _importsPattern.matcher(content);
040
041 if (matcher.find()) {
042 return matcher.group();
043 }
044
045 return null;
046 }
047
048 public static String stripJavaImports(
049 String content, String packageDir, String className)
050 throws IOException {
051
052 String imports = getImports(content);
053
054 if (Validator.isNull(imports)) {
055 return content;
056 }
057
058 Set<String> classes = ClassUtil.getClasses(
059 new UnsyncStringReader(content), className);
060
061 StringBundler sb = new StringBundler();
062
063 UnsyncBufferedReader unsyncBufferedReader = new UnsyncBufferedReader(
064 new UnsyncStringReader(imports));
065
066 String line = null;
067
068 while ((line = unsyncBufferedReader.readLine()) != null) {
069 int x = line.indexOf("import ");
070
071 if (x == -1) {
072 continue;
073 }
074
075 int y = line.lastIndexOf(CharPool.PERIOD);
076
077 String importPackage = line.substring(x + 7, y);
078
079 if (importPackage.equals(packageDir) ||
080 importPackage.equals("java.lang")) {
081
082 continue;
083 }
084
085 String importClass = line.substring(y + 1, line.length() - 1);
086
087 if (importClass.equals("*") || classes.contains(importClass)) {
088 sb.append(line);
089 sb.append("\n");
090 }
091 }
092
093 ImportsFormatter importsFormatter = new JavaImportsFormatter();
094
095 String newImports = importsFormatter.format(sb.toString());
096
097 if (!imports.equals(newImports)) {
098 content = StringUtil.replaceFirst(content, imports, newImports);
099 }
100
101
102
103 content = content.replaceFirst(
104 "(?m)^[ \t]*(package .*;)\\s*^[ \t]*import", "$1\n\nimport");
105
106
107
108
109 content = content.replaceFirst(
110 "(?m)^[ \t]*((?:package|import) .*;)\\s*^[ \t]*/\\*\\*",
111 "$1\n\n