cleanup: remove dead code from ProjectStructureUtil, move code used only during project configuration to ConfigureKotlinInProjectUtils; move function from KotlinRuntimeLibraryCoreUtil into KotlinRuntimeLibraryUtil
This commit is contained in:
@@ -18,35 +18,24 @@ package org.jetbrains.kotlin.idea.project;
|
|||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
import com.intellij.openapi.module.ModuleManager;
|
|
||||||
import com.intellij.openapi.module.ModuleUtilCore;
|
import com.intellij.openapi.module.ModuleUtilCore;
|
||||||
import com.intellij.openapi.project.Project;
|
|
||||||
import com.intellij.openapi.roots.ModuleRootManager;
|
import com.intellij.openapi.roots.ModuleRootManager;
|
||||||
import com.intellij.openapi.roots.ProjectRootModificationTracker;
|
import com.intellij.openapi.roots.ProjectRootModificationTracker;
|
||||||
import com.intellij.openapi.roots.libraries.Library;
|
import com.intellij.openapi.roots.libraries.Library;
|
||||||
import com.intellij.openapi.util.Computable;
|
import com.intellij.openapi.util.Computable;
|
||||||
import com.intellij.openapi.util.Key;
|
import com.intellij.openapi.util.Key;
|
||||||
import com.intellij.openapi.util.Ref;
|
import com.intellij.openapi.util.Ref;
|
||||||
import com.intellij.psi.search.FileTypeIndex;
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
|
||||||
import com.intellij.psi.util.CachedValue;
|
import com.intellij.psi.util.CachedValue;
|
||||||
import com.intellij.psi.util.CachedValueProvider;
|
import com.intellij.psi.util.CachedValueProvider;
|
||||||
import com.intellij.psi.util.CachedValuesManager;
|
import com.intellij.psi.util.CachedValuesManager;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType;
|
|
||||||
import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil;
|
import org.jetbrains.kotlin.idea.framework.JsLibraryStdDetectionUtil;
|
||||||
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryCoreUtil;
|
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class ProjectStructureUtil {
|
public class ProjectStructureUtil {
|
||||||
private static final Key<CachedValue<Boolean>> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE");
|
private static final Key<CachedValue<Boolean>> IS_KOTLIN_JS_MODULE = Key.create("IS_KOTLIN_JS_MODULE");
|
||||||
private static final Key<CachedValue<Boolean>> HAS_KOTLIN_JVM_MODULES = Key.create("HAS_KOTLIN_JVM_MODULES");
|
|
||||||
private static final Key<CachedValue<Boolean>> IS_DEPEND_ON_JVM_KOTLIN = Key.create("KOTLIN_IS_DEPEND_ON_JVM_KOTLIN");
|
|
||||||
|
|
||||||
private ProjectStructureUtil() {
|
private ProjectStructureUtil() {
|
||||||
}
|
}
|
||||||
@@ -56,12 +45,6 @@ public class ProjectStructureUtil {
|
|||||||
return module != null && isJsKotlinModule(module);
|
return module != null && isJsKotlinModule(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasKotlinRuntimeInScope(@NotNull Module module) {
|
|
||||||
GlobalSearchScope scope = module.getModuleWithDependenciesAndLibrariesScope(
|
|
||||||
hasKotlinFilesOnlyInTests(module));
|
|
||||||
return KotlinRuntimeLibraryCoreUtil.getKotlinRuntimeMarkerClass(module.getProject(), scope) != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isJsKotlinModule(@NotNull final Module module) {
|
public static boolean isJsKotlinModule(@NotNull final Module module) {
|
||||||
CachedValue<Boolean> result = module.getUserData(IS_KOTLIN_JS_MODULE);
|
CachedValue<Boolean> result = module.getUserData(IS_KOTLIN_JS_MODULE);
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
@@ -80,59 +63,6 @@ public class ProjectStructureUtil {
|
|||||||
return result.getValue();
|
return result.getValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasJvmKotlinModules(@NotNull final Project project) {
|
|
||||||
CachedValue<Boolean> result = project.getUserData(HAS_KOTLIN_JVM_MODULES);
|
|
||||||
if (result == null) {
|
|
||||||
result = CachedValuesManager.getManager(project).createCachedValue(new CachedValueProvider<Boolean>() {
|
|
||||||
@Override
|
|
||||||
public Result<Boolean> compute() {
|
|
||||||
boolean hasJvmKotlinModules = false;
|
|
||||||
|
|
||||||
for (Module module : ModuleManager.getInstance(project).getModules()) {
|
|
||||||
if (hasKotlinRuntimeInScope(module)) {
|
|
||||||
hasJvmKotlinModules = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.create(hasJvmKotlinModules, ProjectRootModificationTracker.getInstance(project));
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
project.putUserData(HAS_KOTLIN_JVM_MODULES, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isUsedInKotlinJavaModule(@NotNull final Module module) {
|
|
||||||
CachedValue<Boolean> result = module.getUserData(IS_DEPEND_ON_JVM_KOTLIN);
|
|
||||||
if (result == null) {
|
|
||||||
result = CachedValuesManager.getManager(module.getProject()).createCachedValue(new CachedValueProvider<Boolean>() {
|
|
||||||
@Override
|
|
||||||
public Result<Boolean> compute() {
|
|
||||||
boolean usedInKotlinModule = false;
|
|
||||||
|
|
||||||
Set<Module> dependentModules = new HashSet<Module>();
|
|
||||||
ModuleUtilCore.collectModulesDependsOn(module, dependentModules);
|
|
||||||
|
|
||||||
for (Module module : dependentModules) {
|
|
||||||
if (hasKotlinRuntimeInScope(module)) {
|
|
||||||
usedInKotlinModule = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Result.create(usedInKotlinModule, ProjectRootModificationTracker.getInstance(module.getProject()));
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
module.putUserData(IS_DEPEND_ON_JVM_KOTLIN, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static Library getJSStandardLibrary(final Module module) {
|
private static Library getJSStandardLibrary(final Module module) {
|
||||||
return ApplicationManager.getApplication().runReadAction(new Computable<Library>() {
|
return ApplicationManager.getApplication().runReadAction(new Computable<Library>() {
|
||||||
@@ -156,12 +86,4 @@ public class ProjectStructureUtil {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasKotlinFilesInSources(@NotNull Module module) {
|
|
||||||
return FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasKotlinFilesOnlyInTests(@NotNull Module module) {
|
|
||||||
return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
-48
@@ -1,48 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2015 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.idea.versions;
|
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
|
||||||
import com.intellij.openapi.project.DumbService;
|
|
||||||
import com.intellij.openapi.project.Project;
|
|
||||||
import com.intellij.openapi.util.Computable;
|
|
||||||
import com.intellij.openapi.util.Ref;
|
|
||||||
import com.intellij.psi.JavaPsiFacade;
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import com.intellij.psi.search.GlobalSearchScope;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public class KotlinRuntimeLibraryCoreUtil {
|
|
||||||
@Nullable
|
|
||||||
public static PsiClass getKotlinRuntimeMarkerClass(@NotNull final Project project, @NotNull final GlobalSearchScope scope) {
|
|
||||||
return ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
|
|
||||||
@Override
|
|
||||||
public PsiClass compute() {
|
|
||||||
final Ref<PsiClass> result = new Ref<PsiClass>();
|
|
||||||
DumbService.getInstance(project).withAlternativeResolveEnabled(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
result.set(JavaPsiFacade.getInstance(project).findClass("kotlin.Unit", scope));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return result.get();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -27,6 +27,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification
|
import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification
|
||||||
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
import org.jetbrains.kotlin.idea.util.projectStructure.allModules
|
||||||
|
import org.jetbrains.kotlin.idea.versions.getKotlinRuntimeMarkerClass
|
||||||
import org.jetbrains.kotlin.utils.ifEmpty
|
import org.jetbrains.kotlin.utils.ifEmpty
|
||||||
|
|
||||||
fun isProjectConfigured(project: Project): Boolean {
|
fun isProjectConfigured(project: Project): Boolean {
|
||||||
@@ -104,4 +105,17 @@ fun getNonConfiguredModules(project: Project, excludeModules: Collection<Module>
|
|||||||
return modulesWithKotlinFiles.filter { module ->
|
return modulesWithKotlinFiles.filter { module ->
|
||||||
ableToRunConfigurators.any { !it.isConfigured(module) }
|
ableToRunConfigurators.any { !it.isConfigured(module) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun hasKotlinRuntimeInScope(module: Module): Boolean {
|
||||||
|
val scope = module.getModuleWithDependenciesAndLibrariesScope(hasKotlinFilesOnlyInTests(module))
|
||||||
|
return getKotlinRuntimeMarkerClass(module.project, scope) != null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hasKotlinFilesOnlyInTests(module: Module): Boolean {
|
||||||
|
return !hasKotlinFilesInSources(module) && FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(true))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun hasKotlinFilesInSources(module: Module): Boolean {
|
||||||
|
return FileTypeIndex.containsFileOfType(KotlinFileType.INSTANCE, module.getModuleScope(false))
|
||||||
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class KotlinJavaMavenConfigurator extends KotlinMavenConfigurator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean isKotlinModule(@NotNull Module module) {
|
protected boolean isKotlinModule(@NotNull Module module) {
|
||||||
return ProjectStructureUtil.hasKotlinRuntimeInScope(module);
|
return ConfigureKotlinInProjectUtilsKt.hasKotlinRuntimeInScope(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription;
|
import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription;
|
||||||
import org.jetbrains.kotlin.idea.framework.KotlinLibraryUtilKt;
|
import org.jetbrains.kotlin.idea.framework.KotlinLibraryUtilKt;
|
||||||
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
|
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryUtilKt;
|
||||||
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryCoreUtil;
|
|
||||||
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
import org.jetbrains.kotlin.resolve.TargetPlatform;
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform;
|
||||||
import org.jetbrains.kotlin.utils.KotlinPaths;
|
import org.jetbrains.kotlin.utils.KotlinPaths;
|
||||||
@@ -38,7 +37,7 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isConfigured(@NotNull Module module) {
|
public boolean isConfigured(@NotNull Module module) {
|
||||||
return ProjectStructureUtil.hasKotlinRuntimeInScope(module);
|
return ConfigureKotlinInProjectUtilsKt.hasKotlinRuntimeInScope(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -108,7 +107,7 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator
|
|||||||
}
|
}
|
||||||
|
|
||||||
LibraryScope scope = new LibraryScope(project, library);
|
LibraryScope scope = new LibraryScope(project, library);
|
||||||
return KotlinRuntimeLibraryCoreUtil.getKotlinRuntimeMarkerClass(project, scope) != null;
|
return KotlinRuntimeLibraryUtilKt.getKotlinRuntimeMarkerClass(project, scope) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinJavaModuleConfigurator() {
|
KotlinJavaModuleConfigurator() {
|
||||||
|
|||||||
+1
-2
@@ -39,7 +39,6 @@ import com.intellij.ui.EditorNotificationPanel
|
|||||||
import com.intellij.ui.EditorNotifications
|
import com.intellij.ui.EditorNotifications
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
|
|
||||||
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
import org.jetbrains.kotlin.idea.util.application.runWriteAction
|
||||||
import org.jetbrains.kotlin.idea.versions.UnsupportedAbiVersionNotificationPanelProvider
|
import org.jetbrains.kotlin.idea.versions.UnsupportedAbiVersionNotificationPanelProvider
|
||||||
import org.jetbrains.kotlin.idea.versions.createComponentActionLabel
|
import org.jetbrains.kotlin.idea.versions.createComponentActionLabel
|
||||||
@@ -78,7 +77,7 @@ class KotlinSetupEnvironmentNotificationProvider(
|
|||||||
return createSetupSdkPanel(myProject, psiFile)
|
return createSetupSdkPanel(myProject, psiFile)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ProjectStructureUtil.hasKotlinRuntimeInScope(module) &&
|
if (!hasKotlinRuntimeInScope(module) &&
|
||||||
UnsupportedAbiVersionNotificationPanelProvider.collectBadRoots(module).isEmpty()) {
|
UnsupportedAbiVersionNotificationPanelProvider.collectBadRoots(module).isEmpty()) {
|
||||||
return createKotlinNotConfiguredPanel(module)
|
return createKotlinNotConfiguredPanel(module)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
|
import org.jetbrains.kotlin.idea.KotlinPluginUtil;
|
||||||
import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion;
|
import org.jetbrains.kotlin.idea.framework.ui.ConfigureDialogWithModulesAndVersion;
|
||||||
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
|
|
||||||
import org.jetbrains.plugins.gradle.util.GradleConstants;
|
import org.jetbrains.plugins.gradle.util.GradleConstants;
|
||||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
|
||||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
|
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
|
||||||
@@ -63,7 +62,7 @@ public abstract class KotlinWithGradleConfigurator implements KotlinProjectConfi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isConfigured(@NotNull Module module) {
|
public boolean isConfigured(@NotNull Module module) {
|
||||||
if (ProjectStructureUtil.hasKotlinRuntimeInScope(module)) {
|
if (ConfigureKotlinInProjectUtilsKt.hasKotlinRuntimeInScope(module)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ public abstract class KotlinWithLibraryConfigurator implements KotlinProjectConf
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static DependencyScope getDependencyScope(@NotNull Module module) {
|
private static DependencyScope getDependencyScope(@NotNull Module module) {
|
||||||
if (ProjectStructureUtil.hasKotlinFilesOnlyInTests(module)) {
|
if (ConfigureKotlinInProjectUtilsKt.hasKotlinFilesOnlyInTests(module)) {
|
||||||
return DependencyScope.TEST;
|
return DependencyScope.TEST;
|
||||||
}
|
}
|
||||||
return DependencyScope.COMPILE;
|
return DependencyScope.COMPILE;
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import com.intellij.openapi.vfs.JarFileSystem
|
import com.intellij.openapi.vfs.JarFileSystem
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.JavaPsiFacade
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.util.PathUtil.getLocalFile
|
import com.intellij.util.PathUtil.getLocalFile
|
||||||
import com.intellij.util.PathUtil.getLocalPath
|
import com.intellij.util.PathUtil.getLocalPath
|
||||||
@@ -43,6 +45,8 @@ import org.jetbrains.kotlin.idea.configuration.KotlinJsModuleConfigurator
|
|||||||
import org.jetbrains.kotlin.idea.configuration.createConfigureKotlinNotificationCollector
|
import org.jetbrains.kotlin.idea.configuration.createConfigureKotlinNotificationCollector
|
||||||
import org.jetbrains.kotlin.idea.configuration.getConfiguratorByName
|
import org.jetbrains.kotlin.idea.configuration.getConfiguratorByName
|
||||||
import org.jetbrains.kotlin.idea.framework.*
|
import org.jetbrains.kotlin.idea.framework.*
|
||||||
|
import org.jetbrains.kotlin.idea.util.application.runReadAction
|
||||||
|
import org.jetbrains.kotlin.idea.util.runWithAlternativeResolveEnabled
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion
|
import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion
|
||||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||||
import org.jetbrains.kotlin.utils.PathUtil
|
import org.jetbrains.kotlin.utils.PathUtil
|
||||||
@@ -244,3 +248,12 @@ fun showRuntimeJarNotFoundDialog(project: Project, jarName: String) {
|
|||||||
jarName + " is not found. Make sure plugin is properly installed.",
|
jarName + " is not found. Make sure plugin is properly installed.",
|
||||||
"No Runtime Found")
|
"No Runtime Found")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun getKotlinRuntimeMarkerClass(project: Project, scope: GlobalSearchScope): PsiClass? {
|
||||||
|
return runReadAction {
|
||||||
|
project.runWithAlternativeResolveEnabled {
|
||||||
|
JavaPsiFacade.getInstance(project).findClass("kotlin.Unit", scope)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user