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,