Move api extensions for LibraryPresentationProvider to utility methods

This commit is contained in:
Nikolay Krasko
2013-03-20 15:29:42 +04:00
parent 8288c1ed44
commit 0590408236
6 changed files with 22 additions and 21 deletions
@@ -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);
}
@@ -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));
}
@@ -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()));
}