Refactoring: extract methods from JavaRuntimePresentationProvider

This commit is contained in:
Nikolay Krasko
2016-03-01 15:29:27 +03:00
parent 0594abbad6
commit a21a6c9906
6 changed files with 43 additions and 50 deletions
@@ -24,7 +24,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.idea.framework.JavaRuntimeLibraryDescription;
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider;
import org.jetbrains.kotlin.idea.framework.LibraryPresentationProviderUtilKt;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.versions.KotlinRuntimeLibraryCoreUtil;
import org.jetbrains.kotlin.resolve.TargetPlatform;
@@ -96,7 +96,7 @@ public class KotlinJavaModuleConfigurator extends KotlinWithLibraryConfigurator
@Nullable
@Override
protected String getOldSourceRootUrl(@NotNull Library library) {
VirtualFile runtimeJarPath = JavaRuntimePresentationProvider.getRuntimeJar(library);
VirtualFile runtimeJarPath = LibraryPresentationProviderUtilKt.getRuntimeJar(library);
return runtimeJarPath != null ? runtimeJarPath.getUrl() + "src" : null;
}
@@ -17,19 +17,14 @@
package org.jetbrains.kotlin.idea.framework;
import com.intellij.framework.library.LibraryVersionProperties;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryPresentationProvider;
import com.intellij.openapi.roots.libraries.LibraryProperties;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.idea.KotlinIcons;
import org.jetbrains.kotlin.utils.LibraryUtils;
import org.jetbrains.kotlin.utils.PathUtil;
import javax.swing.*;
import java.util.Arrays;
import java.util.List;
public class JavaRuntimePresentationProvider extends LibraryPresentationProvider<LibraryVersionProperties> {
@@ -53,33 +48,4 @@ public class JavaRuntimePresentationProvider extends LibraryPresentationProvider
String version = JavaRuntimeDetectionUtil.getJavaRuntimeVersion(classesRoots);
return version == null ? null : new LibraryVersionProperties(version);
}
@Nullable
private static VirtualFile getRuntimeSrcJar(@NotNull List<VirtualFile> classesRoots) {
return LibraryUtils.getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_SRC_JAR);
}
@Nullable
public static VirtualFile getRuntimeJar(@NotNull Library library) {
return LibraryPresentationProviderUtilKt.isExternalLibrary(library) ? null :
JavaRuntimeDetectionUtil.getRuntimeJar(Arrays.asList(library.getFiles(OrderRootType.CLASSES)));
}
@Nullable
public static VirtualFile getReflectJar(@NotNull Library library) {
return LibraryPresentationProviderUtilKt.isExternalLibrary(library) ? null :
LibraryUtils.getJarFile(Arrays.asList(library.getFiles(OrderRootType.CLASSES)), PathUtil.KOTLIN_JAVA_REFLECT_JAR);
}
@Nullable
public static VirtualFile getRuntimeSrcJar(@NotNull Library library) {
return LibraryPresentationProviderUtilKt.isExternalLibrary(library) ? null :
getRuntimeSrcJar(Arrays.asList(library.getFiles(OrderRootType.SOURCES)));
}
@Nullable
public static VirtualFile getTestJar(@NotNull Library library) {
return LibraryPresentationProviderUtilKt.isExternalLibrary(library) ? null :
LibraryUtils.getJarFile(Arrays.asList(library.getFiles(OrderRootType.CLASSES)), PathUtil.KOTLIN_TEST_JAR);
}
}
@@ -22,6 +22,9 @@ import com.intellij.openapi.roots.OrderRootType
import com.intellij.openapi.roots.libraries.Library
import com.intellij.openapi.roots.libraries.LibraryPresentationProvider
import com.intellij.openapi.roots.libraries.LibraryProperties
import com.intellij.openapi.vfs.VirtualFile
import org.jetbrains.kotlin.utils.LibraryUtils
import org.jetbrains.kotlin.utils.PathUtil
import java.util.*
fun <LP : LibraryProperties<out Any>> isDetected(provider: LibraryPresentationProvider<LP>, library: Library): Boolean {
@@ -40,4 +43,28 @@ fun isExternalLibrary(library: Library): Boolean {
return ExternalSystemApiUtil.isExternalSystemLibrary(library, ProjectSystemId.IDE) ||
ExternalSystemApiUtil.isExternalSystemLibrary(library, GRADLE_SYSTEM_ID) ||
ExternalSystemApiUtil.isExternalSystemLibrary(library, MAVEN_SYSTEM_ID)
}
}
fun getRuntimeJar(library: Library): VirtualFile? {
if (isExternalLibrary(library)) return null
return JavaRuntimeDetectionUtil.getRuntimeJar(Arrays.asList(*library.getFiles(OrderRootType.CLASSES)))
}
fun getReflectJar(library: Library): VirtualFile? {
if (isExternalLibrary(library)) return null
return LibraryUtils.getJarFile(Arrays.asList(*library.getFiles(OrderRootType.CLASSES)), PathUtil.KOTLIN_JAVA_REFLECT_JAR)
}
fun getRuntimeSrcJar(library: Library): VirtualFile? {
if (isExternalLibrary(library)) return null
return getRuntimeSrcJar(Arrays.asList(*library.getFiles(OrderRootType.SOURCES)))
}
fun getTestJar(library: Library): VirtualFile? {
if (isExternalLibrary(library)) return null
return LibraryUtils.getJarFile(Arrays.asList(*library.getFiles(OrderRootType.CLASSES)), PathUtil.KOTLIN_TEST_JAR)
}
private fun getRuntimeSrcJar(classesRoots: List<VirtualFile>): VirtualFile? {
return LibraryUtils.getJarFile(classesRoots, PathUtil.KOTLIN_JAVA_RUNTIME_SRC_JAR);
}
@@ -39,7 +39,9 @@ import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
import org.jetbrains.kotlin.idea.configuration.KotlinProjectConfigurator
import org.jetbrains.kotlin.idea.configuration.KotlinWithGradleConfigurator
import org.jetbrains.kotlin.idea.configuration.createConfigureKotlinNotificationCollector
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
import org.jetbrains.kotlin.idea.framework.getReflectJar
import org.jetbrains.kotlin.idea.framework.getRuntimeJar
import org.jetbrains.kotlin.idea.framework.getTestJar
import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction
import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory
import org.jetbrains.kotlin.idea.quickfix.quickfixUtil.createIntentionForFirstParentOfType
@@ -59,7 +61,7 @@ class AddReflectionQuickFix(element: KtElement) : AddKotlinLibQuickFix(element)
override fun libraryPath(): String = PathUtil.KOTLIN_JAVA_REFLECT_JAR
override fun getLibFile(): File = PathUtil.getKotlinPathsForIdeaPlugin().reflectPath
override fun hasLibJarInLibrary(library: Library): Boolean = JavaRuntimePresentationProvider.getReflectJar(library) != null
override fun hasLibJarInLibrary(library: Library): Boolean = getReflectJar(library) != null
override fun getLibraryDescriptor(module: Module) = MavenExternalLibraryDescriptor("org.jetbrains.kotlin", "kotlin-reflect",
AddKotlinLibQuickFix.getKotlinStdlibVersion(module))
@@ -74,7 +76,7 @@ class AddTestLibQuickFix(element: KtElement) : AddKotlinLibQuickFix(element) {
override fun libraryPath(): String = PathUtil.KOTLIN_TEST_JAR
override fun getLibFile(): File = PathUtil.getKotlinPathsForIdeaPlugin().kotlinTestPath
override fun hasLibJarInLibrary(library: Library): Boolean = JavaRuntimePresentationProvider.getTestJar(library) != null
override fun hasLibJarInLibrary(library: Library): Boolean = getTestJar(library) != null
override fun getLibraryDescriptor(module: Module) = MavenExternalLibraryDescriptor("org.jetbrains.kotlin", "kotlin-test",
AddKotlinLibQuickFix.getKotlinStdlibVersion(module))
@@ -159,7 +161,7 @@ abstract class AddKotlinLibQuickFix(element: KtElement) : KotlinQuickFixAction<K
val collector = createConfigureKotlinNotificationCollector(project)
for (library in findAllUsedLibraries(project).keySet()) {
val runtimeJar = JavaRuntimePresentationProvider.getRuntimeJar(library) ?: continue
val runtimeJar = getRuntimeJar(library) ?: continue
if (hasLibJarInLibrary(library)) continue
val model = library.modifiableModel
@@ -42,9 +42,7 @@ import org.jetbrains.kotlin.idea.configuration.KotlinJavaModuleConfigurator
import org.jetbrains.kotlin.idea.configuration.KotlinJsModuleConfigurator
import org.jetbrains.kotlin.idea.configuration.createConfigureKotlinNotificationCollector
import org.jetbrains.kotlin.idea.configuration.getConfiguratorByName
import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
import org.jetbrains.kotlin.idea.framework.isDetected
import org.jetbrains.kotlin.idea.framework.*
import org.jetbrains.kotlin.serialization.deserialization.BinaryVersion
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
import org.jetbrains.kotlin.utils.PathUtil
@@ -76,15 +74,15 @@ fun updateLibraries(project: Project, libraries: Collection<Library>) {
for (library in libraries) {
if (isDetected(JavaRuntimePresentationProvider.getInstance(), library)) {
updateJar(project, JavaRuntimePresentationProvider.getRuntimeJar(library), LibraryJarDescriptor.RUNTIME_JAR)
updateJar(project, JavaRuntimePresentationProvider.getReflectJar(library), LibraryJarDescriptor.REFLECT_JAR)
updateJar(project, JavaRuntimePresentationProvider.getTestJar(library), LibraryJarDescriptor.TEST_JAR)
updateJar(project, getRuntimeJar(library), LibraryJarDescriptor.RUNTIME_JAR)
updateJar(project, getReflectJar(library), LibraryJarDescriptor.REFLECT_JAR)
updateJar(project, getTestJar(library), LibraryJarDescriptor.TEST_JAR)
if (kJvmConfigurator.changeOldSourcesPathIfNeeded(library, collector)) {
kJvmConfigurator.copySourcesToPathFromLibrary(library, collector)
}
else {
updateJar(project, JavaRuntimePresentationProvider.getRuntimeSrcJar(library), LibraryJarDescriptor.RUNTIME_SRC_JAR)
updateJar(project, getRuntimeSrcJar(library), LibraryJarDescriptor.RUNTIME_SRC_JAR)
}
}
else if (isDetected(JSLibraryStdPresentationProvider.getInstance(), library)) {
@@ -43,7 +43,7 @@ import com.intellij.ui.EditorNotifications
import com.intellij.ui.HyperlinkLabel
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.framework.JSLibraryStdPresentationProvider
import org.jetbrains.kotlin.idea.framework.JavaRuntimePresentationProvider
import org.jetbrains.kotlin.idea.framework.getRuntimeJar
import java.text.MessageFormat
import javax.swing.Icon
@@ -71,7 +71,7 @@ class UnsupportedAbiVersionNotificationPanelProvider(private val project: Projec
val kotlinLibraries = findAllUsedLibraries(project).keySet()
val badRuntimeLibraries = kotlinLibraries.filter { library ->
val runtimeJar = getLocalJar(JavaRuntimePresentationProvider.getRuntimeJar(library))
val runtimeJar = getLocalJar(getRuntimeJar(library))
val jsLibJar = getLocalJar(JSLibraryStdPresentationProvider.getJsStdLibJar(library))
badRoots.contains(runtimeJar) || badRoots.contains(jsLibJar)
}