diff --git a/platform/core-api/src/com/intellij/psi/stubs/package-info.java b/platform/core-api/src/com/intellij/psi/stubs/package-info.java
new file mode 100644
index 000000000000..aad148a9f337
--- /dev/null
+++ b/platform/core-api/src/com/intellij/psi/stubs/package-info.java
@@ -0,0 +1,6 @@
+/**
+ * @see Indexing and PSI Stubs in IntelliJ IDEA
+ *
+ * @see Lifecycle of stub creation
+ */
+package com.intellij.psi.stubs;
\ No newline at end of file
diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
index 9afc0ab9f163..0d62d30fa511 100644
--- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
+++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizeIDEWizardDialog.java
@@ -15,7 +15,6 @@
*/
package com.intellij.ide.customize;
-import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.startup.StartupActionScriptManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.ui.DialogWrapper;
@@ -27,7 +26,6 @@ import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -160,11 +158,6 @@ public class CustomizeIDEWizardDialog extends DialogWrapper implements ActionLis
for (AbstractCustomizeWizardStep step : mySteps) {
if (!step.beforeOkAction()) return;
}
- try {
- PluginManager.saveDisabledPlugins(PluginGroups.getInstance().getDisabledPluginIds(), false);
- }
- catch (IOException ignored) {
- }
super.doOKAction();
}
diff --git a/platform/platform-impl/src/com/intellij/ide/customize/CustomizePluginsStepPanel.java b/platform/platform-impl/src/com/intellij/ide/customize/CustomizePluginsStepPanel.java
index 5fa3bbcbbd25..9bd14b69cb47 100644
--- a/platform/platform-impl/src/com/intellij/ide/customize/CustomizePluginsStepPanel.java
+++ b/platform/platform-impl/src/com/intellij/ide/customize/CustomizePluginsStepPanel.java
@@ -15,6 +15,7 @@
*/
package com.intellij.ide.customize;
+import com.intellij.ide.plugins.PluginManager;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.VerticalFlowLayout;
@@ -33,6 +34,7 @@ import javax.swing.border.CompoundBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -224,6 +226,16 @@ public class CustomizePluginsStepPanel extends AbstractCustomizeWizardStep imple
return null;
}
+ @Override
+ public boolean beforeOkAction() {
+ try {
+ PluginManager.saveDisabledPlugins(PluginGroups.getInstance().getDisabledPluginIds(), false);
+ }
+ catch (IOException ignored) {
+ }
+ return true;
+ }
+
private class IdSetPanel extends JPanel implements LinkListener {
private JLabel myTitleLabel = new JLabel();
private JPanel myContentPanel = new JPanel(new GridLayout(0, 3, 5, 5));
diff --git a/plugins/terminal/lib/jediterm-pty-2.0.jar b/plugins/terminal/lib/jediterm-pty-2.0.jar
index cc675793686e..ee86ea44c15e 100644
Binary files a/plugins/terminal/lib/jediterm-pty-2.0.jar and b/plugins/terminal/lib/jediterm-pty-2.0.jar differ
diff --git a/python/psi-api/src/com/jetbrains/python/FunctionParameter.java b/python/psi-api/src/com/jetbrains/python/FunctionParameter.java
index bceba9efc24b..622a092ef43c 100644
--- a/python/psi-api/src/com/jetbrains/python/FunctionParameter.java
+++ b/python/psi-api/src/com/jetbrains/python/FunctionParameter.java
@@ -9,7 +9,13 @@ import org.jetbrains.annotations.Nullable;
*/
public interface FunctionParameter {
/**
- * @return parameter position
+ * Position value if argument is keyword-only
+ */
+ int POSITION_NOT_SUPPORTED = -1;
+
+ /**
+ * @return parameter position. Be sure to check position is supported (!= {@link #POSITION_NOT_SUPPORTED} )
+ * @see #POSITION_NOT_SUPPORTED
*/
int getPosition();
diff --git a/python/src/com/jetbrains/python/psi/PsiQuery.java b/python/src/com/jetbrains/python/psi/PsiQuery.java
index 92be4c725bfc..f0893e9e6ae2 100644
--- a/python/src/com/jetbrains/python/psi/PsiQuery.java
+++ b/python/src/com/jetbrains/python/psi/PsiQuery.java
@@ -107,7 +107,14 @@ public class PsiQuery {
*/
@NotNull
public PsiQuery parents(@NotNull final Class extends PsiElement> clazz) {
- throw new RuntimeException("Not impl");
+ final List result = new ArrayList();
+ for (final PsiElement element : myPsiElements) {
+ final PsiElement parent = PsiTreeUtil.getParentOfType(element, clazz);
+ if (parent != null) {
+ result.add(parent);
+ }
+ }
+ return new PsiQuery(result);
}
diff --git a/python/src/com/jetbrains/python/psi/impl/PyArgumentListImpl.java b/python/src/com/jetbrains/python/psi/impl/PyArgumentListImpl.java
index 2166c6a396c9..a92515d487fa 100644
--- a/python/src/com/jetbrains/python/psi/impl/PyArgumentListImpl.java
+++ b/python/src/com/jetbrains/python/psi/impl/PyArgumentListImpl.java
@@ -24,10 +24,10 @@ import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.jetbrains.NotNullPredicate;
+import com.jetbrains.python.FunctionParameter;
import com.jetbrains.python.PyElementTypes;
import com.jetbrains.python.PyTokenTypes;
import com.jetbrains.python.PythonDialectsTokenSetProvider;
-import com.jetbrains.python.FunctionParameter;
import com.jetbrains.python.psi.*;
import com.jetbrains.python.psi.resolve.PyResolveContext;
import org.jetbrains.annotations.NotNull;
@@ -344,11 +344,13 @@ public class PyArgumentListImpl extends PyElementImpl implements PyArgumentList
}
final PyExpression[] arguments = getArguments();
- if (arguments.length > parameter.getPosition()) {
- final PyExpression result = arguments[parameter.getPosition()];
+ final int position = parameter.getPosition();
+ if ((position != FunctionParameter.POSITION_NOT_SUPPORTED) && (arguments.length > position)) {
+ final PyExpression result = arguments[position];
if (result instanceof PyKeywordArgument) {
((PyKeywordArgument)result).getValueExpression();
- } else {
+ }
+ else {
return result;
}
}