mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git.labs.intellij.net:idea/community
This commit is contained in:
@@ -114,13 +114,8 @@ public class RunHotswapDialog extends OptionsDialog {
|
||||
label.setIconTextGap(7);
|
||||
}
|
||||
if (myDisplayHangWarning) {
|
||||
final JLabel warningLabel = new JLabel(DebuggerBundle.message("hotswap.dialog.hang.warning"));
|
||||
final JLabel warningLabel = new JLabel("WARNING! " + DebuggerBundle.message("hotswap.dialog.hang.warning"));
|
||||
warningLabel.setUI(new MultiLineLabelUI());
|
||||
final Icon warningIcon = UIUtil.getWarningIcon();
|
||||
if (warningIcon != null) {
|
||||
warningLabel.setIcon(warningIcon);
|
||||
warningLabel.setIconTextGap(7);
|
||||
}
|
||||
panel.add(warningLabel, BorderLayout.SOUTH);
|
||||
}
|
||||
return panel;
|
||||
|
||||
+18
-50
@@ -25,9 +25,12 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.WrappingVirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -35,12 +38,11 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ProjectSettingsSelectInTarget implements SelectInTarget, DumbAware {
|
||||
public class ProjectStructureSelectInTarget implements SelectInTarget, DumbAware {
|
||||
public boolean canSelect(final SelectInContext context) {
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(context.getProject()).getFileIndex();
|
||||
final VirtualFile file = context.getVirtualFile();
|
||||
@@ -54,7 +56,6 @@ public class ProjectSettingsSelectInTarget implements SelectInTarget, DumbAware
|
||||
public void selectIn(final SelectInContext context, final boolean requestFocus) {
|
||||
final Project project = context.getProject();
|
||||
final VirtualFile file = context.getVirtualFile();
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
|
||||
final Module module;
|
||||
final Facet facet;
|
||||
@@ -64,8 +65,9 @@ public class ProjectSettingsSelectInTarget implements SelectInTarget, DumbAware
|
||||
module = facet == null? null : facet.getModule();
|
||||
}
|
||||
else {
|
||||
final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
module = fileIndex.getModuleForFile(file);
|
||||
facet = findFacet(project, file, fileIndex);
|
||||
facet = fileIndex.isInSourceContent(file) ? null : findFacet(project, file);
|
||||
}
|
||||
if (module != null || facet != null) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
@@ -74,64 +76,30 @@ public class ProjectSettingsSelectInTarget implements SelectInTarget, DumbAware
|
||||
ModulesConfigurator.showFacetSettingsDialog(facet, null);
|
||||
}
|
||||
else {
|
||||
ModulesConfigurator.showDialog(project, module.getName(), null, false);
|
||||
ProjectSettingsService.getInstance(project).openModuleSettings(module);
|
||||
}
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
final LibraryOrderEntry libraryOrderEntry = findLibrary(file, fileIndex);
|
||||
if (libraryOrderEntry != null) {
|
||||
final OrderEntry orderEntry = LibraryUtil.findLibraryEntry(file, project);
|
||||
if (orderEntry != null) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
ModulesConfigurator.showLibrarySettings(project, libraryOrderEntry);
|
||||
}
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
final Sdk jdk = findJdk(file, fileIndex);
|
||||
if (jdk != null) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
ModulesConfigurator.showSdkSettings(project, jdk);
|
||||
ProjectSettingsService.getInstance(project).openLibraryOrSdkSettings(orderEntry);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static LibraryOrderEntry findLibrary(final VirtualFile file, final ProjectFileIndex fileIndex) {
|
||||
List<OrderEntry> entries = fileIndex.getOrderEntriesForFile(file);
|
||||
for (OrderEntry entry : entries) {
|
||||
if (entry instanceof LibraryOrderEntry) {
|
||||
return (LibraryOrderEntry)entry;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Sdk findJdk(final VirtualFile file, final ProjectFileIndex fileIndex) {
|
||||
List<OrderEntry> entries = fileIndex.getOrderEntriesForFile(file);
|
||||
for (OrderEntry entry : entries) {
|
||||
if (entry instanceof JdkOrderEntry) {
|
||||
return ((JdkOrderEntry)entry).getJdk();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Facet findFacet(final @NotNull Project project, final @NotNull VirtualFile file, final @NotNull ProjectFileIndex fileIndex) {
|
||||
if (!fileIndex.isInSourceContent(file)) {
|
||||
for (FacetTypeId id : FacetTypeRegistry.getInstance().getFacetTypeIds()) {
|
||||
if (hasFacetWithRoots(project, id)) {
|
||||
Facet facet = FacetFinder.getInstance(project).findFacet(file, id);
|
||||
if (facet != null) {
|
||||
return facet;
|
||||
}
|
||||
private static Facet findFacet(final @NotNull Project project, final @NotNull VirtualFile file) {
|
||||
for (FacetTypeId id : FacetTypeRegistry.getInstance().getFacetTypeIds()) {
|
||||
if (hasFacetWithRoots(project, id)) {
|
||||
Facet facet = FacetFinder.getInstance(project).findFacet(file, id);
|
||||
if (facet != null) {
|
||||
return facet;
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-5
@@ -16,7 +16,6 @@
|
||||
package com.intellij.openapi.roots.ui.configuration;
|
||||
|
||||
import com.intellij.ide.projectView.impl.ModuleGroup;
|
||||
import com.intellij.ide.projectView.impl.nodes.NamedLibraryElement;
|
||||
import com.intellij.ide.util.projectWizard.JdkChooserPanel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.ShowSettingsUtil;
|
||||
@@ -85,21 +84,20 @@ public class IdeaProjectSettingsService extends ProjectSettingsService {
|
||||
ShowSettingsUtil.getInstance().editConfigurable(myProject, ProjectStructureConfigurable.getInstance(myProject), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
ModuleStructureConfigurable.getInstance(myProject).selectOrderEntry(module, orderEntry);
|
||||
ProjectStructureConfigurable.getInstance(myProject).selectOrderEntry(module, orderEntry);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canOpenProjectLibrarySettings(NamedLibraryElement value) {
|
||||
public boolean canOpenLibraryOrSdkSettings(OrderEntry orderEntry) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void openProjectLibrarySettings(final NamedLibraryElement element) {
|
||||
public void openLibraryOrSdkSettings(@NotNull final OrderEntry orderEntry) {
|
||||
final ProjectStructureConfigurable config = ProjectStructureConfigurable.getInstance(myProject);
|
||||
ShowSettingsUtil.getInstance().editConfigurable(myProject, config, new Runnable() {
|
||||
public void run() {
|
||||
final OrderEntry orderEntry = element.getOrderEntry();
|
||||
if (orderEntry instanceof JdkOrderEntry) {
|
||||
config.select(((JdkOrderEntry)orderEntry).getJdk(), true);
|
||||
} else {
|
||||
|
||||
@@ -35,7 +35,6 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.ModuleRootModel;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
@@ -519,24 +518,6 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change
|
||||
return myModified || myFacetsConfigurator.isModified();
|
||||
}
|
||||
|
||||
public static boolean showSdkSettings(@NotNull Project project, final Sdk sdk) {
|
||||
final ProjectStructureConfigurable configurable = ProjectStructureConfigurable.getInstance(project);
|
||||
return ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
|
||||
public void run() {
|
||||
configurable.select(sdk, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean showLibrarySettings(@NotNull Project project, @NotNull final LibraryOrderEntry library) {
|
||||
final ProjectStructureConfigurable configurable = ProjectStructureConfigurable.getInstance(project);
|
||||
return ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
|
||||
public void run() {
|
||||
configurable.select(library, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static boolean showArtifactSettings(@NotNull Project project, @Nullable final Artifact artifact) {
|
||||
final ProjectStructureConfigurable configurable = ProjectStructureConfigurable.getInstance(project);
|
||||
return ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
|
||||
|
||||
+22
-3
@@ -20,6 +20,7 @@ import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleConfigurationEditor;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.BaseConfigurable;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
@@ -30,6 +31,7 @@ import com.intellij.openapi.project.ProjectBundle;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.projectRoots.Sdk;
|
||||
import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
|
||||
import com.intellij.openapi.roots.ui.configuration.artifacts.ArtifactsStructureConfigurable;
|
||||
@@ -420,15 +422,32 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se
|
||||
public ActionCallback select(@NotNull LibraryOrderEntry libraryOrderEntry, final boolean requestFocus) {
|
||||
final Library lib = libraryOrderEntry.getLibrary();
|
||||
if (lib == null || lib.getTable() == null) {
|
||||
Place place = createPlaceFor(myModulesConfig);
|
||||
place.putPath(BaseStructureConfigurable.TREE_OBJECT, libraryOrderEntry.getOwnerModule());
|
||||
return navigateTo(place, requestFocus);
|
||||
return selectOrderEntry(libraryOrderEntry.getOwnerModule(), libraryOrderEntry);
|
||||
}
|
||||
Place place = createPlaceFor(getConfigurableFor(lib));
|
||||
place.putPath(BaseStructureConfigurable.TREE_NAME, libraryOrderEntry.getLibraryName());
|
||||
return navigateTo(place, requestFocus);
|
||||
}
|
||||
|
||||
public ActionCallback selectOrderEntry(@NotNull final Module module, @Nullable final OrderEntry orderEntry) {
|
||||
return select(module.getName(), null, true).doWhenDone(new Runnable() {
|
||||
public void run() {
|
||||
final MasterDetailsComponent.MyNode node = ModuleStructureConfigurable.getInstance(myProject).findModuleNode(module);
|
||||
if (node != null) {
|
||||
ModuleConfigurable moduleConfigurable = (ModuleConfigurable)node.getConfigurable();
|
||||
ModuleEditor moduleEditor = moduleConfigurable.getModuleEditor();
|
||||
moduleEditor.setSelectedTabName(ClasspathEditor.NAME);
|
||||
if (orderEntry != null) {
|
||||
ModuleConfigurationEditor editor = moduleEditor.getEditor(ClasspathEditor.NAME);
|
||||
if (editor instanceof ClasspathEditor) {
|
||||
((ClasspathEditor)editor).selectOrderEntry(orderEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public ActionCallback navigateTo(@Nullable final Place place, final boolean requestFocus) {
|
||||
final Configurable toSelect = (Configurable)place.getPath(CATEGORY);
|
||||
|
||||
|
||||
+1
-2
@@ -30,7 +30,6 @@ import com.intellij.openapi.roots.ui.configuration.ChooseModulesDialog;
|
||||
import com.intellij.openapi.roots.ui.configuration.FacetsProvider;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.packaging.artifacts.Artifact;
|
||||
import com.intellij.packaging.artifacts.ArtifactModel;
|
||||
import com.intellij.packaging.artifacts.ArtifactType;
|
||||
@@ -124,7 +123,7 @@ public class ArtifactEditorContextImpl implements ArtifactEditorContext {
|
||||
final ModuleLibraryOrderEntryImpl libraryEntry = (ModuleLibraryOrderEntryImpl)entry;
|
||||
if (libraryName != null && libraryName.equals(libraryEntry.getLibraryName())
|
||||
|| libraryName == null && library.equals(libraryEntry.getLibrary())) {
|
||||
ModuleStructureConfigurable.getInstance(getProject()).selectOrderEntry(module, libraryEntry);
|
||||
ProjectStructureConfigurable.getInstance(getProject()).selectOrderEntry(module, libraryEntry);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-4
@@ -26,7 +26,7 @@ import com.intellij.openapi.roots.ModuleRootEvent;
|
||||
import com.intellij.openapi.roots.ModuleRootListener;
|
||||
import com.intellij.openapi.roots.ModuleSourceOrderEntry;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.util.CellAppearance;
|
||||
import com.intellij.openapi.roots.ui.util.OrderEntryCellAppearanceUtils;
|
||||
import com.intellij.openapi.ui.MasterDetailsComponent;
|
||||
@@ -39,8 +39,8 @@ import com.intellij.ui.PopupHandler;
|
||||
import com.intellij.ui.SimpleColoredComponent;
|
||||
import com.intellij.ui.SimpleTextAttributes;
|
||||
import com.intellij.ui.components.JBScrollPane;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
@@ -269,13 +269,12 @@ public class AnalyzeDependenciesComponent extends MasterDetailsComponent {
|
||||
if (module == null) {
|
||||
return;
|
||||
}
|
||||
ModuleStructureConfigurable c = ModuleStructureConfigurable.getInstance(module.getProject());
|
||||
final ModuleDependenciesAnalyzer.OrderPathElement element = e.getData(ORDER_PATH_ELEMENT_KEY);
|
||||
if (element != null && element instanceof ModuleDependenciesAnalyzer.OrderEntryPathElement) {
|
||||
final ModuleDependenciesAnalyzer.OrderEntryPathElement o = (ModuleDependenciesAnalyzer.OrderEntryPathElement)element;
|
||||
final OrderEntry entry = o.entry();
|
||||
final Module m = entry.getOwnerModule();
|
||||
c.selectOrderEntry(m, entry);
|
||||
ProjectStructureConfigurable.getInstance(module.getProject()).selectOrderEntry(m, entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-5
@@ -20,7 +20,7 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -29,15 +29,15 @@ import javax.swing.*;
|
||||
* @author nik
|
||||
*/
|
||||
public class AddExistingCustomLibraryAction extends CustomLibraryActionBase {
|
||||
private Library myLibrary;
|
||||
private final Library myLibrary;
|
||||
|
||||
public AddExistingCustomLibraryAction(Library library,
|
||||
Icon icon,
|
||||
CustomLibraryCreator creator,
|
||||
StructureConfigurableContext context,
|
||||
ModuleStructureConfigurable moduleStructureConfigurable,
|
||||
ProjectStructureConfigurable projectStructureConfigurable,
|
||||
Module module) {
|
||||
super(library.getName(), null, icon, context, moduleStructureConfigurable, creator, module);
|
||||
super(library.getName(), null, icon, context, projectStructureConfigurable, creator, module);
|
||||
myLibrary = library;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,6 @@ public class AddExistingCustomLibraryAction extends CustomLibraryActionBase {
|
||||
return;
|
||||
}
|
||||
final LibraryOrderEntry orderEntry = rootModel.addLibraryEntry(myLibrary);
|
||||
myModuleStructureConfigurable.selectOrderEntry(myModule, orderEntry);
|
||||
myProjectStructureConfigurable.selectOrderEntry(myModule, orderEntry);
|
||||
}
|
||||
}
|
||||
|
||||
+12
-8
@@ -29,12 +29,14 @@ import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryKind;
|
||||
import com.intellij.openapi.roots.libraries.LibraryTable;
|
||||
import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraryEditor.CreateNewLibraryDialog;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
import com.intellij.ui.treeStructure.Tree;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -46,13 +48,14 @@ import java.util.*;
|
||||
public class CreateCustomLibraryAction extends CustomLibraryActionBase {
|
||||
private CreateCustomLibraryAction(final String name, CustomLibraryCreator creator,
|
||||
StructureConfigurableContext context,
|
||||
ModuleStructureConfigurable moduleStructureConfigurable, Module module) {
|
||||
super(name, null, creator.getIcon(), context, moduleStructureConfigurable, creator, module);
|
||||
ProjectStructureConfigurable projectStructureConfigurable, Module module) {
|
||||
super(name, null, creator.getIcon(), context, projectStructureConfigurable, creator, module);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final NewLibraryConfiguration libraryConfiguration = myCreator.getDescription().createNewLibrary(myModuleStructureConfigurable.getTree(),
|
||||
final Tree parentComponent = ModuleStructureConfigurable.getInstance(myContext.getProject()).getTree();
|
||||
final NewLibraryConfiguration libraryConfiguration = myCreator.getDescription().createNewLibrary(parentComponent,
|
||||
null);
|
||||
if (libraryConfiguration == null) {
|
||||
return;
|
||||
@@ -64,7 +67,7 @@ public class CreateCustomLibraryAction extends CustomLibraryActionBase {
|
||||
LibraryTablesRegistrar registrar = LibraryTablesRegistrar.getInstance();
|
||||
final Project project = myContext.getProject();
|
||||
final List<LibraryTable> tables = Arrays.asList(registrar.getLibraryTable(project), registrar.getLibraryTable());
|
||||
final CreateNewLibraryDialog dialog = new CreateNewLibraryDialog(myModuleStructureConfigurable.getTree(), myContext, libraryEditor, tables, 0);
|
||||
final CreateNewLibraryDialog dialog = new CreateNewLibraryDialog(parentComponent, myContext, libraryEditor, tables, 0);
|
||||
dialog.show();
|
||||
if (dialog.isOK()) {
|
||||
final Library library = dialog.createLibrary();
|
||||
@@ -73,7 +76,7 @@ public class CreateCustomLibraryAction extends CustomLibraryActionBase {
|
||||
return;
|
||||
}
|
||||
final LibraryOrderEntry orderEntry = rootModel.addLibraryEntry(library);
|
||||
myModuleStructureConfigurable.selectOrderEntry(myModule, orderEntry);
|
||||
myProjectStructureConfigurable.selectOrderEntry(myModule, orderEntry);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +84,7 @@ public class CreateCustomLibraryAction extends CustomLibraryActionBase {
|
||||
final Module module = moduleStructureConfigurable.getSelectedModule();
|
||||
if (module == null) return Collections.emptyList();
|
||||
|
||||
final ProjectStructureConfigurable projectStructureConfigurable = ProjectStructureConfigurable.getInstance(module.getProject());
|
||||
final List<AnAction> actions = new ArrayList<AnAction>();
|
||||
final LibrariesContainer container = LibrariesContainerFactory.createContainer(context);
|
||||
for (CustomLibraryCreator creator : CustomLibraryCreator.EP_NAME.getExtensions()) {
|
||||
@@ -98,15 +102,15 @@ public class CreateCustomLibraryAction extends CustomLibraryActionBase {
|
||||
final Predicate<Library> notAddedLibrariesCondition = LibraryEditingUtil.getNotAddedLibrariesCondition(context.getModulesConfigurator().getRootModel(module));
|
||||
final Collection<Library> librariesToAdd = Collections2.filter(libraries, Predicates.and(suitablePredicate, notAddedLibrariesCondition));
|
||||
if (librariesToAdd.isEmpty()) {
|
||||
actions.add(new CreateCustomLibraryAction(creator.getDisplayName(), creator, context, moduleStructureConfigurable, module));
|
||||
actions.add(new CreateCustomLibraryAction(creator.getDisplayName(), creator, context, projectStructureConfigurable, module));
|
||||
}
|
||||
else {
|
||||
final DefaultActionGroup group = new DefaultActionGroup(creator.getDisplayName(), true);
|
||||
group.getTemplatePresentation().setIcon(creator.getIcon());
|
||||
group.add(new CreateCustomLibraryAction("New...", creator, context, moduleStructureConfigurable, module));
|
||||
group.add(new CreateCustomLibraryAction("New...", creator, context, projectStructureConfigurable, module));
|
||||
for (Library library : librariesToAdd) {
|
||||
Icon icon = LibraryPresentationManager.getInstance().getNamedLibraryIcon(library, context);
|
||||
group.add(new AddExistingCustomLibraryAction(library, icon, creator, context, moduleStructureConfigurable, module));
|
||||
group.add(new AddExistingCustomLibraryAction(library, icon, creator, context, projectStructureConfigurable, module));
|
||||
}
|
||||
actions.add(group);
|
||||
}
|
||||
|
||||
+5
-5
@@ -21,9 +21,9 @@ import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.ModifiableRootModel;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -38,14 +38,14 @@ import java.util.List;
|
||||
public abstract class CustomLibraryActionBase extends DumbAwareAction {
|
||||
protected final CustomLibraryCreator myCreator;
|
||||
protected final StructureConfigurableContext myContext;
|
||||
protected final ModuleStructureConfigurable myModuleStructureConfigurable;
|
||||
protected Module myModule;
|
||||
protected final ProjectStructureConfigurable myProjectStructureConfigurable;
|
||||
protected final Module myModule;
|
||||
|
||||
protected CustomLibraryActionBase(String text, String description, Icon icon, StructureConfigurableContext context,
|
||||
ModuleStructureConfigurable moduleStructureConfigurable, CustomLibraryCreator creator, Module module) {
|
||||
ProjectStructureConfigurable projectStructureConfigurable, CustomLibraryCreator creator, Module module) {
|
||||
super(text, description, icon);
|
||||
myContext = context;
|
||||
myModuleStructureConfigurable = moduleStructureConfigurable;
|
||||
myProjectStructureConfigurable = projectStructureConfigurable;
|
||||
myCreator = creator;
|
||||
myModule = module;
|
||||
}
|
||||
|
||||
+1
-1
@@ -130,7 +130,7 @@ public class ModuleConfigurable extends ProjectStructureElementConfigurable<Modu
|
||||
//do nothing
|
||||
}
|
||||
|
||||
ModuleEditor getModuleEditor() {
|
||||
public ModuleEditor getModuleEditor() {
|
||||
return myConfigurator.getModuleEditor(myModule);
|
||||
}
|
||||
|
||||
|
||||
+4
-23
@@ -30,7 +30,10 @@ import com.intellij.ide.util.projectWizard.ProjectWizardUtil;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.*;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.ModuleType;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -40,17 +43,14 @@ import com.intellij.openapi.roots.impl.ClonableOrderEntry;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
import com.intellij.openapi.roots.impl.RootModelImpl;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.ClasspathEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModuleEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.libraries.CreateCustomLibraryAction;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.LibraryProjectStructureElement;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ModuleProjectStructureElement;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureDaemonAnalyzer;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.MasterDetailsComponent;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.NamedConfigurable;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -392,25 +392,6 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple
|
||||
return myProject;
|
||||
}
|
||||
|
||||
public void selectOrderEntry(@NotNull final Module module, @Nullable final OrderEntry orderEntry) {
|
||||
ProjectStructureConfigurable.getInstance(myProject).select(module.getName(), null, true).doWhenDone(new Runnable() {
|
||||
public void run() {
|
||||
final MyNode node = findModuleNode(module);
|
||||
if (node != null) {
|
||||
ModuleConfigurable moduleConfigurable = (ModuleConfigurable)node.getConfigurable();
|
||||
ModuleEditor moduleEditor = moduleConfigurable.getModuleEditor();
|
||||
moduleEditor.setSelectedTabName(ClasspathEditor.NAME);
|
||||
if (orderEntry != null) {
|
||||
ModuleConfigurationEditor editor = moduleEditor.getEditor(ClasspathEditor.NAME);
|
||||
if (editor instanceof ClasspathEditor) {
|
||||
((ClasspathEditor)editor).selectOrderEntry(orderEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public Module[] getModules() {
|
||||
if (myContext.myModulesConfigurator != null) {
|
||||
final ModifiableModuleModel model = myContext.myModulesConfigurator.getModuleModel();
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import com.intellij.openapi.roots.ModuleRootModel;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.impl.OrderEntryUtil;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -65,7 +65,7 @@ public class UsageInModuleClasspath extends ProjectStructureElementUsage {
|
||||
else {
|
||||
entry = null;
|
||||
}
|
||||
ModuleStructureConfigurable.getInstance(myContext.getProject()).selectOrderEntry(myModule, entry);
|
||||
ProjectStructureConfigurable.getInstance(myContext.getProject()).selectOrderEntry(myModule, entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-2
@@ -26,7 +26,6 @@ import com.intellij.codeInsight.lookup.LookupManager;
|
||||
import com.intellij.ide.BrowserUtil;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.IdeEventQueue;
|
||||
import com.intellij.ide.projectView.impl.nodes.NamedLibraryElement;
|
||||
import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.ide.util.gotoByName.ChooseByNameBase;
|
||||
import com.intellij.lang.Language;
|
||||
@@ -848,7 +847,7 @@ public class DocumentationManager {
|
||||
final VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||
final OrderEntry libraryEntry = LibraryUtil.findLibraryEntry(virtualFile, myProject);
|
||||
if (libraryEntry != null) {
|
||||
ProjectSettingsService.getInstance(myProject).openProjectLibrarySettings(new NamedLibraryElement(libraryEntry.getOwnerModule(), libraryEntry));
|
||||
ProjectSettingsService.getInstance(myProject).openLibraryOrSdkSettings(libraryEntry);
|
||||
}
|
||||
}
|
||||
} else if (url.startsWith(PSI_ELEMENT_PROTOCOL)) {
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.indexing.FileContentImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.io.File;
|
||||
@@ -90,7 +91,7 @@ public class FrameworkDetectionProcessor {
|
||||
|
||||
myProgressIndicator.setText2(file.getPresentableUrl());
|
||||
try {
|
||||
FileContent fileContent = new FileContent(file, file.contentsToByteArray(false));
|
||||
FileContent fileContent = new FileContentImpl(file, file.contentsToByteArray(false));
|
||||
for (FrameworkDetectorData detector : myDetectorsByFileType.get(fileType)) {
|
||||
if (detector.myFilePattern.accepts(fileContent)) {
|
||||
detector.mySuitableFiles.add(file);
|
||||
|
||||
+10
-12
@@ -50,10 +50,6 @@ public class NamedLibraryElementNode extends ProjectViewNode<NamedLibraryElement
|
||||
super(project, value, viewSettings);
|
||||
}
|
||||
|
||||
public NamedLibraryElementNode(final Project project, final Object value, final ViewSettings viewSettings) {
|
||||
this(project, (NamedLibraryElement)value, viewSettings);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<AbstractTreeNode> getChildren() {
|
||||
final List<AbstractTreeNode> children = new ArrayList<AbstractTreeNode>();
|
||||
@@ -107,22 +103,24 @@ public class NamedLibraryElementNode extends ProjectViewNode<NamedLibraryElement
|
||||
final JdkOrderEntry jdkOrderEntry = (JdkOrderEntry)orderEntry;
|
||||
final Sdk projectJdk = jdkOrderEntry.getJdk();
|
||||
if (projectJdk != null) { //jdk not specified
|
||||
presentation.setLocationString(FileUtil.toSystemDependentName(projectJdk.getHomePath()));
|
||||
final String path = projectJdk.getHomePath();
|
||||
if (path != null) {
|
||||
presentation.setLocationString(FileUtil.toSystemDependentName(path));
|
||||
}
|
||||
}
|
||||
presentation.setTooltip(IdeBundle.message("node.projectview.jdk"));
|
||||
}
|
||||
else {
|
||||
presentation.setTooltip(StringUtil.capitalize(IdeBundle.message("node.projectview.library", ((LibraryOrderEntry)orderEntry).getLibraryLevel())));
|
||||
}
|
||||
}
|
||||
|
||||
protected String getToolTip() {
|
||||
OrderEntry orderEntry = getValue().getOrderEntry();
|
||||
return orderEntry instanceof JdkOrderEntry ? IdeBundle.message("node.projectview.jdk") : StringUtil.capitalize(IdeBundle.message("node.projectview.library", ((LibraryOrderEntry)orderEntry).getLibraryLevel()));
|
||||
}
|
||||
|
||||
public void navigate(final boolean requestFocus) {
|
||||
ProjectSettingsService.getInstance(myProject).openProjectLibrarySettings(getValue());
|
||||
ProjectSettingsService.getInstance(myProject).openLibraryOrSdkSettings(getValue().getOrderEntry());
|
||||
}
|
||||
|
||||
public boolean canNavigate() {
|
||||
return ProjectSettingsService.getInstance(myProject).canOpenProjectLibrarySettings(getValue());
|
||||
return ProjectSettingsService.getInstance(myProject).canOpenLibraryOrSdkSettings(getValue().getOrderEntry());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+6
-1
@@ -28,8 +28,10 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectUtil;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
@@ -218,7 +220,10 @@ public class PsiDirectoryNode extends BasePsiNode<PsiDirectory> implements Navig
|
||||
service.openModuleSettings(module);
|
||||
}
|
||||
else if (ProjectRootsUtil.isLibraryRoot(file, project)) {
|
||||
service.openModuleLibrarySettings(module);
|
||||
final OrderEntry orderEntry = LibraryUtil.findLibraryEntry(file, module.getProject());
|
||||
if (orderEntry != null) {
|
||||
service.openLibraryOrSdkSettings(orderEntry);
|
||||
}
|
||||
}
|
||||
else {
|
||||
service.openContentEntriesSettings(module);
|
||||
|
||||
@@ -19,13 +19,18 @@ package com.intellij.ide.projectView.impl.nodes;
|
||||
import com.intellij.ide.highlighter.ArchiveFileType;
|
||||
import com.intellij.ide.projectView.PresentationData;
|
||||
import com.intellij.ide.projectView.ViewSettings;
|
||||
import com.intellij.ide.projectView.impl.ProjectRootsUtil;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectUtil;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.libraries.LibraryUtil;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectSettingsService;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.vfs.JarFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.pom.NavigatableWithText;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
@@ -36,20 +41,18 @@ import org.jetbrains.annotations.Nullable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
public class PsiFileNode extends BasePsiNode<PsiFile>{
|
||||
public class PsiFileNode extends BasePsiNode<PsiFile> implements NavigatableWithText {
|
||||
|
||||
public PsiFileNode(Project project, PsiFile value, ViewSettings viewSettings) {
|
||||
super(project, value, viewSettings);
|
||||
}
|
||||
|
||||
public Collection<AbstractTreeNode> getChildrenImpl() {
|
||||
if (isArchive()) {
|
||||
VirtualFile jarRoot = JarFileSystem.getInstance().getJarRootForLocalFile(getVirtualFile());
|
||||
if (jarRoot != null) {
|
||||
PsiDirectory psiDirectory = PsiManager.getInstance(getProject()).findDirectory(jarRoot);
|
||||
if (psiDirectory != null) {
|
||||
return ProjectViewDirectoryHelper.getInstance(getProject()).getDirectoryChildren(psiDirectory, getSettings(), true);
|
||||
}
|
||||
VirtualFile jarRoot = getJarRoot();
|
||||
if (jarRoot != null) {
|
||||
PsiDirectory psiDirectory = PsiManager.getInstance(getProject()).findDirectory(jarRoot);
|
||||
if (psiDirectory != null) {
|
||||
return ProjectViewDirectoryHelper.getInstance(getProject()).getDirectoryChildren(psiDirectory, getSettings(), true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,6 +75,52 @@ public class PsiFileNode extends BasePsiNode<PsiFile>{
|
||||
return value != null ? value.getVirtualFile() : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canNavigate() {
|
||||
return isNavigatableLibraryRoot() || super.canNavigate();
|
||||
}
|
||||
|
||||
private boolean isNavigatableLibraryRoot() {
|
||||
VirtualFile jarRoot = getJarRoot();
|
||||
final Project project = getProject();
|
||||
if (jarRoot != null && ProjectRootsUtil.isLibraryRoot(jarRoot, project)) {
|
||||
final OrderEntry orderEntry = LibraryUtil.findLibraryEntry(jarRoot, project);
|
||||
return orderEntry != null && ProjectSettingsService.getInstance(project).canOpenLibraryOrSdkSettings(orderEntry);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private VirtualFile getJarRoot() {
|
||||
final VirtualFile file = getVirtualFile();
|
||||
if (file == null || !file.isValid() || !(file.getFileType() instanceof ArchiveFileType)) {
|
||||
return null;
|
||||
}
|
||||
return JarFileSystem.getInstance().getJarRootForLocalFile(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void navigate(boolean requestFocus) {
|
||||
VirtualFile jarRoot = getJarRoot();
|
||||
final Project project = getProject();
|
||||
if (jarRoot != null && ProjectRootsUtil.isLibraryRoot(jarRoot, project)) {
|
||||
final OrderEntry orderEntry = LibraryUtil.findLibraryEntry(jarRoot, project);
|
||||
if (orderEntry != null) {
|
||||
ProjectSettingsService.getInstance(project).openLibraryOrSdkSettings(orderEntry);
|
||||
return;
|
||||
}
|
||||
}
|
||||
super.navigate(requestFocus);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getNavigateActionText(boolean focusEditor) {
|
||||
if (isNavigatableLibraryRoot()) {
|
||||
return "Open Library Settings";
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getWeight() {
|
||||
return 20;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.openapi.roots.libraries;
|
||||
|
||||
import com.intellij.ide.projectView.impl.nodes.NamedLibraryElement;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.roots.LibraryOrderEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
@@ -29,14 +28,14 @@ import org.jetbrains.annotations.NotNull;
|
||||
*/
|
||||
public class LibraryNavigatable implements Navigatable {
|
||||
private final Module module;
|
||||
private NamedLibraryElement element;
|
||||
private OrderEntry element;
|
||||
|
||||
public LibraryNavigatable(@NotNull Library library, @NotNull Module module) {
|
||||
this.module = module;
|
||||
for (OrderEntry entry : ModuleRootManager.getInstance(module).getOrderEntries()) {
|
||||
if (entry instanceof LibraryOrderEntry) {
|
||||
if (((LibraryOrderEntry)entry).getLibrary() == library) {
|
||||
element = new NamedLibraryElement(module, entry);
|
||||
element = entry;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -44,7 +43,7 @@ public class LibraryNavigatable implements Navigatable {
|
||||
|
||||
@Override
|
||||
public void navigate(boolean requestFocus) {
|
||||
ProjectSettingsService.getInstance(module.getProject()).openProjectLibrarySettings(element);
|
||||
ProjectSettingsService.getInstance(module.getProject()).openLibraryOrSdkSettings(element);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+7
-11
@@ -17,7 +17,6 @@
|
||||
package com.intellij.openapi.roots.ui.configuration;
|
||||
|
||||
import com.intellij.ide.projectView.impl.ModuleGroup;
|
||||
import com.intellij.ide.projectView.impl.nodes.NamedLibraryElement;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
@@ -29,7 +28,6 @@ import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.roots.impl.libraries.LibraryEx;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.libraries.LibraryType;
|
||||
import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -72,22 +70,20 @@ public class ProjectSettingsService {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void openProjectLibrarySettings(final NamedLibraryElement value) {
|
||||
Configurable additionalSettingsConfigurable = getLibrarySettingsConfigurable(value);
|
||||
public void openLibraryOrSdkSettings(final @NotNull OrderEntry orderEntry) {
|
||||
Configurable additionalSettingsConfigurable = getLibrarySettingsConfigurable(orderEntry);
|
||||
if (additionalSettingsConfigurable != null) {
|
||||
LibraryOrderEntry entry = (LibraryOrderEntry) value.getOrderEntry();
|
||||
ShowSettingsUtil.getInstance()
|
||||
.showSettingsDialog(entry.getOwnerModule().getProject(), additionalSettingsConfigurable.getDisplayName());
|
||||
ShowSettingsUtil.getInstance().showSettingsDialog(orderEntry.getOwnerModule().getProject(),
|
||||
additionalSettingsConfigurable.getDisplayName());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canOpenProjectLibrarySettings(final NamedLibraryElement value) {
|
||||
return getLibrarySettingsConfigurable(value) != null;
|
||||
public boolean canOpenLibraryOrSdkSettings(final OrderEntry orderEntry) {
|
||||
return getLibrarySettingsConfigurable(orderEntry) != null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static Configurable getLibrarySettingsConfigurable(NamedLibraryElement value) {
|
||||
OrderEntry orderEntry = value.getOrderEntry();
|
||||
private static Configurable getLibrarySettingsConfigurable(OrderEntry orderEntry) {
|
||||
if (!(orderEntry instanceof LibraryOrderEntry)) return null;
|
||||
LibraryOrderEntry libOrderEntry = (LibraryOrderEntry)orderEntry;
|
||||
Library lib = libOrderEntry.getLibrary();
|
||||
|
||||
@@ -30,6 +30,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.indexing.FileBasedIndex;
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.indexing.FileContentImpl;
|
||||
import gnu.trove.TIntArrayList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -110,7 +111,7 @@ public class StubTree {
|
||||
}
|
||||
|
||||
try {
|
||||
final FileContent fc = new FileContent(vFile, vFile.contentsToByteArray());
|
||||
final FileContent fc = new FileContentImpl(vFile, vFile.contentsToByteArray());
|
||||
fc.putUserData(FileBasedIndex.PROJECT, project);
|
||||
final StubElement element = StubUpdatingIndex.buildStubTree(fc);
|
||||
if (element instanceof PsiFileStub) {
|
||||
|
||||
@@ -149,7 +149,7 @@ public class StubUpdatingIndex extends CustomImplementationFileBasedIndexExtensi
|
||||
final BinaryFileStubBuilder builder = BinaryFileStubBuilders.INSTANCE.forFileType(fileType);
|
||||
assert builder != null;
|
||||
|
||||
data = builder.buildStubTree(inputData.getFile(), inputData.getContent(), inputData.getProject());
|
||||
data = builder.buildStubTree(inputData.getFile(), inputData.getContent(), ((FileContentImpl)inputData).getProject());
|
||||
}
|
||||
else {
|
||||
final LanguageFileType filetype = (LanguageFileType)fileType;
|
||||
|
||||
@@ -1196,7 +1196,7 @@ public class FileBasedIndex implements ApplicationComponent {
|
||||
return;
|
||||
}
|
||||
|
||||
final FileContent newFc = new FileContent(vFile, contentText, vFile.getCharset());
|
||||
final FileContentImpl newFc = new FileContentImpl(vFile, contentText, vFile.getCharset());
|
||||
|
||||
if (dominantContentFile != null) {
|
||||
dominantContentFile.putUserData(PsiFileImpl.BUILDING_STUB, true);
|
||||
@@ -1341,7 +1341,7 @@ public class FileBasedIndex implements ApplicationComponent {
|
||||
public void indexFileContent(@Nullable Project project, com.intellij.ide.caches.FileContent content) {
|
||||
myChangedFilesCollector.ensureAllInvalidateTasksCompleted();
|
||||
final VirtualFile file = content.getVirtualFile();
|
||||
FileContent fc = null;
|
||||
FileContentImpl fc = null;
|
||||
|
||||
PsiFile psiFile = null;
|
||||
|
||||
@@ -1355,7 +1355,7 @@ public class FileBasedIndex implements ApplicationComponent {
|
||||
catch (IOException e) {
|
||||
currentBytes = ArrayUtil.EMPTY_BYTE_ARRAY;
|
||||
}
|
||||
fc = new FileContent(file, currentBytes);
|
||||
fc = new FileContentImpl(file, currentBytes);
|
||||
|
||||
psiFile = content.getUserData(PSI_FILE);
|
||||
if (psiFile != null) {
|
||||
@@ -1524,7 +1524,7 @@ public class FileBasedIndex implements ApplicationComponent {
|
||||
if (getInputFilter(indexId).acceptInput(file)) {
|
||||
try {
|
||||
if (fileContent == null) {
|
||||
fileContent = new FileContent(file);
|
||||
fileContent = new FileContentImpl(file);
|
||||
}
|
||||
updateSingleIndex(indexId, file, fileContent);
|
||||
}
|
||||
@@ -1814,7 +1814,7 @@ public class FileBasedIndex implements ApplicationComponent {
|
||||
oldStuff = false;
|
||||
try {
|
||||
if (fileContent == null) {
|
||||
fileContent = new FileContent(file);
|
||||
fileContent = new FileContentImpl(file);
|
||||
}
|
||||
updateSingleIndex(indexId, file, fileContent);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,158 +16,28 @@
|
||||
|
||||
package com.intellij.util.indexing;
|
||||
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.openapi.util.UserDataHolder;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.LanguageSubstitutors;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
* Date: Mar 28, 2008
|
||||
*/
|
||||
public final class FileContent extends UserDataHolderBase {
|
||||
private final VirtualFile myFile;
|
||||
private final String fileName;
|
||||
private final FileType myFileType;
|
||||
private final Charset myCharset;
|
||||
private byte[] myContent;
|
||||
private CharSequence myContentAsText;
|
||||
public interface FileContent extends UserDataHolder {
|
||||
@NotNull
|
||||
FileType getFileType();
|
||||
|
||||
public Project getProject() {
|
||||
return getUserData(FileBasedIndex.PROJECT);
|
||||
}
|
||||
VirtualFile getFile();
|
||||
|
||||
private final Key<PsiFile> CACHED_PSI = Key.create("cached psi from content");
|
||||
String getFileName();
|
||||
|
||||
/**
|
||||
* @return psiFile associated with the content. If the file was not set on FileContentCreation, it will be created on the spot
|
||||
*/
|
||||
public PsiFile getPsiFile() {
|
||||
PsiFile psi = getUserData(FileBasedIndex.PSI_FILE);
|
||||
byte[] getContent();
|
||||
|
||||
if (psi == null) {
|
||||
psi = getUserData(CACHED_PSI);
|
||||
}
|
||||
CharSequence getContentAsText();
|
||||
|
||||
if (psi == null) {
|
||||
Project project = getProject();
|
||||
if (project == null) {
|
||||
project = ProjectManager.getInstance().getDefaultProject();
|
||||
}
|
||||
final Language language = ((LanguageFileType)getFileTypeWithoutSubstitution()).getLanguage();
|
||||
final Language substitutedLanguage = LanguageSubstitutors.INSTANCE.substituteLanguage(language, getFile(), project);
|
||||
psi = PsiFileFactory.getInstance(project).createFileFromText(getFileName(), substitutedLanguage, getContentAsText(), false, false, true);
|
||||
|
||||
psi.putUserData(FileBasedIndex.VIRTUAL_FILE, getFile());
|
||||
putUserData(CACHED_PSI, psi);
|
||||
}
|
||||
return psi;
|
||||
}
|
||||
|
||||
public static class IllegalDataException extends RuntimeException {
|
||||
public IllegalDataException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
public FileContent(@NotNull final VirtualFile file, @NotNull final CharSequence contentAsText, final Charset charset) {
|
||||
this(file, contentAsText, null, charset);
|
||||
}
|
||||
|
||||
public FileContent(@NotNull final VirtualFile file, @NotNull final byte[] content) {
|
||||
this(file, null, content, LoadTextUtil.detectCharsetAndSetBOM(file, content));
|
||||
}
|
||||
|
||||
public FileContent(@NotNull final VirtualFile file) {
|
||||
this(file, null, null, null);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
public FileContent(byte[] content) {
|
||||
this(null, null, content, null);
|
||||
}
|
||||
|
||||
private FileContent(VirtualFile file, CharSequence contentAsText, byte[] content, Charset charset) {
|
||||
myFile = file;
|
||||
myContentAsText = contentAsText;
|
||||
myContent = content;
|
||||
myCharset = charset;
|
||||
myFileType = file == null ? null : FileTypeManager.getInstance().getFileTypeByFile(file);
|
||||
// remember name explicitly because the file could be renamed afterwards
|
||||
fileName = file == null ? null : file.getName();
|
||||
}
|
||||
|
||||
private FileType substituteFileType(VirtualFile file, FileType fileType) {
|
||||
Project project = getProject();
|
||||
return SubstitutedFileType.substituteFileType(file, fileType, project);
|
||||
}
|
||||
|
||||
public FileType getSubstitutedFileType() {
|
||||
return substituteFileType(myFile, myFileType);
|
||||
}
|
||||
|
||||
public FileType getFileTypeWithoutSubstitution() {
|
||||
return myFileType;
|
||||
}
|
||||
|
||||
public FileType getFileType() {
|
||||
return getSubstitutedFileType();
|
||||
}
|
||||
|
||||
public VirtualFile getFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public Charset getCharset() {
|
||||
return myCharset;
|
||||
}
|
||||
|
||||
public byte[] getContent() {
|
||||
if (myContent == null) {
|
||||
if (myContentAsText != null) {
|
||||
try {
|
||||
myContent = myCharset != null ? myContentAsText.toString().getBytes(myCharset.name()) : myContentAsText.toString().getBytes();
|
||||
}
|
||||
catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
return myContent;
|
||||
}
|
||||
|
||||
public CharSequence getContentAsText() {
|
||||
if (myFileType.isBinary()) {
|
||||
throw new IllegalDataException("Cannot obtain text for binary file type : " + myFileType.getDescription());
|
||||
}
|
||||
if (myContentAsText == null) {
|
||||
if (myContent != null) {
|
||||
myContentAsText = LoadTextUtil.getTextByBinaryPresentation(myContent, myCharset);
|
||||
}
|
||||
}
|
||||
return myContentAsText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return fileName;
|
||||
}
|
||||
@NotNull
|
||||
PsiFile getPsiFile();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* Copyright 2000-2011 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.util.indexing;
|
||||
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.fileTypes.LanguageFileType;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.UserDataHolderBase;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.LanguageSubstitutors;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiFileFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.TestOnly;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.nio.charset.Charset;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class FileContentImpl extends UserDataHolderBase implements FileContent {
|
||||
private final VirtualFile myFile;
|
||||
private final String fileName;
|
||||
private final FileType myFileType;
|
||||
private final Charset myCharset;
|
||||
private byte[] myContent;
|
||||
private CharSequence myContentAsText;
|
||||
|
||||
public Project getProject() {
|
||||
return getUserData(FileBasedIndex.PROJECT);
|
||||
}
|
||||
|
||||
private final Key<PsiFile> CACHED_PSI = Key.create("cached psi from content");
|
||||
|
||||
/**
|
||||
* @return psiFile associated with the content. If the file was not set on FileContentCreation, it will be created on the spot
|
||||
*/
|
||||
@NotNull
|
||||
@Override
|
||||
public PsiFile getPsiFile() {
|
||||
PsiFile psi = getUserData(FileBasedIndex.PSI_FILE);
|
||||
|
||||
if (psi == null) {
|
||||
psi = getUserData(CACHED_PSI);
|
||||
}
|
||||
|
||||
if (psi == null) {
|
||||
Project project = getProject();
|
||||
if (project == null) {
|
||||
project = ProjectManager.getInstance().getDefaultProject();
|
||||
}
|
||||
final Language language = ((LanguageFileType)getFileTypeWithoutSubstitution()).getLanguage();
|
||||
final Language substitutedLanguage = LanguageSubstitutors.INSTANCE.substituteLanguage(language, getFile(), project);
|
||||
psi = PsiFileFactory.getInstance(project).createFileFromText(getFileName(), substitutedLanguage, getContentAsText(), false, false, true);
|
||||
|
||||
psi.putUserData(FileBasedIndex.VIRTUAL_FILE, getFile());
|
||||
putUserData(CACHED_PSI, psi);
|
||||
}
|
||||
return psi;
|
||||
}
|
||||
|
||||
public static class IllegalDataException extends RuntimeException {
|
||||
public IllegalDataException(final String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
||||
|
||||
public FileContentImpl(@NotNull final VirtualFile file, @NotNull final CharSequence contentAsText, final Charset charset) {
|
||||
this(file, contentAsText, null, charset);
|
||||
}
|
||||
|
||||
public FileContentImpl(@NotNull final VirtualFile file, @NotNull final byte[] content) {
|
||||
this(file, null, content, LoadTextUtil.detectCharsetAndSetBOM(file, content));
|
||||
}
|
||||
|
||||
public FileContentImpl(@NotNull final VirtualFile file) {
|
||||
this(file, null, null, null);
|
||||
}
|
||||
|
||||
@TestOnly
|
||||
public FileContentImpl(byte[] content) {
|
||||
this(null, null, content, null);
|
||||
}
|
||||
|
||||
private FileContentImpl(VirtualFile file, CharSequence contentAsText, byte[] content, Charset charset) {
|
||||
myFile = file;
|
||||
myContentAsText = contentAsText;
|
||||
myContent = content;
|
||||
myCharset = charset;
|
||||
myFileType = file == null ? null : FileTypeManager.getInstance().getFileTypeByFile(file);
|
||||
// remember name explicitly because the file could be renamed afterwards
|
||||
fileName = file == null ? null : file.getName();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private FileType substituteFileType(VirtualFile file, FileType fileType) {
|
||||
Project project = getProject();
|
||||
return SubstitutedFileType.substituteFileType(file, fileType, project);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public FileType getSubstitutedFileType() {
|
||||
return substituteFileType(myFile, myFileType);
|
||||
}
|
||||
|
||||
public FileType getFileTypeWithoutSubstitution() {
|
||||
return myFileType;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public FileType getFileType() {
|
||||
return getSubstitutedFileType();
|
||||
}
|
||||
|
||||
@Override
|
||||
public VirtualFile getFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getFileName() {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
public Charset getCharset() {
|
||||
return myCharset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getContent() {
|
||||
if (myContent == null) {
|
||||
if (myContentAsText != null) {
|
||||
try {
|
||||
myContent = myCharset != null ? myContentAsText.toString().getBytes(myCharset.name()) : myContentAsText.toString().getBytes();
|
||||
}
|
||||
catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
return myContent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CharSequence getContentAsText() {
|
||||
if (myFileType.isBinary()) {
|
||||
throw new IllegalDataException("Cannot obtain text for binary file type : " + myFileType.getDescription());
|
||||
}
|
||||
if (myContentAsText == null) {
|
||||
if (myContent != null) {
|
||||
myContentAsText = LoadTextUtil.getTextByBinaryPresentation(myContent, myCharset);
|
||||
}
|
||||
}
|
||||
return myContentAsText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return fileName;
|
||||
}
|
||||
}
|
||||
@@ -38,7 +38,7 @@ public class SubstitutedFileType extends LanguageFileType{
|
||||
this.fileType = substitutionFileType;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public static FileType substituteFileType(VirtualFile file, @NotNull FileType fileType, Project project) {
|
||||
if (project == null) {
|
||||
return fileType;
|
||||
|
||||
@@ -82,6 +82,7 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
|
||||
|
||||
private ClearFatalsAction myClearAction = new ClearFatalsAction();
|
||||
private BlameAction myBlameAction = new BlameAction();
|
||||
@Nullable
|
||||
private AnalyzeAction myAnalyzeAction;
|
||||
private boolean myMute;
|
||||
|
||||
@@ -121,6 +122,7 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
rebuildHeaders();
|
||||
updateControls();
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -218,7 +220,10 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
|
||||
myDetailsTabForm.setCommentsAreaVisible(false);
|
||||
}
|
||||
else {
|
||||
myAnalyzeAction = new AnalyzeAction(ActionManager.getInstance().getAction("AnalyzeStacktraceOnError"));
|
||||
final AnAction analyzePlatformAction = ActionManager.getInstance().getAction("AnalyzeStacktraceOnError");
|
||||
if (analyzePlatformAction != null) {
|
||||
myAnalyzeAction = new AnalyzeAction(analyzePlatformAction);
|
||||
}
|
||||
myDetailsTabForm = new DetailsTabForm(myAnalyzeAction);
|
||||
myDetailsTabForm.setCommentsAreaVisible(true);
|
||||
myDetailsTabForm.addCommentsListener(commentsListener);
|
||||
@@ -459,8 +464,14 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
|
||||
final Throwable throwable = message.getThrowable();
|
||||
ErrorReportSubmitter submitter = getSubmitter(throwable);
|
||||
if (submitter == null) {
|
||||
PluginId pluginId = findPluginId(throwable);
|
||||
IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId);
|
||||
if (plugin == null) {
|
||||
// unknown plugin
|
||||
myForeignPluginWarningLabel.setVisible(false);
|
||||
return;
|
||||
}
|
||||
myForeignPluginWarningLabel.setVisible(true);
|
||||
final IdeaPluginDescriptor plugin = PluginManager.getPlugin(findPluginId(throwable));
|
||||
String vendor = plugin.getVendor();
|
||||
String contactInfo = plugin.getVendorUrl();
|
||||
if (StringUtil.isEmpty(contactInfo)) {
|
||||
@@ -574,7 +585,6 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene
|
||||
for (final ArrayList<AbstractMessage> abstractMessages : hash2Messages.values()) {
|
||||
myMergedMessages.add(abstractMessages);
|
||||
}
|
||||
updateControls();
|
||||
}
|
||||
|
||||
private void markAllAsRead() {
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.intellij.diagnostic.errordialog;
|
||||
import com.intellij.diagnostic.DiagnosticBundle;
|
||||
import com.intellij.ui.IdeBorderFactory;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
@@ -16,7 +17,7 @@ public class DetailsTabForm {
|
||||
private JPanel myDetailsHolder;
|
||||
private JButton myAnalyzeStacktraceButton;
|
||||
|
||||
public DetailsTabForm(Action analyzeAction) {
|
||||
public DetailsTabForm(@Nullable Action analyzeAction) {
|
||||
myCommentsArea.setTitle(DiagnosticBundle.message("error.dialog.comment.prompt"));
|
||||
myDetailsPane.setBackground(UIUtil.getTextFieldBackground());
|
||||
myDetailsHolder.setBorder(IdeBorderFactory.createBorder());
|
||||
|
||||
@@ -224,11 +224,11 @@ action.CloseProject.text=Close Pro_ject
|
||||
action.CloseProject.description=Close current project
|
||||
action.ShowSettings.text=Se_ttings
|
||||
action.ShowSettings.description=Configure application settings
|
||||
action.ShowProjectStructureSettings.text=Pro_ject Structure
|
||||
action.ShowProjectStructureSettings.text=Pro_ject Structure...
|
||||
action.ShowProjectStructureSettings.description=Configure project structure
|
||||
action.TemplateProjectProperties.text=Templ_ate Settings
|
||||
action.TemplateProjectProperties.text=Templ_ate Settings...
|
||||
action.TemplateProjectProperties.description=Configure template settings for all new projects
|
||||
action.TemplateProjectStructure.text=Te_mplate Project Structure
|
||||
action.TemplateProjectStructure.text=Te_mplate Project Structure...
|
||||
action.TemplateProjectStructure.description=Configure template structure for all new projects
|
||||
action.SaveAll.text=_Save All
|
||||
action.SaveAll.description=Save all files and settings
|
||||
@@ -324,15 +324,15 @@ action.ViewToolButtons.text=_Tool Buttons
|
||||
action.ViewToolButtons.description=Show/hide tool window buttons
|
||||
action.ViewNavigationBar.text=Na_vigation Bar
|
||||
action.ViewNavigationBar.description=Show/hide the navigation bar
|
||||
action.FileStructurePopup.text=_File Structure Popup
|
||||
action.FileStructurePopup.text=_File Structure
|
||||
action.FileStructurePopup.description=Popup structure of the current file for quick navigation
|
||||
action.ShowFilePath.text=File _Path
|
||||
action.ShowFilePath.description=Popup path of the current file for opening in external file manager
|
||||
action.SelectIn.text=Se_lect In...
|
||||
action.SelectIn.description=Select the current class or method in any view
|
||||
action.QuickJavaDoc.text=Quick _Documentation Lookup
|
||||
action.QuickJavaDoc.text=Quick _Documentation
|
||||
action.QuickJavaDoc.description=Show a popup window with documentation for the symbol at caret
|
||||
action.QuickImplementations.text=Quick Definition Loo_kup
|
||||
action.QuickImplementations.text=Quic_k Definition
|
||||
action.QuickImplementations.description=Show a popup window with the symbol (and its implementations) content
|
||||
action.ParameterInfo.text=_Parameter Info
|
||||
action.ParameterInfo.description=Show parameters of the method call at caret
|
||||
@@ -340,7 +340,7 @@ action.EditorContextInfo.text=_Context Info
|
||||
action.EditorContextInfo.description=Show the current method or class declaration when it is not visible
|
||||
action.ShowErrorDescription.text=E_rror Description
|
||||
action.ShowErrorDescription.description=Show description of error or warning at caret
|
||||
action.ProjectViewChangeView.text=Change View
|
||||
action.ProjectViewChangeView.text=Change View...
|
||||
action.ProjectViewChangeView.description=Choose Project, Sourcepath or Classpath tree in the Project View window
|
||||
action.EditSource.text=_Jump to Source
|
||||
action.EditSource.description=Open editor for the selected item and give focus to it
|
||||
@@ -407,6 +407,8 @@ action.GotoNextError.text=_Next Highlighted Error
|
||||
action.GotoNextError.description=Navigate to the next highlighted error in the active editor
|
||||
action.GotoPreviousError.text=_Previous Highlighted Error
|
||||
action.GotoPreviousError.description=Navigate to the previous highlighted error in the active editor
|
||||
action.GotoRelated.text=_Related File...
|
||||
action.GotoRelated.description=Navigate to one of the related or linked files
|
||||
action.MethodDown.text=N_ext Method
|
||||
action.MethodDown.description=Navigate to the next method in the active editor
|
||||
action.MethodUp.text=Prev_ious Method
|
||||
@@ -1189,9 +1191,9 @@ action.Diff.IgnoreWhitespace.text=Toggle Diff Ignore Whitespace
|
||||
action.ShelvedChanges.Restore.text=Restore Applied Shelved Change
|
||||
action.Graph.Current.Node.Dependencies.Filter.text=Show selected nodes with dependencies
|
||||
group.VcsToobarActions.text=VCS Actions
|
||||
action.StartupWizard.text=Configure Plugins
|
||||
action.StartupWizard.text=Configure Plugins...
|
||||
action.StartupWizard.description=Run a wizard for selecting the set of enabled plugins
|
||||
action.PopupHector.text=Popup Per File Highlighting Settings
|
||||
action.PopupHector.text=Per File Highlighting Settings...
|
||||
action.PopupHector.description=Show panel to configure highlighting mode for the current file
|
||||
group.EditorTabPopupMenu.text=Editor Tab Popup Menu
|
||||
group.MainMenu.text=Main menu
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
<p>Use <span class="shortcut">&shortcut:QuickImplementations;</span>
|
||||
(<span class="control">View | Quick Definition Lookup</span>),
|
||||
(<span class="control">View | Quick Definition</span>),
|
||||
to quickly review definition or content of the symbol at caret, without the need to open it
|
||||
in a new editor tab.</p>
|
||||
<p class="image"><img src="images/ctrl_shift_i.gif"></p>
|
||||
@@ -14,4 +14,4 @@
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
<p>You can quickly navigate in the currently edited file with <span class="shortcut">&shortcut:FileStructurePopup;</span>
|
||||
(<span class="control">View | File Structure Popup</span>).</p>
|
||||
(<span class="control">View | File Structure</span>).</p>
|
||||
<p>It shows the list of members of the current class. Select an element you want to navigate to and press the
|
||||
<span class="shortcut">Enter</span> key or the <span class="shortcut">&shortcut:EditSource;</span> key.</p>
|
||||
<p>To easily locate an item in the list, just start typing its name.</p>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
<p>You can quickly view the image referenced at caret by using the
|
||||
<span class="">Quick Definition Lookup</span>
|
||||
<span class="">Quick Definition</span>
|
||||
(<span class="shortcut">&shortcut:QuickImplementations;</span>). The underlying image will be opened in a popup instead of a separate editor tab.</p>
|
||||
<p class="image"><img src="images/image_lookup.gif"></p>
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<body>
|
||||
<p>
|
||||
To quickly see the documentation for the class or method used at the editor's caret, press <span class="shortcut">&shortcut:QuickJavaDoc;</span>
|
||||
(<span class="control">View | Quick Documentation Lookup</span>).</p>
|
||||
(<span class="control">View | Quick Documentation</span>).</p>
|
||||
<p class="image">
|
||||
<img src="images/quick_javadoc.gif"></p>
|
||||
</body>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
|
||||
<p>The shortcuts such as <span class="shortcut">&shortcut:QuickJavaDoc;</span>
|
||||
(<span class="control">View | Quick Documentation Lookup</span>),
|
||||
(<span class="control">View | Quick Documentation</span>),
|
||||
<span class="shortcut">&shortcut:ParameterInfo;</span> (<span class="control">View | Parameter Info</span>),
|
||||
<span class="shortcut">&shortcut:GotoDeclaration;</span> (<span class="control">Go To | Declaration</span>)
|
||||
and others can be used not only in the editor but in the code completion popup list as well.</p>
|
||||
|
||||
@@ -124,15 +124,12 @@
|
||||
</group>
|
||||
|
||||
<!-- View -->
|
||||
<action id="ViewNavigationBar" class="com.intellij.ide.actions.ViewNavigationBarAction">
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="ViewStatusBar" anchor="after"/>
|
||||
</action>
|
||||
<group id="QuickActions">
|
||||
<action id="QuickImplementations" class="com.intellij.codeInsight.hint.actions.ShowImplementationsAction"/>
|
||||
<action id="QuickJavaDoc" class="com.intellij.codeInsight.documentation.actions.ShowQuickDocInfoAction"/>
|
||||
|
||||
<action id="ViewImportPopups" class="com.intellij.openapi.editor.actions.ToggleShowImportPopupsAction">
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="EditorToggleShowLineNumbers" anchor="after"/>
|
||||
</action>
|
||||
|
||||
<action id="ShowUsagesSettings" class="com.intellij.find.actions.ShowUsagesAction$ShowSettings"/>
|
||||
<add-to-group group-id="ViewMenu" anchor="first"/>
|
||||
</group>
|
||||
|
||||
<group id="CodeEditorBaseGroup">
|
||||
<group id="CodeEditorViewGroup">
|
||||
@@ -144,18 +141,28 @@
|
||||
<action id="SelectIn" class="com.intellij.ide.actions.SelectInAction"/>
|
||||
<action id="FileStructurePopup" class="com.intellij.ide.actions.ViewStructureAction"/>
|
||||
<action id="ShowFilePath" class="com.intellij.ide.actions.ShowFilePathAction"/>
|
||||
<action id="PopupHector" class="com.intellij.codeInsight.daemon.impl.PopupHectorAction"/>
|
||||
</group>
|
||||
<separator/>
|
||||
|
||||
<group id="ProjectViewGroup">
|
||||
<action id="ProjectViewChangeView" class="com.intellij.ide.projectView.actions.ChangeProjectViewAction"/>
|
||||
</group>
|
||||
<separator/>
|
||||
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="QuickActions" anchor="after"/>
|
||||
</group>
|
||||
|
||||
<action id="ViewNavigationBar" class="com.intellij.ide.actions.ViewNavigationBarAction">
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="ViewStatusBar" anchor="after"/>
|
||||
</action>
|
||||
|
||||
<action id="ViewImportPopups" class="com.intellij.openapi.editor.actions.ToggleShowImportPopupsAction">
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="EditorToggleShowLineNumbers" anchor="after"/>
|
||||
</action>
|
||||
|
||||
<action id="ShowUsagesSettings" class="com.intellij.find.actions.ShowUsagesAction$ShowSettings"/>
|
||||
|
||||
<group id="ProjectViewGroup">
|
||||
<action id="ProjectViewChangeView" class="com.intellij.ide.projectView.actions.ChangeProjectViewAction"/>
|
||||
<action id="PopupHector" class="com.intellij.codeInsight.daemon.impl.PopupHectorAction"/>
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="QuickChangeScheme" anchor="after"/>
|
||||
</group>
|
||||
|
||||
<group id="FoldingGroup" popup="true">
|
||||
<action id="ExpandRegion" class="com.intellij.codeInsight.folding.impl.actions.ExpandRegionAction"/>
|
||||
<action id="CollapseRegion" class="com.intellij.codeInsight.folding.impl.actions.CollapseRegionAction"/>
|
||||
@@ -170,13 +177,6 @@
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="UIToggleActions" anchor="before"/>
|
||||
</group>
|
||||
|
||||
<group id="QuickActions">
|
||||
<action id="QuickImplementations" class="com.intellij.codeInsight.hint.actions.ShowImplementationsAction"/>
|
||||
<action id="QuickJavaDoc" class="com.intellij.codeInsight.documentation.actions.ShowQuickDocInfoAction"/>
|
||||
|
||||
<add-to-group group-id="ViewMenu" anchor="first"/>
|
||||
</group>
|
||||
|
||||
<action id="RecentChanges" class="com.intellij.history.integration.ui.actions.RecentChangesAction">
|
||||
<keyboard-shortcut first-keystroke="alt shift C" keymap="$default"/>
|
||||
<add-to-group group-id="ViewRecentActions" anchor="last"/>
|
||||
@@ -188,7 +188,7 @@
|
||||
<action id="MethodHierarchy" class="com.intellij.ide.hierarchy.actions.BrowseMethodHierarchyAction"/>
|
||||
<action id="CallHierarchy" class="com.intellij.ide.hierarchy.actions.BrowseCallHierarchyAction"/>
|
||||
<separator/>
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="UIToggleActions" anchor="before"/>
|
||||
<add-to-group group-id="ViewMenu" relative-to-action="CodeEditorBaseGroup" anchor="after"/>
|
||||
</group>
|
||||
|
||||
<!-- Go To -->
|
||||
@@ -226,7 +226,7 @@
|
||||
<action id="GotoTypeDeclaration" class="com.intellij.codeInsight.navigation.actions.GotoTypeDeclarationAction"/>
|
||||
<action id="GotoSuperMethod" class="com.intellij.codeInsight.navigation.actions.GotoSuperAction"/>
|
||||
<action id="GotoTest" class="com.intellij.testIntegration.GotoTestOrCodeAction"/>
|
||||
<action id="GotoRelated" class="com.intellij.ide.actions.GotoRelatedFileAction" text="_Related File"/>
|
||||
<action id="GotoRelated" class="com.intellij.ide.actions.GotoRelatedFileAction"/>
|
||||
<separator/>
|
||||
|
||||
<add-to-group group-id="GoToMenu" anchor="before" relative-to-action="GoToErrorGroup"/>
|
||||
|
||||
@@ -209,13 +209,14 @@
|
||||
<action id="QuickChangeScheme" class="com.intellij.ide.actions.QuickChangeSchemesAction"/>
|
||||
<group id="UIToggleActions">
|
||||
<separator/>
|
||||
<action id="ViewToolBar" class="com.intellij.ide.actions.ViewToolbarAction"/>
|
||||
<action id="ViewStatusBar" class="com.intellij.ide.actions.ViewStatusBarAction"/>
|
||||
<action id="ViewToolButtons" class="com.intellij.ide.actions.ViewToolWindowButtonsAction"/>
|
||||
<reference ref="EditorToggleShowWhitespaces"/>
|
||||
<reference ref="EditorToggleShowLineNumbers"/>
|
||||
<reference ref="EditorToggleShowIndentLines"/>
|
||||
<reference ref="EditorToggleUseSoftWraps"/>
|
||||
<separator/>
|
||||
<action id="ViewToolBar" class="com.intellij.ide.actions.ViewToolbarAction"/>
|
||||
<action id="ViewToolButtons" class="com.intellij.ide.actions.ViewToolWindowButtonsAction"/>
|
||||
<action id="ViewStatusBar" class="com.intellij.ide.actions.ViewStatusBarAction"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ public abstract class UpdateOrStatusOptionsDialog extends OptionsDialog {
|
||||
myMainPanel = new JPanel(new BorderLayout());
|
||||
final Configurable configurable = confs.keySet().iterator().next();
|
||||
addComponent(confs.get(configurable), configurable, BorderLayout.CENTER);
|
||||
myMainPanel.add(Box.createHorizontalGlue());
|
||||
myMainPanel.add(Box.createVerticalStrut(10), BorderLayout.SOUTH);
|
||||
}
|
||||
else {
|
||||
myMainPanel = new JTabbedPane();
|
||||
|
||||
@@ -312,18 +312,21 @@ public class GitUntrackedFilesHolder implements Disposable, BulkFileListener {
|
||||
}
|
||||
|
||||
private void asyncRefreshFiles(final Set<VirtualFile> filesCreated) {
|
||||
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||
public void run() {
|
||||
Set<VirtualFile> filesToRefresh = new HashSet<VirtualFile>();
|
||||
for (VirtualFile file : filesCreated) {
|
||||
if (belongsToThisRepository(file) && !myChangeListManager.isIgnoredFile(file)) {
|
||||
filesToRefresh.add(file);
|
||||
}
|
||||
}
|
||||
rescanFiles(filesToRefresh);
|
||||
myDirtyScopeManager.filesDirty(filesToRefresh, null); // make ChangeListManager capture new info
|
||||
final Set<VirtualFile> filesToRefresh = new HashSet<VirtualFile>();
|
||||
for (VirtualFile file : filesCreated) {
|
||||
if (belongsToThisRepository(file) && !myChangeListManager.isIgnoredFile(file)) {
|
||||
filesToRefresh.add(file);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (!filesToRefresh.isEmpty()) {
|
||||
ApplicationManager.getApplication().executeOnPooledThread(new Runnable() {
|
||||
public void run() {
|
||||
rescanFiles(filesToRefresh);
|
||||
myDirtyScopeManager.filesDirty(filesToRefresh, null); // make ChangeListManager capture new info
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private boolean belongsToThisRepository(VirtualFile file) {
|
||||
|
||||
@@ -9,13 +9,16 @@
|
||||
<depends>org.intellij.groovy</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
|
||||
<projectImportProvider implementation="org.jetbrains.plugins.gradle.importing.wizard.GradleProjectImportProvider"/>
|
||||
<projectImportBuilder implementation="org.jetbrains.plugins.gradle.importing.wizard.GradleProjectImportBuilder"/>
|
||||
<projectConfigurable instance="org.jetbrains.plugins.gradle.config.GradleConfigurable"/>
|
||||
<library.presentationProvider implementation="org.jetbrains.plugins.gradle.config.GradleLibraryPresentationProvider" order="last"/>
|
||||
<java.elementFinder implementation="org.jetbrains.plugins.gradle.config.GradleClassFinder"/>
|
||||
<projectService serviceInterface="org.jetbrains.plugins.gradle.config.GradleSettings"
|
||||
serviceImplementation="org.jetbrains.plugins.gradle.config.GradleSettings"/>
|
||||
<java.elementFinder implementation="org.jetbrains.plugins.gradle.config.GradleClassFinder"/>
|
||||
<projectService serviceInterface="org.jetbrains.plugins.gradle.remote.GradleApiFacadeManager"
|
||||
serviceImplementation="org.jetbrains.plugins.gradle.remote.GradleApiFacadeManager"/>
|
||||
</extensions>
|
||||
|
||||
<extensions defaultExtensionNs="org.intellij.groovy">
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Implementations of this interface are expected to be thread-safe.
|
||||
*
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/9/11 6:39 PM
|
||||
*/
|
||||
public interface GradleContentRoot {
|
||||
|
||||
@NotNull
|
||||
String getRootPath();
|
||||
|
||||
/**
|
||||
* @param type target dir type
|
||||
* @return directories of the target type configured for the current content root
|
||||
*/
|
||||
@NotNull
|
||||
Collection<String> getPaths(@NotNull SourceType type);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Implementations of this interface are not obliged to be thread-safe.
|
||||
*
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:31 PM
|
||||
*/
|
||||
public interface GradleDependency {
|
||||
|
||||
boolean isExported();
|
||||
|
||||
@NotNull
|
||||
DependencyScope getScope();
|
||||
|
||||
void invite(@NotNull GradleDependencyVisitor visitor);
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:31 PM
|
||||
*/
|
||||
public interface GradleDependencyVisitor {
|
||||
void visit(@NotNull GradleModuleDependency dependency);
|
||||
void visit(@NotNull GradleLibraryDependency dependency);
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Implementations of this interface are not obliged to be thread-safe.
|
||||
*
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:32 PM
|
||||
*/
|
||||
public interface GradleLibraryDependency extends GradleDependency {
|
||||
|
||||
@NotNull
|
||||
String getName();
|
||||
|
||||
/**
|
||||
* Allows to ask for the target path configured for the current library dependency.
|
||||
*
|
||||
* @param type target path type
|
||||
* @return path to the target path configured for the current library dependency
|
||||
*/
|
||||
@Nullable
|
||||
String getPath(@NotNull LibraryPathType type);
|
||||
}
|
||||
@@ -1,5 +1,10 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* Defines IntelliJ module view to the application configured via gradle.
|
||||
* <p/>
|
||||
@@ -9,4 +14,26 @@ package org.jetbrains.plugins.gradle.importing.model;
|
||||
* @since 8/8/11 12:10 PM
|
||||
*/
|
||||
public interface GradleModule {
|
||||
|
||||
@NotNull
|
||||
String getName();
|
||||
|
||||
@NotNull
|
||||
Collection<? extends GradleContentRoot> getContentRoots();
|
||||
|
||||
boolean isInheritProjectCompileOutputPath();
|
||||
|
||||
/**
|
||||
* Allows to get file system path of the compile output of the source of the target type.
|
||||
*
|
||||
* @param type target source type
|
||||
* @return file system path to use for compile output for the target source type;
|
||||
* {@link GradleProject#getCompileOutputPath() project compile output path} should be used if current module
|
||||
* doesn't provide specific compile output path
|
||||
*/
|
||||
@Nullable
|
||||
String getCompileOutputPath(@NotNull SourceType type);
|
||||
|
||||
@NotNull
|
||||
Collection<GradleDependency> getDependencies();
|
||||
}
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:32 PM
|
||||
*/
|
||||
public interface GradleModuleDependency extends GradleDependency {
|
||||
|
||||
@NotNull
|
||||
GradleModule getModule();
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/8/11 12:11 PM
|
||||
*/
|
||||
public class GradleModuleImpl implements GradleModule, Serializable {
|
||||
|
||||
// TODO den implement
|
||||
}
|
||||
@@ -15,6 +15,12 @@ import java.util.Set;
|
||||
*/
|
||||
public interface GradleProject {
|
||||
|
||||
@NotNull
|
||||
String getName();
|
||||
|
||||
@NotNull
|
||||
String getCompileOutputPath();
|
||||
|
||||
@NotNull
|
||||
String getJdkName();
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:37 PM
|
||||
*/
|
||||
public enum LibraryPathType {
|
||||
BINARY, SOURCE, JAVADOC}
|
||||
@@ -0,0 +1,11 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
|
||||
/**
|
||||
* Enumerates module source types.
|
||||
*
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 5:21 PM
|
||||
*/
|
||||
public enum SourceType {
|
||||
SOURCE, TEST, EXCLUDED
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleDependency;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:41 PM
|
||||
*/
|
||||
public abstract class AbstractGradleDependency implements GradleDependency, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private DependencyScope myScope = DependencyScope.COMPILE;
|
||||
private boolean myExported;
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public DependencyScope getScope() {
|
||||
return myScope;
|
||||
}
|
||||
|
||||
public void setScope(DependencyScope scope) {
|
||||
myScope = scope;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExported() {
|
||||
return myExported;
|
||||
}
|
||||
|
||||
public void setExported(boolean exported) {
|
||||
myExported = exported;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "scope: " + getScope() + ", exported: " + isExported();
|
||||
}
|
||||
}
|
||||
+63
@@ -0,0 +1,63 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleContentRoot;
|
||||
import org.jetbrains.plugins.gradle.importing.model.SourceType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/9/11 6:25 PM
|
||||
*/
|
||||
public class GradleContentRootImpl implements Serializable, GradleContentRoot {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final Map<SourceType, Collection<String>> myData = new EnumMap<SourceType, Collection<String>>(SourceType.class);
|
||||
private final Map<SourceType, Collection<String>> myViews = new EnumMap<SourceType, Collection<String>>(SourceType.class);
|
||||
|
||||
private final String myRootPath;
|
||||
|
||||
/**
|
||||
* Creates new <code>GradleContentRootImpl</code> object.
|
||||
*
|
||||
* @param rootPath path to the root directory
|
||||
*/
|
||||
public GradleContentRootImpl(@NotNull String rootPath) {
|
||||
myRootPath = new File(rootPath).getAbsolutePath();
|
||||
for (SourceType type : SourceType.values()) {
|
||||
Set<String> data = new HashSet<String>();
|
||||
myData.put(type, data);
|
||||
myViews.put(type, Collections.unmodifiableCollection(data));
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<String> getPaths(@NotNull SourceType type) {
|
||||
return myViews.get(type);
|
||||
}
|
||||
|
||||
public void storePath(@NotNull SourceType type, @NotNull String path) {
|
||||
myData.get(type).add(new File(path).getAbsolutePath());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getRootPath() {
|
||||
return myRootPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder buffer = new StringBuilder();
|
||||
for (Map.Entry<SourceType, Collection<String>> entry : myData.entrySet()) {
|
||||
buffer.append(entry.getKey().toString().toLowerCase()).append(": ").append(entry.getValue()).append("; ");
|
||||
}
|
||||
buffer.setLength(buffer.length() - 2);
|
||||
return buffer.toString();
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleDependencyVisitor;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleLibraryDependency;
|
||||
import org.jetbrains.plugins.gradle.importing.model.LibraryPathType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:46 PM
|
||||
*/
|
||||
public class GradleLibraryDependencyImpl extends AbstractGradleDependency implements GradleLibraryDependency, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final Map<LibraryPathType, String> myPaths = new HashMap<LibraryPathType, String>();
|
||||
|
||||
private final String myName;
|
||||
|
||||
public GradleLibraryDependencyImpl(@NotNull String name) {
|
||||
myName = name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getPath(@NotNull LibraryPathType type) {
|
||||
return myPaths.get(type);
|
||||
}
|
||||
|
||||
public void addPath(@NotNull LibraryPathType type, @NotNull String path) {
|
||||
myPaths.put(type, new File(path).getAbsolutePath());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invite(@NotNull GradleDependencyVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + ", library: " + getName();
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleDependencyVisitor;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleModule;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleModuleDependency;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/10/11 6:40 PM
|
||||
*/
|
||||
public class GradleModuleDependencyImpl extends AbstractGradleDependency implements GradleModuleDependency, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final GradleModule myModule;
|
||||
|
||||
public GradleModuleDependencyImpl(@NotNull GradleModule module) {
|
||||
myModule = module;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public GradleModule getModule() {
|
||||
return myModule;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invite(@NotNull GradleDependencyVisitor visitor) {
|
||||
visitor.visit(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + ", dependency module: " + getModule();
|
||||
}
|
||||
}
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleContentRoot;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleDependency;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleModule;
|
||||
import org.jetbrains.plugins.gradle.importing.model.SourceType;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author Denis Zhdanov
|
||||
* @since 8/8/11 12:11 PM
|
||||
*/
|
||||
public class GradleModuleImpl implements GradleModule, Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final List<GradleContentRoot> myContentRoots = new ArrayList<GradleContentRoot>();
|
||||
private final Map<SourceType, String> myCompileOutputPaths = new HashMap<SourceType, String>();
|
||||
private final Set<GradleDependency> myDependencies = new HashSet<GradleDependency>();
|
||||
private final Collection<GradleDependency> myDependenciesView = Collections.unmodifiableCollection(myDependencies);
|
||||
|
||||
private boolean myInheritProjectCompileOutputPath = true;
|
||||
|
||||
private final String myName;
|
||||
|
||||
public GradleModuleImpl(@NotNull String name) {
|
||||
myName = name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<GradleContentRoot> getContentRoots() {
|
||||
return myContentRoots;
|
||||
}
|
||||
|
||||
public void addContentRoot(@NotNull GradleContentRoot contentRoot) {
|
||||
myContentRoots.add(contentRoot);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInheritProjectCompileOutputPath() {
|
||||
return myInheritProjectCompileOutputPath;
|
||||
}
|
||||
|
||||
public void setInheritProjectCompileOutputPath(boolean inheritProjectCompileOutputPath) {
|
||||
myInheritProjectCompileOutputPath = inheritProjectCompileOutputPath;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getCompileOutputPath(@NotNull SourceType type) {
|
||||
return myCompileOutputPaths.get(type);
|
||||
}
|
||||
|
||||
public void setCompileOutputPath(@NotNull SourceType type, @Nullable String path) {
|
||||
if (path == null) {
|
||||
myCompileOutputPaths.remove(type);
|
||||
return;
|
||||
}
|
||||
myCompileOutputPaths.put(type, new File(path).getAbsolutePath());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<GradleDependency> getDependencies() {
|
||||
return myDependenciesView;
|
||||
}
|
||||
|
||||
public void addDependency(@NotNull GradleDependency dependency) {
|
||||
myDependencies.add(dependency);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format(
|
||||
"module '%s'. Content roots: %s; inherit compile output path: %b",
|
||||
getName(), getContentRoots(), isInheritProjectCompileOutputPath()
|
||||
);
|
||||
}
|
||||
}
|
||||
+39
-4
@@ -1,9 +1,12 @@
|
||||
package org.jetbrains.plugins.gradle.importing.model;
|
||||
package org.jetbrains.plugins.gradle.importing.model.impl;
|
||||
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleModule;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleProject;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.Serializable;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@@ -17,22 +20,48 @@ import java.util.Set;
|
||||
public class GradleProjectImpl implements Serializable, GradleProject {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private static final LanguageLevel DEFAULT_LANGUAGE_LEVEL = LanguageLevel.JDK_1_6;
|
||||
private static final String DEFAULT_JDK = "1.6";
|
||||
|
||||
private final Set<GradleModuleImpl> myModules = new HashSet<GradleModuleImpl>();
|
||||
|
||||
private final String myCompileOutputPath;
|
||||
|
||||
private String myName = "unnamed";
|
||||
private String myJdk = DEFAULT_JDK;
|
||||
private LanguageLevel myLanguageLevel = DEFAULT_LANGUAGE_LEVEL;
|
||||
|
||||
|
||||
public GradleProjectImpl(@NotNull String compileOutputPath) {
|
||||
myCompileOutputPath = new File(compileOutputPath).getAbsolutePath();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
return myName;
|
||||
}
|
||||
|
||||
public void setName(@NotNull String name) {
|
||||
myName = name;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getCompileOutputPath() {
|
||||
return myCompileOutputPath;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getJdkName() {
|
||||
return myJdk;
|
||||
}
|
||||
|
||||
public void setJdk(@NotNull String jdk) {
|
||||
myJdk = jdk;
|
||||
public void setJdk(@Nullable String jdk) {
|
||||
if (jdk != null) {
|
||||
myJdk = jdk;
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -57,4 +86,10 @@ public class GradleProjectImpl implements Serializable, GradleProject {
|
||||
public Set<? extends GradleModule> getModules() {
|
||||
return myModules;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("project '%s'. Jdk: '%s', language level: '%s', modules: %s",
|
||||
getName(), getJdkName(), getLanguageLevel(), getModules());
|
||||
}
|
||||
}
|
||||
+6
-3
@@ -10,6 +10,7 @@ import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.progress.Task;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.ProjectManager;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
|
||||
import com.intellij.packaging.artifacts.ModifiableArtifactModel;
|
||||
import com.intellij.projectImport.ProjectImportBuilder;
|
||||
@@ -17,7 +18,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleProject;
|
||||
import org.jetbrains.plugins.gradle.remote.GradleApiFacadeManager;
|
||||
import org.jetbrains.plugins.gradle.remote.api.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.remote.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleIcons;
|
||||
import org.jetbrains.plugins.gradle.util.GradleLog;
|
||||
@@ -134,10 +135,12 @@ public class GradleProjectImportBuilder extends ProjectImportBuilder<GradleProje
|
||||
throw new ConfigurationException(GradleBundle.message("gradle.import.text.error.directory.instead.file"));
|
||||
}
|
||||
try {
|
||||
ProgressManager.getInstance().run(new Task.Modal(null, GradleBundle.message("gradle.import.progress.text"), true) {
|
||||
// TODO den derive target project for 'import module from gradle'.
|
||||
Project project = ProjectManager.getInstance().getDefaultProject();
|
||||
ProgressManager.getInstance().run(new Task.Modal(project, GradleBundle.message("gradle.import.progress.text"), true) {
|
||||
@Override
|
||||
public void run(@NotNull ProgressIndicator indicator) {
|
||||
GradleApiFacadeManager manager = ServiceManager.getService(GradleApiFacadeManager.class);
|
||||
GradleApiFacadeManager manager = ServiceManager.getService(getProject(), GradleApiFacadeManager.class);
|
||||
try {
|
||||
GradleProjectResolver resolver = manager.getFacade().getResolver();
|
||||
myGradleProject = resolver.resolveProjectInfo(myProjectFile.getAbsolutePath());
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.gradle.remote.api;
|
||||
package org.jetbrains.plugins.gradle.remote;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -29,8 +29,6 @@ import com.intellij.util.SystemProperties;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.remote.api.GradleApiFacade;
|
||||
import org.jetbrains.plugins.gradle.remote.api.RemoteGradleProcessSettings;
|
||||
import org.jetbrains.plugins.gradle.remote.impl.GradleApiFacadeImpl;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleLibraryManager;
|
||||
@@ -124,7 +122,8 @@ public class GradleApiFacadeManager {
|
||||
params.setMainClass(MAIN_CLASS_NAME);
|
||||
|
||||
params.getVMParametersList().addParametersString("-Djava.awt.headless=true -Xmx512m");
|
||||
//params.getVMParametersList().addParametersString("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5009");
|
||||
// TODO den comment
|
||||
params.getVMParametersList().addParametersString("-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5009");
|
||||
return params;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.gradle.remote.api;
|
||||
package org.jetbrains.plugins.gradle.remote;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleProject;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.gradle.remote.api;
|
||||
package org.jetbrains.plugins.gradle.remote;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.plugins.gradle.remote.api;
|
||||
package org.jetbrains.plugins.gradle.remote;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
+4
-4
@@ -3,10 +3,10 @@ package org.jetbrains.plugins.gradle.remote.impl;
|
||||
import com.intellij.execution.rmi.RemoteServer;
|
||||
import com.intellij.util.containers.ConcurrentHashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.remote.api.GradleApiFacade;
|
||||
import org.jetbrains.plugins.gradle.remote.api.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.remote.api.RemoteGradleProcessSettings;
|
||||
import org.jetbrains.plugins.gradle.remote.api.RemoteGradleService;
|
||||
import org.jetbrains.plugins.gradle.remote.GradleApiFacade;
|
||||
import org.jetbrains.plugins.gradle.remote.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.remote.RemoteGradleProcessSettings;
|
||||
import org.jetbrains.plugins.gradle.remote.RemoteGradleService;
|
||||
|
||||
import java.rmi.Remote;
|
||||
import java.rmi.RemoteException;
|
||||
|
||||
+223
-10
@@ -1,20 +1,27 @@
|
||||
package org.jetbrains.plugins.gradle.remote.impl;
|
||||
|
||||
import com.intellij.execution.rmi.RemoteObject;
|
||||
import com.intellij.openapi.roots.DependencyScope;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.gradle.tooling.GradleConnector;
|
||||
import org.gradle.tooling.ProjectConnection;
|
||||
import org.gradle.tooling.model.idea.OfflineIdeaProject;
|
||||
import org.gradle.tooling.model.DomainObjectSet;
|
||||
import org.gradle.tooling.model.idea.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleProject;
|
||||
import org.jetbrains.plugins.gradle.importing.model.GradleProjectImpl;
|
||||
import org.jetbrains.plugins.gradle.remote.api.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.remote.api.RemoteGradleProcessSettings;
|
||||
import org.jetbrains.plugins.gradle.remote.api.RemoteGradleService;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.gradle.importing.model.*;
|
||||
import org.jetbrains.plugins.gradle.importing.model.impl.*;
|
||||
import org.jetbrains.plugins.gradle.remote.GradleProjectResolver;
|
||||
import org.jetbrains.plugins.gradle.remote.RemoteGradleProcessSettings;
|
||||
import org.jetbrains.plugins.gradle.remote.RemoteGradleService;
|
||||
import org.jetbrains.plugins.gradle.util.GradleBundle;
|
||||
import org.jetbrains.plugins.gradle.util.GradleLog;
|
||||
|
||||
import java.io.File;
|
||||
import java.rmi.RemoteException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.BlockingQueue;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -44,13 +51,219 @@ public class GradleProjectResolverImpl extends RemoteObject implements GradlePro
|
||||
private GradleProject doResolve(@NotNull String projectPath) {
|
||||
ProjectConnection connection = getConnection(projectPath);
|
||||
OfflineIdeaProject project = connection.getModel(OfflineIdeaProject.class);
|
||||
GradleProjectImpl result = new GradleProjectImpl();
|
||||
result.setJdk(project.getJdkName());
|
||||
result.setLanguageLevel(project.getLanguageLevel().getLevel());
|
||||
// TODO den build modules here
|
||||
GradleProjectImpl result = populateProject(project, projectPath);
|
||||
populateModules(project, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static GradleProjectImpl populateProject(@NotNull IdeaProject project, @NotNull String projectPath) {
|
||||
// TODO den retrieve the value from the gradle api as soon as it's ready
|
||||
GradleProjectImpl result = new GradleProjectImpl(new File(projectPath).getParentFile().getAbsolutePath() + "/out");
|
||||
result.setName(project.getName());
|
||||
result.setJdk(project.getJdkName());
|
||||
result.setLanguageLevel(project.getLanguageLevel().getLevel());
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void populateModules(@NotNull IdeaProject gradleProject, @NotNull GradleProjectImpl intellijProject)
|
||||
throws IllegalStateException
|
||||
{
|
||||
DomainObjectSet<? extends IdeaModule> gradleModules = gradleProject.getModules();
|
||||
if (gradleModules == null || gradleModules.isEmpty()) {
|
||||
throw new IllegalStateException("No modules found for the target project: " + gradleProject);
|
||||
}
|
||||
Map<String, GradleModule> modules = new HashMap<String, GradleModule>();
|
||||
for (IdeaModule gradleModule : gradleModules) {
|
||||
if (gradleModule == null) {
|
||||
continue;
|
||||
}
|
||||
GradleModuleImpl module = populateModule(gradleModule, intellijProject);
|
||||
String moduleName = module.getName();
|
||||
GradleModule previouslyParsedModule = modules.get(moduleName);
|
||||
if (modules.containsKey(moduleName)) {
|
||||
throw new IllegalStateException(
|
||||
String.format("Modules with duplicate name (%s) detected: '%s' and '%s'", moduleName, module, previouslyParsedModule)
|
||||
);
|
||||
}
|
||||
modules.put(moduleName, module);
|
||||
intellijProject.addModule(module);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static GradleModuleImpl populateModule(@NotNull IdeaModule gradleModule, @NotNull GradleProject intellijProject)
|
||||
throws IllegalStateException
|
||||
{
|
||||
String name = gradleModule.getName();
|
||||
if (name == null) {
|
||||
throw new IllegalStateException("Module with undefined name detected: " + gradleModule);
|
||||
}
|
||||
GradleModuleImpl result = new GradleModuleImpl(name);
|
||||
populateContentRoots(gradleModule, result);
|
||||
populateCompileOutputSettings(gradleModule.getCompilerOutput(), result);
|
||||
populateDependencies(gradleModule, result, intellijProject);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void populateContentRoots(@NotNull IdeaModule gradleModule, @NotNull GradleModuleImpl intellijModule) {
|
||||
DomainObjectSet<? extends IdeaContentRoot> contentRoots = gradleModule.getContentRoots();
|
||||
if (contentRoots == null) {
|
||||
return;
|
||||
}
|
||||
for (IdeaContentRoot gradleContentRoot : contentRoots) {
|
||||
if (gradleContentRoot == null) {
|
||||
continue;
|
||||
}
|
||||
File rootDirectory = gradleContentRoot.getRootDirectory();
|
||||
if (rootDirectory == null) {
|
||||
continue;
|
||||
}
|
||||
GradleContentRootImpl intellijContentRoot = new GradleContentRootImpl(rootDirectory.getAbsolutePath());
|
||||
populateContentRoot(intellijContentRoot, SourceType.SOURCE, gradleContentRoot.getSourceDirectories());
|
||||
populateContentRoot(intellijContentRoot, SourceType.TEST, gradleContentRoot.getTestDirectories());
|
||||
Set<File> excluded = gradleContentRoot.getExcludeDirectories();
|
||||
if (excluded != null) {
|
||||
for (File file : excluded) {
|
||||
intellijContentRoot.storePath(SourceType.EXCLUDED, file.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
intellijModule.addContentRoot(intellijContentRoot);
|
||||
}
|
||||
}
|
||||
|
||||
private static void populateContentRoot(@NotNull GradleContentRootImpl contentRoot, SourceType type,
|
||||
@Nullable Iterable<? extends IdeaSourceDirectory> dirs) {
|
||||
if (dirs == null) {
|
||||
return;
|
||||
}
|
||||
for (IdeaSourceDirectory dir : dirs) {
|
||||
contentRoot.storePath(type, dir.getDirectory().getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
private static void populateCompileOutputSettings(@Nullable IdeaCompilerOutput gradleSettings,
|
||||
@NotNull GradleModuleImpl intellijModule) {
|
||||
if (gradleSettings == null) {
|
||||
return;
|
||||
}
|
||||
intellijModule.setInheritProjectCompileOutputPath(gradleSettings.getInheritOutputDirs());
|
||||
|
||||
File sourceCompileOutputPath = gradleSettings.getOutputDir();
|
||||
if (sourceCompileOutputPath != null) {
|
||||
intellijModule.setCompileOutputPath(SourceType.SOURCE, sourceCompileOutputPath.getAbsolutePath());
|
||||
}
|
||||
|
||||
File testCompileOutputPath = gradleSettings.getTestOutputDir();
|
||||
if (testCompileOutputPath != null) {
|
||||
intellijModule.setCompileOutputPath(SourceType.TEST, testCompileOutputPath.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
private static void populateDependencies(@NotNull IdeaModule gradleModule, @NotNull GradleModuleImpl intellijModule,
|
||||
@NotNull GradleProject intellijProject)
|
||||
{
|
||||
DomainObjectSet<? extends IdeaDependency> dependencies = gradleModule.getDependencies();
|
||||
if (dependencies == null) {
|
||||
return;
|
||||
}
|
||||
for (IdeaDependency dependency : dependencies) {
|
||||
if (dependency == null) {
|
||||
continue;
|
||||
}
|
||||
AbstractGradleDependency intellijDependency = null;
|
||||
if (dependency instanceof IdeaModuleDependency) {
|
||||
intellijDependency = buildDependency((IdeaModuleDependency)dependency, intellijProject);
|
||||
}
|
||||
else if (dependency instanceof IdeaSingleEntryLibraryDependency) {
|
||||
intellijDependency = buildDependency((IdeaSingleEntryLibraryDependency)dependency);
|
||||
}
|
||||
|
||||
if (intellijDependency == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
intellijDependency.setExported(dependency.getExported());
|
||||
DependencyScope scope = parseScope(dependency.getScope());
|
||||
if (scope != null) {
|
||||
intellijDependency.setScope(scope);
|
||||
}
|
||||
intellijModule.addDependency(intellijDependency);
|
||||
}
|
||||
}
|
||||
|
||||
private static AbstractGradleDependency buildDependency(@NotNull IdeaModuleDependency dependency, @NotNull GradleProject intellijProject)
|
||||
throws IllegalStateException
|
||||
{
|
||||
IdeaModule module = dependency.getDependencyModule();
|
||||
if (module == null) {
|
||||
throw new IllegalStateException(
|
||||
String.format("Can't parse gradle module dependency '%s'. Reason: referenced module is null", dependency)
|
||||
);
|
||||
}
|
||||
|
||||
String moduleName = module.getName();
|
||||
if (moduleName == null) {
|
||||
throw new IllegalStateException(String.format(
|
||||
"Can't parse gradle module dependency '%s'. Reason: referenced module name is undefined (module: '%s') ", dependency, module
|
||||
));
|
||||
}
|
||||
|
||||
Set<String> registeredModuleNames = new HashSet<String>();
|
||||
for (GradleModule gradleModule : intellijProject.getModules()) {
|
||||
registeredModuleNames.add(gradleModule.getName());
|
||||
if (gradleModule.getName().equals(moduleName)) {
|
||||
return new GradleModuleDependencyImpl(gradleModule);
|
||||
}
|
||||
}
|
||||
throw new IllegalStateException(String.format(
|
||||
"Can't parse gradle module dependency '%s'. Reason: no module with such name (%s) is found. Registered modules: %s",
|
||||
dependency, moduleName, registeredModuleNames
|
||||
));
|
||||
}
|
||||
|
||||
private static AbstractGradleDependency buildDependency(@NotNull IdeaSingleEntryLibraryDependency dependency)
|
||||
throws IllegalStateException
|
||||
{
|
||||
File binaryPath = dependency.getFile();
|
||||
if (binaryPath == null) {
|
||||
throw new IllegalStateException(String.format(
|
||||
"Can't parse external library dependency '%s'. Reason: it doesn't specify path to the binaries", dependency
|
||||
));
|
||||
}
|
||||
|
||||
// TODO den use library name from gradle api when it's ready
|
||||
GradleLibraryDependencyImpl result = new GradleLibraryDependencyImpl(binaryPath.getName());
|
||||
result.addPath(LibraryPathType.BINARY, binaryPath.getAbsolutePath());
|
||||
|
||||
File sourcePath = dependency.getSource();
|
||||
if (sourcePath != null) {
|
||||
result.addPath(LibraryPathType.SOURCE, sourcePath.getAbsolutePath());
|
||||
}
|
||||
|
||||
File javadocPath = dependency.getJavadoc();
|
||||
if (javadocPath != null) {
|
||||
result.addPath(LibraryPathType.JAVADOC, javadocPath.getAbsolutePath());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static DependencyScope parseScope(@Nullable IdeaDependencyScope scope) {
|
||||
if (scope == null) {
|
||||
return null;
|
||||
}
|
||||
String scopeAsString = scope.getScope();
|
||||
if (scopeAsString == null) {
|
||||
return null;
|
||||
}
|
||||
for (DependencyScope dependencyScope : DependencyScope.values()) {
|
||||
if (scopeAsString.equalsIgnoreCase(dependencyScope.toString())) {
|
||||
return dependencyScope;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Allows to retrieve gradle api connection to use for the given project.
|
||||
*
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
package com.intellij.lang.properties.xml;
|
||||
|
||||
import com.intellij.util.indexing.FileContent;
|
||||
import com.intellij.util.indexing.FileContentImpl;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import java.util.Map;
|
||||
@@ -12,7 +12,7 @@ import java.util.Map;
|
||||
public class XmlPropertiesIndexTest extends TestCase {
|
||||
|
||||
public void testIndex() throws Exception {
|
||||
Map<XmlPropertiesIndex.Key, String> map = new XmlPropertiesIndex().map(new FileContent(("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
Map<XmlPropertiesIndex.Key, String> map = new XmlPropertiesIndex().map(new FileContentImpl(("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">\n" +
|
||||
"<properties>\n" +
|
||||
"<comment>Hi</comment>\n" +
|
||||
@@ -27,7 +27,7 @@ public class XmlPropertiesIndexTest extends TestCase {
|
||||
}
|
||||
|
||||
public void testSystemId() throws Exception {
|
||||
Map<XmlPropertiesIndex.Key, String> map = new XmlPropertiesIndex().map(new FileContent(("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
Map<XmlPropertiesIndex.Key, String> map = new XmlPropertiesIndex().map(new FileContentImpl(("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<!DOCTYPE properties SYSTEM \"unknown\">\n" +
|
||||
"<properties>\n" +
|
||||
"<comment>Hi</comment>\n" +
|
||||
|
||||
@@ -288,7 +288,7 @@ position.highlighter.stripe.tooltip=Execution line
|
||||
hotswap.dialog.title.with.session=Reload Changed Classes for {0}
|
||||
hotswap.dialog.title=Reload Changed Classes
|
||||
hotswap.dialog.run.prompt=Some classes have been changed. Reload changed classes now?
|
||||
hotswap.dialog.hang.warning=JVM is currently suspended.\nClasses reloading with active third-party JVM agents may cause the JVM to hang.
|
||||
hotswap.dialog.hang.warning=JVM is currently suspended.\nReloading classes with active third-party JVM agents may cause the JVM to hang.
|
||||
hotswap.dialog.hang.question=Would you like to reload changed classes anyway?
|
||||
evaluate.statement.dialog.title=Code Fragment Evaluation
|
||||
label.evaluation.dialog.statements=Statements to &evaluate:
|
||||
|
||||
@@ -288,7 +288,7 @@
|
||||
<consoleFilterProvider implementation="com.intellij.execution.filters.DefaultConsoleFiltersProvider"/>
|
||||
|
||||
|
||||
<selectInTarget implementation="com.intellij.ide.impl.ProjectSettingsSelectInTarget"/>
|
||||
<selectInTarget implementation="com.intellij.ide.impl.ProjectStructureSelectInTarget"/>
|
||||
|
||||
<OrderRootTypeUI key="JAVADOC"
|
||||
implementationClass="com.intellij.openapi.roots.ui.configuration.libraryEditor.JavadocOrderRootTypeUIFactory"/>
|
||||
|
||||
Reference in New Issue
Block a user