mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-71691: appengine facet doesnt bring in required libraries
This commit is contained in:
+9
-4
@@ -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();
|
||||
|
||||
|
||||
+20
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user