[java] JavaLibraryUtil moved to intellij.java

GitOrigin-RevId: f5cce6e0e98d6694b9303048621d27dd7a5a5dab
This commit is contained in:
Yuriy Artamonov
2023-04-15 16:34:34 +02:00
committed by intellij-monorepo-bot
parent 8eb6b0f6d7
commit b65ac8356c
20 changed files with 323 additions and 73 deletions

View File

@@ -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="/*&#10; * Copyright (c) $today.year Your Corporation. All Rights Reserved.&#10; */" />

View File

@@ -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;

View File

@@ -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;

View 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);
}
}

View File

@@ -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)

View File

@@ -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())
}

View File

@@ -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

View File

@@ -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)
)
}!!

View File

@@ -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

View File

@@ -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)
)
}

View File

@@ -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

View File

@@ -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

View File

@@ -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)
)
}

View File

@@ -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
)
}

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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