IDEA-71691: appengine facet doesnt bring in required libraries

This commit is contained in:
nik
2013-12-24 17:56:11 +04:00
parent b100613376
commit 124408c7b2
3 changed files with 31 additions and 5 deletions
@@ -37,6 +37,7 @@ import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
import com.intellij.openapi.ui.LabeledComponent;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.Artifact;
import com.intellij.packaging.artifacts.ArtifactManager;
@@ -56,6 +57,8 @@ import javax.swing.text.JTextComponent;
import java.awt.*;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* @author nik
@@ -120,7 +123,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider
webIntegration.setupRunConfiguration(sdk, artifact, project);
webIntegration.addDevServerToModuleDependencies(rootModel, sdk);
final Library apiJar = addProjectLibrary(module, "AppEngine API", sdk.getLibUserDirectoryPath(), VirtualFile.EMPTY_ARRAY);
final Library apiJar = addProjectLibrary(module, "AppEngine API", sdk.getUserLibraryPaths(), VirtualFile.EMPTY_ARRAY);
rootModel.addLibraryEntry(apiJar);
webIntegration.addLibraryToArtifact(apiJar, artifact, project);
@@ -151,7 +154,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider
catch (IOException e) {
LOG.error(e);
}
final Library library = addProjectLibrary(module, "AppEngine ORM", sdk.getOrmLibDirectoryPath(), sdk.getOrmLibSources());
final Library library = addProjectLibrary(module, "AppEngine ORM", Collections.singletonList(sdk.getOrmLibDirectoryPath()), sdk.getOrmLibSources());
rootModel.addLibraryEntry(library);
webIntegration.addLibraryToArtifact(library, artifact, project);
}
@@ -174,7 +177,7 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider
return artifactManager.addArtifact(module.getName(), artifactType, root);
}
private static Library addProjectLibrary(final Module module, final String name, final String path, final VirtualFile[] sources) {
private static Library addProjectLibrary(final Module module, final String name, final List<String> jarDirectories, final VirtualFile[] sources) {
return new WriteAction<Library>() {
protected void run(final Result<Library> result) {
final LibraryTable libraryTable = LibraryTablesRegistrar.getInstance().getLibraryTable(module.getProject());
@@ -182,7 +185,9 @@ public class AppEngineSupportProvider extends FacetBasedFrameworkSupportProvider
if (library == null) {
library = libraryTable.createLibrary(name);
final Library.ModifiableModel model = library.getModifiableModel();
model.addJarDirectory(VfsUtil.pathToUrl(path), false);
for (String path : jarDirectories) {
model.addJarDirectory(VfsUtilCore.pathToUrl(path), false);
}
for (VirtualFile sourceRoot : sources) {
model.addRoot(sourceRoot, OrderRootType.SOURCES);
}
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.List;
/**
* @author nik
@@ -47,7 +48,7 @@ public interface AppEngineSdk {
String getOrmLibDirectoryPath();
String getLibUserDirectoryPath();
List<String> getUserLibraryPaths();
VirtualFile[] getOrmLibSources();
@@ -27,6 +27,7 @@ import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileManager;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
@@ -167,6 +168,25 @@ public class AppEngineSdkImpl implements AppEngineSdk {
return getLibUserDirectoryPath() + "/orm";
}
@Override
public List<String> getUserLibraryPaths() {
List<String> result = new ArrayList<String>();
result.add(getLibUserDirectoryPath());
File opt = new File(myHomePath, "lib/opt/user");
ContainerUtil.addIfNotNull(result, findLatestVersion(new File(opt, "appengine-endpoints")));
ContainerUtil.addIfNotNull(result, findLatestVersion(new File(opt, "jsr107")));
return result;
}
private static String findLatestVersion(File dir) {
String[] names = dir.list();
if (names != null && names.length > 0) {
String max = Collections.max(Arrays.asList(names));
return FileUtil.toSystemIndependentName(new File(dir, max).getAbsolutePath());
}
return null;
}
public VirtualFile[] getOrmLibSources() {
final File libsDir = new File(FileUtil.toSystemDependentName(myHomePath + "/src/orm"));
final File[] files = libsDir.listFiles();