Skip to content

Commit

Permalink
Fix jar version stuck problem
Browse files Browse the repository at this point in the history
  • Loading branch information
goodwinnk committed Mar 20, 2013
1 parent 99520c9 commit 8288c1e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,18 @@
package org.jetbrains.jet.plugin.framework;

import com.intellij.framework.library.LibraryVersionProperties;
import com.intellij.openapi.roots.libraries.JarVersionDetectionUtil;
import com.intellij.openapi.roots.libraries.LibraryPresentationProvider;
import com.intellij.openapi.vfs.JarFile;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.plugin.JetIcons;
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil;
import org.jetbrains.jet.utils.PathUtil;

import javax.swing.*;
import java.io.IOException;
import java.util.List;

public class JSLibraryStdPresentationProvider extends CachingLibraryPresentationProvider<LibraryVersionProperties> {
Expand Down Expand Up @@ -58,7 +61,15 @@ public LibraryVersionProperties detect(@NotNull List<VirtualFile> classesRoots)
for (VirtualFile root : classesRoots) {
if (root.getName().equals(PathUtil.JS_LIB_JAR_NAME)) {
assert JsHeaderLibraryPresentationProvider.getInstance().detect(classesRoots) != null : "StdLib should also be detected as headers library";
return new LibraryVersionProperties(KotlinRuntimeLibraryUtil.getLibraryVersion(root));

try {
JarFile zipFile = JarFileSystem.getInstance().getJarFile(root);
String version = JarVersionDetectionUtil.detectJarVersion(zipFile);
return new LibraryVersionProperties(version);
}
catch (IOException e) {
return null;
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,19 @@

import com.intellij.framework.library.LibraryVersionProperties;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.libraries.JarVersionDetectionUtil;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryPresentationProvider;
import com.intellij.openapi.vfs.JarFile;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.plugin.JetIcons;
import org.jetbrains.jet.plugin.versions.KotlinRuntimeLibraryUtil;
import org.jetbrains.jet.utils.PathUtil;

import javax.swing.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

Expand All @@ -51,7 +54,14 @@ public Icon getIcon() {
public LibraryVersionProperties detect(@NotNull List<VirtualFile> classesRoots) {
VirtualFile stdJar = getRuntimeJar(classesRoots);
if (stdJar != null) {
return new LibraryVersionProperties(KotlinRuntimeLibraryUtil.getLibraryVersion(stdJar));
try {
JarFile zipFile = JarFileSystem.getInstance().getJarFile(stdJar);
String version = JarVersionDetectionUtil.detectJarVersion(zipFile);
return new LibraryVersionProperties(version);
}
catch (IOException e) {
return null;
}
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.impl.elements.ManifestFileUtil;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.search.GlobalSearchScope;
Expand All @@ -54,12 +53,8 @@
import java.io.IOException;
import java.util.Collection;
import java.util.Set;
import java.util.jar.Attributes;
import java.util.jar.JarFile;

public class KotlinRuntimeLibraryUtil {
public static final String UNKNOWN_VERSION = "UNKNOWN";

private KotlinRuntimeLibraryUtil() {}

@NotNull
Expand Down Expand Up @@ -168,20 +163,6 @@ public void run() {
});
}

@Nullable
public static String getLibraryVersion(@Nullable VirtualFile kotlinStdJar) {
if (kotlinStdJar == null) return null;
VirtualFile manifestFile = kotlinStdJar.findFileByRelativePath(JarFile.MANIFEST_NAME);
if (manifestFile != null) {
Attributes attributes = ManifestFileUtil.readManifest(manifestFile).getMainAttributes();
if (attributes.containsKey(Attributes.Name.IMPLEMENTATION_VERSION)) {
return attributes.getValue(Attributes.Name.IMPLEMENTATION_VERSION);
}
}

return UNKNOWN_VERSION;
}

@Nullable
private static VirtualFile getKotlinRuntimeJar(@NotNull Project project) {
PsiClass markerClass = getKotlinRuntimeMarkerClass(ProjectScope.getAllScope(project));
Expand Down

0 comments on commit 8288c1e

Please sign in to comment.