diff --git a/java/debugger/openapi/debugger-openapi.iml b/java/debugger/openapi/debugger-openapi.iml index ff0584c35f08..52013f3be018 100644 --- a/java/debugger/openapi/debugger-openapi.iml +++ b/java/debugger/openapi/debugger-openapi.iml @@ -10,6 +10,7 @@ + diff --git a/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java b/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java index 1a1a5111c878..c12f291f9431 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java +++ b/platform/core-impl/src/com/intellij/psi/impl/source/DummyHolder.java @@ -52,8 +52,10 @@ public class DummyHolder extends PsiFileImpl { protected static Language language(PsiElement context, Language defaultLanguage) { if (context == null) return defaultLanguage; + PsiFile file = context.getContainingFile(); + if (file == null) return defaultLanguage; Language contextLanguage = context.getLanguage(); - Language language = context.getContainingFile().getLanguage(); + Language language = file.getLanguage(); if (language.isKindOf(contextLanguage)) return language; return contextLanguage; } diff --git a/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java b/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java index 6ae7c8641b7a..40bba4bb9849 100644 --- a/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java +++ b/platform/platform-api/src/com/intellij/ui/ToolbarDecorator.java @@ -17,7 +17,6 @@ package com.intellij.ui; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.*; -import com.intellij.openapi.util.SystemInfo; import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.table.TableView; import com.intellij.util.ui.ElementProducer; @@ -89,8 +88,11 @@ public abstract class ToolbarDecorator implements DataProvider, CommonActionsPan } protected ToolbarDecorator initPositionAndBorder() { - myToolbarPosition = SystemInfo.isMac ? ActionToolbarPosition.BOTTOM : ActionToolbarPosition.RIGHT; - myBorder = new CustomLineBorder(0, SystemInfo.isMac ? 0 : 1, 0, 0); + myToolbarPosition = UIUtil.isUnderAquaLookAndFeel() ? ActionToolbarPosition.BOTTOM : ActionToolbarPosition.RIGHT; + myBorder = new CustomLineBorder(0, + myToolbarPosition == ActionToolbarPosition.RIGHT ? 1 : 0, + myToolbarPosition == ActionToolbarPosition.TOP ? 1 : 0, + myToolbarPosition == ActionToolbarPosition.LEFT ? 1 : 0); final JComponent c = getComponent(); if (c != null) { c.setBorder(IdeBorderFactory.createEmptyBorder(0)); @@ -180,6 +182,10 @@ public abstract class ToolbarDecorator implements DataProvider, CommonActionsPan public ToolbarDecorator setToolbarPosition(ActionToolbarPosition position) { myToolbarPosition = position; + myBorder = new CustomLineBorder(0, + myToolbarPosition == ActionToolbarPosition.RIGHT ? 1 : 0, + myToolbarPosition == ActionToolbarPosition.TOP ? 1 : 0, + myToolbarPosition == ActionToolbarPosition.LEFT ? 1 : 0); return this; } diff --git a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java index 0127e75b5b8d..d144ba429f34 100644 --- a/platform/platform-impl/src/com/intellij/idea/StartupUtil.java +++ b/platform/platform-impl/src/com/intellij/idea/StartupUtil.java @@ -122,14 +122,22 @@ public class StartupUtil { private static boolean checkTmpIsAccessible() { if (!SystemInfo.isUnix || SystemInfo.isMac) return true; + final File tmpDir = new File(System.getProperty("java.io.tmpdir")); + if (!tmpDir.isDirectory()) { + showError("Inaccessible Temp Directory", "Temp directory '" + tmpDir + "' does not exist.\n" + + "Please set 'java.io.tmpdir' system property to point to an existing directory."); + return false; + } + final File tmp; try { - tmp = FileUtil.createTempFile("idea_check_", ".tmp"); + //noinspection SSBasedInspection + tmp = File.createTempFile("idea_tmp_check_", ".sh", tmpDir); FileUtil.writeToFile(tmp, "#!/bin/sh\n" + "exit 0"); } catch (IOException e) { - showError("Inaccessible Temp Directory", e.getMessage() + " (" + FileUtil.getTempDirectory() + ").\n" + + showError("Inaccessible Temp Directory", e.getMessage() + " (" + tmpDir + ").\n" + "Temp directory is not accessible.\n" + "Please set 'java.io.tmpdir' system property to point to a writable directory."); return false; diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java index 88626a6de410..aedb7b302c1d 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/BaseInspectionVisitor.java @@ -173,7 +173,7 @@ public abstract class BaseInspectionVisitor extends JavaElementVisitor { protected final void registerError(@NotNull PsiElement location, Object... infos) { - if (location.getTextLength() == 0) { + if (location.getTextLength() == 0 && !(location instanceof PsiFile)) { return; } final InspectionGadgetsFix[] fixes = createFixes(infos); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/EmptyFile.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/EmptyFile.java new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/expected.xml index 05c0cc1b6d2d..ea5fd37b96a9 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/expected.xml +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/classlayout/emptyclass/expected.xml @@ -6,4 +6,11 @@ Empty class Class <code>ReportMe</code> is empty #loc + + + EmptyFile.java + 1 + Empty class + Java file does not declare any class #loc + \ No newline at end of file diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form index 5e3784cb08d4..c3b2d1907107 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.form @@ -42,74 +42,18 @@ - - + - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java index a28cc76295e2..c94215d3b25f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/artifacts/AntArtifactPropertiesEditor.java @@ -21,20 +21,23 @@ import com.intellij.lang.ant.config.AntConfiguration; import com.intellij.lang.ant.config.impl.BuildFileProperty; import com.intellij.lang.ant.config.impl.TargetChooserDialog; import com.intellij.lang.ant.config.impl.configuration.UIPropertyBinding; +import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.ui.FixedSizeButton; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.ui.ArtifactEditorContext; import com.intellij.packaging.ui.ArtifactPropertiesEditor; +import com.intellij.ui.*; import com.intellij.ui.table.JBTable; -import com.intellij.util.NewInstanceFactory; import com.intellij.util.config.ListProperty; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ColumnInfo; +import com.intellij.util.ui.ListTableModel; import com.intellij.util.ui.UIUtil; import javax.swing.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -45,32 +48,34 @@ import java.util.List; */ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor { private static final ListProperty ANT_PROPERTIES = ListProperty.create("ant-properties"); - private static final ColumnInfo NAME_COLUMN = new ColumnInfo(AntBundle.message("edit.ant.properties.name.column.name")) { - public String valueOf(BuildFileProperty buildFileProperty) { - return buildFileProperty.getPropertyName(); - } + private static final ColumnInfo NAME_COLUMN = + new ColumnInfo(AntBundle.message("edit.ant.properties.name.column.name")) { + public String valueOf(BuildFileProperty buildFileProperty) { + return buildFileProperty.getPropertyName(); + } - public boolean isCellEditable(BuildFileProperty buildFileProperty) { - return USER_PROPERTY_CONDITION.value(buildFileProperty); - } + public boolean isCellEditable(BuildFileProperty buildFileProperty) { + return USER_PROPERTY_CONDITION.value(buildFileProperty); + } - public void setValue(BuildFileProperty buildFileProperty, String name) { - buildFileProperty.setPropertyName(name); - } - }; - private static final ColumnInfo VALUE_COLUMN = new ColumnInfo(AntBundle.message("edit.ant.properties.value.column.name")) { - public boolean isCellEditable(BuildFileProperty buildFileProperty) { - return USER_PROPERTY_CONDITION.value(buildFileProperty); - } + public void setValue(BuildFileProperty buildFileProperty, String name) { + buildFileProperty.setPropertyName(name); + } + }; + private static final ColumnInfo VALUE_COLUMN = + new ColumnInfo(AntBundle.message("edit.ant.properties.value.column.name")) { + public boolean isCellEditable(BuildFileProperty buildFileProperty) { + return USER_PROPERTY_CONDITION.value(buildFileProperty); + } - public String valueOf(BuildFileProperty buildFileProperty) { - return buildFileProperty.getPropertyValue(); - } + public String valueOf(BuildFileProperty buildFileProperty) { + return buildFileProperty.getPropertyValue(); + } - public void setValue(BuildFileProperty buildFileProperty, String value) { - buildFileProperty.setPropertyValue(value); - } - }; + public void setValue(BuildFileProperty buildFileProperty, String value) { + buildFileProperty.setPropertyValue(value); + } + }; private static final ColumnInfo[] PROPERTY_COLUMNS = new ColumnInfo[]{NAME_COLUMN, VALUE_COLUMN}; private static final Condition USER_PROPERTY_CONDITION = new Condition() { @Override @@ -84,8 +89,6 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor { private JCheckBox myRunTargetCheckBox; private FixedSizeButton mySelectTargetButton; private JBTable myPropertiesTable; - private JButton myAddButton; - private JButton myRemoveButton; private JPanel myPropertiesPanel; private AntBuildTarget myTarget; private final boolean myPostProcessing; @@ -111,10 +114,59 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor { } }); + myPropertiesTable = new JBTable(); UIPropertyBinding.Composite binding = new UIPropertyBinding.Composite(); myBinding = binding.bindList(myPropertiesTable, PROPERTY_COLUMNS, ANT_PROPERTIES); - myBinding.addAddFacility(myAddButton, NewInstanceFactory.fromClass(BuildFileProperty.class)); - myBinding.addRemoveFacility(myRemoveButton, USER_PROPERTY_CONDITION); + myPropertiesPanel.add( + ToolbarDecorator.createDecorator(myPropertiesTable) + .setAddAction(new AnActionButtonRunnable() { + @Override + public void run(AnActionButton button) { + ListTableModel model = (ListTableModel)myPropertiesTable.getModel(); + if (myPropertiesTable.isEditing() && !myPropertiesTable.getCellEditor().stopCellEditing()) { + return; + } + BuildFileProperty item = new BuildFileProperty(); + ArrayList items = new ArrayList(model.getItems()); + items.add(item); + model.setItems(items); + int newIndex = model.indexOf(item); + ListSelectionModel selectionModel = myPropertiesTable.getSelectionModel(); + selectionModel.clearSelection(); + selectionModel.setSelectionInterval(newIndex, newIndex); + ColumnInfo[] columns = model.getColumnInfos(); + for (int i = 0; i < columns.length; i++) { + ColumnInfo column = columns[i]; + if (column.isCellEditable(item)) { + myPropertiesTable.requestFocusInWindow(); + myPropertiesTable.editCellAt(newIndex, i); + break; + } + } + } + }).setRemoveAction(new AnActionButtonRunnable() { + @Override + public void run(AnActionButton button) { + TableUtil.removeSelectedItems(myPropertiesTable); + } + }).setRemoveActionUpdater(new AnActionButtonUpdater() { + @Override + public boolean isEnabled(AnActionEvent e) { + final ListSelectionModel selectionModel = myPropertiesTable.getSelectionModel(); + ListTableModel model = (ListTableModel)myPropertiesTable.getModel(); + boolean enable = false; + if (!selectionModel.isSelectionEmpty()) { + enable = true; + for (int i : myPropertiesTable.getSelectedRows()) { + if (AntArtifactProperties.isPredefinedProperty(model.getItems().get(i).getPropertyName())) { + enable = false; + break; + } + } + } + return enable; + } + }).disableUpDownActions().createPanel(), BorderLayout.CENTER); } private void selectTarget() { @@ -135,9 +187,6 @@ public class AntArtifactPropertiesEditor extends ArtifactPropertiesEditor { } final boolean enabled = myTarget != null && myRunTargetCheckBox.isSelected(); UIUtil.setEnabled(myPropertiesPanel, enabled, true); - if (enabled) { - myBinding.updateRemoveButton(myRemoveButton, USER_PROPERTY_CONDITION); - } } public String getTabName() {