diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java index 67f21c67b038..84223c6c367b 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2016 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. - */ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.roots.ui.configuration.libraryEditor; import com.intellij.icons.AllIcons; @@ -25,6 +11,7 @@ import com.intellij.openapi.roots.ui.OrderRootTypeUIFactory; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.jrt.JrtFileSystem; import com.intellij.ui.components.JBList; +import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -53,12 +40,12 @@ public class ClassesOrderRootTypeUIFactory implements OrderRootTypeUIFactory { } @Override - protected boolean isRemoveActionEnabled(Object[] values) { - if (!super.isRemoveActionEnabled(values)) { + protected boolean isRemoveActionEnabled(VirtualFile[] files) { + if (!super.isRemoveActionEnabled(files)) { return false; } - for (Object value : values) { - if (isJrtRoot(value)) { + for (VirtualFile file : files) { + if (isJrtRoot(file)) { return false; } } @@ -66,17 +53,20 @@ public class ClassesOrderRootTypeUIFactory implements OrderRootTypeUIFactory { } @Override - protected ListCellRenderer createListCellRenderer(JBList list) { + protected ListCellRenderer createListCellRenderer(JBList list) { return new PathCellRenderer() { @Override - protected Icon getItemIcon(Object value) { - return isJrtRoot(value) ? AllIcons.Nodes.Module : super.getItemIcon(value); + protected void customizeCellRenderer(@NotNull JList list, VirtualFile file, int index, boolean selected, boolean focused) { + super.customizeCellRenderer(list, file, index, selected, focused); + if (isJrtRoot(file)) { + setIcon(AllIcons.Nodes.Module); + } } }; } } - private static boolean isJrtRoot(Object value) { - return value instanceof VirtualFile && JrtFileSystem.isModuleRoot((VirtualFile)value); + private static boolean isJrtRoot(VirtualFile file) { + return file != null && JrtFileSystem.isModuleRoot(file); } } \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java index caeb2b673e67..4aceee2a32ca 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java @@ -1,4 +1,4 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.roots.ui.configuration.libraryEditor; import com.intellij.icons.AllIcons; @@ -72,7 +72,7 @@ public class JavadocOrderRootTypeUIFactory implements OrderRootTypeUIFactory { addElement(virtualFile); setModified(true); requestDefaultFocus(); - setSelectedRoots(new Object[]{virtualFile}); + setSelectedRoots(new VirtualFile[]{virtualFile}); } } diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/ui/PathEditor.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/ui/PathEditor.java index 753f2f64dc31..e6b452bd9fa6 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/ui/PathEditor.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/ui/PathEditor.java @@ -13,14 +13,10 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.ex.http.HttpFileSystem; import com.intellij.openapi.vfs.newvfs.ArchiveFileSystem; import com.intellij.openapi.wm.IdeFocusManager; -import com.intellij.ui.JBColor; -import com.intellij.ui.ListUtil; -import com.intellij.ui.ToolbarDecorator; -import com.intellij.ui.TreeUIHelper; +import com.intellij.ui.*; import com.intellij.ui.components.JBList; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.ui.UIUtil; import gnu.trove.TIntArrayList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -94,14 +90,13 @@ public class PathEditor { public JComponent createComponent() { myList = new JBList<>(getListModel()); - //noinspection unchecked myList.setCellRenderer(createListCellRenderer(myList)); TreeUIHelper.getInstance().installListSpeedSearch(myList, VirtualFile::getPresentableUrl); ToolbarDecorator toolbarDecorator = ToolbarDecorator.createDecorator(myList) .disableUpDownActions() .setAddActionUpdater(e -> myEnabled) - .setRemoveActionUpdater(e -> isRemoveActionEnabled(PathEditor.this.getSelectedRoots())) + .setRemoveActionUpdater(e -> isRemoveActionEnabled(getSelectedRoots())) .setAddAction(button -> { final VirtualFile[] added = doAddItems(); if (added.length > 0) { @@ -123,11 +118,10 @@ public class PathEditor { return myPanel; } - protected void addToolbarButtons(ToolbarDecorator toolbarDecorator) { - } + protected void addToolbarButtons(ToolbarDecorator toolbarDecorator) { } - protected boolean isRemoveActionEnabled(Object[] values) { - return values.length > 0 && myEnabled; + protected boolean isRemoveActionEnabled(VirtualFile[] files) { + return files.length > 0 && myEnabled; } protected VirtualFile[] doAddItems() { @@ -146,16 +140,15 @@ public class PathEditor { return VfsUtilCore.toVirtualFileArray(added); } - protected void doRemoveItems(int[] indices, JList list) { - List removedItems = ListUtil.removeIndices(list, indices); - itemsRemoved(removedItems); + protected void doRemoveItems(int[] indices, JList list) { + itemsRemoved(ListUtil.removeIndices(list, indices)); } protected DefaultListModel createListModel() { return new DefaultListModel<>(); } - protected ListCellRenderer createListCellRenderer(JBList list) { + protected ListCellRenderer createListCellRenderer(JBList list) { return new PathCellRenderer(); } @@ -246,35 +239,26 @@ public class PathEditor { return myModel; } - protected void setSelectedRoots(Object[] roots) { - ArrayList rootsList = new ArrayList<>(roots.length); - for (Object root : roots) { - if (root != null) { - rootsList.add(root); - } - } + protected void setSelectedRoots(VirtualFile[] roots) { + Set set = ContainerUtil.newHashSet(roots); myList.getSelectionModel().clearSelection(); - int rowCount = getRowCount(); - for (int i = 0; i < rowCount; i++) { + for (int i = 0, rowCount = getRowCount(); i < rowCount; i++) { Object currObject = getValueAt(i); LOG.assertTrue(currObject != null); - if (rootsList.contains(currObject)) { + if (set.contains(currObject)) { myList.getSelectionModel().addSelectionInterval(i, i); } } } private void keepSelectionState() { - final Object[] selectedItems = getSelectedRoots(); - if (selectedItems != null) { - //noinspection SSBasedInspection - SwingUtilities.invokeLater(() -> setSelectedRoots(selectedItems)); - } + VirtualFile[] selectedItems = getSelectedRoots(); + //noinspection SSBasedInspection + SwingUtilities.invokeLater(() -> setSelectedRoots(selectedItems)); } - @SuppressWarnings("deprecation") - protected Object[] getSelectedRoots() { - return myList.getSelectedValues(); + protected VirtualFile[] getSelectedRoots() { + return VfsUtilCore.toVirtualFileArray(myList.getSelectedValuesList()); } protected int getRowCount() { @@ -291,42 +275,20 @@ public class PathEditor { setModified(true); } - protected static class PathCellRenderer extends DefaultListCellRenderer { - protected String getItemText(Object value) { - return value instanceof VirtualFile ? ((VirtualFile)value).getPresentableUrl() : "UNKNOWN OBJECT"; - } - - protected Icon getItemIcon(Object value) { - if (!(value instanceof VirtualFile)) { - return AllIcons.Nodes.EmptyNode; - } - VirtualFile file = (VirtualFile)value; - if (!file.isValid()) { - return AllIcons.Nodes.PpInvalid; - } - if (file.getFileSystem() instanceof HttpFileSystem) { - return PlatformIcons.WEB_ICON; - } - if (file.getFileSystem() instanceof ArchiveFileSystem) { - return PlatformIcons.JAR_ICON; - } - return PlatformIcons.FILE_ICON; - } - + protected static class PathCellRenderer extends ColoredListCellRenderer { @Override - public final Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { - super.getListCellRendererComponent(list, getItemText(value), index, isSelected, cellHasFocus); + protected void customizeCellRenderer(@NotNull JList list, VirtualFile file, int index, boolean selected, boolean focused) { + String text = file != null ? file.getPresentableUrl() : "UNKNOWN OBJECT"; + append(text, file != null && file.isValid() ? SimpleTextAttributes.REGULAR_ATTRIBUTES : SimpleTextAttributes.ERROR_ATTRIBUTES); + setIcon(getItemIcon(file)); + } - if (isSelected) { - setForeground(UIUtil.getListSelectionForeground()); - } - else if (value instanceof VirtualFile && !((VirtualFile)value).isValid()) { - setForeground(INVALID_COLOR); - } - - setIcon(getItemIcon(value)); - - return this; + protected Icon getItemIcon(VirtualFile file) { + if (file == null) return AllIcons.Nodes.EmptyNode; + if (!file.isValid()) return AllIcons.Nodes.PpInvalid; + if (file.getFileSystem() instanceof HttpFileSystem) return PlatformIcons.WEB_ICON; + if (file.getFileSystem() instanceof ArchiveFileSystem) return PlatformIcons.JAR_ICON; + return PlatformIcons.FILE_ICON; } } } \ No newline at end of file diff --git a/python/src/com/jetbrains/python/PyBundle.properties b/python/src/com/jetbrains/python/PyBundle.properties index ba5f39346089..5daac4596c45 100644 --- a/python/src/com/jetbrains/python/PyBundle.properties +++ b/python/src/com/jetbrains/python/PyBundle.properties @@ -892,7 +892,7 @@ sdk.edit.dialog.associate.virtual.env.current.project=Associate this environment sdk.edit.dialog.specify.interpreter.path=Specify Interpreter Path sdk.paths.dialog.title=Interpreter Paths -sdk.paths.dialog.reload.paths=Reload list of paths +sdk.paths.dialog.reload.paths=Reload List of Paths sdk.paths.dialog.added.by.user.suffix=(added by user) sdk.paths.dialog.removed.by.user.suffix=(removed by user) diff --git a/python/src/com/jetbrains/python/configuration/PythonPathEditor.java b/python/src/com/jetbrains/python/configuration/PythonPathEditor.java index e14d9c939fc6..f44f8c05f972 100644 --- a/python/src/com/jetbrains/python/configuration/PythonPathEditor.java +++ b/python/src/com/jetbrains/python/configuration/PythonPathEditor.java @@ -1,4 +1,4 @@ -// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.jetbrains.python.configuration; import com.google.common.collect.Lists; @@ -42,9 +42,7 @@ import java.util.Set; public class PythonPathEditor extends SdkPathEditor { private final PathListModel myPathListModel; - public PythonPathEditor(final String displayName, - @NotNull OrderRootType orderRootType, - final FileChooserDescriptor descriptor) { + public PythonPathEditor(String displayName, @NotNull OrderRootType orderRootType, FileChooserDescriptor descriptor) { super(displayName, orderRootType, descriptor); myPathListModel = new PathListModel(orderRootType, getListModel()); } @@ -99,9 +97,9 @@ public class PythonPathEditor extends SdkPathEditor { } @Override - protected void doRemoveItems(int[] idxs, JList list) { + protected void doRemoveItems(int[] indices, JList list) { List> removed = Lists.newArrayList(); - for (int i : idxs) { + for (int i : indices) { removed.add(Pair.create(getListModel().get(i), i)); } ListUtil.removeIndices(list, myPathListModel.remove(removed)); @@ -110,40 +108,36 @@ public class PythonPathEditor extends SdkPathEditor { } @Override - protected ListCellRenderer createListCellRenderer(JBList list) { + protected ListCellRenderer createListCellRenderer(JBList list) { return SimpleListCellRenderer.create("", value -> { String suffix = myPathListModel.getPresentationSuffix(value); - if (suffix.length() > 0) { - suffix = " " + suffix; - } + if (suffix.length() > 0) suffix = " " + suffix; return getPresentablePath(value) + suffix; }); } @Override protected void addToolbarButtons(ToolbarDecorator toolbarDecorator) { - AnActionButton reloadButton = new AnActionButton(PyBundle.message("sdk.paths.dialog.reload.paths"), AllIcons.Actions.Refresh) { + toolbarDecorator.addExtraAction(new AnActionButton(PyBundle.message("sdk.paths.dialog.reload.paths"), AllIcons.Actions.Refresh) { @Override public void actionPerformed(@NotNull AnActionEvent e) { onReloadButtonClicked(); } - }; - toolbarDecorator.addExtraAction(reloadButton); + }); } - protected void onReloadButtonClicked() { - } + protected void onReloadButtonClicked() { } private static class PathListModel { private Set myAdded = Sets.newHashSet(); private Set myExcluded = Sets.newHashSet(); private final Set myFoundFiles = Sets.newHashSet(); private final List myFilteredOut = Lists.newArrayList(); - private final DefaultListModel myListModel; + private final DefaultListModel myListModel; private final OrderRootType myOrderRootType; private final Set myUserAddedToRemove = Sets.newHashSet(); - PathListModel(OrderRootType orderRootType, DefaultListModel listModel) { + PathListModel(OrderRootType orderRootType, DefaultListModel listModel) { myOrderRootType = orderRootType; myListModel = listModel; } @@ -153,7 +147,7 @@ public class PythonPathEditor extends SdkPathEditor { } private VirtualFile getValueAt(int row) { - return (VirtualFile)myListModel.get(row); + return myListModel.get(row); } public boolean add(List files) { @@ -167,7 +161,8 @@ public class PythonPathEditor extends SdkPathEditor { myFoundFiles.add(file); return true; } - } else { + } + else { myExcluded.remove(file); } } @@ -302,4 +297,4 @@ public class PythonPathEditor extends SdkPathEditor { protected String getPresentablePath(VirtualFile value) { return value.getPresentableUrl(); } -} +} \ No newline at end of file