mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-06 03:21:12 +07:00
[java] JavaLibraryUtil moved to intellij.java
GitOrigin-RevId: f5cce6e0e98d6694b9303048621d27dd7a5a5dab
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8eb6b0f6d7
commit
b65ac8356c
@@ -25,6 +25,7 @@
|
||||
<orderEntry type="module" module-name="intellij.java.analysis" exported="" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.ui" />
|
||||
<orderEntry type="module" module-name="intellij.platform.core.ui" />
|
||||
<orderEntry type="module" module-name="intellij.platform.externalSystem" />
|
||||
</component>
|
||||
<component name="copyright">
|
||||
<option name="body" value="/* * Copyright (c) $today.year Your Corporation. All Rights Reserved. */" />
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.codeInsight;
|
||||
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.module.Module;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.codeInsight;
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.library;
|
||||
|
||||
import com.intellij.AppTopics;
|
||||
import com.intellij.openapi.Disposable;
|
||||
269
java/openapi/src/com/intellij/java/library/JavaLibraryUtil.java
Normal file
269
java/openapi/src/com/intellij/java/library/JavaLibraryUtil.java
Normal file
@@ -0,0 +1,269 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.library;
|
||||
|
||||
import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.DumbService;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.impl.libraries.LibraryEx;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryProperties;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.JarUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtilCore;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.JavaPsiFacade;
|
||||
import com.intellij.psi.util.CachedValue;
|
||||
import com.intellij.psi.util.CachedValueProvider.Result;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.util.containers.ConcurrentFactoryMap;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.jar.Attributes;
|
||||
|
||||
import static com.intellij.psi.search.GlobalSearchScope.allScope;
|
||||
import static com.intellij.psi.search.GlobalSearchScope.moduleWithDependenciesAndLibrariesScope;
|
||||
import static java.util.Collections.emptyMap;
|
||||
|
||||
@ApiStatus.Experimental
|
||||
public final class JavaLibraryUtil {
|
||||
|
||||
private JavaLibraryUtil() {
|
||||
}
|
||||
|
||||
private static final Key<CachedValue<Map<String, Boolean>>> LIBRARY_CLASSES_PRESENCE_KEY = Key.create("LIBRARY_CLASSES_PRESENCE");
|
||||
private static final Key<CachedValue<Libraries>> MAVEN_LIBRARY_PRESENCE_KEY = Key.create("MAVEN_LIBRARY_PRESENCE");
|
||||
|
||||
public static @Nullable MavenCoordinates getMavenCoordinates(@NotNull Library library) {
|
||||
if (library instanceof LibraryEx) {
|
||||
LibraryProperties<?> libraryProperties = ((LibraryEx)library).getProperties();
|
||||
if (libraryProperties instanceof LibraryWithMavenCoordinatesProperties) {
|
||||
return ((LibraryWithMavenCoordinatesProperties)libraryProperties).getMavenCoordinates();
|
||||
}
|
||||
}
|
||||
|
||||
var name = library.getName();
|
||||
if (name == null) return null;
|
||||
|
||||
var coordinatesString = StringUtil.substringAfter(name, ": ");
|
||||
if (coordinatesString == null) return null;
|
||||
|
||||
var parts = StringUtil.split(coordinatesString, ":");
|
||||
if (parts.size() < 3) return null;
|
||||
|
||||
return new MavenCoordinates(parts.get(0), parts.get(1), parts.get(parts.size() - 1));
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the passed library class is available in the project. Should be used only with constant class names from a known library.
|
||||
* Returns false from dumb mode or if the project is already disposed.
|
||||
*/
|
||||
public static boolean hasLibraryClass(@Nullable Project project, @NotNull String classFqn) {
|
||||
if (project == null || project.isDisposed()) return false;
|
||||
if (project.isDefault()) return false; // EA-396106
|
||||
return getLibraryClassMap(project).getOrDefault(classFqn, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the passed library class is available in the module. Should be used only with constant class names from a known library.
|
||||
* Returns false from dumb mode or if the module is already disposed.
|
||||
*/
|
||||
public static boolean hasLibraryClass(@Nullable Module module, @NotNull String classFqn) {
|
||||
if (module == null || module.isDisposed()) return false;
|
||||
if (module.getProject().isDefault()) return false; // EA-396106
|
||||
return getLibraryClassMap(module).getOrDefault(classFqn, false);
|
||||
}
|
||||
|
||||
private static Map<String, Boolean> getLibraryClassMap(@NotNull Project project) {
|
||||
if (DumbService.isDumb(project)) return emptyMap();
|
||||
|
||||
return CachedValuesManager.getManager(project).getCachedValue(project, LIBRARY_CLASSES_PRESENCE_KEY, () -> {
|
||||
ConcurrentMap<String, Boolean> map = ConcurrentFactoryMap.createMap(classFqn -> {
|
||||
return JavaPsiFacade.getInstance(project).findClass(classFqn, allScope(project)) != null;
|
||||
});
|
||||
return createResultWithDependencies(map, project);
|
||||
}, false);
|
||||
}
|
||||
|
||||
private static Map<String, Boolean> getLibraryClassMap(@NotNull Module module) {
|
||||
if (DumbService.isDumb(module.getProject())) return emptyMap();
|
||||
|
||||
return CachedValuesManager.getManager(module.getProject()).getCachedValue(module, LIBRARY_CLASSES_PRESENCE_KEY, () -> {
|
||||
Project project = module.getProject();
|
||||
ConcurrentMap<String, Boolean> map = ConcurrentFactoryMap.createMap(classFqn -> {
|
||||
return JavaPsiFacade.getInstance(project).findClass(classFqn, moduleWithDependenciesAndLibrariesScope(module)) != null;
|
||||
});
|
||||
return createResultWithDependencies(map, project);
|
||||
}, false);
|
||||
}
|
||||
|
||||
private static Result<Map<String, Boolean>> createResultWithDependencies(@NotNull Map<String, Boolean> map, @NotNull Project project) {
|
||||
return Result.create(map, JavaLibraryModificationTracker.getInstance(project));
|
||||
}
|
||||
|
||||
public static boolean hasLibraryJar(@Nullable Project project, @NotNull String mavenCoords) {
|
||||
if (project == null || project.isDisposed()) return false;
|
||||
if (project.isDefault()) return false; // EA-396106
|
||||
|
||||
return getProjectLibraries(project).contains(mavenCoords);
|
||||
}
|
||||
|
||||
public static boolean hasLibraryJar(@Nullable Module module, @NotNull String mavenCoords) {
|
||||
if (module == null || module.isDisposed()) return false;
|
||||
if (module.getProject().isDefault()) return false; // EA-396106
|
||||
|
||||
return getModuleLibraries(module).contains(mavenCoords);
|
||||
}
|
||||
|
||||
public static @Nullable String getLibraryVersion(@NotNull Module module, @NotNull String mavenCoords) {
|
||||
return getLibraryVersion(module, mavenCoords, null);
|
||||
}
|
||||
|
||||
public static @Nullable String getLibraryVersion(@NotNull Module module, @NotNull String mavenCoords,
|
||||
@Nullable Attributes.Name versionAttribute) {
|
||||
String externalSystemId = ExternalSystemModulePropertyManager.getInstance(module).getExternalSystemId();
|
||||
if (externalSystemId == null) {
|
||||
return getJpsLibraryVersion(module, mavenCoords, versionAttribute);
|
||||
}
|
||||
else {
|
||||
return getExternalSystemLibraryVersion(module, mavenCoords);
|
||||
}
|
||||
}
|
||||
|
||||
private static @Nullable String getJpsLibraryVersion(@NotNull Module module, @NotNull String mavenCoords,
|
||||
@Nullable Attributes.Name versionAttribute) {
|
||||
String name = StringUtil.substringAfter(mavenCoords, ":");
|
||||
if (name == null) return null;
|
||||
|
||||
Ref<String> result = new Ref<>();
|
||||
OrderEnumerator.orderEntries(module).recursively()
|
||||
.forEachLibrary(library -> {
|
||||
VirtualFile[] libraryFiles = library.getFiles(OrderRootType.CLASSES);
|
||||
for (VirtualFile libraryFile : libraryFiles) {
|
||||
if (matchLibraryName(libraryFile.getNameWithoutExtension(), name)) {
|
||||
VirtualFile jarFile = JarFileSystem.getInstance().getVirtualFileForJar(libraryFile);
|
||||
if (jarFile == null) continue;
|
||||
|
||||
String version = JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jarFile), Attributes.Name.IMPLEMENTATION_VERSION);
|
||||
if (version == null && versionAttribute != null) {
|
||||
version = JarUtil.getJarAttribute(VfsUtilCore.virtualToIoFile(jarFile), versionAttribute);
|
||||
}
|
||||
if (version != null) {
|
||||
result.set(version);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return result.get();
|
||||
}
|
||||
|
||||
private static @Nullable String getExternalSystemLibraryVersion(@NotNull Module module, @NotNull String mavenCoords) {
|
||||
Ref<String> result = new Ref<>();
|
||||
OrderEnumerator.orderEntries(module).recursively()
|
||||
.forEachLibrary(library -> {
|
||||
MavenCoordinates coordinates = getMavenCoordinates(library);
|
||||
if (coordinates != null) {
|
||||
String location = coordinates.getGroupId() + ":" + coordinates.getArtifactId();
|
||||
if (location.equals(mavenCoords)) {
|
||||
result.set(coordinates.getVersion());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return result.get();
|
||||
}
|
||||
|
||||
private static @NotNull Libraries getProjectLibraries(@NotNull Project project) {
|
||||
return CachedValuesManager.getManager(project).getCachedValue(project, MAVEN_LIBRARY_PRESENCE_KEY, () -> {
|
||||
return Result.create(fillLibraries(OrderEnumerator.orderEntries(project), true),
|
||||
ProjectRootManager.getInstance(project));
|
||||
}, false);
|
||||
}
|
||||
|
||||
private static @NotNull Libraries getModuleLibraries(@NotNull Module module) {
|
||||
return CachedValuesManager.getManager(module.getProject()).getCachedValue(module, MAVEN_LIBRARY_PRESENCE_KEY, () -> {
|
||||
String externalSystemId = ExternalSystemModulePropertyManager.getInstance(module).getExternalSystemId();
|
||||
return Result.create(fillLibraries(OrderEnumerator.orderEntries(module), externalSystemId == null),
|
||||
ProjectRootManager.getInstance(module.getProject()));
|
||||
}, false);
|
||||
}
|
||||
|
||||
private static @NotNull Libraries fillLibraries(OrderEnumerator orderEnumerator, boolean collectFiles) {
|
||||
Set<String> allMavenCoords = new HashSet<>();
|
||||
Set<String> allJarLibraries = new HashSet<>();
|
||||
|
||||
orderEnumerator.recursively()
|
||||
.forEachLibrary(library -> {
|
||||
MavenCoordinates coordinates = getMavenCoordinates(library);
|
||||
if (!collectFiles) {
|
||||
if (coordinates != null) {
|
||||
allMavenCoords.add(coordinates.getGroupId() + ":" + coordinates.getArtifactId());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
VirtualFile[] libraryFiles = library.getFiles(OrderRootType.CLASSES);
|
||||
if (coordinates != null && libraryFiles.length <= 1) {
|
||||
allMavenCoords.add(coordinates.getGroupId() + ":" + coordinates.getArtifactId());
|
||||
}
|
||||
else {
|
||||
for (VirtualFile libraryFile : libraryFiles) {
|
||||
if (libraryFile.getFileSystem() != JarFileSystem.getInstance()) continue;
|
||||
|
||||
allJarLibraries.add(libraryFile.getNameWithoutExtension());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
return new Libraries(copyOf(allMavenCoords), copyOf(allJarLibraries));
|
||||
}
|
||||
|
||||
private record Libraries(Set<String> mavenLibraries, Set<String> jpsLibraries) {
|
||||
boolean contains(@NotNull String mavenCoords) {
|
||||
if (mavenLibraries.contains(mavenCoords)) return true;
|
||||
|
||||
String libraryName = getLibraryName(mavenCoords);
|
||||
if (libraryName == null) return false;
|
||||
|
||||
return ContainerUtil.exists(jpsLibraries, jpsLibrary -> matchLibraryName(jpsLibrary, libraryName));
|
||||
}
|
||||
|
||||
private static @Nullable String getLibraryName(@NotNull String mavenCoords) {
|
||||
return StringUtil.substringAfter(mavenCoords, ":");
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean matchLibraryName(@NotNull String fileName, @NotNull String libraryName) {
|
||||
if (fileName.equals(libraryName)) return true;
|
||||
|
||||
String prefix = libraryName + "-";
|
||||
if (!fileName.startsWith(prefix)) return false;
|
||||
|
||||
if (fileName.length() == prefix.length()) return false;
|
||||
|
||||
char versionStart = fileName.charAt(prefix.length());
|
||||
return StringUtil.isDecimalDigit(versionStart);
|
||||
}
|
||||
|
||||
private static <T> Set<T> copyOf(Set<T> set) {
|
||||
return set.isEmpty() ? Collections.emptySet() : Set.copyOf(set);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.java.library
|
||||
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.jetbrains.jps.model.library.JpsMavenRepositoryLibraryDescriptor
|
||||
@@ -14,4 +15,6 @@ data class MavenCoordinates @JvmOverloads constructor(
|
||||
val version: @NlsSafe String,
|
||||
val packaging: @NonNls String = JpsMavenRepositoryLibraryDescriptor.DEFAULT_PACKAGING,
|
||||
val classifier: @NonNls String? = null
|
||||
)
|
||||
)
|
||||
|
||||
fun Library.getMavenCoordinates(): MavenCoordinates? = JavaLibraryUtil.getMavenCoordinates(this)
|
||||
@@ -1,24 +0,0 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:JvmName("JavaLibraryUtil")
|
||||
package com.intellij.java.library
|
||||
|
||||
import com.intellij.openapi.roots.impl.libraries.LibraryEx
|
||||
import com.intellij.openapi.roots.libraries.Library
|
||||
|
||||
/**
|
||||
* Returns Maven coordinates of an artifact represented by the library, or `null` if this information isn't stored in the library configuration.
|
||||
*/
|
||||
fun Library.getMavenCoordinates(): MavenCoordinates? {
|
||||
val properties = (this as? LibraryEx)?.properties
|
||||
if (properties is LibraryWithMavenCoordinatesProperties) {
|
||||
return properties.mavenCoordinates
|
||||
}
|
||||
|
||||
/* this is a temporary solution until IJP-1410 is fixed;
|
||||
it relies on the formats used by Maven importer (MavenArtifact::getLibraryName) and Gradle (org.jetbrains.plugins.gradle.DefaultExternalDependencyId.getPresentableName) */
|
||||
val name = name ?: return null
|
||||
val coordinatesString = name.substringAfter(": ")
|
||||
val parts = coordinatesString.split(':')
|
||||
if (parts.size < 3) return null
|
||||
return MavenCoordinates(parts[0], parts[1], parts.last())
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.execution.junit2.properties
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.psi.JavaPsiFacade
|
||||
import com.intellij.psi.PsiAnchor
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
package org.jetbrains.kotlin.idea.base.analysis
|
||||
|
||||
import com.intellij.ProjectTopics
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.assertReadAccessAllowed
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
@@ -184,9 +184,9 @@ class LibraryDependenciesCacheImpl(private val project: Project) : LibraryDepend
|
||||
private fun getLibraryUsageIndex(): LibraryUsageIndex =
|
||||
CachedValuesManager.getManager(project).getCachedValue(project) {
|
||||
CachedValueProvider.Result(
|
||||
LibraryUsageIndex(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
LibraryUsageIndex(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
)
|
||||
}!!
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.caches.project
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.components.PersistentStateComponent
|
||||
import com.intellij.openapi.components.State
|
||||
import com.intellij.openapi.components.Storage
|
||||
@@ -51,9 +51,9 @@ class ResolutionAnchorCacheServiceImpl(
|
||||
get() =
|
||||
CachedValuesManager.getManager(project).getCachedValue(project) {
|
||||
CachedValueProvider.Result.create(
|
||||
mapResolutionAnchorForLibraries(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
mapResolutionAnchorForLibraries(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -61,9 +61,9 @@ class ResolutionAnchorCacheServiceImpl(
|
||||
get() =
|
||||
CachedValuesManager.getManager(project).getCachedValue(project) {
|
||||
CachedValueProvider.Result.create(
|
||||
ContainerUtil.createConcurrentWeakMap(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
ContainerUtil.createConcurrentWeakMap(),
|
||||
ModuleModificationTracker.getInstance(project),
|
||||
JavaLibraryModificationTracker.getInstance(project)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.base.fe10.analysisApiProviders
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.diagnostic.ControlFlowException
|
||||
import com.intellij.openapi.diagnostic.Logger
|
||||
import com.intellij.openapi.project.Project
|
||||
@@ -212,8 +212,8 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
val settings = createPlatformAnalysisSettings(project, platform, sdk)
|
||||
|
||||
val dependenciesForScriptDependencies = listOf(
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ScriptDependenciesModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ScriptDependenciesModificationTracker.getInstance(project)
|
||||
)
|
||||
|
||||
val scriptFile = (dependenciesModuleInfo as? ScriptDependenciesInfo.ForFile)?.scriptFile
|
||||
@@ -247,8 +247,8 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
project, sdkContext, settings,
|
||||
moduleFilter = moduleFilters::sdkFacadeFilter,
|
||||
dependencies = listOf(
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
),
|
||||
invalidateOnOOCB = false,
|
||||
reuseDataFrom = null
|
||||
@@ -262,8 +262,8 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
moduleFilter = moduleFilters::libraryFacadeFilter,
|
||||
invalidateOnOOCB = false,
|
||||
dependencies = listOf(
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
)
|
||||
)
|
||||
|
||||
@@ -417,7 +417,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
private val kotlinSuppressCache: CachedValue<KotlinSuppressCache> = CachedValuesManager.getManager(project).createCachedValue(
|
||||
{
|
||||
CachedValueProvider.Result(
|
||||
object : KotlinSuppressCache() {
|
||||
object : KotlinSuppressCache() {
|
||||
override fun getSuppressionAnnotations(annotated: PsiElement): List<AnnotationDescriptor> {
|
||||
if (annotated !is KtAnnotated) return emptyList()
|
||||
if (!KotlinPsiHeuristics.hasSuppressAnnotation(annotated)) {
|
||||
@@ -439,8 +439,8 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
return annotated.annotationEntries.mapNotNull { context.get(BindingContext.ANNOTATION, it) }
|
||||
}
|
||||
},
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
UastModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
UastModificationTracker.getInstance(project)
|
||||
)
|
||||
},
|
||||
false
|
||||
@@ -450,12 +450,12 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
// NOTE: computations inside createFacadeForFilesWithSpecialModuleInfo depend on project root structure
|
||||
// so we additionally drop the whole slru cache on change
|
||||
CachedValueProvider.Result(
|
||||
object : SLRUCache<Pair<Set<KtFile>, PlatformAnalysisSettings>, ProjectResolutionFacade>(2, 3) {
|
||||
object : SLRUCache<Pair<Set<KtFile>, PlatformAnalysisSettings>, ProjectResolutionFacade>(2, 3) {
|
||||
override fun createValue(filesAndSettings: Pair<Set<KtFile>, PlatformAnalysisSettings>) =
|
||||
createFacadeForFilesWithSpecialModuleInfo(filesAndSettings.first, filesAndSettings.second)
|
||||
},
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -471,12 +471,12 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService {
|
||||
|
||||
private val scriptsCacheProvider = CachedValueProvider {
|
||||
CachedValueProvider.Result(
|
||||
object : SLRUCache<Set<KtFile>, ProjectResolutionFacade>(10, 5) {
|
||||
object : SLRUCache<Set<KtFile>, ProjectResolutionFacade>(10, 5) {
|
||||
override fun createValue(files: Set<KtFile>) = createFacadeForFilesWithSpecialModuleInfo(files)
|
||||
},
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project),
|
||||
ScriptDependenciesModificationTracker.getInstance(project)
|
||||
JavaLibraryModificationTracker.getInstance(project),
|
||||
ProjectRootModificationTracker.getInstance(project),
|
||||
ScriptDependenciesModificationTracker.getInstance(project)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.diagnostic.ControlFlowException
|
||||
import com.intellij.openapi.progress.ProcessCanceledException
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
@@ -143,13 +143,13 @@ internal class ProjectResolutionFacade(
|
||||
listOfNotNull(ScriptDependenciesInfo.ForProject.createIfRequired(project, resolvedModules))
|
||||
|
||||
return IdeaResolverForProject(
|
||||
resolverDebugName,
|
||||
globalContext.withProject(project),
|
||||
resolvedModulesWithDependencies,
|
||||
syntheticFilesByModule,
|
||||
delegateResolverForProject,
|
||||
if (invalidateOnOOCB) KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker else JavaLibraryModificationTracker.getInstance(project),
|
||||
settings
|
||||
resolverDebugName,
|
||||
globalContext.withProject(project),
|
||||
resolvedModulesWithDependencies,
|
||||
syntheticFilesByModule,
|
||||
delegateResolverForProject,
|
||||
if (invalidateOnOOCB) KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker else JavaLibraryModificationTracker.getInstance(project),
|
||||
settings
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.base.fir.analysisApiProviders
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ModificationTracker
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.fir
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.application.runWriteAction
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.project.Project
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.performance.performancePlugin.commands;
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker;
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker;
|
||||
import com.intellij.openapi.application.WriteAction;
|
||||
import com.intellij.openapi.ui.playback.PlaybackContext;
|
||||
import com.intellij.openapi.ui.playback.commands.AbstractCommand;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.project.tests.fe10
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.idea.base.plugin.KotlinPluginKind
|
||||
import org.jetbrains.kotlin.idea.caches.trackers.KotlinIDEModificationTrackerService
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.kotlin.idea.project.tests.fir
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
|
||||
import org.jetbrains.kotlin.analysis.api.session.KtAnalysisSessionProvider
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.test
|
||||
|
||||
import com.intellij.codeInsight.JavaLibraryModificationTracker
|
||||
import com.intellij.java.library.JavaLibraryModificationTracker
|
||||
import com.intellij.facet.FacetManager
|
||||
import com.intellij.lang.annotation.HighlightSeverity
|
||||
import com.intellij.openapi.application.invokeAndWaitIfNeeded
|
||||
|
||||
Reference in New Issue
Block a user