|
15 | 15 | import com.intellij.openapi.util.io.FileUtil; |
16 | 16 | import com.intellij.openapi.util.io.OSAgnosticPathUtil; |
17 | 17 | import com.intellij.openapi.util.text.StringUtil; |
| 18 | +import com.intellij.openapi.vfs.VfsUtilCore; |
18 | 19 | import com.intellij.openapi.vfs.VirtualFile; |
19 | 20 | import com.intellij.util.io.URLUtil; |
20 | 21 | import org.jetbrains.annotations.NotNull; |
21 | 22 | import org.jetbrains.annotations.Nullable; |
22 | 23 |
|
23 | | -import java.io.IOException; |
24 | | -import java.nio.charset.StandardCharsets; |
25 | 24 | import java.util.HashMap; |
26 | | -import java.util.List; |
27 | 25 | import java.util.Map; |
28 | 26 |
|
29 | 27 | public final class PackageConfigFileUtil { |
@@ -129,8 +127,11 @@ public final class PackageConfigFileUtil { |
129 | 127 | * ``` |
130 | 128 | */ |
131 | 129 | private static @Nullable Map<String, String> loadPackagesMapFromJson(@NotNull VirtualFile packageConfigJsonFile) { |
132 | | - String fileContentsStr = FileUtil.loadFileOrNull(packageConfigJsonFile.getPath()); |
133 | | - if (fileContentsStr == null) { |
| 130 | + final String fileContentsStr; |
| 131 | + try { |
| 132 | + fileContentsStr = StringUtil.convertLineSeparators(VfsUtilCore.loadText(packageConfigJsonFile)); |
| 133 | + } |
| 134 | + catch (Exception e) { |
134 | 135 | return null; |
135 | 136 | } |
136 | 137 |
|
@@ -171,62 +172,6 @@ public final class PackageConfigFileUtil { |
171 | 172 | return null; |
172 | 173 | } |
173 | 174 |
|
174 | | - public static @Nullable Map<String, String> getPackagesMap(final @NotNull VirtualFile dotPackagesFile) { |
175 | | - Pair<Long, Map<String, String>> data = dotPackagesFile.getUserData(MOD_STAMP_TO_PACKAGES_MAP); |
176 | | - |
177 | | - final Long currentTimestamp = dotPackagesFile.getModificationCount(); |
178 | | - final Long cachedTimestamp = Pair.getFirst(data); |
179 | | - |
180 | | - if (cachedTimestamp == null || !cachedTimestamp.equals(currentTimestamp)) { |
181 | | - data = null; |
182 | | - dotPackagesFile.putUserData(MOD_STAMP_TO_PACKAGES_MAP, null); |
183 | | - final Map<String, String> packagesMap = loadPackagesMap(dotPackagesFile); |
184 | | - |
185 | | - if (packagesMap != null) { |
186 | | - data = Pair.create(currentTimestamp, packagesMap); |
187 | | - dotPackagesFile.putUserData(MOD_STAMP_TO_PACKAGES_MAP, data); |
188 | | - } |
189 | | - } |
190 | | - |
191 | | - return Pair.getSecond(data); |
192 | | - } |
193 | | - |
194 | | - private static @Nullable Map<String, String> loadPackagesMap(@NotNull VirtualFile dotPackagesFile) { |
195 | | - try { |
196 | | - final List<String> lines; |
197 | | - if (ApplicationManager.getApplication().isUnitTestMode()) { |
198 | | - lines = StringUtil.split(new String(dotPackagesFile.contentsToByteArray(), StandardCharsets.UTF_8), "\n"); |
199 | | - } |
200 | | - else { |
201 | | - lines = FileUtil.loadLines(dotPackagesFile.getPath(), "UTF-8"); |
202 | | - } |
203 | | - |
204 | | - final Map<String, String> result = new HashMap<>(); |
205 | | - |
206 | | - for (String line : lines) { |
207 | | - if (line.trim().isEmpty() || line.startsWith("#")) continue; |
208 | | - |
209 | | - final int colonIndex = line.indexOf(':'); |
210 | | - if (colonIndex > 0 && colonIndex < line.length() - 1) { |
211 | | - final String packageName = line.substring(0, colonIndex).trim(); |
212 | | - final String encodedUri = line.substring(colonIndex + 1).trim(); |
213 | | - // need to protect '+' chars because URLDecoder.decode replaces '+' with space |
214 | | - final String encodedUriWithoutPluses = StringUtil.replace(encodedUri, "+", "%2B"); |
215 | | - final String uri = URLUtil.decode(encodedUriWithoutPluses); |
216 | | - final String packageUri = getAbsolutePackageRootPath(dotPackagesFile.getParent(), uri); |
217 | | - if (!packageName.isEmpty() && packageUri != null) { |
218 | | - result.put(packageName, packageUri); |
219 | | - } |
220 | | - } |
221 | | - } |
222 | | - |
223 | | - return result; |
224 | | - } |
225 | | - catch (IOException e) { |
226 | | - return null; |
227 | | - } |
228 | | - } |
229 | | - |
230 | 175 | private static @Nullable String getAbsolutePackageRootPath(@NotNull VirtualFile baseDir, @NotNull String uri) { |
231 | 176 | if (uri.startsWith("file:/")) { |
232 | 177 | final String pathAfterSlashes = StringUtil.trimEnd(StringUtil.trimLeading(StringUtil.trimStart(uri, "file:/"), '/'), "/"); |
|
0 commit comments