diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
index 215b93b4a667..a70cde34897f 100644
--- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
+++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
@@ -269,7 +269,7 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper
final FileTemplate catchBodyTemplate = FileTemplateManager.getInstance(catchSection.getProject()).getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY);
LOG.assertTrue(catchBodyTemplate != null);
- final Properties props = new Properties();
+ Properties props = FileTemplateManager.getInstance(myProject).getDefaultProperties();
props.setProperty(FileTemplate.ATTRIBUTE_EXCEPTION, exceptionName);
props.setProperty(FileTemplate.ATTRIBUTE_EXCEPTION_TYPE, exceptionType.getCanonicalText());
if (context != null && context.isPhysical()) {
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties.java
new file mode 100644
index 000000000000..62fc5296f570
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties.java
@@ -0,0 +1,14 @@
+class Test {
+
+ public static void main(String[] args){
+ I i = ExceptionTest::foo;
+ }
+
+ class Ex extends Exception {}
+
+ static void foo() throws Ex {}
+
+ interface I {
+ void f();
+ }
+}
diff --git a/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties_after.java b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties_after.java
new file mode 100644
index 000000000000..ef3f921a264a
--- /dev/null
+++ b/java/java-tests/testData/codeInsight/generation/surroundWith/java/SurroundWithTryCatchProperties_after.java
@@ -0,0 +1,19 @@
+class Test {
+
+ public static void main(String[] args){
+ try {
+ I i = ExceptionTest::foo;
+ } catch (Exception e) {
+// $
+ e.printStackTrace();
+ }
+ }
+
+ class Ex extends Exception {}
+
+ static void foo() throws Ex {}
+
+ interface I {
+ void f();
+ }
+}
diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/generation/surroundWith/JavaSurroundWithTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/generation/surroundWith/JavaSurroundWithTest.java
index dd8b42ffd98f..5d023b45137c 100644
--- a/java/java-tests/testSrc/com/intellij/codeInsight/generation/surroundWith/JavaSurroundWithTest.java
+++ b/java/java-tests/testSrc/com/intellij/codeInsight/generation/surroundWith/JavaSurroundWithTest.java
@@ -17,6 +17,9 @@ package com.intellij.codeInsight.generation.surroundWith;
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
import com.intellij.codeInsight.template.impl.TemplateState;
+import com.intellij.ide.fileTemplates.FileTemplate;
+import com.intellij.ide.fileTemplates.FileTemplateManager;
+import com.intellij.ide.fileTemplates.JavaTemplateUtil;
import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.lang.LanguageSurrounders;
import com.intellij.lang.java.JavaLanguage;
@@ -174,6 +177,19 @@ public class JavaSurroundWithTest extends LightCodeInsightTestCase {
doTest(new JavaWithTryCatchSurrounder());
}
+ public void testSurroundWithTryCatchProperties() {
+ FileTemplate template = FileTemplateManager.getInstance(getProject()).getCodeTemplate(JavaTemplateUtil.TEMPLATE_CATCH_BODY);
+ String old = template.getText();
+ template.setText("// ${DS} \n" +
+ "${EXCEPTION}.printStackTrace();");
+ try {
+ doTest(new JavaWithTryCatchSurrounder());
+ }
+ finally {
+ template.setText(old);
+ }
+ }
+
public void testSurroundIfBranchWithNoBracesAndComment() {
doTest(new JavaWithBlockSurrounder());
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/MoverWrapper.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/MoverWrapper.java
index e4990e5b77f3..8ca6bafe0aaa 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/MoverWrapper.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/moveUpDown/MoverWrapper.java
@@ -63,8 +63,10 @@ class MoverWrapper {
final int end2 = StatementUpDownMover.getLineStartSafeOffset(document,myInfo.toMove2.endLine);
String textToInsert2 = document.getCharsSequence().subSequence(start2, end2).toString();
if (!StringUtil.endsWithChar(textToInsert2,'\n')) textToInsert2 += '\n';
-
- if (new TextRange(start, end).intersectsStrict(new TextRange(start2, end2))) {
+
+ TextRange range = new TextRange(start, end);
+ TextRange range2 = new TextRange(start2, end2);
+ if (range.intersectsStrict(range2) && !range.equals(range2)) {
LOGGER.error("Wrong move ranges: " +
start + ":" + end + "(" + textToInsert + "), " + start2 + ":" + end2 + "(" + textToInsert2 + "), mover: " + myMover);
return;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/Template.java b/platform/lang-impl/src/com/intellij/codeInsight/template/Template.java
index 627d55c5e2fc..c945929fcd8e 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/template/Template.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/template/Template.java
@@ -24,6 +24,10 @@ import org.jetbrains.annotations.Nullable;
import java.util.EnumMap;
import java.util.Map;
+/**
+ * Used to build and run a live template.
+ * @see TemplateManager
+ */
public abstract class Template {
public enum Property {
diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateManager.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateManager.java
index d5a54eb85d25..65c55a48a32d 100644
--- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateManager.java
+++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/FileTemplateManager.java
@@ -87,6 +87,9 @@ public abstract class FileTemplateManager{
public abstract FileTemplate getTemplate(@NotNull @NonNls String templateName);
+ /**
+ * @return a new Properties object filled with predefined properties.
+ */
@NotNull
public abstract Properties getDefaultProperties();
diff --git a/python/helpers/pycharm/_bdd_utils.py b/python/helpers/pycharm/_bdd_utils.py
index 4d4116197ff4..2bfa1be526ef 100644
--- a/python/helpers/pycharm/_bdd_utils.py
+++ b/python/helpers/pycharm/_bdd_utils.py
@@ -8,9 +8,8 @@ You may also need "get_what_to_run_by_env" that gets folder (current or passed a
import os
import time
import abc
-import sys
import tcmessages
-
+from utils import VersionAgnosticUtils
__author__ = 'Ilya.Kazakevich'
@@ -226,48 +225,4 @@ class BddRunner(object):
"""
Implement it! It should launch tests using your BDD. Use "self._" functions to report results.
"""
- pass
-
-
-class VersionAgnosticUtils(object):
- """
- "six" emulator: this class fabrics appropriate tool to use regardless python version.
- Use it to write code that works both on py2 and py3
- """
-
- @staticmethod
- def __new__(cls, *more):
- """
- Fabrics Py2 or Py3 instance based on py version
- """
- real_class = _Py3KUtils if sys.version_info >= (3, 0) else _Py2Utils
- return super(cls, real_class).__new__(real_class, *more)
-
- def to_unicode(self, obj):
- """
-
- :param obj: string to convert to unicode
- :return: unicode string
- """
-
- raise NotImplementedError()
-
-
-
-class _Py2Utils(VersionAgnosticUtils):
- """
- Util for Py2
- """
- def to_unicode(self, obj):
- if isinstance(obj, unicode):
- return obj
- return unicode(obj.decode("utf-8"))
-
-
-
-class _Py3KUtils(VersionAgnosticUtils):
- """
- Util for Py3
- """
- def to_unicode(self, obj):
- return str(obj)
\ No newline at end of file
+ pass
\ No newline at end of file
diff --git a/python/helpers/pycharm/behave_runner.py b/python/helpers/pycharm/behave_runner.py
index 7072e47e615b..ea656d8ab8f6 100644
--- a/python/helpers/pycharm/behave_runner.py
+++ b/python/helpers/pycharm/behave_runner.py
@@ -21,7 +21,7 @@ import re
import _bdd_utils
from distutils import version
from behave import __version__ as behave_version
-
+from utils import VersionAgnosticUtils
_MAX_STEPS_SEARCH_FEATURES = 5000 # Do not look for features in folder that has more that this number of children
_FEATURES_FOLDER = 'features' # "features" folder name.
@@ -136,7 +136,7 @@ class _BehaveRunner(_bdd_utils.BddRunner):
:param element feature/suite/step
"""
element.location.file = element.location.filename # To preserve _bdd_utils contract
- utils = _bdd_utils.VersionAgnosticUtils()
+ utils = VersionAgnosticUtils()
if isinstance(element, Step):
# Process step
step_name = u"{0} {1}".format(utils.to_unicode(element.keyword), utils.to_unicode(element.name))
diff --git a/python/helpers/pycharm/django_manage_commands_provider/__init__.py b/python/helpers/pycharm/django_manage_commands_provider/__init__.py
new file mode 100644
index 000000000000..a5f9f02f5908
--- /dev/null
+++ b/python/helpers/pycharm/django_manage_commands_provider/__init__.py
@@ -0,0 +1 @@
+__author__ = 'Ilya.Kazakevich'
diff --git a/python/helpers/pycharm/django_manage_commands_provider/_parser/_argparse.py b/python/helpers/pycharm/django_manage_commands_provider/_parser/_argparse.py
index b5bceee3260a..0d7f21103585 100644
--- a/python/helpers/pycharm/django_manage_commands_provider/_parser/_argparse.py
+++ b/python/helpers/pycharm/django_manage_commands_provider/_parser/_argparse.py
@@ -4,7 +4,7 @@ Fetches arguments from argparse-based Django (1.8+)
"""
from argparse import Action, _StoreTrueAction, _StoreFalseAction
-from _parser import _utils
+from django_manage_commands_provider._parser import _utils
__author__ = 'Ilya.Kazakevich'
diff --git a/python/helpers/pycharm/django_manage_commands_provider/_parser/_optparse.py b/python/helpers/pycharm/django_manage_commands_provider/_parser/_optparse.py
index 31ffcc58f2ed..a04d391eb0df 100644
--- a/python/helpers/pycharm/django_manage_commands_provider/_parser/_optparse.py
+++ b/python/helpers/pycharm/django_manage_commands_provider/_parser/_optparse.py
@@ -3,7 +3,7 @@
Fetches arguments from optparse-based Django (< 1.8)
"""
__author__ = 'Ilya.Kazakevich'
-from _parser import _utils
+from django_manage_commands_provider._parser import _utils
# noinspection PyUnusedLocal
diff --git a/python/helpers/pycharm/django_manage_commands_provider/_parser/parser.py b/python/helpers/pycharm/django_manage_commands_provider/_parser/parser.py
index fe84786a259c..4eb26f82fc78 100644
--- a/python/helpers/pycharm/django_manage_commands_provider/_parser/parser.py
+++ b/python/helpers/pycharm/django_manage_commands_provider/_parser/parser.py
@@ -6,7 +6,8 @@ This module encapsulates Django semi-public API knowledge, and not very stable b
from django.core.exceptions import ImproperlyConfigured
from django.core.management import ManagementUtility, get_commands, BaseCommand
-from _parser import _optparse, _argparse
+from django_manage_commands_provider._parser import _optparse, _argparse
+from utils import VersionAgnosticUtils
__author__ = 'Ilya.Kazakevich'
@@ -34,7 +35,7 @@ def report_data(dumper):
except AttributeError:
pass
dumper.start_command(command_name=command_name,
- command_help_text=str(command.usage("").replace("%prog", command_name)))
+ command_help_text=VersionAgnosticUtils().to_unicode(command.usage("")).replace("%prog", command_name))
module_to_use = _argparse if use_argparse else _optparse # Choose appropriate module: argparse, optparse
module_to_use.process_command(dumper, command, command.create_parser("", command_name))
dumper.close_command()
diff --git a/python/helpers/pycharm/django_manage_commands_provider/_xml.py b/python/helpers/pycharm/django_manage_commands_provider/_xml.py
index c2cebfb4df50..1baba3094d36 100644
--- a/python/helpers/pycharm/django_manage_commands_provider/_xml.py
+++ b/python/helpers/pycharm/django_manage_commands_provider/_xml.py
@@ -24,6 +24,7 @@ TODO: Since Django 1.8 we can fetch much more info from argparse like positional
"""
from xml.dom import minidom
from xml.dom.minidom import Element
+from utils import VersionAgnosticUtils
__author__ = 'Ilya.Kazakevich'
@@ -91,7 +92,7 @@ class XmlDumper(object):
:type command_args_text str
"""
assert bool(self.__command_element), "Not in a a command"
- self.__command_element.setAttribute("args", command_args_text)
+ self.__command_element.setAttribute("args", VersionAgnosticUtils().to_unicode(command_args_text))
def add_command_option(self, long_opt_names, short_opt_names, help_text, argument_info):
"""
@@ -152,4 +153,5 @@ class XmlDumper(object):
:return: current commands as XML as described in package
:rtype str
"""
- return self.__document.toprettyxml()
+ document = self.__document.toxml(encoding="utf-8")
+ return VersionAgnosticUtils().to_unicode(document.decode("utf-8") if isinstance(document, bytes) else document)
diff --git a/python/helpers/pycharm/django_manage_commands_provider/provider.py b/python/helpers/pycharm/manage_tasks_provider.py
similarity index 83%
rename from python/helpers/pycharm/django_manage_commands_provider/provider.py
rename to python/helpers/pycharm/manage_tasks_provider.py
index 8f8d3d80125c..78b312643505 100644
--- a/python/helpers/pycharm/django_manage_commands_provider/provider.py
+++ b/python/helpers/pycharm/manage_tasks_provider.py
@@ -9,8 +9,8 @@ Module can be called directly, but be sure env var DJANGO_SETTINGS_MODULE is set
import django
-from _parser import parser
-import _xml
+from django_manage_commands_provider._parser import parser
+from django_manage_commands_provider import _xml
__author__ = 'Ilya.Kazakevich'
diff --git a/python/helpers/pycharm/utils.py b/python/helpers/pycharm/utils.py
new file mode 100644
index 000000000000..5bb432257a5e
--- /dev/null
+++ b/python/helpers/pycharm/utils.py
@@ -0,0 +1,45 @@
+__author__ = 'Ilya.Kazakevich'
+import sys
+
+class VersionAgnosticUtils(object):
+ """
+ "six" emulator: this class fabrics appropriate tool to use regardless python version.
+ Use it to write code that works both on py2 and py3. # TODO: Use Six instead
+ """
+
+ @staticmethod
+ def __new__(cls, *more):
+ """
+ Fabrics Py2 or Py3 instance based on py version
+ """
+ real_class = _Py3KUtils if sys.version_info >= (3, 0) else _Py2Utils
+ return super(cls, real_class).__new__(real_class, *more)
+
+ def to_unicode(self, obj):
+ """
+
+ :param obj: string to convert to unicode
+ :return: unicode string
+ """
+
+ raise NotImplementedError()
+
+
+
+class _Py2Utils(VersionAgnosticUtils):
+ """
+ Util for Py2
+ """
+ def to_unicode(self, obj):
+ if isinstance(obj, unicode):
+ return obj
+ return unicode(obj.decode("utf-8"))
+
+
+
+class _Py3KUtils(VersionAgnosticUtils):
+ """
+ Util for Py3
+ """
+ def to_unicode(self, obj):
+ return str(obj)
\ No newline at end of file
diff --git a/python/helpers/python-skeletons/numpy/core/multiarray.py b/python/helpers/python-skeletons/numpy/core/multiarray.py
index 193c51c97686..0195bb121eb7 100644
--- a/python/helpers/python-skeletons/numpy/core/multiarray.py
+++ b/python/helpers/python-skeletons/numpy/core/multiarray.py
@@ -767,4 +767,24 @@ class ndarray(object):
-------
out : ndarray
"""
+ pass
+
+ def __pow__(self, y): # real signature unknown; restored from __doc__
+ """
+ x.__pow__(y) <==> x**y
+
+ Returns
+ -------
+ out : ndarray
+ """
+ pass
+
+ def __divmod__(self, y): # real signature unknown; restored from __doc__
+ """
+ x.__divmod__(y) <==> x%y
+
+ Returns
+ -------
+ out : ndarray
+ """
pass
\ No newline at end of file
diff --git a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java
index 414e1d30d00d..f5f5446b8002 100644
--- a/python/src/com/jetbrains/python/console/PydevConsoleRunner.java
+++ b/python/src/com/jetbrains/python/console/PydevConsoleRunner.java
@@ -239,15 +239,24 @@ public class PydevConsoleRunner extends AbstractConsoleRunnerWithHistory addDefaultEnvironments(Sdk sdk, Map envs, @NotNull Project project) {
- Charset defaultCharset = EncodingProjectManager.getInstance(project).getDefaultCharset();
-
- final String encoding = defaultCharset.name();
- setPythonIOEncoding(setPythonUnbuffered(envs), encoding);
+ setCorrectStdOutEncoding(envs, project);
PythonSdkFlavor.initPythonPath(envs, true, PythonCommandLineState.getAddedPaths(sdk));
return envs;
}
+ /**
+ * Add requered ENV var to Python task to set its stdout charset to current project charset to allow it print correctly.
+ * @param envs map of envs to add variable
+ * @param project current project
+ */
+ public static void setCorrectStdOutEncoding(@NotNull final Map envs, @NotNull final Project project) {
+ final Charset defaultCharset = EncodingProjectManager.getInstance(project).getDefaultCharset();
+
+ final String encoding = defaultCharset.name();
+ setPythonIOEncoding(setPythonUnbuffered(envs), encoding);
+ }
+
@Override
protected List fillToolBarActions(final DefaultActionGroup toolbarActions,