Move api extensions for LibraryPresentationProvider to utility methods
This commit is contained in:
@@ -31,7 +31,7 @@ import javax.swing.*;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
public class JSLibraryStdPresentationProvider extends CachingLibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public class JSLibraryStdPresentationProvider extends LibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public static JSLibraryStdPresentationProvider getInstance() {
|
||||
return LibraryPresentationProvider.EP_NAME.findExtension(JSLibraryStdPresentationProvider.class);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class JavaRuntimePresentationProvider extends CachingLibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public class JavaRuntimePresentationProvider extends LibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public static JavaRuntimePresentationProvider getInstance() {
|
||||
return LibraryPresentationProvider.EP_NAME.findExtension(JavaRuntimePresentationProvider.class);
|
||||
}
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ import org.jetbrains.jet.plugin.JetIcons;
|
||||
import javax.swing.*;
|
||||
import java.util.List;
|
||||
|
||||
public class JsHeaderLibraryPresentationProvider extends CachingLibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public class JsHeaderLibraryPresentationProvider extends LibraryPresentationProvider<LibraryVersionProperties> {
|
||||
public static final LibraryKind KOTLIN_JAVASCRIPT_HEADER_KIND = LibraryKind.create("kotlin-js-header");
|
||||
|
||||
public static JsHeaderLibraryPresentationProvider getInstance() {
|
||||
|
||||
@@ -115,7 +115,7 @@ public class KotlinFrameworkDetector {
|
||||
ModuleRootManager.getInstance(module).orderEntries().librariesOnly().forEachLibrary(new Processor<Library>() {
|
||||
@Override
|
||||
public boolean process(Library library) {
|
||||
if (JsHeaderLibraryPresentationProvider.getInstance().isDetected(library)) {
|
||||
if (LibraryPresentationProviderUtil.isDetected(JsHeaderLibraryPresentationProvider.getInstance(), library)) {
|
||||
for (VirtualFile file : library.getRootProvider().getFiles(OrderRootType.SOURCES)) {
|
||||
pathsToJSLib.add(PathUtil.getLocalPath(file));
|
||||
}
|
||||
|
||||
+13
-15
@@ -26,36 +26,34 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class CachingLibraryPresentationProvider<T extends LibraryProperties> extends LibraryPresentationProvider<T> {
|
||||
protected CachingLibraryPresentationProvider(@NotNull LibraryKind kind) {
|
||||
super(kind);
|
||||
public class LibraryPresentationProviderUtil {
|
||||
private LibraryPresentationProviderUtil() {}
|
||||
|
||||
public static <LP extends LibraryProperties> boolean isDetected(@NotNull LibraryPresentationProvider<LP> provider, @NotNull Library library) {
|
||||
return getLibraryProperties(provider, library) != null;
|
||||
}
|
||||
|
||||
public boolean isDetected(@NotNull Library library) {
|
||||
return isDetected(Arrays.asList(library.getFiles(OrderRootType.CLASSES)));
|
||||
}
|
||||
|
||||
public boolean isDetected(@NotNull List<VirtualFile> classesRoots) {
|
||||
return cachedDetect(classesRoots, getKind()) != null;
|
||||
public static <LP extends LibraryProperties> boolean isDetected(@NotNull LibraryPresentationProvider<LP> provider, @NotNull List<VirtualFile> classesRoots) {
|
||||
return cachedDetect(provider, classesRoots) != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public T getLibraryProperties(@NotNull Library library) {
|
||||
return cachedDetect(Arrays.asList(library.getFiles(OrderRootType.CLASSES)), getKind());
|
||||
public static <LP extends LibraryProperties> LP getLibraryProperties(@NotNull LibraryPresentationProvider<LP> provider, @NotNull Library library) {
|
||||
return cachedDetect(provider, Arrays.asList(library.getFiles(OrderRootType.CLASSES)));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private T cachedDetect(@NotNull List<VirtualFile> classesRoots, @NotNull final LibraryKind libraryKind) {
|
||||
final Ref<T> propertiesRef = new Ref<T>();
|
||||
private static <LP extends LibraryProperties> LP cachedDetect(@NotNull final LibraryPresentationProvider<LP> provider, @NotNull List<VirtualFile> classesRoots) {
|
||||
final Ref<LP> propertiesRef = new Ref<LP>();
|
||||
|
||||
LibraryDetectionManager.getInstance().processProperties(
|
||||
classesRoots,
|
||||
new LibraryDetectionManager.LibraryPropertiesProcessor() {
|
||||
@Override
|
||||
public <P extends LibraryProperties> boolean processProperties(@NotNull LibraryKind processedKind, @NotNull P properties) {
|
||||
if (libraryKind.equals(processedKind)) {
|
||||
if (provider.getKind().equals(processedKind)) {
|
||||
//noinspection unchecked
|
||||
propertiesRef.set((T)properties);
|
||||
propertiesRef.set((LP)properties);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ import com.sun.istack.internal.Nullable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.plugin.JetPluginUtil;
|
||||
import org.jetbrains.jet.plugin.framework.JavaRuntimePresentationProvider;
|
||||
import org.jetbrains.jet.plugin.framework.LibraryPresentationProviderUtil;
|
||||
import org.jetbrains.jet.utils.PathUtil;
|
||||
|
||||
import javax.swing.event.HyperlinkEvent;
|
||||
@@ -168,7 +169,8 @@ public class OutdatedKotlinRuntimeNotification extends AbstractProjectComponent
|
||||
|
||||
for (Library library : libraries) {
|
||||
VirtualFile libraryJar = JavaRuntimePresentationProvider.getRuntimeJar(library);
|
||||
assert JavaRuntimePresentationProvider.getInstance().isDetected(library) && libraryJar != null : "Only java runtime libraries are expected";
|
||||
assert LibraryPresentationProviderUtil.isDetected(JavaRuntimePresentationProvider.getInstance(), library) &&
|
||||
libraryJar != null : "Only java runtime libraries are expected";
|
||||
|
||||
KotlinRuntimeLibraryUtil.replaceFile(runtimePath, libraryJar);
|
||||
}
|
||||
@@ -208,7 +210,8 @@ public class OutdatedKotlinRuntimeNotification extends AbstractProjectComponent
|
||||
continue;
|
||||
}
|
||||
|
||||
LibraryVersionProperties javaRuntimeProperties = JavaRuntimePresentationProvider.getInstance().getLibraryProperties(library);
|
||||
LibraryVersionProperties javaRuntimeProperties = LibraryPresentationProviderUtil.getLibraryProperties(
|
||||
JavaRuntimePresentationProvider.getInstance(), library);
|
||||
if (javaRuntimeProperties != null) {
|
||||
libraries.add(new VersionedLibrary(library, javaRuntimeProperties.getVersionString()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user