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() {