From 4e9dffa1424197c7aad7b47cc06fc630d9915b70 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 20 Oct 2014 20:21:10 +0400 Subject: [PATCH 001/217] fixed PY-14128 IPython Notebook: language level in cell is not updated on changing project interpreter until first edit --- .../plugins/ipnb/editor/IpnbEditorUtil.java | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java index b78c44464d89..44b3c38431d7 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbEditorUtil.java @@ -27,7 +27,6 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.ui.UIUtil; -import com.jetbrains.python.PythonFileType; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.panels.code.IpnbCodeSourcePanel; import org.jetbrains.plugins.ipnb.psi.IpnbPyFragment; @@ -48,9 +47,12 @@ public class IpnbEditorUtil { public static Editor createPythonCodeEditor(@NotNull final Project project, @NotNull final IpnbCodeSourcePanel codeSourcePanel) { final EditorFactory editorFactory = EditorFactory.getInstance(); assert editorFactory != null; - final Document document = createPythonCodeDocument(project, codeSourcePanel); + final String text = codeSourcePanel.getCell().getSourceAsString().trim(); + final IpnbPyFragment fragment = new IpnbPyFragment(project, text, true, codeSourcePanel); + + final Document document = PsiDocumentManager.getInstance(project).getDocument(fragment); assert document != null; - EditorEx editor = (EditorEx)editorFactory.createEditor(document, project, PythonFileType.INSTANCE, false); + EditorEx editor = (EditorEx)editorFactory.createEditor(document, project, fragment.getVirtualFile(), false); setupEditor(editor); return editor; @@ -84,13 +86,6 @@ public class IpnbEditorUtil { } } - public static Document createPythonCodeDocument(@NotNull final Project project, @NotNull IpnbCodeSourcePanel codeSourcePanel) { - final String text = codeSourcePanel.getCell().getSourceAsString().trim(); - final IpnbPyFragment fragment = new IpnbPyFragment(project, text, true, codeSourcePanel); - - return PsiDocumentManager.getInstance(project).getDocument(fragment); - } - public static JComponent createPromptComponent(Integer promptNumber, @NotNull final PromptType type) { final String promptText = prompt(promptNumber, type); JLabel promptLabel = new JLabel(promptText); From 9e3f960ece29474b60da26c672791708b7b69e12 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Oct 2014 14:28:17 +0400 Subject: [PATCH 002/217] fixed PY-14129 IPython Notebook: disable statement seems to have no effect inspection for the cells --- python/ipnb/resources/META-INF/plugin.xml | 1 + .../plugins/ipnb/IpnbVisitorFilter.java | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbVisitorFilter.java diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index 286aeb7e63dd..de8cdf1bc623 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -28,6 +28,7 @@ + diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbVisitorFilter.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbVisitorFilter.java new file mode 100644 index 000000000000..46bcfdd5a850 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/IpnbVisitorFilter.java @@ -0,0 +1,32 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.ipnb; + +import com.intellij.psi.PsiFile; +import com.jetbrains.python.inspections.PyDocstringInspection; +import com.jetbrains.python.inspections.PyStatementEffectInspection; +import com.jetbrains.python.inspections.PythonVisitorFilter; +import org.jetbrains.annotations.NotNull; + +public class IpnbVisitorFilter implements PythonVisitorFilter { + @Override + public boolean isSupported(@NotNull final Class visitorClass, @NotNull final PsiFile file) { + if (visitorClass == PyDocstringInspection.class || visitorClass == PyStatementEffectInspection.class) { + return false; + } + return true; + } +} From e8d23db396bae474b2546ee8e1fbefe5ee8abc07 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Oct 2014 14:59:03 +0400 Subject: [PATCH 003/217] fixed PY-14120 IPython Notebook: can't assign to (): false positive for multiple unpacking assignment PY-14134 IPython Notebook: Unbound local: false positive for list comprehension inside a cell --- .../jetbrains/plugins/ipnb/psi/IpnbPyTokenSetContributor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/psi/IpnbPyTokenSetContributor.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/psi/IpnbPyTokenSetContributor.java index 8eeef95d8927..d02bc3d02c1b 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/psi/IpnbPyTokenSetContributor.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/psi/IpnbPyTokenSetContributor.java @@ -5,7 +5,7 @@ import com.jetbrains.python.PythonDialectsTokenSetContributorBase; import org.jetbrains.annotations.NotNull; public class IpnbPyTokenSetContributor extends PythonDialectsTokenSetContributorBase { - public static final TokenSet IPNB_REFERENCE_EXPRESSIONS = TokenSet.create(IpnbPyTokenTypes.IPNB_REFERENCE); + public static final TokenSet IPNB_REFERENCE_EXPRESSIONS = TokenSet.create(IpnbPyTokenTypes.IPNB_REFERENCE, IpnbPyTokenTypes.IPNB_TARGET); @NotNull @Override From b47334496a5faa972cc61f07a84683e03650376a Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Oct 2014 15:04:32 +0400 Subject: [PATCH 004/217] fixed PY-14104 do not save negative prompt index --- .../ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java index b05ede796c2f..71e847c03178 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java @@ -122,7 +122,8 @@ public class IpnbParser { raw.outputs = outputRaws.toArray(new CellOutputRaw[outputRaws.size()]); raw.language = ((IpnbCodeCell)cell).getLanguage(); raw.input = ((IpnbCodeCell)cell).getSource(); - raw.prompt_number = ((IpnbCodeCell)cell).getPromptNumber(); + final Integer promptNumber = ((IpnbCodeCell)cell).getPromptNumber(); + raw.prompt_number = promptNumber != null && promptNumber >= 0 ? promptNumber : null; } else if (cell instanceof IpnbRawCell) { raw.cell_type = "raw"; From eb3a48576c0a88910a46fe7dd3f1b10967be572b Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 21 Oct 2014 15:11:13 +0400 Subject: [PATCH 005/217] fixed PY-14115 IPython Notebook: not able to attach saved in pycharm notebook: missing output_type for the cell with png plot --- .../ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java index 71e847c03178..059704b9edfc 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/format/IpnbParser.java @@ -182,7 +182,7 @@ public class IpnbParser { if (outputCell instanceof IpnbPngOutputCell) { raw.png = ((IpnbPngOutputCell)outputCell).getBase64String(); raw.text = outputCell.getText(); - //raw.output_type = "display_data"; + raw.output_type = "display_data"; } else if (outputCell instanceof IpnbSvgOutputCell) { raw.svg = ((IpnbSvgOutputCell)outputCell).getSvg(); From cd02a08a010c3b3db34dd5e08c1c6a758cb3ca82 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 22 Oct 2014 10:31:49 +0200 Subject: [PATCH 006/217] invert boolean parameter: process recursive calls with care (IDEA-131261) --- .../invertBoolean/InvertBooleanProcessor.java | 23 +++++++++++++++---- .../invertBoolean/parameterRecursiveCall.java | 11 +++++++++ .../parameterRecursiveCall_after.java | 11 +++++++++ 3 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall.java create mode 100644 java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java index 5ef2cabab9f1..df2efc6f4440 100644 --- a/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/invertBoolean/InvertBooleanProcessor.java @@ -16,6 +16,7 @@ package com.intellij.refactoring.invertBoolean; import com.intellij.codeInsight.CodeInsightServicesUtil; +import com.intellij.codeInsight.daemon.impl.RecursiveCallLineMarkerProvider; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; @@ -139,7 +140,8 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor { if (argumentList != null) { final PsiExpression[] args = argumentList.getExpressions(); if (index < args.length) { - if (methodExpression == null || methodExpression.getQualifier() == null || !"super".equals(methodExpression.getQualifierExpression().getText())) { + if (methodExpression == null || + canInvert(methodExpression, args[index] instanceof PsiReferenceExpression && ((PsiReferenceExpression)args[index]).resolve() == myElement)) { toInvert.add(mySmartPointerManager.createSmartPsiElementPointer(args[index])); } } @@ -181,6 +183,19 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor { return result.toArray(new UsageInfo[result.size()]); } + private static boolean canInvert(PsiReferenceExpression methodExpression, boolean checkRecursive) { + PsiExpression qualifierExpression = methodExpression.getQualifierExpression(); + if (qualifierExpression == null || !"super".equals(qualifierExpression.getText())) { + PsiElement parent = methodExpression.getParent(); + if (parent instanceof PsiMethodCallExpression) { + return !(checkRecursive && RecursiveCallLineMarkerProvider.isRecursiveMethodCall((PsiMethodCallExpression)parent)); + } else { + return true; + } + } + return false; + } + private void addRefsToInvert(final List toInvert, final PsiNamedElement namedElement) { final Query query = namedElement instanceof PsiMethod ? MethodReferencesSearch.search((PsiMethod)namedElement) : @@ -197,9 +212,9 @@ public class InvertBooleanProcessor extends BaseRefactoringProcessor { } else { if (namedElement instanceof PsiParameter) { //filter usages in super method calls - if (refExpr.getParent().getParent() instanceof PsiMethodCallExpression) { - final PsiReferenceExpression methodExpression = ((PsiMethodCallExpression)refExpr.getParent().getParent()).getMethodExpression(); - if (methodExpression.getQualifier() != null && "super".equals(methodExpression.getQualifierExpression().getText())) { + PsiElement gParent = refExpr.getParent().getParent(); + if (gParent instanceof PsiMethodCallExpression) { + if (!canInvert(((PsiMethodCallExpression)gParent).getMethodExpression(), true)) { continue; } } diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall.java b/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall.java new file mode 100644 index 000000000000..de7a7d601202 --- /dev/null +++ b/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall.java @@ -0,0 +1,11 @@ +class InvertBooleanParameterTest { + void foo(boolean b) { + boolean c = !b; + foo(b); + foo(true); + } + + { + foo(true); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall_after.java b/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall_after.java new file mode 100644 index 000000000000..807b69d39e10 --- /dev/null +++ b/java/java-tests/testData/refactoring/invertBoolean/parameterRecursiveCall_after.java @@ -0,0 +1,11 @@ +class InvertBooleanParameterTest { + void foo(boolean bInverted) { + boolean c = bInverted; + foo(bInverted); + foo(false); + } + + { + foo(false); + } +} \ No newline at end of file From e73a7600fa5c2e58a87dbc73e6cd7eec4620c579 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 22 Oct 2014 12:41:09 +0400 Subject: [PATCH 007/217] external build: use UTF-8 as default encoding if nothing is specified in config files (IDEA-131602) --- .../serialization/JpsEncodingModelSerializerExtension.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsEncodingModelSerializerExtension.java b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsEncodingModelSerializerExtension.java index 191423c1b099..05d8752fe0d3 100644 --- a/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsEncodingModelSerializerExtension.java +++ b/jps/model-serialization/src/org/jetbrains/jps/model/serialization/JpsEncodingModelSerializerExtension.java @@ -17,6 +17,7 @@ package org.jetbrains.jps.model.serialization; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.CharsetToolkit; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.model.JpsEncodingConfigurationService; @@ -84,6 +85,11 @@ public class JpsEncodingModelSerializerExtension extends JpsModelSerializerExten JpsEncodingConfigurationService.getInstance().setGlobalEncoding(global, StringUtil.nullize(encoding)); } + @Override + public void loadExtensionWithDefaultSettings(@NotNull JpsGlobal global) { + JpsEncodingConfigurationService.getInstance().setGlobalEncoding(global, CharsetToolkit.UTF8); + } + @Override public void saveExtension(@NotNull JpsGlobal global, @NotNull Element componentTag) { componentTag.setAttribute(ENCODING_ATTRIBUTE, JpsEncodingConfigurationService.getInstance().getGlobalEncoding(global)); From b43db1394c13e7e7bb95ab9bcbf350da92de859b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 22 Oct 2014 10:46:59 +0200 Subject: [PATCH 008/217] implement ResolvingHint to avoid unnecessary resolve() (via DeprecatedClassUsageInspection) --- .../lang/properties/ResourceBundleReference.java | 9 ++++++++- .../util/xml/impl/GenericDomValueReference.java | 12 ++++++++---- .../psi/impl/source/xml/SchemaPrefixReference.java | 9 ++++++++- .../xml/util/XmlEnumeratedValueReference.java | 11 +++++++++-- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java index 14ac858d9917..2901cf0492f8 100644 --- a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java +++ b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java @@ -25,6 +25,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -37,7 +38,8 @@ import java.util.Set; /** * @author yole */ -public class ResourceBundleReference extends PsiReferenceBase implements PsiPolyVariantReference, BundleNameEvaluator { +public class ResourceBundleReference extends PsiReferenceBase + implements PsiPolyVariantReference, BundleNameEvaluator, ResolvingHint { private static final Function PROPERTIES_FILE_PSI_ELEMENT_FUNCTION = new Function() { @Override @@ -56,6 +58,11 @@ public class ResourceBundleReference extends PsiReferenceBase implem myBundleName = StringUtil.replaceChar(getValue(), '/', '.'); } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(PsiFile.class, elementClass); + } + @Nullable public PsiElement resolve() { ResolveResult[] resolveResults = multiResolve(false); diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java index 18c97c2a839d..2897f83d7cf9 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java @@ -22,15 +22,14 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.PomTarget; import com.intellij.pom.references.PomService; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.*; import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.util.xml.*; import com.intellij.xml.util.XmlTagUtil; import org.jetbrains.annotations.NotNull; @@ -42,7 +41,7 @@ import java.util.List; /** * @author peter */ -public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final GenericDomValue myGenericValue; public GenericDomValueReference(GenericDomValue domValue) { @@ -52,6 +51,11 @@ public class GenericDomValueReference extends PsiReferenceBase im setRangeInElement(createTextRange()); } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + protected final PsiManager getPsiManager() { return PsiManager.getInstance(myGenericValue.getManager().getProject()); } diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java index 64b9232075a3..6671301bdf97 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/SchemaPrefixReference.java @@ -18,6 +18,7 @@ package com.intellij.psi.impl.source.xml; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; @@ -25,6 +26,7 @@ import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ReflectionUtil; import com.intellij.xml.XmlExtension; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable; /** * @author Konstantin Bulenkov */ -public class SchemaPrefixReference extends PsiReferenceBase implements PossiblePrefixReference { +public class SchemaPrefixReference extends PsiReferenceBase implements PossiblePrefixReference, ResolvingHint { private final SchemaPrefix myPrefix; @@ -67,6 +69,11 @@ public class SchemaPrefixReference extends PsiReferenceBase implemen return myName; } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + @Override public SchemaPrefix resolve() { return myPrefix == null ? resolvePrefix(myElement, myName) : myPrefix; diff --git a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java index 6b1bdf47bc2f..62741b591d84 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/util/XmlEnumeratedValueReference.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,9 +21,11 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; +import com.intellij.util.ReflectionUtil; import com.intellij.xml.impl.XmlEnumerationDescriptor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,7 +34,7 @@ import org.jetbrains.annotations.Nullable; * @author Dmitry Avdeev * Date: 16.08.13 */ -public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class XmlEnumeratedValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final XmlEnumerationDescriptor myDescriptor; public XmlEnumeratedValueReference(XmlElement value, XmlEnumerationDescriptor descriptor) { @@ -45,6 +47,11 @@ public class XmlEnumeratedValueReference extends PsiReferenceBase im myDescriptor = descriptor; } + @Override + public boolean canResolveTo(Class elementClass) { + return ReflectionUtil.isAssignable(XmlElement.class, elementClass); + } + @Nullable @Override public PsiElement resolve() { From c6e4fc868bc879bff5d0d83af12418fde2142d28 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Fri, 17 Oct 2014 17:39:06 +0400 Subject: [PATCH 009/217] IDEA-101779 Editor: Make bulk document change operation more folding-neutral --- .../folding/JavaFoldingTest.groovy | 39 +++++++++++++++++-- .../psi/impl/PsiDocumentManagerBase.java | 34 ++++++++++++++-- .../folding/impl/CodeFoldingManagerImpl.java | 22 ----------- .../folding/impl/EditorFoldingInfo.java | 17 -------- .../openapi/editor/impl/CaretImpl.java | 10 +++-- .../openapi/editor/impl/CaretModelImpl.java | 30 ++++++-------- .../openapi/editor/impl/EditorImpl.java | 6 +++ .../openapi/editor/impl/FoldRegionsTree.java | 14 ++++--- .../openapi/editor/impl/FoldingModelImpl.java | 18 ++++++--- .../editor/impl/SoftWrapModelImpl.java | 14 ++----- 10 files changed, 116 insertions(+), 88 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy index 59e41ec0902c..408130f74f66 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy @@ -21,7 +21,9 @@ import com.intellij.codeInsight.folding.impl.JavaFoldingBuilder import com.intellij.find.FindManager import com.intellij.openapi.actionSystem.IdeActions import com.intellij.openapi.application.ex.PathManagerEx +import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.editor.FoldRegion +import com.intellij.openapi.editor.ex.DocumentEx import com.intellij.openapi.editor.ex.FoldingModelEx import com.intellij.openapi.editor.impl.FoldingModelImpl import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider @@ -397,7 +399,7 @@ class Test { public void testCustomFolding() { myFixture.testFolding("$PathManagerEx.testDataPath/codeInsight/folding/${getTestName(false)}.java"); } - + public void "test custom folding IDEA-122715 and IDEA-87312"() { def text = """\ public class Test { @@ -429,7 +431,7 @@ public class Test { assert region.placeholderText == "Bar" count ++; } - } + } assert count == 2 : "Not all custom regions are found"; } @@ -452,7 +454,7 @@ class Foo { assertEquals 1, foldRegionsCount assertEquals "Some", foldingModel.allFoldRegions[0].placeholderText } - + public void "test custom folding collapsed by default"() { def text = """\ class Test { @@ -1054,6 +1056,37 @@ class Foo { } } + public void "test folding state is preserved for unchanged text in bulk mode"() { + def text = """ +class Foo { + void m1() { + + } + void m2() { + + } +} +""" + configure text + assertEquals 2, foldRegionsCount + assertEquals 2, expandedFoldRegionsCount + myFixture.performEditorAction(IdeActions.ACTION_COLLAPSE_ALL_REGIONS) + assertEquals 0, expandedFoldRegionsCount + + def document = (DocumentEx)myFixture.editor.document + WriteCommandAction.runWriteCommandAction myFixture.project, { + document.inBulkUpdate = true; + try { + document.insertString(document.getText().indexOf("}") + 1, "\n"); + } + finally { + document.inBulkUpdate = false; + } + } + assertEquals 2, foldRegionsCount + assertEquals 0, expandedFoldRegionsCount + } + private int getFoldRegionsCount() { return myFixture.editor.foldingModel.allFoldRegions.length } diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index 1e1b80a0fdeb..66d40a98f532 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -25,6 +25,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.event.DocumentEvent; import com.intellij.openapi.editor.event.DocumentListener; +import com.intellij.openapi.editor.ex.DocumentBulkUpdateListener; import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.progress.ProgressIndicator; @@ -57,7 +58,7 @@ import org.jetbrains.annotations.TestOnly; import javax.swing.*; import java.util.*; -public abstract class PsiDocumentManagerBase extends PsiDocumentManager implements DocumentListener { +public abstract class PsiDocumentManagerBase extends PsiDocumentManager implements DocumentListener, DocumentBulkUpdateListener { protected static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.PsiDocumentManagerImpl"); private static final Key HARD_REF_TO_DOCUMENT = Key.create("HARD_REFERENCE_TO_DOCUMENT"); private static final Key HARD_REF_TO_PSI = Key.create("HARD_REFERENCE_TO_PSI"); @@ -96,6 +97,7 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen public void transactionCompleted(@NotNull Document document, @NotNull PsiFile file) { } }); + bus.connect().subscribe(DocumentBulkUpdateListener.TOPIC, this); } @Override @@ -599,7 +601,9 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen if (file == null) { throw new AssertionError("View provider "+viewProvider+" ("+viewProvider.getClass()+") returned null in its files array: "+files+" for file "+viewProvider.getVirtualFile()); } - mySmartPointerManager.fastenBelts(file, event.getOffset(), null); + if (!(document instanceof DocumentEx) || !((DocumentEx)document).isInBulkUpdate()) { + mySmartPointerManager.fastenBelts(file, event.getOffset(), null); + } if (mySynchronizer.isInsideAtomicChange(file)) { psiCause = file; @@ -633,7 +637,9 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen final List files = viewProvider.getAllFiles(); boolean commitNecessary = true; for (PsiFile file : files) { - mySmartPointerManager.unfastenBelts(file, event.getOffset()); + if (!(document instanceof DocumentEx) || !((DocumentEx)document).isInBulkUpdate()) { + mySmartPointerManager.unfastenBelts(file, event.getOffset()); + } if (mySynchronizer.isInsideAtomicChange(file)) { commitNecessary = false; @@ -671,6 +677,28 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } } + @Override + public void updateStarted(@NotNull Document document) { + final FileViewProvider viewProvider = getCachedViewProvider(document); + if (viewProvider == null || !isRelevant(viewProvider)) return; + + final List files = viewProvider.getAllFiles(); + for (PsiFile file : files) { + mySmartPointerManager.fastenBelts(file, 0, null); + } + } + + @Override + public void updateFinished(@NotNull Document document) { + final FileViewProvider viewProvider = getCachedViewProvider(document); + if (viewProvider == null || !isRelevant(viewProvider)) return; + + final List files = viewProvider.getAllFiles(); + for (PsiFile file : files) { + mySmartPointerManager.unfastenBelts(file, 0); + } + } + public void handleCommitWithoutPsi(@NotNull Document document) { final CharSequence prevText = myLastCommittedTexts.remove(document); if (prevText == null) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/CodeFoldingManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/CodeFoldingManagerImpl.java index ddf115bfdde7..a77f90679e11 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/CodeFoldingManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/CodeFoldingManagerImpl.java @@ -26,7 +26,6 @@ import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.event.EditorMouseEvent; import com.intellij.openapi.editor.event.EditorMouseEventArea; import com.intellij.openapi.editor.event.EditorMouseMotionAdapter; -import com.intellij.openapi.editor.ex.DocumentBulkUpdateListener; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.FoldingModelEx; import com.intellij.openapi.fileEditor.impl.text.CodeFoldingState; @@ -61,12 +60,6 @@ public class CodeFoldingManagerImpl extends CodeFoldingManager implements Projec CodeFoldingManagerImpl(Project project) { myProject = project; - project.getMessageBus().connect().subscribe(DocumentBulkUpdateListener.TOPIC, new DocumentBulkUpdateListener.Adapter() { - @Override - public void updateStarted(@NotNull final Document doc) { - resetFoldingInfo(doc); - } - }); } @Override @@ -269,7 +262,6 @@ public class CodeFoldingManagerImpl extends CodeFoldingManager implements Projec documentFoldingInfo.setToEditor(editor); documentFoldingInfo.clear(); - document.putUserData(FOLDING_STATE_KEY, Boolean.TRUE); editor.putUserData(FOLDING_STATE_KEY, Boolean.TRUE); } }); @@ -405,20 +397,6 @@ public class CodeFoldingManagerImpl extends CodeFoldingManager implements Projec return info; } - private static void resetFoldingInfo(@NotNull final Document document) { - if (isFoldingsInitializedInDocument(document)) { - final Editor[] editors = EditorFactory.getInstance().getEditors(document); - for(Editor editor:editors) { - EditorFoldingInfo.resetInfo(editor); - } - document.putUserData(FOLDING_STATE_KEY, null); - } - } - - static boolean isFoldingsInitializedInDocument(@NotNull Document document) { - return Boolean.TRUE.equals(document.getUserData(FOLDING_STATE_KEY)); - } - static boolean isFoldingsInitializedInEditor(@NotNull Editor editor) { return Boolean.TRUE.equals(editor.getUserData(FOLDING_STATE_KEY)); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/EditorFoldingInfo.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/EditorFoldingInfo.java index f77145390952..a71ee29194fb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/EditorFoldingInfo.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/EditorFoldingInfo.java @@ -19,8 +19,6 @@ package com.intellij.codeInsight.folding.impl; import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.FoldRegion; -import com.intellij.openapi.editor.FoldingModel; -import com.intellij.openapi.editor.ex.FoldingModelEx; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -92,19 +90,4 @@ public class EditorFoldingInfo { public void dispose() { myFoldRegionToSmartPointerMap.clear(); } - - public static void resetInfo(@NotNull Editor editor) { - EditorFoldingInfo info = editor.getUserData(KEY); - if (info != null) { - for (FoldRegion region : info.myFoldRegionToSmartPointerMap.keySet()) { - region.dispose(); - } - info.myFoldRegionToSmartPointerMap.clear(); - } - FoldingModel foldingModel = editor.getFoldingModel(); - if (foldingModel instanceof FoldingModelEx) { - ((FoldingModelEx)foldingModel).rebuild(); - } - editor.putUserData(KEY, null); - } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java index 2e9cb5b6849b..a84baee39f19 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretImpl.java @@ -116,13 +116,15 @@ public class CaretImpl extends UserDataHolderBase implements Caret { myVisualLineEnd = doc.getLineCount() > 1 ? doc.getLineStartOffset(1) : doc.getLineCount() == 0 ? 0 : doc.getLineEndOffset(0); } - void onBulkDocumentUpdateStarted(@NotNull Document doc) { - if (doc != myEditor.getDocument() || myOffset > doc.getTextLength() || savedBeforeBulkCaretMarker != null) return; + void onBulkDocumentUpdateStarted() { + Document doc = myEditor.getDocument(); + if (myOffset > doc.getTextLength() || savedBeforeBulkCaretMarker != null) return; savedBeforeBulkCaretMarker = doc.createRangeMarker(myOffset, myOffset); } - void onBulkDocumentUpdateFinished(@NotNull Document doc) { - if (doc != myEditor.getDocument() || myEditor.getCaretModel().myIsInUpdate) return; + void onBulkDocumentUpdateFinished() { + Document doc = myEditor.getDocument(); + if (myEditor.getCaretModel().myIsInUpdate) return; LOG.assertTrue(!myReportCaretMoves); if (savedBeforeBulkCaretMarker != null) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java index 15a907e826e4..527125019b49 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/CaretModelImpl.java @@ -31,7 +31,6 @@ import com.intellij.openapi.editor.colors.EditorColors; import com.intellij.openapi.editor.event.CaretEvent; import com.intellij.openapi.editor.event.CaretListener; import com.intellij.openapi.editor.event.DocumentEvent; -import com.intellij.openapi.editor.ex.DocumentBulkUpdateListener; import com.intellij.openapi.editor.ex.PrioritizedDocumentListener; import com.intellij.openapi.editor.impl.event.DocumentEventImpl; import com.intellij.openapi.editor.markup.TextAttributes; @@ -61,28 +60,23 @@ public class CaretModelImpl implements CaretModel, PrioritizedDocumentListener, public CaretModelImpl(EditorImpl editor) { myEditor = editor; myCarets.add(new CaretImpl(myEditor)); + } - DocumentBulkUpdateListener bulkUpdateListener = new DocumentBulkUpdateListener() { + void onBulkDocumentUpdateStarted() { + for (CaretImpl caret : myCarets) { + caret.onBulkDocumentUpdateStarted(); + } + } + + void onBulkDocumentUpdateFinished() { + doWithCaretMerging(new Runnable() { @Override - public void updateStarted(@NotNull Document doc) { + public void run() { for (CaretImpl caret : myCarets) { - caret.onBulkDocumentUpdateStarted(doc); + caret.onBulkDocumentUpdateFinished(); } } - - @Override - public void updateFinished(@NotNull final Document doc) { - doWithCaretMerging(new Runnable() { - @Override - public void run() { - for (CaretImpl caret : myCarets) { - caret.onBulkDocumentUpdateFinished(doc); - } - } - }); - } - }; - ApplicationManager.getApplication().getMessageBus().connect(this).subscribe(DocumentBulkUpdateListener.TOPIC, bulkUpdateListener); + }); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 3db1bd7dacf1..8ce4d9a29fc8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -1687,9 +1687,15 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } private void bulkUpdateStarted() { + myFoldingModel.onBulkDocumentUpdateStarted(); + myCaretModel.onBulkDocumentUpdateStarted(); + mySoftWrapModel.onBulkDocumentUpdateStarted(); } private void bulkUpdateFinished() { + myFoldingModel.onBulkDocumentUpdateFinished(); + myCaretModel.onBulkDocumentUpdateFinished(); + mySoftWrapModel.onBulkDocumentUpdateFinished(); clearTextWidthCache(); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java index 1d976ce3fb45..c001f6548106 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java @@ -58,11 +58,7 @@ abstract class FoldRegionsTree { private static final Comparator BY_END_OFFSET_REVERSE = Collections.reverseOrder(BY_END_OFFSET); void clear() { - myCachedVisible = null; - myCachedTopLevelRegions = null; - myCachedEndOffsets = null; - myCachedStartOffsets = null; - myCachedFoldedLines = null; + clearCachedValues(); if (myRegions != null) { for (FoldRegion region : myRegions) { @@ -73,6 +69,14 @@ abstract class FoldRegionsTree { myRegions = new ArrayList(); } + void clearCachedValues() { + myCachedVisible = null; + myCachedTopLevelRegions = null; + myCachedEndOffsets = null; + myCachedStartOffsets = null; + myCachedFoldedLines = null; + } + private boolean isFoldingEnabledAndUpToDate() { return isFoldingEnabled() && myCachedVisible != null; } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java index 13d0ff59cc9f..7dbd0e3e9211 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldingModelImpl.java @@ -360,7 +360,7 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList } private void notifyBatchFoldingProcessingDone(final boolean moveCaretFromCollapsedRegion) { - myFoldTree.rebuild(); + rebuild(); for (FoldingListener listener : myListeners) { listener.onFoldProcessingEnd(); @@ -436,7 +436,9 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList @Override public void rebuild() { - myFoldTree.rebuild(); + if (!myEditor.getDocument().isInBulkUpdate()) { + myFoldTree.rebuild(); + } } private void updateCachedOffsets() { @@ -491,6 +493,14 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList myCaretPositionSaved = false; } + void onBulkDocumentUpdateStarted() { + myFoldTree.clearCachedValues(); + } + + void onBulkDocumentUpdateFinished() { + myFoldTree.rebuild(); + } + @Override public void beforeDocumentChange(DocumentEvent event) { myDocumentChangeProcessed = false; @@ -499,9 +509,7 @@ public class FoldingModelImpl implements FoldingModelEx, PrioritizedDocumentList @Override public void documentChanged(DocumentEvent event) { try { - if (((DocumentEx)event.getDocument()).isInBulkUpdate()) { - myFoldTree.clear(); - } else { + if (!((DocumentEx)event.getDocument()).isInBulkUpdate()) { updateCachedOffsets(); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java index 2d26d93dc956..94aad9480c12 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/SoftWrapModelImpl.java @@ -51,7 +51,7 @@ import java.util.List; * @author Denis Zhdanov * @since Jun 8, 2010 12:47:32 PM */ -public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentListener, DocumentBulkUpdateListener, FoldingListener, +public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentListener, FoldingListener, PropertyChangeListener, Dumpable, Disposable { @@ -154,8 +154,6 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi editor.addPropertyChangeListener(this); - ApplicationManager.getApplication().getMessageBus().connect(this).subscribe(DocumentBulkUpdateListener.TOPIC, this); - myApplianceManager.addListener(myDataMapper); } @@ -567,17 +565,11 @@ public class SoftWrapModelImpl implements SoftWrapModelEx, PrioritizedDocumentLi } } - @Override - public void updateStarted(@NotNull Document doc) { - if (doc != myEditor.getDocument()) return; - + void onBulkDocumentUpdateStarted() { myBulkUpdateInProgress = true; } - @Override - public void updateFinished(@NotNull Document doc) { - if (doc != myEditor.getDocument()) return; - + void onBulkDocumentUpdateFinished() { myBulkUpdateInProgress = false; if (!isSoftWrappingEnabled()) { return; From c867dd94a6c2205e028f9cfc71e1fb6f59cf0a1c Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 12:53:40 +0400 Subject: [PATCH 010/217] IDEA-131712 Debugger is showing current position on evaluate --- .../xdebugger/impl/frame/XFramesView.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java index cdfb0cbb3b2d..4fb2b75c13a0 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java @@ -68,6 +68,7 @@ public class XFramesView extends XDebugView { private final Wrapper myThreadsPanel; private boolean myThreadsCalculated = false; private final TransferToEDTQueue myLaterInvocator = TransferToEDTQueue.createRunnableMerger("XFramesView later invocator", 50); + private boolean myRefresh = false; public XFramesView(@NotNull Project project) { myMainPanel = new JPanel(new BorderLayout()); @@ -77,7 +78,7 @@ public class XFramesView extends XDebugView { @Override public void valueChanged(ListSelectionEvent e) { if (myListenersEnabled && !e.getValueIsAdjusting() && mySelectedFrameIndex != myFramesList.getSelectedIndex()) { - processFrameSelection(getSession(e)); + processFrameSelection(getSession(e), true); } } }); @@ -87,7 +88,7 @@ public class XFramesView extends XDebugView { if (myListenersEnabled) { int i = myFramesList.locationToIndex(e.getPoint()); if (i != -1 && myFramesList.isSelectedIndex(i)) { - processFrameSelection(getSession(e)); + processFrameSelection(getSession(e), true); } } } @@ -201,6 +202,8 @@ public class XFramesView extends XDebugView { @Override public void processSessionEvent(@NotNull final SessionEvent event) { + myRefresh = event == SessionEvent.SETTINGS_CHANGED; + if (event == SessionEvent.BEFORE_RESUME) { return; } @@ -297,12 +300,14 @@ public class XFramesView extends XDebugView { return myMainPanel; } - private void processFrameSelection(XDebugSession session) { + private void processFrameSelection(XDebugSession session, boolean force) { mySelectedFrameIndex = myFramesList.getSelectedIndex(); Object selected = myFramesList.getSelectedValue(); if (selected instanceof XStackFrame) { if (session != null) { - session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, mySelectedFrameIndex == 0); + if (force || !myRefresh) { + session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, mySelectedFrameIndex == 0); + } } } } @@ -409,7 +414,7 @@ public class XFramesView extends XDebugView { myFramesList.getElementCount() > mySelectedFrameIndex && myFramesList.getModel().get(mySelectedFrameIndex) != null) { myFramesList.setSelectedIndex(mySelectedFrameIndex); - processFrameSelection(mySession); + processFrameSelection(mySession, false); myListenersEnabled = true; } } From fc752457587ff0a4edbe412b811d87b9437fb8f6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 10:52:11 +0200 Subject: [PATCH 011/217] IDEA-131542 (Good regexp marked red: illegal/unsupported escape sequence) --- .../org/intellij/lang/regexp/_RegExLexer.java | 203 ++++++++++-------- .../lang/regexp/RegExpCapability.java | 1 + .../lang/regexp/RegExpParserDefinition.java | 2 +- .../org/intellij/lang/regexp/RegExpTT.java | 2 +- .../intellij/lang/regexp/regexp-lexer.flex | 6 +- RegExpSupport/testData/RETest.xml | 7 + 6 files changed, 127 insertions(+), 94 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index e2afe5aa8493..b35848683e2d 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 4/29/14 2:27 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/22/14 10:42 AM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -15,8 +15,8 @@ import com.intellij.psi.StringEscapesTokenTypes; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 4/29/14 2:27 PM from the specification file - * C:/idea_src/ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex + * on 10/22/14 10:42 AM from the specification file + * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { /** initial size of the lookahead buffer */ @@ -56,69 +56,90 @@ class _RegExLexer implements FlexLexer { "\1\61\1\15\1\0\1\52\1\62\1\4\1\5\1\17\1\20\1\51"+ "\1\43\1\3\1\0\1\2\7\42\2\1\1\54\1\0\1\60\1\56"+ "\1\55\1\16\1\0\1\24\1\24\1\30\1\27\1\37\1\35\1\25"+ - "\1\44\1\32\6\45\1\34\1\36\1\45\1\26\3\45\1\26\1\26"+ - "\1\45\1\25\1\10\1\12\1\11\1\14\1\47\1\0\1\23\1\24"+ - "\1\31\1\27\1\23\1\23\1\45\1\44\1\32\4\45\1\22\1\45"+ - "\1\33\1\45\1\22\1\26\1\22\1\41\1\45\1\26\1\40\1\45"+ - "\1\25\1\6\1\21\1\7\54\0\1\45\12\0\1\45\4\0\1\45"+ - "\5\0\27\45\1\0\37\45\1\0\u013f\45\31\0\162\45\4\0\14\45"+ - "\16\0\5\45\11\0\1\45\213\0\1\45\13\0\1\45\1\0\3\45"+ - "\1\0\1\45\1\0\24\45\1\0\54\45\1\0\46\45\1\0\5\45"+ - "\4\0\202\45\10\0\105\45\1\0\46\45\2\0\2\45\6\0\20\45"+ - "\41\0\46\45\2\0\1\45\7\0\47\45\110\0\33\45\5\0\3\45"+ - "\56\0\32\45\5\0\13\45\25\0\12\50\4\0\2\45\1\0\143\45"+ - "\1\0\1\45\17\0\2\45\7\0\2\45\12\50\3\45\2\0\1\45"+ - "\20\0\1\45\1\0\36\45\35\0\3\45\60\0\46\45\13\0\1\45"+ - "\u0152\0\66\45\3\0\1\45\22\0\1\45\7\0\12\45\4\0\12\50"+ - "\25\0\10\45\2\0\2\45\2\0\26\45\1\0\7\45\1\0\1\45"+ - "\3\0\4\45\3\0\1\45\36\0\2\45\1\0\3\45\4\0\12\50"+ - "\2\45\23\0\6\45\4\0\2\45\2\0\26\45\1\0\7\45\1\0"+ - "\2\45\1\0\2\45\1\0\2\45\37\0\4\45\1\0\1\45\7\0"+ - "\12\50\2\0\3\45\20\0\11\45\1\0\3\45\1\0\26\45\1\0"+ - "\7\45\1\0\2\45\1\0\5\45\3\0\1\45\22\0\1\45\17\0"+ - "\2\45\4\0\12\50\25\0\10\45\2\0\2\45\2\0\26\45\1\0"+ - "\7\45\1\0\2\45\1\0\5\45\3\0\1\45\36\0\2\45\1\0"+ - "\3\45\4\0\12\50\1\0\1\45\21\0\1\45\1\0\6\45\3\0"+ - "\3\45\1\0\4\45\3\0\2\45\1\0\1\45\1\0\2\45\3\0"+ - "\2\45\3\0\3\45\3\0\10\45\1\0\3\45\55\0\11\50\25\0"+ - "\10\45\1\0\3\45\1\0\27\45\1\0\12\45\1\0\5\45\46\0"+ - "\2\45\4\0\12\50\25\0\10\45\1\0\3\45\1\0\27\45\1\0"+ - "\12\45\1\0\5\45\3\0\1\45\40\0\1\45\1\0\2\45\4\0"+ - "\12\50\25\0\10\45\1\0\3\45\1\0\27\45\1\0\20\45\46\0"+ - "\2\45\4\0\12\50\25\0\22\45\3\0\30\45\1\0\11\45\1\0"+ - "\1\45\2\0\7\45\72\0\60\45\1\0\2\45\14\0\7\45\11\0"+ - "\12\50\47\0\2\45\1\0\1\45\2\0\2\45\1\0\1\45\2\0"+ - "\1\45\6\0\4\45\1\0\7\45\1\0\3\45\1\0\1\45\1\0"+ - "\1\45\2\0\2\45\1\0\4\45\1\0\2\45\11\0\1\45\2\0"+ - "\5\45\1\0\1\45\11\0\12\50\2\0\2\45\42\0\1\45\37\0"+ - "\12\50\26\0\10\45\1\0\42\45\35\0\4\45\164\0\42\45\1\0"+ - "\5\45\1\0\2\45\25\0\12\50\6\0\6\45\112\0\46\45\12\0"+ - "\51\45\7\0\132\45\5\0\104\45\5\0\122\45\6\0\7\45\1\0"+ - "\77\45\1\0\1\45\1\0\4\45\2\0\7\45\1\0\1\45\1\0"+ - "\4\45\2\0\47\45\1\0\1\45\1\0\4\45\2\0\37\45\1\0"+ - "\1\45\1\0\4\45\2\0\7\45\1\0\1\45\1\0\4\45\2\0"+ - "\7\45\1\0\7\45\1\0\27\45\1\0\37\45\1\0\1\45\1\0"+ - "\4\45\2\0\7\45\1\0\47\45\1\0\23\45\16\0\11\50\56\0"+ - "\125\45\14\0\u026c\45\2\0\10\45\12\0\32\45\5\0\113\45\25\0"+ - "\15\45\1\0\4\45\16\0\22\45\16\0\22\45\16\0\15\45\1\0"+ - "\3\45\17\0\64\45\43\0\1\45\4\0\1\45\3\0\12\50\46\0"+ - "\12\50\6\0\130\45\10\0\51\45\127\0\35\45\51\0\12\50\36\45"+ - "\2\0\5\45\u038b\0\154\45\224\0\234\45\4\0\132\45\6\0\26\45"+ - "\2\0\6\45\2\0\46\45\2\0\6\45\2\0\10\45\1\0\1\45"+ - "\1\0\1\45\1\0\1\45\1\0\37\45\2\0\65\45\1\0\7\45"+ - "\1\0\1\45\3\0\3\45\1\0\7\45\3\0\4\45\2\0\6\45"+ - "\4\0\15\45\5\0\3\45\1\0\7\45\164\0\1\45\15\0\1\45"+ - "\202\0\1\45\4\0\1\45\2\0\12\45\1\0\1\45\3\0\5\45"+ - "\6\0\1\45\1\0\1\45\1\0\1\45\1\0\4\45\1\0\3\45"+ - "\1\0\7\45\3\0\3\45\5\0\5\45\u0ebb\0\2\45\52\0\5\45"+ - "\5\0\2\45\4\0\126\45\6\0\3\45\1\0\132\45\1\0\4\45"+ - "\5\0\50\45\4\0\136\45\21\0\30\45\70\0\20\45\u0200\0\u19b6\45"+ - "\112\0\u51a6\45\132\0\u048d\45\u0773\0\u2ba4\45\u215c\0\u012e\45\2\0\73\45"+ - "\225\0\7\45\14\0\5\45\5\0\1\45\1\0\12\45\1\0\15\45"+ - "\1\0\5\45\1\0\1\45\1\0\2\45\1\0\2\45\1\0\154\45"+ - "\41\0\u016b\45\22\0\100\45\2\0\66\45\50\0\14\45\164\0\5\45"+ - "\1\0\207\45\23\0\12\50\7\0\32\45\6\0\32\45\13\0\131\45"+ - "\3\0\6\45\2\0\6\45\2\0\6\45\2\0\3\45\43\0"; + "\1\44\1\32\6\45\1\34\1\36\1\45\1\26\2\45\1\26\1\26"+ + "\1\26\1\45\1\25\1\10\1\12\1\11\1\14\1\47\1\0\1\23"+ + "\1\24\1\31\1\27\1\23\1\23\1\45\1\44\1\32\4\45\1\22"+ + "\1\45\1\33\1\45\1\22\1\26\1\22\1\41\1\26\1\26\1\40"+ + "\1\45\1\25\1\6\1\21\1\7\54\0\1\45\12\0\1\45\4\0"+ + "\1\45\5\0\27\45\1\0\37\45\1\0\u01ca\45\4\0\14\45\16\0"+ + "\5\45\7\0\1\45\1\0\1\45\201\0\5\45\1\0\2\45\2\0"+ + "\4\45\10\0\1\45\1\0\3\45\1\0\1\45\1\0\24\45\1\0"+ + "\123\45\1\0\213\45\10\0\236\45\11\0\46\45\2\0\1\45\7\0"+ + "\47\45\110\0\33\45\5\0\3\45\55\0\53\45\25\0\12\50\4\0"+ + "\2\45\1\0\143\45\1\0\1\45\17\0\2\45\7\0\2\45\12\50"+ + "\3\45\2\0\1\45\20\0\1\45\1\0\36\45\35\0\131\45\13\0"+ + "\1\45\16\0\12\50\41\45\11\0\2\45\4\0\1\45\5\0\26\45"+ + "\4\0\1\45\11\0\1\45\3\0\1\45\27\0\31\45\107\0\1\45"+ + "\1\0\13\45\127\0\66\45\3\0\1\45\22\0\1\45\7\0\12\45"+ + "\4\0\12\50\1\0\7\45\1\0\7\45\5\0\10\45\2\0\2\45"+ + "\2\0\26\45\1\0\7\45\1\0\1\45\3\0\4\45\3\0\1\45"+ + "\20\0\1\45\15\0\2\45\1\0\3\45\4\0\12\50\2\45\23\0"+ + "\6\45\4\0\2\45\2\0\26\45\1\0\7\45\1\0\2\45\1\0"+ + "\2\45\1\0\2\45\37\0\4\45\1\0\1\45\7\0\12\50\2\0"+ + "\3\45\20\0\11\45\1\0\3\45\1\0\26\45\1\0\7\45\1\0"+ + "\2\45\1\0\5\45\3\0\1\45\22\0\1\45\17\0\2\45\4\0"+ + "\12\50\25\0\10\45\2\0\2\45\2\0\26\45\1\0\7\45\1\0"+ + "\2\45\1\0\5\45\3\0\1\45\36\0\2\45\1\0\3\45\4\0"+ + "\12\50\1\0\1\45\21\0\1\45\1\0\6\45\3\0\3\45\1\0"+ + "\4\45\3\0\2\45\1\0\1\45\1\0\2\45\3\0\2\45\3\0"+ + "\3\45\3\0\14\45\26\0\1\45\25\0\12\50\25\0\10\45\1\0"+ + "\3\45\1\0\27\45\1\0\12\45\1\0\5\45\3\0\1\45\32\0"+ + "\2\45\6\0\2\45\4\0\12\50\25\0\10\45\1\0\3\45\1\0"+ + "\27\45\1\0\12\45\1\0\5\45\3\0\1\45\40\0\1\45\1\0"+ + "\2\45\4\0\12\50\1\0\2\45\22\0\10\45\1\0\3\45\1\0"+ + "\51\45\2\0\1\45\20\0\1\45\21\0\2\45\4\0\12\50\12\0"+ + "\6\45\5\0\22\45\3\0\30\45\1\0\11\45\1\0\1\45\2\0"+ + "\7\45\72\0\60\45\1\0\2\45\14\0\7\45\11\0\12\50\47\0"+ + "\2\45\1\0\1\45\2\0\2\45\1\0\1\45\2\0\1\45\6\0"+ + "\4\45\1\0\7\45\1\0\3\45\1\0\1\45\1\0\1\45\2\0"+ + "\2\45\1\0\4\45\1\0\2\45\11\0\1\45\2\0\5\45\1\0"+ + "\1\45\11\0\12\50\2\0\4\45\40\0\1\45\37\0\12\50\26\0"+ + "\10\45\1\0\44\45\33\0\5\45\163\0\53\45\24\0\1\45\12\50"+ + "\6\0\6\45\4\0\4\45\3\0\1\45\3\0\2\45\7\0\3\45"+ + "\4\0\15\45\14\0\1\45\1\0\12\50\6\0\46\45\1\0\1\45"+ + "\5\0\1\45\2\0\53\45\1\0\u014d\45\1\0\4\45\2\0\7\45"+ + "\1\0\1\45\1\0\4\45\2\0\51\45\1\0\4\45\2\0\41\45"+ + "\1\0\4\45\2\0\7\45\1\0\1\45\1\0\4\45\2\0\17\45"+ + "\1\0\71\45\1\0\4\45\2\0\103\45\45\0\20\45\20\0\125\45"+ + "\14\0\u026c\45\2\0\21\45\1\0\32\45\5\0\113\45\25\0\15\45"+ + "\1\0\4\45\16\0\22\45\16\0\22\45\16\0\15\45\1\0\3\45"+ + "\17\0\64\45\43\0\1\45\4\0\1\45\3\0\12\50\46\0\12\50"+ + "\6\0\130\45\10\0\51\45\1\0\1\45\5\0\106\45\12\0\35\45"+ + "\51\0\12\50\36\45\2\0\5\45\13\0\54\45\25\0\7\45\10\0"+ + "\12\50\46\0\27\45\11\0\65\45\53\0\12\50\6\0\12\50\15\0"+ + "\1\45\135\0\57\45\21\0\7\45\4\0\12\50\51\0\36\45\15\0"+ + "\2\45\12\50\54\45\32\0\44\45\34\0\12\50\3\0\3\45\12\50"+ + "\44\45\153\0\4\45\1\0\4\45\3\0\2\45\11\0\300\45\100\0"+ + "\u0116\45\2\0\6\45\2\0\46\45\2\0\6\45\2\0\10\45\1\0"+ + "\1\45\1\0\1\45\1\0\1\45\1\0\37\45\2\0\65\45\1\0"+ + "\7\45\1\0\1\45\3\0\3\45\1\0\7\45\3\0\4\45\2\0"+ + "\6\45\4\0\15\45\5\0\3\45\1\0\7\45\164\0\1\45\15\0"+ + "\1\45\20\0\15\45\145\0\1\45\4\0\1\45\2\0\12\45\1\0"+ + "\1\45\3\0\5\45\6\0\1\45\1\0\1\45\1\0\1\45\1\0"+ + "\4\45\1\0\13\45\2\0\4\45\5\0\5\45\4\0\1\45\64\0"+ + "\2\45\u0a7b\0\57\45\1\0\57\45\1\0\205\45\6\0\4\45\3\0"+ + "\2\45\14\0\46\45\1\0\1\45\5\0\1\45\2\0\70\45\7\0"+ + "\1\45\20\0\27\45\11\0\7\45\1\0\7\45\1\0\7\45\1\0"+ + "\7\45\1\0\7\45\1\0\7\45\1\0\7\45\1\0\7\45\120\0"+ + "\1\45\u01d5\0\2\45\52\0\5\45\5\0\2\45\4\0\126\45\6\0"+ + "\3\45\1\0\132\45\1\0\4\45\5\0\51\45\3\0\136\45\21\0"+ + "\33\45\65\0\20\45\u0200\0\u19b6\45\112\0\u51cd\45\63\0\u048d\45\103\0"+ + "\56\45\2\0\u010d\45\3\0\20\45\12\50\2\45\24\0\57\45\20\0"+ + "\31\45\10\0\106\45\61\0\11\45\2\0\147\45\2\0\4\45\1\0"+ + "\4\45\14\0\13\45\115\0\12\45\1\0\3\45\1\0\4\45\1\0"+ + "\27\45\35\0\64\45\16\0\62\45\34\0\12\50\30\0\6\45\3\0"+ + "\1\45\4\0\12\50\34\45\12\0\27\45\31\0\35\45\7\0\57\45"+ + "\34\0\1\45\12\50\46\0\51\45\27\0\3\45\1\0\10\45\4\0"+ + "\12\50\6\0\27\45\3\0\1\45\5\0\60\45\1\0\1\45\3\0"+ + "\2\45\2\0\5\45\2\0\1\45\1\0\1\45\30\0\3\45\2\0"+ + "\13\45\7\0\3\45\14\0\6\45\2\0\6\45\2\0\6\45\11\0"+ + "\7\45\1\0\7\45\221\0\43\45\15\0\12\50\6\0\u2ba4\45\14\0"+ + "\27\45\4\0\61\45\u2104\0\u016e\45\2\0\152\45\46\0\7\45\14\0"+ + "\5\45\5\0\1\45\1\0\12\45\1\0\15\45\1\0\5\45\1\0"+ + "\1\45\1\0\2\45\1\0\2\45\1\0\154\45\41\0\u016b\45\22\0"+ + "\100\45\2\0\66\45\50\0\14\45\164\0\5\45\1\0\207\45\23\0"+ + "\12\50\7\0\32\45\6\0\32\45\13\0\131\45\3\0\6\45\2\0"+ + "\6\45\2\0\6\45\2\0\3\45\43\0"; /** * Translates characters to character classes @@ -378,6 +399,7 @@ class _RegExLexer implements FlexLexer { private boolean allowOctalNoLeadingZero; private boolean allowHexDigitClass; private boolean allowEmptyCharacterClass; + private boolean allowHorizontalWhitespaceClass; _RegExLexer(EnumSet capabilities) { this((java.io.Reader)null); @@ -387,6 +409,7 @@ class _RegExLexer implements FlexLexer { this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO); this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE); this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS); + this.allowHorizontalWhitespaceClass = capabilities.contains(RegExpCapability.ALLOW_HORIZONTAL_WHITESPACE_CLASS); this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS); } @@ -435,7 +458,7 @@ class _RegExLexer implements FlexLexer { char [] map = new char[0x10000]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 1338) { + while (i < 1752) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -862,22 +885,18 @@ class _RegExLexer implements FlexLexer { { return RegExpTT.QUEST; } case 122: break; - case 54: - { return (allowHexDigitClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); - } - case 123: break; case 15: { return RegExpTT.PLUS; } - case 124: break; + case 123: break; case 66: { return RegExpTT.OCT_CHAR; } - case 125: break; + case 124: break; case 38: { yybegin(YYINITIAL); return RegExpTT.QUOTE; } - case 126: break; + case 125: break; case 20: { if (allowDanglingMetacharacters) { yypopstate(); yypushback(1); @@ -885,15 +904,15 @@ class _RegExLexer implements FlexLexer { return RegExpTT.BAD_CHARACTER; } } - case 127: break; + case 126: break; case 31: { yypopstate(); yypushback(1); } - case 128: break; + case 127: break; case 27: { yybegin(CLASS1); return RegExpTT.CARET; } - case 129: break; + case 128: break; case 56: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; @@ -903,59 +922,63 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.CHARACTER; } - case 130: break; + case 129: break; case 57: { if (!allowNestedCharacterClasses) return RegExpTT.CHARACTER; return RegExpTT.REDUNDANT_ESCAPE; } - case 131: break; + case 130: break; case 37: { yybegin(YYINITIAL); return RegExpTT.GT; } - case 132: break; + case 131: break; case 68: { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF; } - case 133: break; + case 132: break; case 16: { return RegExpTT.UNION; } - case 134: break; + case 133: break; case 3: { return RegExpTT.CHARACTER; } - case 135: break; + case 134: break; case 63: { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP; } - case 136: break; + case 135: break; case 39: { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; } - case 137: break; + case 136: break; case 26: { yybegin(CLASS2); return RegExpTT.CHARACTER; } - case 138: break; + case 137: break; case 67: { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL; } - case 139: break; + case 138: break; case 30: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER; } - case 140: break; + case 139: break; case 12: { return RegExpTT.DOLLAR; } - case 141: break; + case 140: break; case 49: { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } - case 142: break; + case 141: break; case 41: { return RegExpTT.REDUNDANT_ESCAPE; } + case 142: break; + case 54: + { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); + } case 143: break; case 47: { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java index 81db82a112a6..330441b22e3e 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpCapability.java @@ -27,4 +27,5 @@ public enum RegExpCapability { COMMENT_MODE, ALLOW_HEX_DIGIT_CLASS, ALLOW_EMPTY_CHARACTER_CLASS, + ALLOW_HORIZONTAL_WHITESPACE_CLASS } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpParserDefinition.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpParserDefinition.java index 2148acb3bb13..18be01fdc1a8 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpParserDefinition.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpParserDefinition.java @@ -38,7 +38,7 @@ public class RegExpParserDefinition implements ParserDefinition { @NotNull public Lexer createLexer(Project project) { - return new RegExpLexer(EnumSet.of(RegExpCapability.NESTED_CHARACTER_CLASSES)); + return new RegExpLexer(EnumSet.of(RegExpCapability.NESTED_CHARACTER_CLASSES, RegExpCapability.ALLOW_HORIZONTAL_WHITESPACE_CLASS)); } public PsiParser createParser(Project project) { diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpTT.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpTT.java index c9f9b9bb8a09..4d085b31d463 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpTT.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpTT.java @@ -75,7 +75,7 @@ public interface RegExpTT { IElementType ESC_CTRL_CHARACTER = new RegExpElementType("ESC_CTRL_CHARACTER"); // "\\" ("." | "|" | "$" | "^" | "?" | "*" | "+" | "[" | "{" | "(" | ")") IElementType ESC_CHARACTER = new RegExpElementType("ESC_CHARACTER"); - // "\\" ("w" | "W" | "s" | "S" | "d" | "D") + // "\\" ("w" | "W" | "s" | "S" | "d" | "D" | "v" | "V" | "h" | "H") IElementType CHAR_CLASS = new RegExpElementType("CHAR_CLASS"); // "\\u" XXXX IElementType UNICODE_CHAR = new RegExpElementType("UNICODE_CHAR"); diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index 1737148b6cda..af0eb9bb6329 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -33,6 +33,7 @@ import com.intellij.psi.StringEscapesTokenTypes; private boolean allowOctalNoLeadingZero; private boolean allowHexDigitClass; private boolean allowEmptyCharacterClass; + private boolean allowHorizontalWhitespaceClass; _RegExLexer(EnumSet capabilities) { this((java.io.Reader)null); @@ -42,6 +43,7 @@ import com.intellij.psi.StringEscapesTokenTypes; this.allowOctalNoLeadingZero = capabilities.contains(RegExpCapability.OCTAL_NO_LEADING_ZERO); this.commentMode = capabilities.contains(RegExpCapability.COMMENT_MODE); this.allowHexDigitClass = capabilities.contains(RegExpCapability.ALLOW_HEX_DIGIT_CLASS); + this.allowHorizontalWhitespaceClass = capabilities.contains(RegExpCapability.ALLOW_HORIZONTAL_WHITESPACE_CLASS); this.allowEmptyCharacterClass = capabilities.contains(RegExpCapability.ALLOW_EMPTY_CHARACTER_CLASS); } @@ -99,7 +101,7 @@ META={ESCAPE} | {DOT} | CONTROL="t" | "n" | "r" | "f" | "a" | "e" BOUNDARY="b" | "B" | "A" | "z" | "Z" | "G" -CLASS="w" | "W" | "s" | "S" | "d" | "D" | "X" | "C" +CLASS="w" | "W" | "s" | "S" | "d" | "D" | "v" | "V" | "X" | "C" XML_CLASS="c" | "C" | "i" | "I" PROP="p" | "P" @@ -159,7 +161,7 @@ HEX_CHAR=[0-9a-fA-F] {ESCAPE} {BOUNDARY} { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER; } {ESCAPE} {CONTROL} { return RegExpTT.ESC_CTRL_CHARACTER; } -{ESCAPE} [hH] { return (allowHexDigitClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); } +{ESCAPE} [hH] { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); } {ESCAPE} [:letter:] { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } {ESCAPE} [\n\b\t\r\f ] { return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE; } diff --git a/RegExpSupport/testData/RETest.xml b/RegExpSupport/testData/RETest.xml index 10e04dcf80fa..3aac79ea8de6 100644 --- a/RegExpSupport/testData/RETest.xml +++ b/RegExpSupport/testData/RETest.xml @@ -1001,4 +1001,11 @@ OK + + + + \h \H \v \V + OK + + From 8d4fc535982c8b9a9a7d3b27d4b9de0e9488d710 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 10:52:22 +0200 Subject: [PATCH 012/217] RegExp: completion for horizontal and vertical whitespace escape sequences --- .../intellij/lang/regexp/DefaultRegExpPropertiesProvider.java | 4 ++++ RegExpSupport/test/test/RegExpCompletionTest.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/DefaultRegExpPropertiesProvider.java b/RegExpSupport/src/org/intellij/lang/regexp/DefaultRegExpPropertiesProvider.java index 9f23654c710c..844a42edb7a0 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/DefaultRegExpPropertiesProvider.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/DefaultRegExpPropertiesProvider.java @@ -89,8 +89,12 @@ public final class DefaultRegExpPropertiesProvider { private final String[][] myCharacterClasses = { {"d", "digit: [0-9]"}, {"D", "nondigit: [^0-9]"}, + {"h", "horizontal whitespace character: [ \\t\\xA0\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000]"}, + {"H", "non-horizontal whitespace character: [^\\h]"}, {"s", "whitespace [ \\t\\n\\x0B\\f\\r]"}, {"S", "non-whitespace [^\\s]"}, + {"v", "vertical whitespace character: [\\n\\x0B\\f\\r\\x85\\u2028\\u2029]"}, + {"V", "non-vertical whitespace character: [^\\v]"}, {"w", "word character [a-zA-Z_0-9]"}, {"W", "nonword character [^\\w]"}, {"b", "word boundary"}, diff --git a/RegExpSupport/test/test/RegExpCompletionTest.java b/RegExpSupport/test/test/RegExpCompletionTest.java index a408a540a99a..5e90be4a485a 100644 --- a/RegExpSupport/test/test/RegExpCompletionTest.java +++ b/RegExpSupport/test/test/RegExpCompletionTest.java @@ -58,7 +58,7 @@ public class RegExpCompletionTest extends CodeInsightFixtureTestCase { private void doBackSlashVariantsTest() throws Throwable { java.util.List nameList = new ArrayList(Arrays.asList("d", "D", "s", "S", "w", "W", "b", "B", "A", "G", "Z", "z", "Q", "E", - "t", "n", "r", "f", "a", "e")); + "t", "n", "r", "f", "a", "e", "h", "H", "v", "V")); for (String[] stringArray : DefaultRegExpPropertiesProvider.getInstance().getAllKnownProperties()) { nameList.add("p{" + stringArray[0] + "}"); } From 519308aace69fe6afc8ece07d3dd45aee4027c59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 22 Oct 2014 11:17:31 +0200 Subject: [PATCH 013/217] GenericDomValueReference: revert b43db13 --- .../util/xml/impl/GenericDomValueReference.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java index 2897f83d7cf9..18c97c2a839d 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java @@ -22,14 +22,15 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.PomTarget; import com.intellij.pom.references.PomService; -import com.intellij.psi.*; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiManager; +import com.intellij.psi.PsiReferenceBase; import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; -import com.intellij.util.ReflectionUtil; import com.intellij.util.xml.*; import com.intellij.xml.util.XmlTagUtil; import org.jetbrains.annotations.NotNull; @@ -41,7 +42,7 @@ import java.util.List; /** * @author peter */ -public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { +public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { private final GenericDomValue myGenericValue; public GenericDomValueReference(GenericDomValue domValue) { @@ -51,11 +52,6 @@ public class GenericDomValueReference extends PsiReferenceBase im setRangeInElement(createTextRange()); } - @Override - public boolean canResolveTo(Class elementClass) { - return ReflectionUtil.isAssignable(XmlElement.class, elementClass); - } - protected final PsiManager getPsiManager() { return PsiManager.getInstance(myGenericValue.getManager().getProject()); } From 25e8197fb5077d4ca91d0f81f657009c4b506113 Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Wed, 22 Oct 2014 13:14:28 +0400 Subject: [PATCH 014/217] force update actions on toolbar refresh --- .../intellij/openapi/actionSystem/impl/ActionToolbarImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java index 74b9c4dcc1b2..c33e5f2ba57d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java @@ -928,7 +928,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar { public void updateActionsImmediately() { ApplicationManager.getApplication().assertIsDispatchThread(); myPresentationFactory.reset(); - updateActions(true, false, false); + updateActions(true, false, true); } private void updateActions(boolean now, final boolean transparentOnly, final boolean forced) { From 0f1baef0cece439043f1adb36b490f82ea13164d Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Wed, 22 Oct 2014 13:18:07 +0400 Subject: [PATCH 015/217] IDEA-131679 Maven project reimport doesn't report about invalid JDK importer setting --- .../idea/maven/project/MavenProjectsProcessor.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessor.java index 7d807fa7c2eb..68007e299473 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessor.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsProcessor.java @@ -15,13 +15,20 @@ */ package org.jetbrains.idea.maven.project; +import com.intellij.CommonBundle; +import com.intellij.notification.Notification; +import com.intellij.notification.NotificationListener; +import com.intellij.notification.NotificationType; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Condition; import com.intellij.util.concurrency.Semaphore; +import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.maven.execution.SoutMavenConsole; +import org.jetbrains.idea.maven.server.MavenServerManager; import org.jetbrains.idea.maven.utils.*; +import javax.swing.event.HyperlinkEvent; import java.util.LinkedList; import java.util.Queue; @@ -135,6 +142,11 @@ public class MavenProjectsProcessor { } catch (Throwable e) { MavenLog.LOG.error(e); + new Notification(MavenUtil.MAVEN_NOTIFICATION_GROUP, + "Unable to import maven project", + "See logs for details", + NotificationType.ERROR + ).notify(myProject); } synchronized (myQueue) { From 1c0663c0058ae16e7c9125e0d985660cb21e49a8 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 22 Oct 2014 13:25:07 +0400 Subject: [PATCH 016/217] cleanup --- .../src/com/intellij/openapi/vfs/impl/local/FileWatcher.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java index 8d00a82d4814..7516febe596b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java @@ -66,7 +66,7 @@ public class FileWatcher { public final List dirtyPathsRecursive = newArrayList(); public final List dirtyDirectories = newArrayList(); - private static DirtyPaths EMPTY = new DirtyPaths(); + private static final DirtyPaths EMPTY = new DirtyPaths(); private boolean isEmpty() { return dirtyPaths.isEmpty() && dirtyPathsRecursive.isEmpty() && dirtyDirectories.isEmpty(); @@ -203,6 +203,7 @@ public class FileWatcher { if (myFailureShownToTheUser.compareAndSet(false, true)) { ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override public void run() { String title = ApplicationBundle.message("watcher.slow.sync"); Notifications.Bus.notify(NOTIFICATION_GROUP.getValue().createNotification(title, cause, NotificationType.WARNING, listener)); From 020428541e3c336af9283749da1ec1e481159c34 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 11:54:35 +0200 Subject: [PATCH 017/217] rollback --- .../intellij/openapi/actionSystem/impl/ActionToolbarImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java index c33e5f2ba57d..529d5ba1c62f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionToolbarImpl.java @@ -927,8 +927,7 @@ public class ActionToolbarImpl extends JPanel implements ActionToolbar { @Override public void updateActionsImmediately() { ApplicationManager.getApplication().assertIsDispatchThread(); - myPresentationFactory.reset(); - updateActions(true, false, true); + updateActions(true, false, false); } private void updateActions(boolean now, final boolean transparentOnly, final boolean forced) { From b2be554c6015c758b0e4b656debc9b58976cab64 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 22 Oct 2014 11:27:51 +0200 Subject: [PATCH 018/217] IDEA-131685 Cleanup code quick fix / Settings: focus does not go into Inspection dialog --- .../impl/EditCleanupProfileIntentionAction.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/EditCleanupProfileIntentionAction.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/EditCleanupProfileIntentionAction.java index 269e63acf624..e5e7cf01ad1e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/EditCleanupProfileIntentionAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/EditCleanupProfileIntentionAction.java @@ -24,10 +24,13 @@ import com.intellij.openapi.project.Project; import com.intellij.profile.codeInspection.InspectionProfileManager; import com.intellij.profile.codeInspection.InspectionProjectProfileManager; import com.intellij.profile.codeInspection.ui.IDEInspectionToolsConfigurable; +import com.intellij.profile.codeInspection.ui.ProjectInspectionToolsConfigurable; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import javax.swing.*; + /** * Created by anna on 5/13/2014. */ @@ -55,21 +58,14 @@ class EditCleanupProfileIntentionAction implements IntentionAction { @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { final InspectionProjectProfileManager profileManager = InspectionProjectProfileManager.getInstance(project); - final InspectionProfile inspectionProfile = profileManager.getInspectionProfile(); - final IDEInspectionToolsConfigurable configurable = - new IDEInspectionToolsConfigurable(profileManager, - InspectionProfileManager.getInstance()) { + final ProjectInspectionToolsConfigurable configurable = + new ProjectInspectionToolsConfigurable(InspectionProfileManager.getInstance(), profileManager) { @Override protected boolean acceptTool(InspectionToolWrapper entry) { return super.acceptTool(entry) && entry.isCleanupTool(); } }; - ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() { - @Override - public void run() { - configurable.selectProfile(inspectionProfile.getName()); - } - }); + ShowSettingsUtil.getInstance().editConfigurable(project, configurable); } @Override From 74abd4cae58ce779045de22fa9a4346fad70f3e7 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Wed, 22 Oct 2014 14:02:31 +0400 Subject: [PATCH 019/217] prevent one more NPE --- .../src/com/intellij/ide/actions/GotoActionAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java index bfc9701c51b3..92956b3badaa 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoActionAction.java @@ -90,7 +90,7 @@ public class GotoActionAction extends GotoActionBase implements DumbAware { public void valueChanged(ListSelectionEvent e) { Object value = myList.getSelectedValue(); String text = getText(value); - if (text != null) { + if (text != null && myDropdownPopup != null) { myDropdownPopup.setAdText(text, SwingConstants.LEFT); } } From d427659a7067e74635ce5652f427a458a9692554 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 12:14:58 +0200 Subject: [PATCH 020/217] avoid caching --- .../git4idea/src/git4idea/cherrypick/GitCherryPickAction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java index 7c5e18f16fd2..c62228bd66ab 100644 --- a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java +++ b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java @@ -130,6 +130,7 @@ public class GitCherryPickAction extends DumbAwareAction { @Override public void update(@NotNull AnActionEvent e) { super.update(e); + e.getPresentation().setVisible(true); VcsLog log = e.getData(VcsLogDataKeys.VCS_LOG); Project project = getEventProject(e); if (project == null || log == null || !logHasGitRoots(log)) { From 75d55d421ecf3552ea777ef8b0b2b191d3b432d8 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 22 Oct 2014 12:16:38 +0200 Subject: [PATCH 021/217] certain case of IDEA-128919 --- .../intellij/util/indexing/PerIndexDocumentVersionMap.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/PerIndexDocumentVersionMap.java b/platform/lang-impl/src/com/intellij/util/indexing/PerIndexDocumentVersionMap.java index 316e114b1dbe..f9b2b4c169cd 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/PerIndexDocumentVersionMap.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/PerIndexDocumentVersionMap.java @@ -29,6 +29,7 @@ import java.util.List; * @author peter */ public class PerIndexDocumentVersionMap { + private static final int INVALID_STAMP = -1; // 0 isn't acceptable as Document has 0 stamp when loaded from unchanged file private volatile int mapVersion; private static class IdVersionInfo { private final ID id; @@ -54,7 +55,7 @@ public class PerIndexDocumentVersionMap { if (info.id == indexId) { long old = info.docVersion; if (info.mapVersion != mapVersion) { - old = 0; + old = INVALID_STAMP; info.mapVersion = mapVersion; } info.docVersion = value; @@ -62,7 +63,7 @@ public class PerIndexDocumentVersionMap { } } list.add(new IdVersionInfo(indexId, value, mapVersion)); - return 0; + return INVALID_STAMP; } } From 772c9761fa66836d2af828b60e995808f3c7ccc8 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Wed, 22 Oct 2014 14:19:28 +0400 Subject: [PATCH 022/217] get rid of some duplication --- .../intellij/ide/actions/ToggleDistractionFreeModeAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java index 52b45132db29..4afd28d9f893 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ToggleDistractionFreeModeAction.java @@ -29,7 +29,7 @@ public class ToggleDistractionFreeModeAction extends AnAction implements DumbAwa public void update(@NotNull AnActionEvent e) { RegistryValue value = Registry.get(key); boolean selected = value.asBoolean(); - e.getPresentation().setText(selected ? "Exit Distraction Free Mode" : "Enter Distraction Free Mode"); + e.getPresentation().setText((selected ? "Exit" : "Enter") + " Distraction Free Mode"); } @Override From 36c5a78e93e86faae0814114c8a0b45e77f4c192 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Wed, 22 Oct 2014 14:37:22 +0400 Subject: [PATCH 023/217] add change screen mode group and switch quick scheme cleanup --- .../ide/actions/QuickChangeSchemesAction.java | 5 +++ .../actions/QuickChangeViewModeAction.java | 45 +++++++++++++++++++ .../src/messages/ActionsBundle.properties | 10 +++-- .../src/idea/PlatformActions.xml | 1 + 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ide/actions/QuickChangeViewModeAction.java diff --git a/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeSchemesAction.java b/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeSchemesAction.java index 87fa8c9b689f..5c2b01f55da4 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeSchemesAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeSchemesAction.java @@ -32,6 +32,11 @@ public class QuickChangeSchemesAction extends QuickSwitchSchemeAction implements } } + @Override + protected String getPopupTitle(AnActionEvent e) { + return "Switch..."; + } + public void actionPerformed(@NotNull AnActionEvent e) { super.actionPerformed(e); FeatureUsageTracker.getInstance().triggerFeatureUsed("ui.scheme.quickswitch"); diff --git a/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeViewModeAction.java b/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeViewModeAction.java new file mode 100644 index 000000000000..88b10f1bf0dc --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ide/actions/QuickChangeViewModeAction.java @@ -0,0 +1,45 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ide.actions; + +import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.project.Project; +import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; + +import static com.intellij.openapi.util.Conditions.instanceOf; +import static com.intellij.openapi.util.Conditions.not; + +public class QuickChangeViewModeAction extends QuickSwitchSchemeAction { + protected void fillActions(Project project, @NotNull DefaultActionGroup group, @NotNull DataContext dataContext) { + for (AnAction child : getActions()) { + group.add(child); + } + } + + protected boolean isEnabled() { + return getActions().length > 0; + } + + private static AnAction[] getActions() { + AnAction a = ActionManager.getInstance().getActionOrStub("ToggleFullScreenGroup"); + AnAction[] actions = a instanceof DefaultActionGroup + ? ((DefaultActionGroup)a).getChildActionsOrStubs() + : a instanceof ActionGroup ? ((ActionGroup)a).getChildren(null) : EMPTY_ARRAY; + return ArrayUtil.toObjectArray(ContainerUtil.filter(actions, not(instanceOf(Separator.class))), AnAction.class); + } +} diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index b2d8090fd0a1..f80f272c8933 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -1001,14 +1001,16 @@ group.EditorPopupMenu.GoTo.text=Go To group.EditorPopupMenu.GoTo.description=Go To Editor Popup Menu Group action.CompareClipboardWithSelection.text=Compare with Clip_board action.CompareClipboardWithSelection.description=Compare current selection with clipboard -action.ChangeColorScheme.text=Switch Color Scheme +action.ChangeColorScheme.text=Color Scheme action.ChangeColorScheme.description=Change current color scheme -action.ChangeCodeStyleScheme.text=Switch Code Style Scheme +action.ChangeCodeStyleScheme.text=Code Style Scheme action.ChangeCodeStyleScheme.description=Change current code style scheme -action.ChangeKeymap.text=Switch Keymap +action.ChangeKeymap.text=Keymap action.ChangeKeymap.description=Change current keymap -action.ChangeLaf.text=Switch Look and Feel +action.ChangeLaf.text=Look and Feel action.ChangeLaf.description=Change current Look\\&Feel +action.ChangeView.text=Screen Mode +action.ChangeView.description=Change screen mode action.ChangeInspectionProfile.text=Switch Error Highlighting action.ChangeInspectionProfile.description=Change current editor inspection profile action.ChangeCustomizationSchema.text=Switch Customization Scheme diff --git a/platform/platform-resources/src/idea/PlatformActions.xml b/platform/platform-resources/src/idea/PlatformActions.xml index 47ed5ff657f1..26448ea7337f 100644 --- a/platform/platform-resources/src/idea/PlatformActions.xml +++ b/platform/platform-resources/src/idea/PlatformActions.xml @@ -583,6 +583,7 @@ + From 3d0fa6fd2f97aeb90d088fd1853b58291095fe19 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 22 Oct 2014 14:45:18 +0400 Subject: [PATCH 024/217] revert fd5f654/abf023de [rev=kb] --- .../src/com/intellij/ui/components/JBScrollPane.java | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ui/components/JBScrollPane.java b/platform/platform-api/src/com/intellij/ui/components/JBScrollPane.java index 92657ca8c1ff..51535b67f9af 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBScrollPane.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBScrollPane.java @@ -101,7 +101,6 @@ public class JBScrollPane extends JScrollPane { public void setUI(ScrollPaneUI ui) { super.setUI(ui); updateViewportBorder(); - setBorder(IdeBorderFactory.createBorder()); } @Override From 958f85051669238fdab759a4f79d93c8e7ab491e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 14:49:55 +0400 Subject: [PATCH 025/217] decompiler: registry flag to dump original line numbers as comments --- .../util/resources/misc/registry.properties | 2 ++ .../decompiler/main/ClassesProcessor.java | 3 ++ .../java/decompiler/main/TextBuffer.java | 33 +++++++++++++++++++ .../main/extern/IFernflowerPreferences.java | 2 ++ .../java/decompiler/IdeaDecompiler.java | 4 +++ 5 files changed, 44 insertions(+) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index c7a10d57d8e2..bef1c10517d7 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -460,6 +460,8 @@ decompiler.use.line.mapping=true decompiler.use.line.mapping.description=Maps original to decompiled line numbers when stepping in debugger. decompiler.use.line.table=false decompiler.use.line.table.description=Rearranges decompiled text to match original line numbers. +decompiler.dump.original.lines=false +decompiler.dump.original.lines.description=Show original line numbers as comments in decompiled text ide.transparency.mode.for.windows=false ide.transparency.mode.for.windows.description=Allow to add transparency to floating windows diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassesProcessor.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassesProcessor.java index 42a137c3df55..857c41cb3d38 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassesProcessor.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/ClassesProcessor.java @@ -285,6 +285,9 @@ public class ClassesProcessor { if (DecompilerContext.getOption(IFernflowerPreferences.BYTECODE_SOURCE_MAPPING)) { BytecodeSourceMapper mapper = DecompilerContext.getBytecodeSourceMapper(); mapper.addTotalOffset(total_offset_lines); + if (DecompilerContext.getOption(IFernflowerPreferences.DUMP_ORIGINAL_LINES)) { + buffer.dumpOriginalLineNumbers(mapper.getOriginalLinesMapping()); + } if (DecompilerContext.getOption(IFernflowerPreferences.UNIT_TEST_MODE)) { buffer.appendLineSeparator(); mapper.dumpMapping(buffer, true); diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/TextBuffer.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/TextBuffer.java index 4e51e6f7e151..2016f08b306b 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/TextBuffer.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/TextBuffer.java @@ -104,6 +104,9 @@ public class TextBuffer { public String toString() { String original = myStringBuilder.toString(); if (myLineToOffsetMapping == null || myLineToOffsetMapping.isEmpty()) { + if (myLineMapping != null) { + return addOriginalLineNumbers(); + } return original; } else { @@ -140,6 +143,26 @@ public class TextBuffer { } } + private String addOriginalLineNumbers() { + StringBuilder sb = new StringBuilder(); + int lineStart = 0, lineEnd; + int count = 0, length = myLineSeparator.length(); + while ((lineEnd = myStringBuilder.indexOf(myLineSeparator, lineStart)) > 0) { + ++count; + sb.append(myStringBuilder.substring(lineStart, lineEnd)); + Integer integer = myLineMapping.get(count); + if (integer != null) { + sb.append("// ").append(integer); + } + sb.append(myLineSeparator); + lineStart = lineEnd + length; + } + if (lineStart < myStringBuilder.length()) { + sb.append(myStringBuilder.substring(lineStart)); + } + return sb.toString(); + } + private void appendLines(StringBuilder res, String[] srcLines, int from, int to, int requiredLineNumber) { if (to - from > requiredLineNumber) { List strings = compactLines(Arrays.asList(srcLines).subList(from, to) ,requiredLineNumber); @@ -278,4 +301,14 @@ public class TextBuffer { public StringBuilder getOriginalText() { return myStringBuilder; } + + private Map myLineMapping = null; // new to original + public void dumpOriginalLineNumbers(int[] lineMapping) { + if (lineMapping.length > 0) { + myLineMapping = new HashMap(); + for (int i = 0; i < lineMapping.length; i+=2) { + myLineMapping.put(lineMapping[i+1], lineMapping[i]); + } + } + } } diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerPreferences.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerPreferences.java index 9e8dc72e0c08..31871c5d9450 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerPreferences.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/extern/IFernflowerPreferences.java @@ -54,6 +54,7 @@ public interface IFernflowerPreferences { String INDENT_STRING = "ind"; String BANNER = "ban"; + String DUMP_ORIGINAL_LINES = "__dump_original_lines__"; String UNIT_TEST_MODE = "__unit_test_mode__"; String LINE_SEPARATOR_WIN = "\r\n"; @@ -91,5 +92,6 @@ public interface IFernflowerPreferences { put(INDENT_STRING, " "); put(BANNER, ""); put(UNIT_TEST_MODE, "0"); + put(DUMP_ORIGINAL_LINES, "0"); }}); } diff --git a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.java b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.java index 58bdcb832fe2..24f3f292bb2c 100644 --- a/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.java +++ b/plugins/java-decompiler/plugin/src/org/jetbrains/java/decompiler/IdeaDecompiler.java @@ -160,6 +160,10 @@ public class IdeaDecompiler extends ClassFileDecompilers.Light { myOptions.put(IFernflowerPreferences.USE_DEBUG_LINE_NUMBERS, "0"); } + if (Registry.is("decompiler.dump.original.lines")) { + myOptions.put(IFernflowerPreferences.DUMP_ORIGINAL_LINES, "1"); + } + BaseDecompiler decompiler = new BaseDecompiler(provider, saver, myOptions, myLogger); for (String path : files.keySet()) { decompiler.addSpace(new File(path), true); From 885a5eaec97657f6d941e382c320ffeade5bf80e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 22 Oct 2014 12:53:24 +0200 Subject: [PATCH 026/217] CR-IC-6582 --- .../intellij/openapi/updateSettings/impl/UpdateSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java index 5e03b3e2c7cf..839e5aa42a97 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettings.java @@ -39,7 +39,7 @@ import java.util.List; @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), @Storage(file = StoragePathMacros.APP_CONFIG + "/updates.xml", roamingType = RoamingType.DISABLED) }, - storageChooser = LastStorageChooserForWrite.class + storageChooser = LastStorageChooserForWrite.ElementStateLastStorageChooserForWrite.class ) public class UpdateSettings implements PersistentStateComponent, UserUpdateSettings { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.updateSettings.impl.UpdateSettings"); From a2594ae465ecd037ba03128005a0db3dd4e378c2 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 13:01:27 +0200 Subject: [PATCH 027/217] relayout new welcome screen --- .../impl/welcomeScreen/FlatWelcomeFrame.java | 48 +++++++++---------- .../WelcomeScreenActionsPanel.form | 40 ++++++++++++++++ 2 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomeScreenActionsPanel.form diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index b578ba2232b6..2d77629feeb5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -51,7 +51,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; @@ -228,9 +227,10 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { NonOpaquePanel toolbar = new NonOpaquePanel(); toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS)); toolbar.add(createActionLink("Configure", IdeActions.GROUP_WELCOME_SCREEN_CONFIGURE, AllIcons.General.Settings)); - toolbar.add(createActionLink("Get Help", IdeActions.GROUP_WELCOME_SCREEN_DOC, AllIcons.General.Help_small)); + toolbar.add(createActionLink("Get Help", IdeActions.GROUP_WELCOME_SCREEN_DOC, null)); JPanel panel = new NonOpaquePanel(new BorderLayout()); - panel.add(toolbar, BorderLayout.WEST); + panel.add(toolbar, BorderLayout.EAST); + panel.setBorder(new EmptyBorder(0,0,8,21)); return panel; } @@ -248,10 +248,11 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { }; settings.set(new ActionLink(text, icon, action)); settings.get().setPaintUnderline(false); - installFocusable(settings.get(), action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, !Arrays.asList("Get Help", "Register").contains(text)); - NonOpaquePanel panel = new NonOpaquePanel(); - panel.setBorder(new EmptyBorder(0, 20, 2, 0)); + NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); + panel.setBorder(new EmptyBorder(4, 16, 4, 4)); panel.add(settings.get()); + panel.add(new JLabel(AllIcons.General.Combo2), BorderLayout.EAST); + installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, !Arrays.asList("Get Help", "Register").contains(text)); return panel; } @@ -270,14 +271,9 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } for (AnAction action : group.getChildren(null)) { - JPanel button = new JPanel(new BorderLayout()) { - @Override - public Dimension getPreferredSize() { - return new Dimension(250, super.getPreferredSize().height); - } - }; + JPanel button = new JPanel(new BorderLayout()); button.setOpaque(false); - button.setBorder(new EmptyBorder(0, 50, 0, 30)); + button.setBorder(new EmptyBorder(8, 20, 8, 20)); Presentation presentation = action.getTemplatePresentation(); action.update(new AnActionEvent(null, DataManager.getInstance().getDataContext(this), ActionPlaces.WELCOME_SCREEN, presentation, ActionManager.getInstance(), 0)); @@ -285,18 +281,16 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { ActionLink link = new ActionLink(presentation.getText(), presentation.getIcon(), action); link.setPaintUnderline(false); link.setNormalColor(new JBColor(Gray._0, Gray.xBB)); - link.setBorder(new EmptyBorder(2, 5, 2, 5)); - installFocusable(link, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); + installFocusable(button, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); button.add(link); actions.add(button); } - } actions.setBorder(new EmptyBorder(0, 0, 0, 0)); - JPanel panel = new NonOpaquePanel(new BorderLayout()); - panel.add(actions, BorderLayout.NORTH); - return panel; + WelcomeScreenActionsPanel panel = new WelcomeScreenActionsPanel(); + panel.actions.add(actions); + return panel.root; } private void collectAllActions(DefaultActionGroup group, ActionGroup actionGroup) { @@ -361,8 +355,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { return panel; } - private void installFocusable(final ActionLink comp, final AnAction action, final int prevKeyCode, final int nextKeyCode, final boolean focusListOnLeft) { - comp.setBorder(new EmptyBorder(6, 2, 6, 2)); + private void installFocusable(final JComponent comp, final AnAction action, final int prevKeyCode, final int nextKeyCode, final boolean focusListOnLeft) { comp.setFocusable(true); comp.setFocusTraversalKeysEnabled(true); comp.addKeyListener(new KeyAdapter() { @@ -388,7 +381,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } else { focusPrev(comp); } - } else if (e.getKeyCode() == KeyEvent.VK_RIGHT && Arrays.asList("Configure", "Get Help").contains(comp.getText())) { + } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) { focusNext(comp); } } @@ -396,12 +389,14 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { comp.addFocusListener(new FocusListener() { @Override public void focusGained(FocusEvent e) { - comp.setBorder(new CompoundBorder(new DottedBorder(new Insets(1, 1, 1, 1), Gray._128), new EmptyBorder(5,1,5,1))); + comp.setOpaque(true); + comp.setBackground(new JBColor(new Color(0xd2e1f0), new Color(0x455565))); } @Override public void focusLost(FocusEvent e) { - comp.setBorder(new EmptyBorder(6, 2, 6, 2)); + comp.setOpaque(false); + comp.setBackground(getMainBackground()); } }); @@ -523,4 +518,9 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { public static void notifyFrameClosed(JFrame frame) { saveLocation(frame.getBounds()); } + + public static class WelcomeScreenActionsPanel { + private JPanel root; + private JPanel actions; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomeScreenActionsPanel.form b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomeScreenActionsPanel.form new file mode 100644 index 000000000000..918fb471d807 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomeScreenActionsPanel.form @@ -0,0 +1,40 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
From 6cc5a8eee1517f379faac2c71712ae04fe3384d7 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 13:02:24 +0200 Subject: [PATCH 028/217] new icons for welcome screen --- .../icons/src/welcome/createNewProject.png | Bin 529 -> 1343 bytes .../icons/src/welcome/createNewProject@2x.png | Bin 1012 -> 1757 bytes platform/icons/src/welcome/fromVCS.png | Bin 648 -> 1138 bytes platform/icons/src/welcome/fromVCS@2x.png | Bin 1314 -> 1356 bytes platform/icons/src/welcome/importProject.png | Bin 410 -> 1216 bytes .../icons/src/welcome/importProject@2x.png | Bin 683 -> 1347 bytes platform/icons/src/welcome/openProject.png | Bin 282 -> 1059 bytes platform/icons/src/welcome/openProject@2x.png | Bin 388 -> 1190 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/welcome/createNewProject.png b/platform/icons/src/welcome/createNewProject.png index c071151ba7dc077474b63159f93620d92c42a923..5d3d84c4f795040ae82f36bd478123ede07cbadf 100644 GIT binary patch literal 1343 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m=!ZaB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?TIxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf<|~|UP^v> zu_jo#udkJ7UU5lcUUI6Zi>(sS0KLr26f0L}Ckqo7XG2p$o&6x?nxz^PXs=oo!ayduRjObD2GKumb51#;l&J~a=R*o%Ov+N48#F9QSP7Ec$) zkcwM9mn}V*9Yxq4m|NO3x$Ie_A*Z0UByhvVzzbfwK@lBuyLwwIwl+2GZBlS?5xjWJ z@6DsYim7r6PFx?w7D=ccb8+hXT7R-zXA+Bi&F+)u_RO4XzFE!pvPSHl9bwUX)uVSt zYQ5^3pqM)UNAUM8hs8eKxwVLKzVCgBeO3|MRuq(XrMwG2Xz%lB!Gm*_n-Z2q^mZnd z9^dG7DtzG_wy#Nlmc7w)oh4dpxAeV2$sv{hhTpQ%YrYF?(sApECHkt}H@KKDFm0V;`D5+3hf;kBzW>>} z{>e{!!uRQEfQYm5niI2vkFxiiT37M!TEq2u%&C%T+fKci7vlOP(p-Ui-UGkuW&G!B z@)E>e{o@PJI%zkf+3dw--V6M14fLa5PRZ@P?r>7`c4O(x-p8VHOaI2O$v3;cn7DM` zXNEtPabD`RA8y{C%viJQdEShLM^66zJ3}e6YulWK3u=m9x;HQ~EMU)>b4z-EHmFGR MboFyt=akR{0M|w6l>h($ literal 529 zcmV+s0`C2ZP)F z1j<61T+iK}ciaLmirfPh&lkR1r4vp*3tj>yb%UBVrYj(Lld<@Uie)6esQVF99 TWUGGq00000NkvXXu0mjf%$eEC diff --git a/platform/icons/src/welcome/createNewProject@2x.png b/platform/icons/src/welcome/createNewProject@2x.png index e1cf5ac0a4556f8c438c0d904d02256900a4d97d..b8bd755af7aaa2db9771809db7dab5cf96bb8d67 100644 GIT binary patch literal 1757 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 bvs7Wv>u-JFKL2&H^nVKly7?L3i=%%7)KJVT literal 1314 zcmV+-1>O3IP)TZ z49zWKYmMQ|4BPR0>-p;G^pdIjw1>CPFz%}Oc*~Yd& zO8N`12FNzC?*J52Zv1&V@PWnIOV4EgnLwec02<9jr*rum^Eqx|H<0G2ZY%oAak$oS zVtSlADn6CwT902&n%de93d34CNW8!QrCr6`nJ5vmNTKe08h z2Hlv#Rq2>#olN=p%L&1^8?+)4|R>*8?Vkm$PG3>VkEv(;SHv;Tq0V<>p zc=q*bV@!Sw>#x$S0ND~@zM|iDn2;!`zcPQZ%^pxVa%UM_&rP=xFo$lG^uE@*6+okX zlwV!x|6cC$Q<1O3MA>~ASV=cVlYn`^M&K%4qR5AxW9+cD2bcp)Bw@#s!d8Mvt`pko7?Pix@TD-4 z%t8CsXY$R6J3DF40!X$S+7CXF|Alz7lI}2sq`Ra26;5ZZc0^50-Ty3Kt#3R1(+HrSAFfZgym`|U8ujYRw1 zgnT`T)V9AKr{Nuu$k*Zdz?AuY0LV@dt2~jf#ozr>?gtVeorm@n+Fl9&1BsOS-{Yx< Ye-!hUOkR*AUjP6A07*qoM6N<$g3mQ_M*si- diff --git a/platform/icons/src/welcome/importProject.png b/platform/icons/src/welcome/importProject.png index 354cdfcb55d1e6c935ad88328006d25af37549be..0c996ba1f235f568e786648173ef41641274ceae 100644 GIT binary patch literal 1216 zcmbVMO>Em#9Cw;28y$sA9QfFPhpS3Ms_od0BKiv&XWam*mP><6DR8tO2LxM^i&=9B_5|<4@#-Te*E6;6GI1~<8vfq3E z_y7HW|4*MU&zu?>d~A>)h@s-NQo(CHe2>KN_sKtZRJ=UuPu2X>sO~pa7ZQ^O(jX{W z>MX24)o8tP1&$F!)HJI#zgBuy){#Z4p$;8b4n`Bi*hJu{`W*Cu24_t>L;im0D-xJS zhCC~j5+x@O8|L()3r{c3RQ1I?q(8EYBo(hUF=ilM|B63ZVCpn9Vinaz!ch zxbP`MHhkZa8K&86(oLR5?kvMflEfr9hT|x#L3u6PR|CrShWi#2=;^NM_$IPJXi?SB zf}bI=r+Xn-PN}qS*!Fsf!YN|{)nQmV!B|!p*RHnbSK!}n9H{M8TMlF@&_fHZj_Xk$ z?t^je{+lRN#NNoyxh5`(IjQ!?Kw7-?4Ju zg{qI-Dnj%94k$N}kGuwQKt2yno;7U)HNB_9>g)xpK-YW~8U+_wU^l(8c>q1+#FQrR zB4uctPKn86ic)ngL19svW$S4%#iz+0-uORhW3WR^*dPDsm%a!$VYuDzetg)UA86yD zaq)D#{@qQ8C+oMOGFc6-X?J&aCZZ$l^UJyHdSsM+hC>nar4zTm$=-c%<;UfKJQHo# z-fxd=x9)99Tc{;oSV@oljR!##+}S@l$!>+y=Y0LtpP+lh-0! zZytK*!f<17CbE9~`{%#ReiH3`RKEHv(H#T#9;kes-nw`UY!E-cz>J;|pZFmBrxd4V Kl+SW6zws9y&yq?2 literal 410 zcmV;L0cHM)P)8{MRY11{175&Ek)N_>7+;p5ur=nic3*(xk<#y$=wcx_6t;}4t3E*a1_@% zxv1z?93(!0Q%<-`-b>$*4!`AkT>d2QU4@iV1VQlYftgUx*Ads{wTxpj<#E zX7L<6!ZBCCE4(E{sD+wPf;BjT=kT|Aj(~T_Lm9qOd>;lJZ@~u?B3ruwBf{b;bZOjx zPbkKmuevtWEUp4~IKBg`nhBqU2K2-E_=Xqg!b0@kA7`(y>GQ0xW&i*H07*qoM6N<$ Ef&>t(cK`qY diff --git a/platform/icons/src/welcome/importProject@2x.png b/platform/icons/src/welcome/importProject@2x.png index 70e815e806ad44e172f606f776daeff337d46684..3961d1370de3030e198842259d8204e0d716b489 100644 GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%!-*I5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT-VtFWlg~VrW1CgG|37u|VHY&pf(~1RD?6IsxA(xEJ)Q4 zN-fSWElLK)N18HBGcfG%TLe-Fbd8luesXDUYF>$_i>(q+L@y;X#md0U*}~1l$;i~w z$i&dl)x^@x#l*tV&A`>%(b&Y$!VRX^Gq1QLF)uk4rZ*Fz*ATB>E9aur#FG4?ko^1{ zSnLI4U zv??un5;)~~myV8xv{{f6H#fIxqT|UaQ=AkPrMbQ2G`ZjJnVj+`zjk}xEJNex_jYlA zzPf(pZ;R*F-)o-Fvp%RdUHim24$e)MOq?u29INMMSwAyBmSg?H$z1KvUc;M*827I5 zIk=fs)?SIbxa>-US%Xy0?ZB4z8Am6{u6`gbJ7Z(AWR~*#BRfv2zX_9mRT3`jT-f8W@#Rh3t4^6_EkYznPlI>fQ2901v^bQa~?^O(yhB=++uU* z@r5q)L>ae@4L&Z4R|@Px+-5VX-+KCkOYYFWj0!=2qwsr5GD|fMaGDh;&yKaZG*PSb zg<(IxKj)f7fpWoXOx}6Bcr{w?i79XK_0M;D>mr)>wDk6pT^B1>Hf!55J}&>scWOzo zZQj!x^IYeyPrkN8z3yA mx*gdX79Z|^xUc>}`2fSB3DMsK+B#T3#hRz9pUXO@geCy9?c8tx literal 683 zcmV;c0#yBpP);BNQ!eLL^ZOb~`)5T{TmMEqn1igf9 zuv3zNEAX0l4)`ERz+Z}@7o#5RN=pIN^J|F&yaPpvMQ|59BzXIOz=YH`IG0htg1%3m z+e`n4Vt=t5x=;~gj_xGViHn@$#Yes8p0*4j_Jm(}}9hBdax9#BA zLhwaSn<2FnEAA*>ZD60cVAgOE@bw?TM>K#Rw$2brC15*Y@DUHdj6MrU6TC{LE-vQ* z-@&7lBWw%!6dPueoF9A!b({`FDhYOSYUt_HdxCBKhR^j1QF*=z#*-YFUIPlW^o~hX R<&^*c002ovPDHLkV1l3j79#)v diff --git a/platform/icons/src/welcome/openProject.png b/platform/icons/src/welcome/openProject.png index f68c5ecca6c9af2a4ba7185d902564b9ce459f22..aee05b1b2a1fd931e84ed8d48dc243bff4e67043 100644 GIT binary patch literal 1059 zcmaJ=Pe>F|7@u`T!jwcoQX-!tNLf3xZ+2F9hTU?V)pem&TQ~F&;q1(F9dzbRGtYLl zjEW+Q2!#%ws)JC62%=+<1_gGCJVmGI(6vJyf}-t>?rH~d;LUsQxXRE?a# z+N_Bzl1ju_YTX{*VyI4 zeYvvYAeCSzi}6gQdm~erV0Q}JKvBT4F~ibv!9DI(wk#Am#wDZ=IM@VRrIC$2!bgO7 ze_uG{g%>>O5>(>xkP;D;fdK`IJ#3k)?~!(y>!rOnm#1QQudo00xniQj;~jUVmR@$| z9$9qQ9Xi#~^Y;(Y7qOB`#IwcExoGs`muA1;&-*)nF>j6DD=WT36TaNJBTi%Qv*ZTT z3I5(pUaf7&H#xp`Mo6?RuH}}0$M5;T(%laSA6y&W;6BAS)&?iK8ZJM+{U!-sCs%!K zFXpb_s($ivGiS3p9}B4;XJsYtooWaYS!zPYral2F05B={yDl>T573&)KV&y ehR=ek>ch-tSF68i=3$%nY*YP1iRXP2H~s;rVN9w3 literal 282 zcmV+#0p zHFehlbj1O#)J+560&(}9sY_14fjUY7zLkdpHqU zsRAz120{jhCfY#zFnW4YgVY;94Ma*n5F+$%_)!Fatrvi(to7*txP#(52O#$ID}Vwh g0Chn2bKrjgFMqtOYTR=&bpQYW07*qoM6N<$f)VLyd;kCd diff --git a/platform/icons/src/welcome/openProject@2x.png b/platform/icons/src/welcome/openProject@2x.png index ccc1c20c97d77d6f9fe699b92243d1123a7afae3..e74a394cc2a6663af7cc631daab4387481b0a540 100644 GIT binary patch literal 1190 zcmaJ>U1%It6u#TFsRSc2;6v2nWeOpc&dz@}GtD-;JG0wvabvn&?7pOQcIIw&OlIz6 z=B7JYR2K24f(rgV3Z+6{ifEsd7DSB?(uY1YG*DDRUo0Y&V*4P5#yiPw^kM11%>Dbm z^PO|q%6ANO>^g=DlFxz%DI*+$G25v*hLWbFK zs#czbIt~z2QVMJFf(+AYN>BuOQaA)fUXVCm;sl8mM2%N9L4n>`hpj0{6hQnq7jVna+@vZAu8DA=qi%OY#0ClRaIf;gep zrFvSGdUpEp1;a3OxhN{CC<{VC&P%zRF6pAg=k$V}Q+wQ!7ZTI6P*2;T+Fh>jNUo*_ z$Rs$ZV!YU^g4re}IBa4c>N*@h<#;x3g$Lss+6mY|fpZqw#Q?i-JH?vQM?Np6l?ka3 z%Zst=lX*ie&=Qi1hAyS^MW)NO`=qVQjl=HG<)|}UTp$0dm);gF!g#t{{dBS0Kggp^ z6VUGXY5MOAw6kuMj9fLkRo~p&n*K4n=d)iwp2G>}^vHw#1Gf*s*Y&THo!X~Qyq3sb z9Xz)_`v(|<4~@5vybMo+)$?mU__p)xx!)5@t63F17ImV5;iD%$8W`WZnVow2m77nE zJa{;NzT%C5+i%%-{`r2D|7v4Bd$?n+CB7LkmEpS=FVB6D{pI+j?|d@8 zaUs|I>;17GPV9S6JF}MfVsc|>=+Cx(d~PGT%2dyG_8xq4e6;-LeFCn5Ti5qo-pmYd ojlzAeHlDll+r7@kL&Ty0^aC^0RR91 literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVD$EMaSW-r_4bw`-ysKq)`zyN zZ3+f=8ki?sNfNBEVA!2JTDunSLAyTgiNPj)uP6H&(<(l>wv NJYD@<);T3K0RVNfhz0-v From f7604c20b57617e3869fc2e093e03c3d09e73e81 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 13:07:52 +0200 Subject: [PATCH 029/217] new icons for welcome screen --- .../icons/src/welcome/createNewProject.png | Bin 1343 -> 410 bytes .../icons/src/welcome/createNewProject@2x.png | Bin 1757 -> 741 bytes platform/icons/src/welcome/fromVCS.png | Bin 1138 -> 247 bytes platform/icons/src/welcome/fromVCS@2x.png | Bin 1356 -> 374 bytes platform/icons/src/welcome/importProject.png | Bin 1216 -> 250 bytes .../icons/src/welcome/importProject@2x.png | Bin 1347 -> 438 bytes platform/icons/src/welcome/openProject.png | Bin 1059 -> 174 bytes platform/icons/src/welcome/openProject@2x.png | Bin 1190 -> 226 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/welcome/createNewProject.png b/platform/icons/src/welcome/createNewProject.png index 5d3d84c4f795040ae82f36bd478123ede07cbadf..3bf27883974ba38d7fb7d6afcd8482799f36dde6 100644 GIT binary patch delta 384 zcmV-`0e}9#3Yr6uBYy#5NkliYS!X zU_wd^aQ+d{fO%6tz&8l1)G$@y2W-QLs)3^14#PY_f5Z6>{;u(fzt e6J-ga-17rmCLmU2C#c&10000c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxR5#hc&_u!9QqR!T z(8R(}N5ROz&{*HVSl`fC*U-qyz|zXlQ~?TIxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr7KMf<|~|UP^v> zu_jo#udkJ7UU5lcUUI6Zi>(sS0KLr26f0L}Ckqo7XG2p$o&6x?nxz^PXs=oo!ayduRjObD2GKumb51#;l&J~a=R*o%Ov+N48#F9QSP7Ec$) zkcwM9mn}V*9Yxq4m|NO3x$Ie_A*Z0UByhvVzzbfwK@lBuyLwwIwl+2GZBlS?5xjWJ z@6DsYim7r6PFx?w7D=ccb8+hXT7R-zXA+Bi&F+)u_RO4XzFE!pvPSHl9bwUX)uVSt zYQ5^3pqM)UNAUM8hs8eKxwVLKzVCgBeO3|MRuq(XrMwG2Xz%lB!Gm*_n-Z2q^mZnd z9^dG7DtzG_wy#Nlmc7w)oh4dpxAeV2$sv{hhTpQ%YrYF?(sApECHkt}H@KKDFm0V;`D5+3hf;kBzW>>} z{>e{!!uRQEfQYm5niI2vkFxiiT37M!TEq2u%&C%T+fKci7vlOP(p-Ui-UGkuW&G!B z@)E>e{o@PJI%zkf+3dw--V6M14fLa5PRZ@P?r>7`c4O(x-p8VHOaI2O$v3;cn7DM` zXNEtPabD`RA8y{C%viJQdEShLM^66zJ3}e6YulWK3u=m9x;HQ~EMU)>b4z-EHmFGR MboFyt=akR{0M|w6l>h($ diff --git a/platform/icons/src/welcome/createNewProject@2x.png b/platform/icons/src/welcome/createNewProject@2x.png index b8bd755af7aaa2db9771809db7dab5cf96bb8d67..4486b9a4a32654c9269af684c0a7164b467c18b3 100644 GIT binary patch delta 718 zcmV;<0x|vF4dn%pBYy&{NklFrKotR@uG+)g*J^^ zgEoo{epV`a@tDmXJ$Xg#niNE1;3)GAb#Bh=sy4zfq_&FoG*0$Pa(dl27}8jiQ5$6?P&Wc?H{iUl)vh^4Gu?25Jf zH~6Y2LBLVKVpXpV|K6rd(bfPJj$UI zPz{cNCm<|3O@CHlaz6+p@Qf$tbeBjx4IBg`AnNoA<^W#OpI`v2rC`~QS1XtOE8scB z%6`>UogwnOFIQNlHY_a6=>q}Dr&aRdY?FLeft!N;2Uuac39l&fEja zUp*xMLMO>nC+znipx5sb=u+YbovBr&nULQB$JSMdsXv{Ws^aA-je5mW>@Dk_#%%ZD}Q6(KVV(40>nqZSioFJ_lmL?-Okbop9RDsmtYgJT0Aq%9g@f9+K z>JUV(2-9ImlrB;t)g?>WGHTFrfTM*70VRUNfL58J(m>ik>Xa@-%#GU&Dli4XlLM(A zOvMOAKnRKs0hCp9n`k@lhFj*ob z=JBUv5vxF|9LLoVgOQ$|PEYryqgWCHWV6`}CX2yh(Fg=hlcB<4Els6aI-|ftG*V2V z#ucavFe<_cXeu5^C7gapL8<;ItI|xDi6|ID3#%C*ooP&I1}GH%KUAswh}Pg@fqc-H4e~%R)Q1}YvV*|@7LUo~hJyTn87>c% zrYaE?KEsuL;<9Gt8aqL$CL;3?Op%7j_!z1LrZR>Uvw8{T&#E`gmCf#jIV+bzm|+;t z^avqdzIar&`qiN(jhM^r?!V?Jz~ zxID?cAkf^+Ub!lN?ppEceDhE)FVx9B(~x=d^qDgU=;m?2wjW)}bK8Vlh8Vr>o}SN^ z^xnxYxz+pU`v!lEbNGRCdj8)d(!|?E-UC4cV~5eFO@re+PVx3a?c62@>$Fp0c7ws5 zse`qid++Q&OP#Ft&_B+zx@RA=v(_=MVDBHBf@m3y_vbI;fKfa#bDqL|l2#E8#V2@d=+H}XUzTUq*6daI8?nI zeu(0iz35mKYj>Pg*`~@3qyX#ln-o1)Pgs=BakC6=tjK-+YdNcWoyhj(mf^mW-IjY6 zcAo8rD?f|OrVg^tEh>K7;vaEcCbFih-=tkEx^SLs?hhH>uBXTkI-6`==hxe+BFCTo z>B+IkgTq;UZ9#@MSDPK?w%nl7LpdX?LQ0N2^=OUrkWZ}P4aqH=U%9jiX{)e^&cRq^ z&8=+3=kES^WEcF5bHwBh{H3m{+&c1?=sNFK)61j2Yu}LyMmOgd^jUOdeC1+@jkprB z(Z=0mU$u5I`OF|!ZM)9&5sxen&mZ0H++j8zWM2Xw8TaGVU#dy7+F_AgW4gYfve-1y z;8vL+^WRvIoD$)cgeLu!K##u+W7Uo8_VR$*}wO5>?DqG zUU=W=4~c4r9t$TnRo7(!FaLhqvgKB-6RWd#H`JL>N~1EZzIE)}d-M1~es&yicc2ID zzi#LzpVO&hhwyoeE|B++k382|?;2|}=wH4BN9sf??q2OOm^7-=l95+6ZcMw9$6FPU z|7t9;%z@MXY?)C1K$e}5PJh@j;^+0~(2(7Mj)h(Ao(*%ds#7kC*v;-qJ$ARhrVMN; zdu2PCA!=D5>TE57?hR|rC0S3e#y5I=k=5+Qd`PpIcv{V6_ZrOgp3Ur|`wH)Cf|JDt z%qw?7A+pYVQvD>loior<>D2D}qN6$V=ZZ1c-0qVri)9WbNv~aYzO^-L*){rNSCy$1 ZiTm)zcr;?ei-4FNW>f$OM-Z?b8P7urL?oOH z6#PX%^Gu9bK*qrE$i}02I@V}JGXR83v1p!!CE4RN0EFAH`I!_0Kp3QP0WQrT3;<9R VEccCwO*jAm002ovPDHLkV1nZ{TyFpX literal 1138 zcmaJ>U2M}<7AA-ZW@H6B|8NFX7~b!iF@%PiUVN9UaH zeBb@9PxtnG)zZANnWCtc^d2=!Mml&uXdvIupDt=-*nm_0ct0xOlIB9H%RqU^q%Ca_ zW}#+`9J&iTC@R!y=K67eX0NOxi_-!O=UWb8Q&dO7cQkznVkQp_JGL%L+JiQPmwLBWe zah5oJn}X%6$lBg=nMlESUvqfC2|-F#U?%hbP|I3DdpHZ<`Tb8}FE`>qJ_|iG?CRv; z3Y&vaj;y#)!^q7cbg){*-Xg-tD74a+r9+PWaPB%Va?WIT8*w8+3x@kjN@@&BM^> zc9F#_Wh|RDy(GJ9>Me7P+Fpd3T%MTWgL8fFoU2=;d4lOm*OJ9b-$R=;yGy!yZsAdp z+=$0%wJYa8%)eS(OoX-^J6%cMoQ)4BuASj%Glfz#N;GWUx^`@#?#il< zLN6|t>%yBxXAeF3`scB_U7^vx_x;d%d)4!G+vuZX-!;vGPI~*M&hj6f$0hncm6w>; z4b%7h4}Wi-K3X}m`qap=$xr7_%-rm}c)Z+b$Zem6CNCWDD}EFG+pVdAPXu|Q@~n^j z#okTduH@?_x{qqP+xY8^rsBE!>GWh?;~so@!jFABwc~7Wtfzis_GIeFE_!gyPd{F( zoV+^mQfe70O#Sm{$NAPZ+3#N$g1VRS800uG~z(A}6a)G!Ph}-bssbn}{DgiV5fjA4~ zfM_xdrxp%|1%(q3|DdDAPdq2@H2_BekO9U(jy({6ri10TfPeOBz|#QC0Z{A;6#Pyr z%Yo*f17caIhp{>Ugac^gfD1sg6_7$4rvpF|{y_Yjik5?XE{A3ZZU;bdC{V#aDg^s} zAQr;nNrDal;aCbCuoq|sKaNl)$^jrnab#M)2dG~dkGaG-0E*K{4EC)+%uT>!Bsl5H}i literal 1356 zcmbVMZA=?w9KTXVkqN)rKQ=$%wbd+n&B(3K|ZrXRfCJ*5}u-EnuU zrGBum4ACV@Hdu5fd+{xpCB(!SjTl|Fl5Fmi3m?=k+f1BckxY%j8L;yyQ1k;?jF;R! zZ@=H~|ML9*_iChjZ*9$^H5i7~hC2Bu8bRr;u0mfUm-`(JkC=hD*{deajG#lTLsAnE zgwjGEj6y*g9=rnEFw8nA$Kqx@+{KA%+AfqZ_H0^1Yz%8_&uW6$4^5DOeX`=g@63LM z16lIm2V7w)todO|?#$`1H`g5#bNwPK;qA|Ywk(GP($Ew@Ha(yiT-JlH>T+ma+9q+Z z3NiaV_?lDka0K{O9Rio#MTivb1g)%{cF|5Z{WNe;G(%DhNiziP;3$@(U10seku_aP za#23GZVRnEc*-<2jwCagj6K8HRlSd-S(YU!2kCGS2tgRbiYa6X#b_=o@X!!-SuVW7>A3c12i3QvH@2h*vjxhKTWl|8K%q)DTXO1 zA}rgMk?nOZeP1r;*P&pldQ4RZ%2g0asitbAR1Nt3VD|x8k<^UwROyD+0_LGEABIv; zSJPlM#hko}`TrLB8ejUqsUwk7WT{U6RX61=RE(wRMi-#PMjt^1HII(EmNd z1I&-dBMlX=jlS>wxeHWI*PgD}<{R_oh=%DvWnnqLJp+n9+f~)NXb6(@MgDm8$f#|^ zU440_W6#?ox6arSk<|4IQ(F&PALg%JE*|qf_}dN9_nl^~w@nXpt<`twbbH@=L{wp30nZmFElUkf`Yiu+F7Zc5$d!OX=S zpEe#ETX|>brL&Kv_7kVR9RRQInEPq6rSnk!GwaFTeBE=+v!buV!fcJ7+ih9+aI&!x bvs7Wv>u-JFKL2&H^nVKly7?L3i=%%7)KJVT diff --git a/platform/icons/src/welcome/importProject.png b/platform/icons/src/welcome/importProject.png index 0c996ba1f235f568e786648173ef41641274ceae..9be1003c14fb858a1e2a33ce94519799ad3bd410 100644 GIT binary patch delta 222 zcmV<403rXt3Hkw$B!9t4L_t(|+GF_t|33pIm|@@zh+dp=3y7cNz^{P#1rX;0F#|RX zBK{M=cY#0ax)FAl{24rUZ+|cR*|j zwZRIAUlS3%EwESsg|;V}|IC2+A|B0aftV9!fDMj75{IV1JEm#9Cw;28y$sA9QfFPhpS3Ms_od0BKiv&XWam*mP><6DR8tO2LxM^i&=9B_5|<4@#-Te*E6;6GI1~<8vfq3E z_y7HW|4*MU&zu?>d~A>)h@s-NQo(CHe2>KN_sKtZRJ=UuPu2X>sO~pa7ZQ^O(jX{W z>MX24)o8tP1&$F!)HJI#zgBuy){#Z4p$;8b4n`Bi*hJu{`W*Cu24_t>L;im0D-xJS zhCC~j5+x@O8|L()3r{c3RQ1I?q(8EYBo(hUF=ilM|B63ZVCpn9Vinaz!ch zxbP`MHhkZa8K&86(oLR5?kvMflEfr9hT|x#L3u6PR|CrShWi#2=;^NM_$IPJXi?SB zf}bI=r+Xn-PN}qS*!Fsf!YN|{)nQmV!B|!p*RHnbSK!}n9H{M8TMlF@&_fHZj_Xk$ z?t^je{+lRN#NNoyxh5`(IjQ!?Kw7-?4Ju zg{qI-Dnj%94k$N}kGuwQKt2yno;7U)HNB_9>g)xpK-YW~8U+_wU^l(8c>q1+#FQrR zB4uctPKn86ic)ngL19svW$S4%#iz+0-uORhW3WR^*dPDsm%a!$VYuDzetg)UA86yD zaq)D#{@qQ8C+oMOGFc6-X?J&aCZZ$l^UJyHdSsM+hC>nar4zTm$=-c%<;UfKJQHo# z-fxd=x9)99Tc{;oSV@oljR!##+}S@l$!>+y=Y0LtpP+lh-0! zZytK*!f<17CbE9~`{%#ReiH3`RKEHv(H#T#9;kes-nw`UY!E-cz>J;|pZFmBrxd4V Kl+SW6zws9y&yq?2 diff --git a/platform/icons/src/welcome/importProject@2x.png b/platform/icons/src/welcome/importProject@2x.png index 3961d1370de3030e198842259d8204e0d716b489..687dcf809a990a186495d16a376ba47a39fb2917 100644 GIT binary patch delta 413 zcmV;O0b>5c3bq4~BYy#XNklhT5&x-(L&$N!M=DtS9*8YTwVYZG0O|K4$8u^o;42VEl507o4)_bisgzhwi331B z&!^OKAl4<<0S#2J9E9u1b-+w2Sgs7jYbi+sEfhKc z^ehKr4tx&S2*is>bOTzK@QtW zq2-T(SRPx8=oHkKgt8DQg*TCD`5hqE!&Vz^2VyxA3lnP~UI@g$iL@M~RuNZqEJ0>* z$^pb$K%4=@i=ml3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT-VtFWlg~VrW1CgG|37u|VHY&pf(~1RD?6IsxA(xEJ)Q4 zN-fSWElLK)N18HBGcfG%TLe-Fbd8luesXDUYF>$_i>(q+L@y;X#md0U*}~1l$;i~w z$i&dl)x^@x#l*tV&A`>%(b&Y$!VRX^Gq1QLF)uk4rZ*Fz*ATB>E9aur#FG4?ko^1{ zSnLI4U zv??un5;)~~myV8xv{{f6H#fIxqT|UaQ=AkPrMbQ2G`ZjJnVj+`zjk}xEJNex_jYlA zzPf(pZ;R*F-)o-Fvp%RdUHim24$e)MOq?u29INMMSwAyBmSg?H$z1KvUc;M*827I5 zIk=fs)?SIbxa>-US%Xy0?ZB4z8Am6{u6`gbJ7Z(AWR~*#BRfv2zX_9mRT3`jT-f8W@#Rh3t4^6_EkYznPlI>fQ2901v^bQa~?^O(yhB=++uU* z@r5q)L>ae@4L&Z4R|@Px+-5VX-+KCkOYYFWj0!=2qwsr5GD|fMaGDh;&yKaZG*PSb zg<(IxKj)f7fpWoXOx}6Bcr{w?i79XK_0M;D>mr)>wDk6pT^B1>Hf!55J}&>scWOzo zZQj!x^IYeyPrkN8z3yA mx*gdX79Z|^xUc>}`2fSB3DMsK+B#T3#hRz9pUXO@geCy9?c8tx diff --git a/platform/icons/src/welcome/openProject.png b/platform/icons/src/welcome/openProject.png index aee05b1b2a1fd931e84ed8d48dc243bff4e67043..600188c9be32ab430c3aa8d1a7b771391fdf4fa9 100644 GIT binary patch delta 146 zcmV;D0B!%H2(AH;B!6{DL_t(|+G998(cl&kKgWWv1FWn4l^$t?!8R01E&B07*qoM6N<$f=VAc Ac>n+a literal 1059 zcmaJ=Pe>F|7@u`T!jwcoQX-!tNLf3xZ+2F9hTU?V)pem&TQ~F&;q1(F9dzbRGtYLl zjEW+Q2!#%ws)JC62%=+<1_gGCJVmGI(6vJyf}-t>?rH~d;LUsQxXRE?a# z+N_Bzl1ju_YTX{*VyI4 zeYvvYAeCSzi}6gQdm~erV0Q}JKvBT4F~ibv!9DI(wk#Am#wDZ=IM@VRrIC$2!bgO7 ze_uG{g%>>O5>(>xkP;D;fdK`IJ#3k)?~!(y>!rOnm#1QQudo00xniQj;~jUVmR@$| z9$9qQ9Xi#~^Y;(Y7qOB`#IwcExoGs`muA1;&-*)nF>j6DD=WT36TaNJBTi%Qv*ZTT z3I5(pUaf7&H#xp`Mo6?RuH}}0$M5;T(%laSA6y&W;6BAS)&?iK8ZJM+{U!-sCs%!K zFXpb_s($ivGiS3p9}B4;XJsYtooWaYS!zPYral2F05B={yDl>T573&)KV&y ehR=ek>ch-tSF68i=3$%nY*YP1iRXP2H~s;rVN9w3 diff --git a/platform/icons/src/welcome/openProject@2x.png b/platform/icons/src/welcome/openProject@2x.png index e74a394cc2a6663af7cc631daab4387481b0a540..35646a827e078efae33a6b021182dcecfbaa0d1f 100644 GIT binary patch delta 198 zcmV;%06G7r3E}~eB!8(%L_t(|+U?h|4Z=VSg<%iD0ZOR3WNaP(5R_+5W;;nPVs)OClpbexQa@<{R5Jjo00bZa0k8my z832U^(2Qcwns|;E3mAxiK>^*k1xB6Ff5&XV4`MO+R$0+s3IG5A07*qoM6N<$f+@>U A`~Uy| literal 1190 zcmaJ>U1%It6u#TFsRSc2;6v2nWeOpc&dz@}GtD-;JG0wvabvn&?7pOQcIIw&OlIz6 z=B7JYR2K24f(rgV3Z+6{ifEsd7DSB?(uY1YG*DDRUo0Y&V*4P5#yiPw^kM11%>Dbm z^PO|q%6ANO>^g=DlFxz%DI*+$G25v*hLWbFK zs#czbIt~z2QVMJFf(+AYN>BuOQaA)fUXVCm;sl8mM2%N9L4n>`hpj0{6hQnq7jVna+@vZAu8DA=qi%OY#0ClRaIf;gep zrFvSGdUpEp1;a3OxhN{CC<{VC&P%zRF6pAg=k$V}Q+wQ!7ZTI6P*2;T+Fh>jNUo*_ z$Rs$ZV!YU^g4re}IBa4c>N*@h<#;x3g$Lss+6mY|fpZqw#Q?i-JH?vQM?Np6l?ka3 z%Zst=lX*ie&=Qi1hAyS^MW)NO`=qVQjl=HG<)|}UTp$0dm);gF!g#t{{dBS0Kggp^ z6VUGXY5MOAw6kuMj9fLkRo~p&n*K4n=d)iwp2G>}^vHw#1Gf*s*Y&THo!X~Qyq3sb z9Xz)_`v(|<4~@5vybMo+)$?mU__p)xx!)5@t63F17ImV5;iD%$8W`WZnVow2m77nE zJa{;NzT%C5+i%%-{`r2D|7v4Bd$?n+CB7LkmEpS=FVB6D{pI+j?|d@8 zaUs|I>;17GPV9S6JF}MfVsc|>=+Cx(d~PGT%2dyG_8xq4e6;-LeFCn5Ti5qo-pmYd ojlzAeHlDll+r7@kL&Ty0^aC^0RR91 From 2ea15faef9507db2adda218d1f700770a87fc9c8 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 13:08:20 +0200 Subject: [PATCH 030/217] update sizes for icons --- platform/util/src/com/intellij/icons/AllIcons.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 9902e8ac7718..dcbb1c880493 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -1169,10 +1169,10 @@ public class AllIcons { public static class Welcome { public static final Icon CreateDesktopEntry = IconLoader.getIcon("/welcome/createDesktopEntry.png"); // 32x32 - public static final Icon CreateNewProject = IconLoader.getIcon("/welcome/createNewProject.png"); // 32x32 - public static final Icon FromVCS = IconLoader.getIcon("/welcome/fromVCS.png"); // 32x32 - public static final Icon ImportProject = IconLoader.getIcon("/welcome/importProject.png"); // 32x32 - public static final Icon OpenProject = IconLoader.getIcon("/welcome/openProject.png"); // 32x32 + public static final Icon CreateNewProject = IconLoader.getIcon("/welcome/createNewProject.png"); // 16x16 + public static final Icon FromVCS = IconLoader.getIcon("/welcome/fromVCS.png"); // 16x16 + public static final Icon ImportProject = IconLoader.getIcon("/welcome/importProject.png"); // 16x16 + public static final Icon OpenProject = IconLoader.getIcon("/welcome/openProject.png"); // 16x16 public static final Icon Register = IconLoader.getIcon("/welcome/register.png"); // 32x32 } From 630ac9aa7b17fcdbd05751d03e5e5d3abf41c344 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 13:09:22 +0200 Subject: [PATCH 031/217] ignore loading.gif for push dialog when generating icons classes --- platform/dvcs-impl/resources/icons/icon-robots.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 platform/dvcs-impl/resources/icons/icon-robots.txt diff --git a/platform/dvcs-impl/resources/icons/icon-robots.txt b/platform/dvcs-impl/resources/icons/icon-robots.txt new file mode 100644 index 000000000000..dc00bc7c3db4 --- /dev/null +++ b/platform/dvcs-impl/resources/icons/icon-robots.txt @@ -0,0 +1 @@ +skip: *.gif \ No newline at end of file From 22af9f28ca4d6fbe436b395640a56cc90ba97e78 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Wed, 22 Oct 2014 13:07:52 +0200 Subject: [PATCH 032/217] AppCode: responsiveness tests during inspections: race condition fixed, output improved, using more suitable 'performInspections' method --- .../intellij/codeInspection/ex/GlobalInspectionContextBase.java | 2 +- .../intellij/codeInspection/ex/GlobalInspectionContextImpl.java | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java b/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java index 7f4f3e079f7e..e332f9394632 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextBase.java @@ -273,7 +273,7 @@ public class GlobalInspectionContextBase extends UserDataHolderBase implements G protected void notifyInspectionsFinished() { } - protected void performInspectionsWithProgress(@NotNull final AnalysisScope scope, final boolean runGlobalToolsOnly) { + public void performInspectionsWithProgress(@NotNull final AnalysisScope scope, final boolean runGlobalToolsOnly) { final PsiManager psiManager = PsiManager.getInstance(myProject); myProgressIndicator = getProgressIndicator(); //init manager in read action diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java index f6a0982b98bf..b189b1dfa2d6 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java @@ -152,8 +152,6 @@ public class GlobalInspectionContextImpl extends GlobalInspectionContextBase imp @Override public void run() { performInspectionsWithProgress(scope, runGlobalToolsOnly); - if (outputPath == null) return; - @NonNls final String ext = ".xml"; final Map globalTools = new HashMap(); for (Map.Entry stringSetEntry : myTools.entrySet()) { From b9507243ef5500349be9e2116bbfbd250959fd33 Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Wed, 22 Oct 2014 15:15:14 +0400 Subject: [PATCH 033/217] EDU-83 Add shortcut text to the next/prev/check button tooltip --- python/edu/learn-python/resources/META-INF/plugin.xml | 2 ++ .../jetbrains/python/edu/StudyInstructionPainter.java | 5 ++++- .../com/jetbrains/python/edu/StudyTaskManager.java | 8 +++++--- .../python/edu/actions/StudyCheckAction.java | 2 ++ .../python/edu/actions/StudyNextStudyTaskAction.java | 3 +++ .../python/edu/actions/StudyNextWindowAction.java | 2 +- .../python/edu/actions/StudyPrevWindowAction.java | 2 +- .../edu/actions/StudyPreviousStudyTaskAction.java | 2 ++ .../edu/actions/StudyRefreshTaskFileAction.java | 2 ++ .../com/jetbrains/python/edu/editor/StudyEditor.java | 11 +++++------ 10 files changed, 27 insertions(+), 12 deletions(-) diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 59457f3a1a95..620796a8435c 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -54,6 +54,8 @@ description="Refresh current task"/> + diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java index 96a44b2ee66a..4fa323172bcc 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java @@ -28,7 +28,10 @@ public class StudyInstructionPainter extends EditorEmptyTextPainter { painter.appendLine("PyCharm Educational Edition").underlined(new JBColor(Gray._150, Gray._180)); painter.appendLine("Navigate to the next task window with Ctrl + Enter").smaller().withBullet(); - painter.appendLine("Navigate between task windows with Ctrl + < and Ctrl + >").smaller().withBullet(); + painter.appendLine("Navigate between task windows with Ctrl + Shift + < and Ctrl + Shift + >").smaller().withBullet(); + painter.appendLine("Navigate between tasks with Ctrl + < and Ctrl + >").smaller().withBullet(); + painter.appendLine("Reset current task file with Ctrl + Shift + X").smaller().withBullet(); + painter.appendLine("Check task with Alt + Ctrl + Enter").smaller().withBullet(); painter.appendLine("Get hint for the task window using Ctrl + 7").smaller().withBullet(); painter.appendLine("To see your progress open the 'Course Description' panel").smaller().withBullet(); painter.draw(g, new PairFunction>() { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java index 3013fbcb05d3..9b935504bd5c 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyTaskManager.java @@ -20,9 +20,7 @@ import com.intellij.openapi.vfs.VirtualFileEvent; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.wm.*; import com.intellij.util.xmlb.XmlSerializer; -import com.jetbrains.python.edu.actions.StudyNextWindowAction; -import com.jetbrains.python.edu.actions.StudyPrevWindowAction; -import com.jetbrains.python.edu.actions.StudyShowHintAction; +import com.jetbrains.python.edu.actions.*; import com.jetbrains.python.edu.course.Course; import com.jetbrains.python.edu.course.Lesson; import com.jetbrains.python.edu.course.Task; @@ -155,6 +153,10 @@ public class StudyTaskManager implements ProjectComponent, PersistentStateCompon addShortcut(StudyPrevWindowAction.SHORTCUT, StudyPrevWindowAction.ACTION_ID); addShortcut(StudyShowHintAction.SHORTCUT, StudyShowHintAction.ACTION_ID); addShortcut(StudyNextWindowAction.SHORTCUT2, StudyNextWindowAction.ACTION_ID); + addShortcut(StudyCheckAction.SHORTCUT, StudyCheckAction.ACTION_ID); + addShortcut(StudyNextStudyTaskAction.SHORTCUT, StudyNextStudyTaskAction.ACTION_ID); + addShortcut(StudyPreviousStudyTaskAction.SHORTCUT, StudyPreviousStudyTaskAction.ACTION_ID); + addShortcut(StudyRefreshTaskFileAction.SHORTCUT, StudyRefreshTaskFileAction.ACTION_ID); } } }); diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyCheckAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyCheckAction.java index 9741a240b0ec..b5f4c003ffe8 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyCheckAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyCheckAction.java @@ -41,6 +41,8 @@ public class StudyCheckAction extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(StudyCheckAction.class.getName()); private static final String ANSWERS_POSTFIX = "_answers.py"; + public static final String ACTION_ID = "CheckAction"; + public static final String SHORTCUT = "ctrl alt pressed ENTER"; private static void flushWindows(@NotNull final Task task, @NotNull final VirtualFile taskDir) { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextStudyTaskAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextStudyTaskAction.java index 3c971c3fe15e..27edf22529cd 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextStudyTaskAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextStudyTaskAction.java @@ -8,6 +8,9 @@ import javax.swing.*; public class StudyNextStudyTaskAction extends StudyTaskNavigationAction { + public static final String ACTION_ID = "NextTaskAction"; + public static final String SHORTCUT = "ctrl pressed PERIOD"; + @Override protected JButton getButton(@NotNull final StudyEditor selectedStudyEditor) { return selectedStudyEditor.getNextTaskButton(); diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextWindowAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextWindowAction.java index fcf9ef40c7d4..16036a7ba91b 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextWindowAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyNextWindowAction.java @@ -12,7 +12,7 @@ import java.util.List; */ public class StudyNextWindowAction extends StudyWindowNavigationAction { public static final String ACTION_ID = "NextWindow"; - public static final String SHORTCUT = "ctrl pressed PERIOD"; + public static final String SHORTCUT = "ctrl shift pressed PERIOD"; public static final String SHORTCUT2 = "ctrl pressed ENTER"; public StudyNextWindowAction() { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPrevWindowAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPrevWindowAction.java index 347456189a00..1e602bd059ff 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPrevWindowAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPrevWindowAction.java @@ -14,7 +14,7 @@ import java.util.List; */ public class StudyPrevWindowAction extends StudyWindowNavigationAction { public static final String ACTION_ID = "PrevWindowAction"; - public static final String SHORTCUT = "ctrl pressed COMMA"; + public static final String SHORTCUT = "ctrl shift pressed COMMA"; public StudyPrevWindowAction() { super("PrevWindowAction", "Select previous window", StudyIcons.Prev); diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPreviousStudyTaskAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPreviousStudyTaskAction.java index f6da6a067894..02cc36355834 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPreviousStudyTaskAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyPreviousStudyTaskAction.java @@ -9,6 +9,8 @@ import javax.swing.*; public class StudyPreviousStudyTaskAction extends StudyTaskNavigationAction { + public static final String ACTION_ID = "PreviousTaskAction"; + public static final String SHORTCUT = "ctrl pressed COMMA"; @Override protected JButton getButton(@NotNull final StudyEditor selectedStudyEditor) { return selectedStudyEditor.getPrevTaskButton(); diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyRefreshTaskFileAction.java b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyRefreshTaskFileAction.java index b1ff29b58270..1a15afdf7013 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyRefreshTaskFileAction.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/actions/StudyRefreshTaskFileAction.java @@ -28,6 +28,8 @@ import java.io.*; public class StudyRefreshTaskFileAction extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(StudyRefreshTaskFileAction.class.getName()); + public static final String ACTION_ID = "RefreshTaskAction"; + public static final String SHORTCUT = "ctrl shift pressed X"; public static void refresh(final Project project) { ApplicationManager.getApplication().invokeLater(new Runnable() { diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index a85df6c4cf14..ec661f8f0b88 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -66,7 +66,6 @@ public class StudyEditor implements TextEditor { private JButton myRefreshButton; private static final Map myDocumentListeners = new HashMap(); private final Project myProject; - private JButton myShowHintButton; public JButton getCheckButton() { return myCheckButton; @@ -193,11 +192,11 @@ public class StudyEditor implements TextEditor { } private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { - myCheckButton = addButton(taskActionsPanel, "Check task", StudyIcons.Resolve); - myPrevTaskButton = addButton(taskActionsPanel, "Prev Task", StudyIcons.Prev); - myNextTaskButton = addButton(taskActionsPanel, "Next Task", AllIcons.Actions.Forward); - myRefreshButton = addButton(taskActionsPanel, "Start task again", AllIcons.Actions.Refresh); - myShowHintButton = addButton(taskActionsPanel, "Show hint", StudyIcons.ShowHint); + myCheckButton = addButton(taskActionsPanel, "Check task (Ctrl + Alt + Enter)", StudyIcons.Resolve); + myPrevTaskButton = addButton(taskActionsPanel, "Previous task (Ctrl + <)", StudyIcons.Prev); + myNextTaskButton = addButton(taskActionsPanel, "Next task (Ctrl + >)", AllIcons.Actions.Forward); + myRefreshButton = addButton(taskActionsPanel, "Reset task file (Ctrl + Shift + X)", AllIcons.Actions.Refresh); + JButton myShowHintButton = addButton(taskActionsPanel, "Show hint for task window (Ctrl + 7)", StudyIcons.ShowHint); if (!taskFile.getTask().getUserTests().isEmpty()) { JButton runButton = addButton(taskActionsPanel, "Run", AllIcons.General.Run); runButton.addActionListener(new ActionListener() { From 3b281d3e7e5681bb3d1710df798ff37c33bcc0fe Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Wed, 22 Oct 2014 15:39:46 +0400 Subject: [PATCH 034/217] screen mode -> view mode --- .../src/messages/ActionsBundle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index f80f272c8933..81e770d767b3 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -1009,8 +1009,8 @@ action.ChangeKeymap.text=Keymap action.ChangeKeymap.description=Change current keymap action.ChangeLaf.text=Look and Feel action.ChangeLaf.description=Change current Look\\&Feel -action.ChangeView.text=Screen Mode -action.ChangeView.description=Change screen mode +action.ChangeView.text=View Mode +action.ChangeView.description=Change view mode action.ChangeInspectionProfile.text=Switch Error Highlighting action.ChangeInspectionProfile.description=Change current editor inspection profile action.ChangeCustomizationSchema.text=Switch Customization Scheme From 9821cbab0304ac6a0630f8248bab5dde54cfbab4 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 22 Oct 2014 13:41:06 +0200 Subject: [PATCH 035/217] dfa live var analysis should honor variables read in closures (IDEA-131719) --- .../dataFlow/DataFlowRunner.java | 23 +---- .../codeInspection/dataFlow/DfaUtil.java | 24 ++++- .../dataFlow/LiveVariablesAnalyzer.java | 95 +++++++++++++------ .../DontFlushVariablesUsedInClosures.java | 19 ++++ .../DataFlowInspectionTest.java | 1 + 5 files changed, 111 insertions(+), 51 deletions(-) create mode 100644 java/java-tests/testData/inspection/dataFlow/fixture/DontFlushVariablesUsedInClosures.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowRunner.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowRunner.java index 6db340c5ea10..6eeb6414ff22 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowRunner.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DataFlowRunner.java @@ -222,24 +222,11 @@ public class DataFlowRunner { protected DfaInstructionState[] acceptInstruction(InstructionVisitor visitor, DfaInstructionState instructionState) { Instruction instruction = instructionState.getInstruction(); - if (instruction instanceof MethodCallInstruction) { - PsiCallExpression anchor = ((MethodCallInstruction)instruction).getCallExpression(); - if (anchor instanceof PsiNewExpression) { - PsiAnonymousClass anonymousClass = ((PsiNewExpression)anchor).getAnonymousClass(); - if (anonymousClass != null) { - registerNestedClosures(instructionState, anonymousClass); - } - } - } - else if (instruction instanceof LambdaInstruction) { - PsiLambdaExpression lambdaExpression = ((LambdaInstruction)instruction).getLambdaExpression(); - registerNestedClosures(instructionState, lambdaExpression); - } - else if (instruction instanceof EmptyInstruction) { - PsiElement anchor = ((EmptyInstruction)instruction).getAnchor(); - if (anchor instanceof PsiClass) { - registerNestedClosures(instructionState, (PsiClass)anchor); - } + PsiElement closure = DfaUtil.getClosureInside(instruction); + if (closure instanceof PsiClass) { + registerNestedClosures(instructionState, (PsiClass)closure); + } else if (closure instanceof PsiLambdaExpression) { + registerNestedClosures(instructionState, (PsiLambdaExpression)closure); } return instruction.accept(this, instructionState.getMemoryState(), visitor); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java index d147c270c1c5..6bb70010c9ca 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaUtil.java @@ -15,9 +15,7 @@ */ package com.intellij.codeInspection.dataFlow; -import com.intellij.codeInspection.dataFlow.instructions.AssignInstruction; -import com.intellij.codeInspection.dataFlow.instructions.Instruction; -import com.intellij.codeInspection.dataFlow.instructions.PushInstruction; +import com.intellij.codeInspection.dataFlow.instructions.*; import com.intellij.codeInspection.dataFlow.value.DfaValue; import com.intellij.codeInspection.dataFlow.value.DfaVariableValue; import com.intellij.openapi.util.MultiValuesMap; @@ -113,6 +111,26 @@ public class DfaUtil { return Collections.emptyList(); } + @Nullable + static PsiElement getClosureInside(Instruction instruction) { + if (instruction instanceof MethodCallInstruction) { + PsiCallExpression anchor = ((MethodCallInstruction)instruction).getCallExpression(); + if (anchor instanceof PsiNewExpression) { + return ((PsiNewExpression)anchor).getAnonymousClass(); + } + } + else if (instruction instanceof LambdaInstruction) { + return ((LambdaInstruction)instruction).getLambdaExpression(); + } + else if (instruction instanceof EmptyInstruction) { + PsiElement anchor = ((EmptyInstruction)instruction).getAnchor(); + if (anchor instanceof PsiClass) { + return anchor; + } + } + return null; + } + private static class ValuableInstructionVisitor extends StandardInstructionVisitor { final Map myResults = ContainerUtil.newHashMap(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java index 55709d71ca49..937caa84e24d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/LiveVariablesAnalyzer.java @@ -21,10 +21,11 @@ import com.intellij.codeInspection.dataFlow.value.DfaValueFactory; import com.intellij.codeInspection.dataFlow.value.DfaVariableValue; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiRecursiveElementWalkingVisitor; +import com.intellij.psi.PsiReferenceExpression; import com.intellij.util.PairFunction; -import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.FilteringIterator; -import com.intellij.util.containers.MultiMap; +import com.intellij.util.containers.*; import com.intellij.util.containers.Queue; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,6 +40,26 @@ public class LiveVariablesAnalyzer { private final Instruction[] myInstructions; private final MultiMap myForwardMap; private final MultiMap myBackwardMap; + @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private final FactoryMap> myClosureReads = new FactoryMap>() { + @Nullable + @Override + protected List create(PsiElement closure) { + final Set result = ContainerUtil.newLinkedHashSet(); + closure.accept(new PsiRecursiveElementWalkingVisitor() { + @Override + public void visitElement(PsiElement element) { + if (element instanceof PsiReferenceExpression) { + DfaValue value = myFactory.createValue((PsiReferenceExpression)element); + if (value instanceof DfaVariableValue) { + result.add((DfaVariableValue)value); + } + } + super.visitElement(element); + } + }); + return ContainerUtil.newArrayList(result); + } + }; public LiveVariablesAnalyzer(ControlFlow flow, DfaValueFactory factory) { myFactory = factory; @@ -96,12 +117,36 @@ public class LiveVariablesAnalyzer { return result; } + @Nullable + private static DfaVariableValue getWrittenVariable(Instruction instruction) { + if (instruction instanceof AssignInstruction) { + DfaValue value = ((AssignInstruction)instruction).getAssignedValue(); + return value instanceof DfaVariableValue ? (DfaVariableValue)value : null; + } + if (instruction instanceof FlushVariableInstruction) return ((FlushVariableInstruction)instruction).getVariable(); + return null; + } + + @NotNull + private List getReadVariables(Instruction instruction) { + if (instruction instanceof PushInstruction && !((PushInstruction)instruction).isReferenceWrite()) { + DfaValue value = ((PushInstruction)instruction).getValue(); + if (value instanceof DfaVariableValue) { + return Collections.singletonList((DfaVariableValue)value); + } + } else { + PsiElement closure = DfaUtil.getClosureInside(instruction); + if (closure != null) { + return myClosureReads.get(closure); + } + } + return Collections.emptyList(); + } + private boolean isInterestingInstruction(Instruction instruction) { if (instruction == myInstructions[0]) return true; - if (instruction instanceof PushInstruction) return ((PushInstruction)instruction).getValue() instanceof DfaVariableValue; - if (instruction instanceof AssignInstruction) return ((AssignInstruction)instruction).getAssignedValue() != null; + if (!getReadVariables(instruction).isEmpty() || getWrittenVariable(instruction) != null) return true; return instruction instanceof FinishElementInstruction || - instruction instanceof FlushVariableInstruction || instruction instanceof GotoInstruction || instruction instanceof ConditionalGotoInstruction || instruction instanceof ReturnInstruction; @@ -124,34 +169,24 @@ public class LiveVariablesAnalyzer { } } - if (instruction instanceof AssignInstruction) { - DfaValue value = ((AssignInstruction)instruction).getAssignedValue(); - if (value instanceof DfaVariableValue) { - liveVars = (BitSet)liveVars.clone(); - liveVars.clear(value.getID()); - for (DfaVariableValue var : myFactory.getVarFactory().getAllQualifiedBy((DfaVariableValue)value)) { - liveVars.clear(var.getID()); - } + DfaVariableValue written = getWrittenVariable(instruction); + if (written != null) { + liveVars = (BitSet)liveVars.clone(); + liveVars.clear(written.getID()); + for (DfaVariableValue var : myFactory.getVarFactory().getAllQualifiedBy(written)) { + liveVars.clear(var.getID()); } - } - - if (instruction instanceof PushInstruction) { - DfaValue value = ((PushInstruction)instruction).getValue(); - if (value instanceof DfaVariableValue) { - if (!((PushInstruction)instruction).isReferenceWrite() && !liveVars.get(value.getID())) { - liveVars = (BitSet)liveVars.clone(); + } else { + boolean cloned = false; + for (DfaVariableValue value : getReadVariables(instruction)) { + if (!liveVars.get(value.getID())) { + if (!cloned) { + liveVars = (BitSet)liveVars.clone(); + cloned = true; + } liveVars.set(value.getID()); } } - } else if (instruction instanceof FlushVariableInstruction) { - DfaVariableValue variable = ((FlushVariableInstruction)instruction).getVariable(); - if (variable != null) { - liveVars = (BitSet)liveVars.clone(); - liveVars.clear(variable.getID()); - for (DfaVariableValue var : myFactory.getVarFactory().getAllQualifiedBy(variable)) { - liveVars.clear(var.getID()); - } - } } return liveVars; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/DontFlushVariablesUsedInClosures.java b/java/java-tests/testData/inspection/dataFlow/fixture/DontFlushVariablesUsedInClosures.java new file mode 100644 index 000000000000..bc2ed3cfe2f1 --- /dev/null +++ b/java/java-tests/testData/inspection/dataFlow/fixture/DontFlushVariablesUsedInClosures.java @@ -0,0 +1,19 @@ +import org.jetbrains.annotations.Nullable; + +class Foo { + + void foo(final @Nullable String s, String s2) { + if (s2 == null) return; + if (s == null) return; + + System.out.println(s2); + + new Runnable() { + @Override + public void run() { + s.hashCode(); + } + }.run(); + } + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java index dba230fbed32..cc86a456004f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/DataFlowInspectionTest.java @@ -242,6 +242,7 @@ public class DataFlowInspectionTest extends LightCodeInsightFixtureTestCase { public void testManyContinuesNotComplex() { doTest(); } public void testFinallyNotComplex() { doTest(); } public void testFlushFurtherUnusedVariables() { doTest(); } + public void testDontFlushVariablesUsedInClosures() { doTest(); } public void testVariablesDiverge() { doTest(); } public void testMergeByNullability() { doTest(); } From 195648e0e4eb5ba96a4d1434d42a501a3bea51b4 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 22 Oct 2014 13:54:50 +0200 Subject: [PATCH 036/217] an ability to turn dfa live var analysis off in registry --- .../codeInspection/dataFlow/ControlFlowAnalyzer.java | 5 ++++- platform/util/resources/misc/registry.properties | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java index 496bd289247e..3face7908ec1 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/ControlFlowAnalyzer.java @@ -20,6 +20,7 @@ import com.intellij.codeInspection.dataFlow.instructions.*; import com.intellij.codeInspection.dataFlow.value.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.tree.IElementType; @@ -100,7 +101,9 @@ public class ControlFlowAnalyzer extends JavaElementVisitor { addInstruction(new ReturnInstruction(false, null)); - new LiveVariablesAnalyzer(myCurrentFlow, myFactory).flushDeadVariablesOnStatementFinish(); + if (Registry.is("idea.dfa.live.variables.analysis")) { + new LiveVariablesAnalyzer(myCurrentFlow, myFactory).flushDeadVariablesOnStatementFinish(); + } return myCurrentFlow; } diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index bef1c10517d7..5a14ade2ba5c 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -281,6 +281,9 @@ ide.dfa.time.limit.online.description=Time limit (in milliseconds) that is allow ide.dfa.time.limit.offline=5000 ide.dfa.time.limit.offline.description=Time limit (in milliseconds) that is allowed to analyze data flow for one method in Analyze | Inspect Code... +idea.dfa.live.variables.analysis=true +idea.dfa.live.variables.analysis.description=Whether to flush dead variables when they're not needed when performing data flow analysis + ide.ignore.call.result.inspection.honor.inferred.pure=false ide.ignore.call.result.inspection.honor.inferred.pure.description=Whether inferred @Contract(pure=true) annotations should be taken into account in ''Result of method call ignored'' inspection From 4d4559cb50c70977479639fb319e62cabbe2393a Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 16:05:46 +0400 Subject: [PATCH 037/217] support breakpoints in decompiled code --- .../engine/CompoundPositionManager.java | 21 +++++++++++++++++++ .../debugger/engine/PositionManagerImpl.java | 2 +- .../JavaLineBreakpointTypeBase.java | 8 +++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/CompoundPositionManager.java b/java/debugger/impl/src/com/intellij/debugger/engine/CompoundPositionManager.java index 5ec84a8429f5..73d6f8bdb62b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/CompoundPositionManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/CompoundPositionManager.java @@ -22,6 +22,7 @@ import com.intellij.debugger.engine.evaluation.EvaluationContext; import com.intellij.debugger.jdi.StackFrameProxyImpl; import com.intellij.debugger.requests.ClassPrepareRequestor; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ThreeState; import com.intellij.xdebugger.frame.XStackFrame; import com.sun.jdi.InternalException; @@ -101,9 +102,29 @@ public class CompoundPositionManager extends PositionManagerEx { return Collections.emptyList(); } + private static int mapToOriginalLine(int line, int[] mapping) { + for (int i = 0; i < mapping.length; i += 2) { + if (mapping[i + 1] == line) { + return mapping[i]; + } + } + return -1; + } + @Override @NotNull public List locationsOfLine(@NotNull ReferenceType type, @NotNull SourcePosition position) { + VirtualFile file = position.getFile().getVirtualFile(); + if (file != null) { + int[] data = file.getUserData(LINE_NUMBERS_MAPPING_KEY); + if (data != null) { + int line = mapToOriginalLine(position.getLine() + 1, data); + if (line > -1) { + position = SourcePosition.createFromLine(position.getFile(), line - 1); + } + } + } + for (PositionManager positionManager : myPositionManagers) { try { return positionManager.locationsOfLine(type, position); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index 44337a6f1ee3..c58e7770d449 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -140,7 +140,7 @@ public class PositionManagerImpl implements PositionManager { lineNumber = -1; } - if (psiFile instanceof PsiCompiledElement && lineNumber > -1) { + if (lineNumber > -1) { VirtualFile file = psiFile.getVirtualFile(); if (file != null) { int[] data = file.getUserData(LINE_NUMBERS_MAPPING_KEY); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointTypeBase.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointTypeBase.java index 7427f91df500..8f092e26975b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointTypeBase.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/JavaLineBreakpointTypeBase.java @@ -15,6 +15,7 @@ */ package com.intellij.debugger.ui.breakpoints; +import com.intellij.debugger.PositionManager; import com.intellij.debugger.engine.DebuggerUtils; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; @@ -81,8 +82,8 @@ public abstract class JavaLineBreakpointTypeBase

Date: Wed, 22 Oct 2014 16:07:36 +0400 Subject: [PATCH 038/217] [log] more debug info for "no references pointing to head" error --- .../vcs/log/ui/tables/GraphTableModel.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java index 47b9375a7369..5abaaf2da696 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/tables/GraphTableModel.java @@ -8,7 +8,6 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Function; -import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.DateFormatUtil; import com.intellij.vcs.log.*; @@ -75,24 +74,32 @@ public class GraphTableModel extends AbstractTableModel { List> commits = myDataPack.getPermanentGraph().getAllCommits(); for (int i = 0; i < 100 && i < commits.size(); i++) { GraphCommit commit = commits.get(i); - sb.append(myDataHolder.getHash(commit.getId()) + "\n"); + sb.append(String.format("%s -> %s\n", myDataHolder.getHash(commit.getId()).toShortString(), getParents(commit))); } sb.append("\nALL REFS:\n"); - printRefs(sb, myDataHolder.getHashMap().asIndexGetter(), myDataPack.getRefsModel().getAllRefsByRoot()); + printRefs(sb, myDataPack.getRefsModel().getAllRefsByRoot()); return sb.toString(); } - private static void printRefs(@NotNull StringBuilder sb, - @NotNull final NotNullFunction indexGetter, - @NotNull Map> refs) { + @NotNull + private String getParents(@NotNull GraphCommit commit) { + return StringUtil.join(commit.getParents(), new Function() { + @Override + public String fun(Integer integer) { + return myDataHolder.getHash(integer).toShortString(); + } + }, ", "); + } + + private static void printRefs(@NotNull StringBuilder sb, @NotNull Map> refs) { for (Map.Entry> entry : refs.entrySet()) { - sb.append(entry.getKey().getName() + ":\n"); + sb.append("\n\n" + entry.getKey().getName() + ":\n"); sb.append(StringUtil.join(entry.getValue(), new Function() { @Override public String fun(@NotNull VcsRef ref) { - return ref.getName() + "(" + indexGetter.fun(ref.getCommitHash()) + ")"; + return ref.getName() + " : " + ref.getCommitHash().toShortString(); } - }, ",")); + }, "\n")); } } From 9f3baaa1544b3bbf7870f51cf7b703837411cb6f Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 22 Oct 2014 14:09:21 +0200 Subject: [PATCH 039/217] test for IDEA-128919 --- .../testSrc/com/intellij/index/IndexTest.java | 159 ++++++++++++++++-- 1 file changed, 146 insertions(+), 13 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/index/IndexTest.java b/java/java-tests/testSrc/com/intellij/index/IndexTest.java index 4fcb40296a48..f561fef91882 100644 --- a/java/java-tests/testSrc/com/intellij/index/IndexTest.java +++ b/java/java-tests/testSrc/com/intellij/index/IndexTest.java @@ -15,19 +15,26 @@ */ package com.intellij.index; +import com.intellij.codeHighlighting.BackgroundEditorHighlighter; +import com.intellij.codeInsight.CodeInsightTestCase; +import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.command.undo.UndoManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.*; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.util.Factory; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry; +import com.intellij.pom.Navigatable; import com.intellij.psi.*; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiSearchHelper; -import com.intellij.testFramework.IdeaTestCase; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.PsiTestUtil; import com.intellij.testFramework.SkipSlowTestLocally; @@ -35,7 +42,10 @@ import com.intellij.util.indexing.MapIndexStorage; import com.intellij.util.indexing.StorageException; import com.intellij.util.io.*; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import javax.swing.*; +import java.beans.PropertyChangeListener; import java.io.DataInput; import java.io.DataOutput; import java.io.File; @@ -47,7 +57,7 @@ import java.util.*; * Date: Dec 12, 2007 */ @SkipSlowTestLocally -public class IndexTest extends IdeaTestCase { +public class IndexTest extends CodeInsightTestCase { public void testUpdate() throws StorageException, IOException { final File storageFile = FileUtil.createTempFile("indextest", "storage"); @@ -208,8 +218,7 @@ public class IndexTest extends IdeaTestCase { VfsUtil.saveText(vFile, "class Foo {}"); final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); - final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject()); - assertNotNull(facade.findClass("Foo", scope)); + assertNotNull(myJavaFacade.findClass("Foo", scope)); WriteCommandAction.runWriteCommandAction(null, new Runnable() { @Override public void run() { @@ -218,20 +227,20 @@ public class IndexTest extends IdeaTestCase { Document document = FileDocumentManager.getInstance().getDocument(vFile); document.deleteString(0, document.getTextLength()); - assertNotNull(facade.findClass("Foo", scope)); + assertNotNull(myJavaFacade.findClass("Foo", scope)); psiFile = null; PlatformTestUtil.tryGcSoftlyReachableObjects(); assertNull(((PsiManagerEx)PsiManager.getInstance(getProject())).getFileManager().getCachedPsiFile(vFile)); - PsiClass foo = facade.findClass("Foo", scope); + PsiClass foo = myJavaFacade.findClass("Foo", scope); assertNotNull(foo); assertTrue(foo.isValid()); assertEquals("class Foo {}", foo.getText()); assertTrue(foo.isValid()); PsiDocumentManager.getInstance(myProject).commitAllDocuments(); - assertNull(facade.findClass("Foo", scope)); + assertNull(myJavaFacade.findClass("Foo", scope)); } }); } @@ -244,8 +253,7 @@ public class IndexTest extends IdeaTestCase { VfsUtil.saveText(vFile, ""); final GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); - final JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject()); - assertNull(facade.findClass("Foo", scope)); + assertNull(myJavaFacade.findClass("Foo", scope)); WriteCommandAction.runWriteCommandAction(null, new Runnable() { @Override public void run() { @@ -259,11 +267,11 @@ public class IndexTest extends IdeaTestCase { FileDocumentManager.getInstance().saveDocument(document); assertTrue(count == PsiManager.getInstance(myProject).getModificationTracker().getModificationCount()); - assertNull(facade.findClass("Foo", scope)); + assertNull(myJavaFacade.findClass("Foo", scope)); PsiDocumentManager.getInstance(myProject).commitAllDocuments(); - assertNotNull(facade.findClass("Foo", scope)); - assertNotNull(facade.findClass("Foo", scope).getText()); + assertNotNull(myJavaFacade.findClass("Foo", scope)); + assertNotNull(myJavaFacade.findClass("Foo", scope).getText()); // if Foo exists now, mod count should be different assertTrue(count != PsiManager.getInstance(myProject).getModificationTracker().getModificationCount()); } @@ -308,4 +316,129 @@ public class IndexTest extends IdeaTestCase { }); } + public void testUndoToFileContentForUnsavedCommittedDocument() throws IOException { + VirtualFile dir = getVirtualFile(createTempDirectory()); + PsiTestUtil.addSourceContentToRoots(myModule, dir); + + final VirtualFile vFile = createChildData(dir, "Foo.java"); + VfsUtil.saveText(vFile, "class Foo {}"); + ((VirtualFileSystemEntry)vFile).setModificationStamp(0); // as unchanged file + + final Document document = FileDocumentManager.getInstance().getDocument(vFile); + assertTrue(document != null && document.getModificationStamp() == 0); + final GlobalSearchScope scope = GlobalSearchScope.projectScope(myProject); + assertNotNull(myJavaFacade.findClass("Foo", scope)); + + WriteCommandAction.runWriteCommandAction(myProject, new Runnable() { + @Override + public void run() { + document.insertString(0, "import Bar;\n"); + PsiDocumentManager.getInstance(myProject).commitAllDocuments(); + assertNotNull(myJavaFacade.findClass("Foo", scope)); + } + }); + + final UndoManager undoManager = UndoManager.getInstance(getProject()); + final Editor editor = createEditor(vFile); + final FileEditor selectedEditor = new TextEditor() { + @NotNull + @Override + public Editor getEditor() { + return editor; + } + + @Override + public boolean canNavigateTo(@NotNull Navigatable navigatable) { + return false; + } + + @Override + public void navigateTo(@NotNull Navigatable navigatable) {} + + @NotNull + @Override + public JComponent getComponent() { + return null; + } + + @Nullable + @Override + public JComponent getPreferredFocusedComponent() { + return null; + } + + @NotNull + @Override + public String getName() { + return null; + } + + @NotNull + @Override + public FileEditorState getState(@NotNull FileEditorStateLevel level) { + return null; + } + + @Override + public void setState(@NotNull FileEditorState state) {} + + @Override + public boolean isModified() { + return false; + } + + @Override + public boolean isValid() { + return false; + } + + @Override + public void selectNotify() {} + + @Override + public void deselectNotify() {} + + @Override + public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) {} + + @Override + public void removePropertyChangeListener(@NotNull PropertyChangeListener listener) {} + + @Nullable + @Override + public BackgroundEditorHighlighter getBackgroundHighlighter() { + return null; + } + + @Nullable + @Override + public FileEditorLocation getCurrentLocation() { + return null; + } + + @Nullable + @Override + public StructureViewBuilder getStructureViewBuilder() { + return null; + } + + @Override + public void dispose() {} + + @Nullable + @Override + public T getUserData(@NotNull Key key) { + return null; + } + + @Override + public void putUserData(@NotNull Key key, @Nullable T value) {} + }; + + assertTrue(undoManager.isUndoAvailable(selectedEditor)); + FileDocumentManager.getInstance().saveDocument(document); + undoManager.undo(selectedEditor); + + assertNotNull(myJavaFacade.findClass("Foo", scope)); + } } From b179691a1bde9ed9a4ec54ec9fd2be65d66c87ef Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Wed, 22 Oct 2014 16:25:32 +0400 Subject: [PATCH 040/217] html viewer: don't check deprecated Nimbus L&F --- .../platform-impl/src/com/intellij/util/ui/SwingHelper.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java index 721e04469d24..488c52d14207 100644 --- a/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java +++ b/platform/platform-impl/src/com/intellij/util/ui/SwingHelper.java @@ -436,13 +436,10 @@ public class SwingHelper { textPane.setContentType(UIUtil.HTML_MIME); textPane.setEditable(false); if (background != null) { - textPane.setBackground(background); // e.g. UIUtil.getOptionPaneBackground() + textPane.setBackground(background); } else { textPane.setOpaque(false); - if (UIUtil.isUnderNimbusLookAndFeel()) { - textPane.setBackground(UIUtil.TRANSPARENT_COLOR); - } } textPane.setForeground(foreground != null ? foreground : UIUtil.getLabelForeground()); return textPane; From b762b79d4b9de05e4320d7f0b566502610ea05eb Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 22 Oct 2014 13:47:50 +0400 Subject: [PATCH 041/217] WEB-13675 Do not insert redundant alignment between array elements and properties. This alignment included in ChildAttributes for new properties and array elements leads to spaces being inserted instead of tabs inside indents for corresponding blocks when both SMART_TABS and USE_TAB_CHARACTER options are active. Test data for tests of line movements was updated because it made use of these alignments. --- .../intellij/json/formatter/JsonBlock.java | 14 ++++++------- .../com/intellij/json/JsonEditingTest.java | 21 +++++++++++++++++++ ...dentWithTabsWhenSmartTabEnabled.after.json | 5 +++++ .../IndentWithTabsWhenSmartTabEnabled.json | 4 ++++ .../mover/ArraySelectionMovedDown.json | 7 +++++-- .../ArraySelectionMovedDown_afterDown.json | 7 +++++-- .../mover/ObjectSelectionMovedDown.json | 10 ++++++--- .../ObjectSelectionMovedDown_afterDown.json | 10 ++++++--- 8 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.after.json create mode 100644 json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.json diff --git a/json/src/com/intellij/json/formatter/JsonBlock.java b/json/src/com/intellij/json/formatter/JsonBlock.java index 2dccd347e177..8ffff7f2dc44 100644 --- a/json/src/com/intellij/json/formatter/JsonBlock.java +++ b/json/src/com/intellij/json/formatter/JsonBlock.java @@ -48,8 +48,6 @@ public class JsonBlock implements ASTBlock { // lazy initialized on first call to #getSubBlocks() private List mySubBlocks = null; - private final Alignment myChildAlignment = Alignment.createAlignment(); - private final Alignment myPropertyValueAlignment; private final Wrap myChildWrap; @@ -119,9 +117,8 @@ public class JsonBlock implements ASTBlock { JsonCodeStyleSettings customSettings = getCustomSettings(); if (isContainer() && childNodeType != JsonElementTypes.COMMA && !BRACES.contains(childNodeType)) { - assert myChildWrap != null && myChildAlignment != null; + assert myChildWrap != null; wrap = myChildWrap; - alignment = myChildAlignment; indent = Indent.getNormalIndent(); } // Handle properties alignment @@ -184,7 +181,10 @@ public class JsonBlock implements ASTBlock { @Override public ChildAttributes getChildAttributes(int newChildIndex) { if (isContainer()) { - return new ChildAttributes(Indent.getNormalIndent(), myChildAlignment); + // WEB-13675: For some reason including alignment in child attributes causes + // indents to consist solely of spaces when both USE_TABS and SMART_TAB + // options are enabled. + return new ChildAttributes(Indent.getNormalIndent(), null); } // Will use continuation indent for cases like { "foo" } return new ChildAttributes(null, null); @@ -192,8 +192,8 @@ public class JsonBlock implements ASTBlock { @Override public boolean isIncomplete() { - IElementType nodeType = myNode.getElementType(); - ASTNode lastChildNode = myNode.getLastChildNode(); + final IElementType nodeType = myNode.getElementType(); + final ASTNode lastChildNode = myNode.getLastChildNode(); if (nodeType == JsonElementTypes.OBJECT) { return lastChildNode != null && lastChildNode.getElementType() != JsonElementTypes.R_CURLY; } diff --git a/json/tests/test/com/intellij/json/JsonEditingTest.java b/json/tests/test/com/intellij/json/JsonEditingTest.java index bb6f5088c89c..42421979f490 100644 --- a/json/tests/test/com/intellij/json/JsonEditingTest.java +++ b/json/tests/test/com/intellij/json/JsonEditingTest.java @@ -3,6 +3,9 @@ package com.intellij.json; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiFile; +import com.intellij.psi.codeStyle.CodeStyleSettings; +import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import org.jetbrains.annotations.NotNull; /** @@ -37,4 +40,22 @@ public class JsonEditingTest extends JsonTestCase { public void testNormalIndentAfterPropertyWithoutComma() { doTest("\n"); } + + // WEB-13675 + public void testIndentWithTabsWhenSmartTabEnabled() { + CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(myFixture.getProject()); + CommonCodeStyleSettings.IndentOptions indentOptions = settings.getCommonSettings(JsonLanguage.INSTANCE).getIndentOptions(); + assertNotNull(indentOptions); + CommonCodeStyleSettings.IndentOptions oldSettings = (CommonCodeStyleSettings.IndentOptions)indentOptions.clone(); + indentOptions.TAB_SIZE = 4; + indentOptions.INDENT_SIZE = 4; + indentOptions.USE_TAB_CHARACTER = true; + indentOptions.SMART_TABS = true; + try { + doTest("\n\"baz\""); + } + finally { + indentOptions.copyFrom(oldSettings); + } + } } diff --git a/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.after.json b/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.after.json new file mode 100644 index 000000000000..152513cad497 --- /dev/null +++ b/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.after.json @@ -0,0 +1,5 @@ +{ + "foo": true, + "bar": false, + "baz" +} \ No newline at end of file diff --git a/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.json b/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.json new file mode 100644 index 000000000000..69824365e9e8 --- /dev/null +++ b/json/tests/testData/editing/IndentWithTabsWhenSmartTabEnabled.json @@ -0,0 +1,4 @@ +{ + "foo": true, + "bar": false, +} \ No newline at end of file diff --git a/json/tests/testData/mover/ArraySelectionMovedDown.json b/json/tests/testData/mover/ArraySelectionMovedDown.json index 476b56d42dea..81e4dc2bcd0e 100644 --- a/json/tests/testData/mover/ArraySelectionMovedDown.json +++ b/json/tests/testData/mover/ArraySelectionMovedDown.json @@ -1,5 +1,8 @@ [ - 1, [2], [true, - false], + 1, [2], + [ + true, + false + ], null ] \ No newline at end of file diff --git a/json/tests/testData/mover/ArraySelectionMovedDown_afterDown.json b/json/tests/testData/mover/ArraySelectionMovedDown_afterDown.json index 9db514b06905..1a7a49635d95 100644 --- a/json/tests/testData/mover/ArraySelectionMovedDown_afterDown.json +++ b/json/tests/testData/mover/ArraySelectionMovedDown_afterDown.json @@ -1,5 +1,8 @@ [ null, - 1, [2], [true, - false] + 1, [2], + [ + true, + false + ] ] \ No newline at end of file diff --git a/json/tests/testData/mover/ObjectSelectionMovedDown.json b/json/tests/testData/mover/ObjectSelectionMovedDown.json index 57efbe402072..ed363c1d3d6f 100644 --- a/json/tests/testData/mover/ObjectSelectionMovedDown.json +++ b/json/tests/testData/mover/ObjectSelectionMovedDown.json @@ -1,6 +1,10 @@ { - "foo": false, "bar": 42, - "baz": [1, 2, - 3], + "foo": false, + "bar": 42, + "baz": [ + 1, + 2, + 3 + ], "quux": null } \ No newline at end of file diff --git a/json/tests/testData/mover/ObjectSelectionMovedDown_afterDown.json b/json/tests/testData/mover/ObjectSelectionMovedDown_afterDown.json index 860d3b5d3783..ebf686822340 100644 --- a/json/tests/testData/mover/ObjectSelectionMovedDown_afterDown.json +++ b/json/tests/testData/mover/ObjectSelectionMovedDown_afterDown.json @@ -1,6 +1,10 @@ { + "foo": false, "quux": null, - "foo": false, "bar": 42, - "baz": [1, 2, - 3] + "bar": 42, + "baz": [ + 1, + 2, + 3 + ] } \ No newline at end of file From 9ec8fbb7d8603f4de70a5de9d3099e6cd3803b35 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 22 Oct 2014 15:54:31 +0400 Subject: [PATCH 042/217] WEB-13587 Align compound property values on opening brace/bracket Also updated test data with more complete example from user and changed preview shown in settings so effect was more clear. --- .../intellij/json/formatter/JsonBlock.java | 32 ++++++++++++------- .../json/formatter/JsonCodeStylePanel.java | 20 ++++++------ .../formatting/AlignPropertiesOnColon.json | 20 ++++++++++-- .../AlignPropertiesOnColon_after.json | 20 ++++++++++-- .../formatting/AlignPropertiesOnValue.json | 20 ++++++++++-- .../AlignPropertiesOnValue_after.json | 20 ++++++++++-- 6 files changed, 99 insertions(+), 33 deletions(-) diff --git a/json/src/com/intellij/json/formatter/JsonBlock.java b/json/src/com/intellij/json/formatter/JsonBlock.java index 8ffff7f2dc44..85bbe545f2bb 100644 --- a/json/src/com/intellij/json/formatter/JsonBlock.java +++ b/json/src/com/intellij/json/formatter/JsonBlock.java @@ -3,7 +3,6 @@ package com.intellij.json.formatter; import com.intellij.formatting.*; import com.intellij.json.JsonElementTypes; import com.intellij.json.JsonLanguage; -import com.intellij.json.JsonParserDefinition; import com.intellij.json.psi.JsonArray; import com.intellij.json.psi.JsonObject; import com.intellij.json.psi.JsonProperty; @@ -23,8 +22,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; -import static com.intellij.json.JsonParserDefinition.JSON_BRACES; -import static com.intellij.json.JsonParserDefinition.JSON_BRACKETS; +import static com.intellij.json.JsonParserDefinition.*; import static com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment.ALIGN_ON_COLON; import static com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment.ALIGN_ON_VALUE; @@ -115,21 +113,31 @@ public class JsonBlock implements ASTBlock { Alignment alignment = null; Wrap wrap = null; - JsonCodeStyleSettings customSettings = getCustomSettings(); - if (isContainer() && childNodeType != JsonElementTypes.COMMA && !BRACES.contains(childNodeType)) { - assert myChildWrap != null; - wrap = myChildWrap; - indent = Indent.getNormalIndent(); + final JsonCodeStyleSettings customSettings = getCustomSettings(); + if (isContainer()) { + if (childNodeType != JsonElementTypes.COMMA && !BRACES.contains(childNodeType)) { + assert myChildWrap != null; + wrap = myChildWrap; + indent = Indent.getNormalIndent(); + } + else if (OPEN_BRACES.contains(childNodeType)) { + if (JsonPsiUtil.isPropertyValue(myPsiElement) && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_VALUE) { + // WEB-13587 Align compound values on opening brace/bracket, not the whole block + assert myParent != null && myParent.myParent != null && myParent.myParent.myPropertyValueAlignment != null; + alignment = myParent.myParent.myPropertyValueAlignment; + } + } } // Handle properties alignment else if (myNode.getElementType() == JsonElementTypes.PROPERTY) { - assert myParent.myNode.getElementType() == JsonElementTypes.OBJECT; - assert myParent.myPropertyValueAlignment != null; + assert myParent != null && myParent.myPropertyValueAlignment != null; if (childNode.getElementType() == JsonElementTypes.COLON && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_COLON) { alignment = myParent.myPropertyValueAlignment; } else if (JsonPsiUtil.isPropertyValue(childNode.getPsi()) && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_VALUE) { - alignment = myParent.myPropertyValueAlignment; + if (!JSON_CONTAINERS.contains(childNodeType)) { + alignment = myParent.myPropertyValueAlignment; + } } } return new JsonBlock(this, childNode, mySettings, alignment, indent, wrap); @@ -216,7 +224,7 @@ public class JsonBlock implements ASTBlock { } private boolean isContainer() { - return JsonParserDefinition.JSON_CONTAINERS.contains(myNode.getElementType()); + return JSON_CONTAINERS.contains(myNode.getElementType()); } private JsonCodeStyleSettings getCustomSettings() { diff --git a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java b/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java index c5c78f78227b..fa858ab98d95 100644 --- a/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java +++ b/json/src/com/intellij/json/formatter/JsonCodeStylePanel.java @@ -23,13 +23,16 @@ import java.awt.event.ItemListener; * @author Mikhail Golubev */ public class JsonCodeStylePanel extends CodeStyleAbstractPanel { - public static final String SAMPLE = "{\n" + - " \"longKeyName\": true,\n" + - " \"short\": false,\n" + - "\n" + - " \"group2-longKeyName\": null,\n" + - " \"group2-short\": 42\n" + - "}"; + public static final String ALIGNMENT_SAMPLE = "{\n" + + " \"foo\": {\n" + + " \"bar\": true,\n" + + " \"baz\": false\n" + + " },\n" + + " \"quux\": [\n" + + " 1, 2.0, 3e0, 4.0e0\n" + + " ],\n" + + " \"longPropertyName\": null\n" + + "}"; private JComboBox myPropertiesAlignmentCombo; private JPanel myPreviewPanel; @@ -59,7 +62,6 @@ public class JsonCodeStylePanel extends CodeStyleAbstractPanel { } } }); - } @Override @@ -82,7 +84,7 @@ public class JsonCodeStylePanel extends CodeStyleAbstractPanel { @Nullable @Override protected String getPreviewText() { - return SAMPLE; + return ALIGNMENT_SAMPLE; } @Override diff --git a/json/tests/testData/formatting/AlignPropertiesOnColon.json b/json/tests/testData/formatting/AlignPropertiesOnColon.json index e6bb1d6956be..c71adabb752f 100644 --- a/json/tests/testData/formatting/AlignPropertiesOnColon.json +++ b/json/tests/testData/formatting/AlignPropertiesOnColon.json @@ -1,5 +1,19 @@ { - "a": 1, - "aaa": 2, - "aaaaa": 3 + "require-dev": { + "phpunit/phpunit": "~3.7", + "phpunit/phpunit-selenium": "@stable", + "phpunit/phpunit-story": "@stable", + "phpunit/dbunit": "@stable" + }, + "minimum-stability": "dev", + "autoload": { + "psr-4": { + "DreamFactory\\Yii\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-develop": "1.5.x-dev" + } + } } \ No newline at end of file diff --git a/json/tests/testData/formatting/AlignPropertiesOnColon_after.json b/json/tests/testData/formatting/AlignPropertiesOnColon_after.json index d8c115391024..7a673e8c3c21 100644 --- a/json/tests/testData/formatting/AlignPropertiesOnColon_after.json +++ b/json/tests/testData/formatting/AlignPropertiesOnColon_after.json @@ -1,5 +1,19 @@ { - "a" : 1, - "aaa" : 2, - "aaaaa": 3 + "require-dev" : { + "phpunit/phpunit" : "~3.7", + "phpunit/phpunit-selenium": "@stable", + "phpunit/phpunit-story" : "@stable", + "phpunit/dbunit" : "@stable" + }, + "minimum-stability": "dev", + "autoload" : { + "psr-4": { + "DreamFactory\\Yii\\": "src/" + } + }, + "extra" : { + "branch-alias": { + "dev-develop": "1.5.x-dev" + } + } } \ No newline at end of file diff --git a/json/tests/testData/formatting/AlignPropertiesOnValue.json b/json/tests/testData/formatting/AlignPropertiesOnValue.json index e6bb1d6956be..c71adabb752f 100644 --- a/json/tests/testData/formatting/AlignPropertiesOnValue.json +++ b/json/tests/testData/formatting/AlignPropertiesOnValue.json @@ -1,5 +1,19 @@ { - "a": 1, - "aaa": 2, - "aaaaa": 3 + "require-dev": { + "phpunit/phpunit": "~3.7", + "phpunit/phpunit-selenium": "@stable", + "phpunit/phpunit-story": "@stable", + "phpunit/dbunit": "@stable" + }, + "minimum-stability": "dev", + "autoload": { + "psr-4": { + "DreamFactory\\Yii\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-develop": "1.5.x-dev" + } + } } \ No newline at end of file diff --git a/json/tests/testData/formatting/AlignPropertiesOnValue_after.json b/json/tests/testData/formatting/AlignPropertiesOnValue_after.json index 0cebf089466a..d4269bcc90b6 100644 --- a/json/tests/testData/formatting/AlignPropertiesOnValue_after.json +++ b/json/tests/testData/formatting/AlignPropertiesOnValue_after.json @@ -1,5 +1,19 @@ { - "a": 1, - "aaa": 2, - "aaaaa": 3 + "require-dev": { + "phpunit/phpunit": "~3.7", + "phpunit/phpunit-selenium": "@stable", + "phpunit/phpunit-story": "@stable", + "phpunit/dbunit": "@stable" + }, + "minimum-stability": "dev", + "autoload": { + "psr-4": { + "DreamFactory\\Yii\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-develop": "1.5.x-dev" + } + } } \ No newline at end of file From a2b4b60088943bb2e80922de71667041109edd08 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 22 Oct 2014 15:12:56 +0400 Subject: [PATCH 043/217] Add utility methods for unified comparison of element/node with element type --- .../intellij/json/formatter/JsonBlock.java | 50 ++++++++----------- .../com/intellij/json/psi/JsonPsiUtil.java | 32 ++++++++++++ 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/json/src/com/intellij/json/formatter/JsonBlock.java b/json/src/com/intellij/json/formatter/JsonBlock.java index 85bbe545f2bb..307e4a7fbc59 100644 --- a/json/src/com/intellij/json/formatter/JsonBlock.java +++ b/json/src/com/intellij/json/formatter/JsonBlock.java @@ -1,7 +1,6 @@ package com.intellij.json.formatter; import com.intellij.formatting.*; -import com.intellij.json.JsonElementTypes; import com.intellij.json.JsonLanguage; import com.intellij.json.psi.JsonArray; import com.intellij.json.psi.JsonObject; @@ -22,17 +21,19 @@ import org.jetbrains.annotations.Nullable; import java.util.List; +import static com.intellij.json.JsonElementTypes.*; import static com.intellij.json.JsonParserDefinition.*; import static com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment.ALIGN_ON_COLON; import static com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment.ALIGN_ON_VALUE; +import static com.intellij.json.psi.JsonPsiUtil.hasElementType; /** * @author Mikhail Golubev */ public class JsonBlock implements ASTBlock { - private static final TokenSet OPEN_BRACES = TokenSet.create(JsonElementTypes.L_BRACKET, JsonElementTypes.L_CURLY); - private static final TokenSet CLOSE_BRACES = TokenSet.create(JsonElementTypes.R_BRACKET, JsonElementTypes.R_CURLY); - private static final TokenSet BRACES = TokenSet.orSet(OPEN_BRACES, CLOSE_BRACES); + private static final TokenSet JSON_OPEN_BRACES = TokenSet.create(L_BRACKET, L_CURLY); + private static final TokenSet JSON_CLOSE_BRACES = TokenSet.create(R_BRACKET, R_CURLY); + private static final TokenSet JSON_ALL_BRACES = TokenSet.orSet(JSON_OPEN_BRACES, JSON_CLOSE_BRACES); private final JsonBlock myParent; @@ -107,20 +108,18 @@ public class JsonBlock implements ASTBlock { } private Block makeSubBlock(@NotNull ASTNode childNode) { - final IElementType childNodeType = childNode.getElementType(); - Indent indent = Indent.getNoneIndent(); Alignment alignment = null; Wrap wrap = null; final JsonCodeStyleSettings customSettings = getCustomSettings(); - if (isContainer()) { - if (childNodeType != JsonElementTypes.COMMA && !BRACES.contains(childNodeType)) { + if (hasElementType(myNode, JSON_CONTAINERS)) { + if (!hasElementType(childNode, COMMA) && !hasElementType(childNode, JSON_ALL_BRACES)) { assert myChildWrap != null; wrap = myChildWrap; indent = Indent.getNormalIndent(); } - else if (OPEN_BRACES.contains(childNodeType)) { + else if (hasElementType(childNode, JSON_OPEN_BRACES)) { if (JsonPsiUtil.isPropertyValue(myPsiElement) && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_VALUE) { // WEB-13587 Align compound values on opening brace/bracket, not the whole block assert myParent != null && myParent.myParent != null && myParent.myParent.myPropertyValueAlignment != null; @@ -129,13 +128,13 @@ public class JsonBlock implements ASTBlock { } } // Handle properties alignment - else if (myNode.getElementType() == JsonElementTypes.PROPERTY) { + else if (hasElementType(myNode, PROPERTY) ) { assert myParent != null && myParent.myPropertyValueAlignment != null; - if (childNode.getElementType() == JsonElementTypes.COLON && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_COLON) { + if (hasElementType(childNode, COLON) && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_COLON) { alignment = myParent.myPropertyValueAlignment; } else if (JsonPsiUtil.isPropertyValue(childNode.getPsi()) && customSettings.PROPERTY_ALIGNMENT == ALIGN_ON_VALUE) { - if (!JSON_CONTAINERS.contains(childNodeType)) { + if (!hasElementType(childNode, JSON_CONTAINERS)) { alignment = myParent.myPropertyValueAlignment; } } @@ -165,17 +164,17 @@ public class JsonBlock implements ASTBlock { @Override public Spacing getSpacing(@Nullable Block child1, @NotNull Block child2) { final CommonCodeStyleSettings commonSettings = getCommonSettings(); - final IElementType leftChildType = child1 instanceof JsonBlock ? ((JsonBlock)child1).myNode.getElementType() : null; - final IElementType rightChildType = child2 instanceof JsonBlock ? ((JsonBlock)child2).myNode.getElementType() : null; + final ASTNode leftChild = child1 instanceof JsonBlock ? ((JsonBlock)child1).myNode : null; + final ASTNode rightChild = child2 instanceof JsonBlock ? ((JsonBlock)child2).myNode : null; // This causes braces/brackets to be on their own lines if whole object/array spans several lines. - if (leftChildType != null && rightChildType != null) { - if (JSON_BRACES.contains(leftChildType) ^ JSON_BRACES.contains(rightChildType)) { + if (leftChild != null && rightChild != null) { + if (hasElementType(leftChild, JSON_BRACES) ^ hasElementType(rightChild, JSON_BRACES)) { final int numSpaces = commonSettings.SPACE_WITHIN_BRACES ? 1 : 0; return Spacing.createDependentLFSpacing(numSpaces, numSpaces, myNode.getTextRange(), commonSettings.KEEP_LINE_BREAKS, commonSettings.KEEP_BLANK_LINES_IN_CODE); } - else if (JSON_BRACKETS.contains(leftChildType) ^ JSON_BRACKETS.contains(rightChildType)) { + else if (hasElementType(leftChild, JSON_BRACKETS) ^ hasElementType(rightChild, JSON_BRACKETS)) { final int numSpaces = commonSettings.SPACE_WITHIN_BRACKETS ? 1 : 0; return Spacing.createDependentLFSpacing(numSpaces, numSpaces, myNode.getTextRange(), commonSettings.KEEP_LINE_BREAKS, @@ -188,7 +187,7 @@ public class JsonBlock implements ASTBlock { @NotNull @Override public ChildAttributes getChildAttributes(int newChildIndex) { - if (isContainer()) { + if (hasElementType(myNode, JSON_CONTAINERS)) { // WEB-13675: For some reason including alignment in child attributes causes // indents to consist solely of spaces when both USE_TABS and SMART_TAB // options are enabled. @@ -200,15 +199,14 @@ public class JsonBlock implements ASTBlock { @Override public boolean isIncomplete() { - final IElementType nodeType = myNode.getElementType(); final ASTNode lastChildNode = myNode.getLastChildNode(); - if (nodeType == JsonElementTypes.OBJECT) { - return lastChildNode != null && lastChildNode.getElementType() != JsonElementTypes.R_CURLY; + if (hasElementType(myNode, OBJECT)) { + return lastChildNode != null && lastChildNode.getElementType() != R_CURLY; } - else if (nodeType == JsonElementTypes.ARRAY) { - return lastChildNode != null && lastChildNode.getElementType() != JsonElementTypes.R_BRACKET; + else if (hasElementType(myNode, ARRAY)) { + return lastChildNode != null && lastChildNode.getElementType() != R_BRACKET; } - else if (myPsiElement instanceof JsonProperty) { + else if (hasElementType(myNode, PROPERTY)) { return ((JsonProperty)myPsiElement).getValue() == null; } return false; @@ -223,10 +221,6 @@ public class JsonBlock implements ASTBlock { return node.getElementType() == TokenType.WHITE_SPACE || node.getTextLength() == 0; } - private boolean isContainer() { - return JSON_CONTAINERS.contains(myNode.getElementType()); - } - private JsonCodeStyleSettings getCustomSettings() { return mySettings.getCustomSettings(JsonCodeStyleSettings.class); } diff --git a/json/src/com/intellij/json/psi/JsonPsiUtil.java b/json/src/com/intellij/json/psi/JsonPsiUtil.java index e3520f7526b1..0b9a151212e6 100644 --- a/json/src/com/intellij/json/psi/JsonPsiUtil.java +++ b/json/src/com/intellij/json/psi/JsonPsiUtil.java @@ -5,6 +5,7 @@ import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; +import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import static com.intellij.json.JsonParserDefinition.JSON_COMMENTARIES; @@ -86,4 +87,35 @@ public class JsonPsiUtil { } return lastSeen.getPsi(); } + + /** + * Check that element type of the given AST node belongs to the token set. + *

+ * It slightly less verbose than {@code set.contains(node.getElementType())} and overloaded methods with the same name + * allow check ASTNode/PsiElement against both concrete element types and token sets in uniform way. + */ + public static boolean hasElementType(@NotNull ASTNode node, @NotNull TokenSet set) { + return set.contains(node.getElementType()); + } + + /** + * @see #hasElementType(com.intellij.lang.ASTNode, com.intellij.psi.tree.TokenSet) + */ + public static boolean hasElementType(@NotNull ASTNode node, IElementType... types) { + return hasElementType(node, TokenSet.create(types)); + } + + /** + * @see #hasElementType(com.intellij.lang.ASTNode, com.intellij.psi.tree.TokenSet) + */ + public static boolean hasElementType(@NotNull PsiElement element, @NotNull TokenSet set) { + return element.getNode() != null && hasElementType(element.getNode(), set); + } + + /** + * @see #hasElementType(com.intellij.lang.ASTNode, com.intellij.psi.tree.IElementType...) + */ + public static boolean hasElementType(@NotNull PsiElement element, IElementType... types) { + return element.getNode() != null && hasElementType(element.getNode(), types); + } } From 679c59f06fb4b89cb2949bfcb014ea1c38b7ee49 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Wed, 22 Oct 2014 16:58:05 +0400 Subject: [PATCH 044/217] [git] IDEA-131705 Fix a misprint :( If there is no error, do change the target --- plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java b/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java index 40eaf69b9f7b..aa03697963c8 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java +++ b/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java @@ -182,7 +182,7 @@ class GitPushTargetPanel extends PushTargetPanel { @Override public void fireOnChange() { - if (myError == null) { + if (myError != null) { return; } String remoteName = myRemoteLabel.getText(); From 78380e948d3ca6fadf94f21699834d943c87db11 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Wed, 22 Oct 2014 14:55:51 +0200 Subject: [PATCH 045/217] less verbose test --- .../testSrc/com/intellij/index/IndexTest.java | 113 ++---------------- 1 file changed, 10 insertions(+), 103 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/index/IndexTest.java b/java/java-tests/testSrc/com/intellij/index/IndexTest.java index f561fef91882..b3be1f9f4feb 100644 --- a/java/java-tests/testSrc/com/intellij/index/IndexTest.java +++ b/java/java-tests/testSrc/com/intellij/index/IndexTest.java @@ -15,22 +15,21 @@ */ package com.intellij.index; -import com.intellij.codeHighlighting.BackgroundEditorHighlighter; import com.intellij.codeInsight.CodeInsightTestCase; -import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.command.impl.CurrentEditorProvider; +import com.intellij.openapi.command.impl.UndoManagerImpl; import com.intellij.openapi.command.undo.UndoManager; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.fileEditor.*; +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.util.Factory; -import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry; -import com.intellij.pom.Navigatable; import com.intellij.psi.*; import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.search.GlobalSearchScope; @@ -42,10 +41,7 @@ import com.intellij.util.indexing.MapIndexStorage; import com.intellij.util.indexing.StorageException; import com.intellij.util.io.*; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import java.beans.PropertyChangeListener; import java.io.DataInput; import java.io.DataOutput; import java.io.File; @@ -311,7 +307,6 @@ public class IndexTest extends CodeInsightTestCase { PsiDocumentManager.getInstance(myProject).commitAllDocuments(); assertEquals(" Foo", file.getText()); assertOneElement(PsiSearchHelper.SERVICE.getInstance(myProject).findFilesWithPlainTextWords("Foo")); - } }); } @@ -339,101 +334,13 @@ public class IndexTest extends CodeInsightTestCase { }); final UndoManager undoManager = UndoManager.getInstance(getProject()); - final Editor editor = createEditor(vFile); - final FileEditor selectedEditor = new TextEditor() { - @NotNull + final FileEditor selectedEditor = FileEditorManager.getInstance(myProject).openFile(vFile, false)[0]; + ((UndoManagerImpl)undoManager).setEditorProvider(new CurrentEditorProvider() { @Override - public Editor getEditor() { - return editor; + public FileEditor getCurrentEditor() { + return selectedEditor; } - - @Override - public boolean canNavigateTo(@NotNull Navigatable navigatable) { - return false; - } - - @Override - public void navigateTo(@NotNull Navigatable navigatable) {} - - @NotNull - @Override - public JComponent getComponent() { - return null; - } - - @Nullable - @Override - public JComponent getPreferredFocusedComponent() { - return null; - } - - @NotNull - @Override - public String getName() { - return null; - } - - @NotNull - @Override - public FileEditorState getState(@NotNull FileEditorStateLevel level) { - return null; - } - - @Override - public void setState(@NotNull FileEditorState state) {} - - @Override - public boolean isModified() { - return false; - } - - @Override - public boolean isValid() { - return false; - } - - @Override - public void selectNotify() {} - - @Override - public void deselectNotify() {} - - @Override - public void addPropertyChangeListener(@NotNull PropertyChangeListener listener) {} - - @Override - public void removePropertyChangeListener(@NotNull PropertyChangeListener listener) {} - - @Nullable - @Override - public BackgroundEditorHighlighter getBackgroundHighlighter() { - return null; - } - - @Nullable - @Override - public FileEditorLocation getCurrentLocation() { - return null; - } - - @Nullable - @Override - public StructureViewBuilder getStructureViewBuilder() { - return null; - } - - @Override - public void dispose() {} - - @Nullable - @Override - public T getUserData(@NotNull Key key) { - return null; - } - - @Override - public void putUserData(@NotNull Key key, @Nullable T value) {} - }; + }); assertTrue(undoManager.isUndoAvailable(selectedEditor)); FileDocumentManager.getInstance().saveDocument(document); From 7b940b6f91a86bb0195cb044a38d87120ef0cb8b Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 17:06:12 +0400 Subject: [PATCH 046/217] IDEA-131712 Debugger is showing current position on evaluate --- .../src/com/intellij/xdebugger/impl/frame/XFramesView.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java index 4fb2b75c13a0..77e154a329c2 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java @@ -121,6 +121,7 @@ public class XFramesView extends XDebugView { XDebugSession session = getSession(e); if (session != null) { mySelectedFrameIndex = 0; + myRefresh = false; updateFrames((XExecutionStack)item, session); } } @@ -305,7 +306,7 @@ public class XFramesView extends XDebugView { Object selected = myFramesList.getSelectedValue(); if (selected instanceof XStackFrame) { if (session != null) { - if (force || !myRefresh) { + if (force || (!myRefresh && session.getCurrentStackFrame() != selected)) { session.setCurrentStackFrame(mySelectedStack, (XStackFrame)selected, mySelectedFrameIndex == 0); } } From b73348f83c353078d05fd0b8b58dda0ebe8eb2f0 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Wed, 22 Oct 2014 17:03:55 +0400 Subject: [PATCH 047/217] IDEA-131732 Update label in "Server Certificates" configurable --- .../com/intellij/util/net/ssl/CertificateConfigurable.form | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form index 18c12cb56090..fc148671aeab 100644 --- a/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form +++ b/platform/platform-api/src/com/intellij/util/net/ssl/CertificateConfigurable.form @@ -3,7 +3,7 @@ - + @@ -56,7 +56,7 @@ - + From dfcbd14bb077acf22e9a53963073589bdae93324 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 22 Oct 2014 17:07:41 +0400 Subject: [PATCH 048/217] UP-2253 --- .../xml/impl/schema/XmlElementDescriptorImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java index 7bf9f02710b3..49d3c4c12245 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/XmlElementDescriptorImpl.java @@ -219,7 +219,6 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor if (type instanceof ComplexTypeDescriptor) { final ComplexTypeDescriptor descriptor = (ComplexTypeDescriptor)type; - String contextNs; PsiFile containingFile = context != null ? context.getContainingFile():null; if (context != null && !containingFile.isPhysical()) { @@ -227,10 +226,11 @@ public class XmlElementDescriptorImpl extends XsdEnumerationDescriptor //context = context.getParentTag(); } + String contextNs; if (context != null && - ( descriptor.canContainTag(context.getLocalName(), contextNs = context.getNamespace(), context ) && - (!contextNs.equals(getNamespace()) || descriptor.hasAnyInContentModel()) - ) ) { + descriptor.canContainTag(context.getLocalName(), contextNs = context.getNamespace(), context) && + (!contextNs.equals(getNamespace()) || descriptor.hasAnyInContentModel()) && + containingFile instanceof XmlFile) { // JSXmlLiteralExpressionImpl is crazy final XmlNSDescriptor nsDescriptor = getNSDescriptor(); if (nsDescriptor != null) { From b69b10a65d7e01d78cdbd4b7afbee183128f4322 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 14:33:15 +0200 Subject: [PATCH 049/217] back reference is two words --- .../intellij/lang/regexp/validation/RegExpAnnotator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java index 1d32bf8ab6eb..d326d2c28557 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java @@ -124,14 +124,14 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot public void visitRegExpBackref(final RegExpBackref backref) { final RegExpGroup group = backref.resolve(); if (group == null) { - final Annotation a = myHolder.createErrorAnnotation(backref, "Unresolved backreference"); + final Annotation a = myHolder.createErrorAnnotation(backref, "Unresolved back reference"); if (a != null) { // IDEA-9381 a.setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); } } else if (PsiTreeUtil.isAncestor(group, backref, true)) { - myHolder.createWarningAnnotation(backref, "Backreference is nested into the capturing group it refers to"); + myHolder.createWarningAnnotation(backref, "Back reference is nested into the capturing group it refers to"); } } @@ -173,7 +173,7 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot */ final RegExpGroup group = groupRef.resolve(); if (group == null) { - final Annotation a = myHolder.createErrorAnnotation(groupRef, "Unresolved backreference"); + final Annotation a = myHolder.createErrorAnnotation(groupRef, "Unresolved back reference"); if (a != null) { // IDEA-9381 a.setHighlightType(ProblemHighlightType.LIKE_UNKNOWN_SYMBOL); From 49dfd377d1e801bb8d301d9d2006081d5669dcb9 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 14:38:11 +0200 Subject: [PATCH 050/217] regexp: brace matching for named groups (IDEA-124018) --- .../src/org/intellij/lang/regexp/RegExpBraceMatcher.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpBraceMatcher.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpBraceMatcher.java index 748458d218d5..c815d4bc9c48 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpBraceMatcher.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpBraceMatcher.java @@ -30,6 +30,8 @@ public class RegExpBraceMatcher implements PairedBraceMatcher { new BracePair(RegExpTT.POS_LOOKBEHIND, RegExpTT.GROUP_END, true), new BracePair(RegExpTT.NEG_LOOKBEHIND, RegExpTT.GROUP_END, true), new BracePair(RegExpTT.PYTHON_NAMED_GROUP, RegExpTT.GROUP_END, true), new BracePair(RegExpTT.PYTHON_NAMED_GROUP_REF, RegExpTT.GROUP_END, true), + new BracePair(RegExpTT.RUBY_NAMED_GROUP, RegExpTT.GROUP_END, true), + new BracePair(RegExpTT.RUBY_QUOTED_NAMED_GROUP, RegExpTT.GROUP_END, true), new BracePair(RegExpTT.CLASS_BEGIN, RegExpTT.CLASS_END, false), new BracePair(RegExpTT.LBRACE, RegExpTT.RBRACE, false), new BracePair(RegExpTT.QUOTE_BEGIN, RegExpTT.QUOTE_END, false),}; } From 6239e6086ac33e83e52f5d6b6feef9b3eaa64f94 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 15:16:33 +0200 Subject: [PATCH 051/217] java regex does not support Ruby quoted named group syntax --- .../src/org/intellij/lang/regexp/psi/RegExpGroup.java | 2 ++ .../org/intellij/lang/regexp/psi/impl/RegExpGroupImpl.java | 4 ++++ java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpGroup.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpGroup.java index d1afd4e05b79..c0a1278b72dd 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpGroup.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/RegExpGroup.java @@ -29,6 +29,8 @@ public interface RegExpGroup extends RegExpAtom { boolean isRubyNamedGroup(); + boolean isNamedGroup(); + @Nullable String getGroupName(); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpGroupImpl.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpGroupImpl.java index b24669757917..023f64cf16b2 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpGroupImpl.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpGroupImpl.java @@ -56,6 +56,10 @@ public class RegExpGroupImpl extends RegExpElementImpl implements RegExpGroup { getNode().findChildByType(RegExpTT.RUBY_QUOTED_NAMED_GROUP) != null; } + public boolean isNamedGroup() { + return getNode().findChildByType(RegExpTT.RUBY_NAMED_GROUP) != null; + } + public String getGroupName() { if (!isPythonNamedGroup()) { return null; diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java b/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java index 21a03d7e2bc3..86ca15a074dd 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,7 +60,7 @@ public class JavaRegExpHost implements RegExpLanguageHost { @Override public boolean supportsNamedGroupSyntax(RegExpGroup group) { - if (group.isRubyNamedGroup()) { + if (group.isNamedGroup()) { final Module module = ModuleUtilCore.findModuleForPsiElement(group); if (module != null) { final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); From a3b5205ae4bd195839b42320b48c613b4e8aa64c Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 15:22:22 +0200 Subject: [PATCH 052/217] regex: highlight groups as parentheses (IDEA-124018) --- .../org/intellij/lang/regexp/RegExpHighlighter.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpHighlighter.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpHighlighter.java index fd3a8b03bd22..971cf56755fe 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpHighlighter.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpHighlighter.java @@ -120,6 +120,16 @@ public class RegExpHighlighter extends SyntaxHighlighterBase { keys1.put(RegExpTT.QUOTE_BEGIN, QUOTE_CHARACTER); keys1.put(RegExpTT.QUOTE_END, QUOTE_CHARACTER); + keys1.put(RegExpTT.NON_CAPT_GROUP, PARENTHS); + keys1.put(RegExpTT.POS_LOOKBEHIND, PARENTHS); + keys1.put(RegExpTT.NEG_LOOKBEHIND, PARENTHS); + keys1.put(RegExpTT.POS_LOOKAHEAD, PARENTHS); + keys1.put(RegExpTT.NEG_LOOKAHEAD, PARENTHS); + keys1.put(RegExpTT.SET_OPTIONS, PARENTHS); + keys1.put(RegExpTT.PYTHON_NAMED_GROUP, PARENTHS); + keys1.put(RegExpTT.PYTHON_NAMED_GROUP_REF, PARENTHS); + keys1.put(RegExpTT.RUBY_NAMED_GROUP, PARENTHS); + keys1.put(RegExpTT.RUBY_QUOTED_NAMED_GROUP, PARENTHS); keys1.put(RegExpTT.GROUP_BEGIN, PARENTHS); keys1.put(RegExpTT.GROUP_END, PARENTHS); From 16ab0a8322c19010473b557245fcd1f155cdc1ee Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Wed, 22 Oct 2014 15:25:24 +0200 Subject: [PATCH 053/217] Project View: sort directories by type as well (e.g. OS X bundles .app, .framework) --- .../intellij/projectView/ProjectTreeSortingTest.java | 10 +++++----- .../ide/projectView/impl/nodes/PsiDirectoryNode.java | 8 ++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeSortingTest.java b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeSortingTest.java index cc06d15c396e..b25ca382f2fb 100644 --- a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeSortingTest.java +++ b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeSortingTest.java @@ -132,11 +132,11 @@ public class ProjectTreeSortingTest extends BaseProjectViewTestCase { ((ProjectViewImpl)myProjectView).setFoldersAlwaysOnTop(false); assertTree("-foldersOnTop\n" + " a.java\n" + + " +b.java\n" + " c.java\n" + " a.txt\n" + - " c.txt\n" + - " +b.java\n" + - " +b.txt\n"); + " +b.txt\n"+ + " c.txt\n"); } public void testSortByTypeBetweenFilesAndFolders() throws Exception { @@ -156,11 +156,11 @@ public class ProjectTreeSortingTest extends BaseProjectViewTestCase { assertTree("-sortByTypeBetweenFilesAndFolders\n" + " a.java\n" + " b.java\n" + + " +a.java_folder\n" + + " +b.java_folder\n" + " a.txt\n" + " b.txt\n" + - " +a.java_folder\n" + " +a_folder\n" + - " +b.java_folder\n" + " +b_folder\n"); } diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java index 16aa930b806a..ec0b9dd8b6c6 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/nodes/PsiDirectoryNode.java @@ -318,6 +318,14 @@ public class PsiDirectoryNode extends BasePsiNode implements Navig return null; } + @Override + public Comparable getTypeSortKey() { + VirtualFile file = getVirtualFile(); + if (file == null) return null; + String extension = file.getExtension(); + return extension == null ? null : new PsiFileNode.ExtensionSortKey(extension); + } + @Override public String getQualifiedNameSortKey() { final PsiDirectoryFactory factory = PsiDirectoryFactory.getInstance(getProject()); From 34abbd85c020fbf69b320487fb676fd4b8ef4688 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 22 Oct 2014 17:49:47 +0400 Subject: [PATCH 054/217] invoke FileEditorProvider.accept() from read action --- .../fileEditor/impl/FileEditorManagerImpl.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index c4ac427f89b5..0dc4f5bc7209 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -771,15 +771,13 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec try { final FileEditorProvider provider = newProviders[i]; LOG.assertTrue(provider != null, "Provider for file "+file+" is null. All providers: "+Arrays.asList(newProviders)); - LOG.assertTrue(provider.accept(myProject, file), "Provider " + provider + " doesn't accept file " + file); - if ((provider instanceof AsyncFileEditorProvider)) { - builders[i] = ApplicationManager.getApplication().runReadAction(new Computable() { - @Override - public AsyncFileEditorProvider.Builder compute() { - return ((AsyncFileEditorProvider)provider).createEditorAsync(myProject, file); - } - }); - } + builders[i] = ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public AsyncFileEditorProvider.Builder compute() { + LOG.assertTrue(provider.accept(myProject, file), "Provider " + provider + " doesn't accept file " + file); + return provider instanceof AsyncFileEditorProvider ? ((AsyncFileEditorProvider)provider).createEditorAsync(myProject, file) : null; + } + }); } catch (Exception e) { LOG.error(e); From 9bb274c2696a3f7df93dc822c84794e5d2cdc600 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 22 Oct 2014 18:22:39 +0400 Subject: [PATCH 055/217] IDEA-92343 File Structure popup appears on wrong monitor --- .../openapi/util/DimensionService.java | 18 +++++++++--------- .../com/intellij/ui/popup/AbstractPopup.java | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/util/DimensionService.java b/platform/platform-api/src/com/intellij/openapi/util/DimensionService.java index 715b703e2321..5844767aac87 100644 --- a/platform/platform-api/src/com/intellij/openapi/util/DimensionService.java +++ b/platform/platform-api/src/com/intellij/openapi/util/DimensionService.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; import com.intellij.ui.ScreenUtil; import com.intellij.util.containers.hash.LinkedHashMap; @@ -252,15 +253,14 @@ public class DimensionService implements PersistentStateComponent { } JFrame frame = null; - if (project == null) { - final Component owner = IdeFocusManager.findInstance().getFocusOwner(); - if (owner != null) { - frame = UIUtil.getParentOfType(JFrame.class, owner); - } - if (frame == null) { - frame = WindowManager.getInstance().findVisibleFrame(); - } - } else { + final Component owner = IdeFocusManager.findInstance().getFocusOwner(); + if (owner != null) { + frame = UIUtil.getParentOfType(JFrame.class, owner); + } + if (frame == null) { + frame = WindowManager.getInstance().findVisibleFrame(); + } + if (project != null && (frame == null || (frame instanceof IdeFrame && project != ((IdeFrame)frame).getProject()))) { frame = WindowManager.getInstance().getFrame(project); } Rectangle screen = new Rectangle(0, 0, 0, 0); diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index 7274d0930824..039868096f10 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -747,7 +747,7 @@ public class AbstractPopup implements JBPopup { Point xy = new Point(aScreenX, aScreenY); boolean adjustXY = true; - if (myDimensionServiceKey != null) { + if (myUseDimServiceForXYLocation && myDimensionServiceKey != null) { final Point storedLocation = DimensionService.getInstance().getLocation(myDimensionServiceKey, myProject); if (storedLocation != null) { xy = storedLocation; From 56f36d948ce3b13ddb0a36193bd05b5bf9fbb3ec Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Wed, 22 Oct 2014 18:41:14 +0400 Subject: [PATCH 056/217] fixed PY-14130 IPython Notebook: slash at the end of the URL prevents cells from running --- .../plugins/ipnb/configuration/IpnbConfigurable.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java index 13b15180d83a..d1817594e83f 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConfigurable.java @@ -3,6 +3,7 @@ package org.jetbrains.plugins.ipnb.configuration; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.components.JBTextField; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -38,13 +39,15 @@ public class IpnbConfigurable implements SearchableConfigurable { @Override public boolean isModified() { final String oldUrl = IpnbSettings.getInstance(myProject).getURL(); - final String url = myFieldUrl.getText(); + final String url = StringUtil.trimEnd(myFieldUrl.getText(), "/"); return !url.equals(oldUrl); } @Override public void apply() throws ConfigurationException { - IpnbSettings.getInstance(myProject).setURL(myFieldUrl.getText()); + String url = myFieldUrl.getText(); + url = StringUtil.trimEnd(url, "/"); + IpnbSettings.getInstance(myProject).setURL(url); } @Override From 9679d0e594fc7da1aaa9b43b503f374e07588abf Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 18:45:21 +0400 Subject: [PATCH 057/217] decompiler: more correct toString --- .../org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java index 44c58f04e196..13658580fe4e 100644 --- a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java +++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/code/cfg/ControlFlowGraph.java @@ -82,6 +82,7 @@ public class ControlFlowGraph implements CodeConstants { } public String toString() { + if (blocks == null) return "Empty"; String new_line_separator = DecompilerContext.getNewLineSeparator(); From 9c1a6769f516413b33848cfe996f6485ec7b4ccd Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 17 Oct 2014 21:33:08 +0400 Subject: [PATCH 058/217] deserialization of type-specific inner properties: don't pass 'null' to 'loadState' --- .../openapi/components/ComponentSerializationUtil.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/openapi/components/ComponentSerializationUtil.java b/platform/core-impl/src/com/intellij/openapi/components/ComponentSerializationUtil.java index 33eee1a79178..0093d0016881 100644 --- a/platform/core-impl/src/com/intellij/openapi/components/ComponentSerializationUtil.java +++ b/platform/core-impl/src/com/intellij/openapi/components/ComponentSerializationUtil.java @@ -35,7 +35,10 @@ public class ComponentSerializationUtil { public static void loadComponentState(@NotNull PersistentStateComponent configuration, @Nullable Element element) { if (element != null) { Class stateClass = getStateClass(configuration.getClass()); - configuration.loadState(XmlSerializer.deserialize(element, stateClass)); + S state = XmlSerializer.deserialize(element, stateClass); + if (state != null) { + configuration.loadState(state); + } } } } From 5cad53fa66e829024072197ce13a0bbd7287d033 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 22 Oct 2014 19:29:46 +0400 Subject: [PATCH 059/217] 118571 Fixed setting locale for svn command line client - "LC_ALL" variable is set to configured locale, "LANGUAGE" variable is cleared (to use english output, if localization files for configured locale are not found) --- .../idea/svn/commandLine/CommandExecutor.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java index cdca82de6966..e00b8f1e3183 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java @@ -75,8 +75,7 @@ public class CommandExecutor { public CommandExecutor(@NotNull @NonNls String exePath, @NotNull Command command) { myCommand = command; myResultBuilder = command.getResultBuilder(); - if (myResultBuilder != null) - { + if (myResultBuilder != null) { myListeners.addListener(myResultBuilder); // cancel tracker should be executed after result builder myListeners.addListener(new CommandCancelTracker()); @@ -160,12 +159,13 @@ public class CommandExecutor { private void setupLocale() { String locale = Registry.stringValue("svn.executable.locale"); - Map environment = myCommandLine.getEnvironment(); - // TODO: check if we need to set LC_ALL to configured locale or just clear it - environment.put("LC_ALL", ""); - environment.put("LC_MESSAGES", locale); - environment.put("LANG", locale); + if (!StringUtil.isEmpty(locale)) { + Map environment = myCommandLine.getEnvironment(); + + environment.put("LANGUAGE", ""); + environment.put("LC_ALL", locale); + } } private void ensureMessageFile() throws SvnBindException { @@ -413,7 +413,7 @@ public class CommandExecutor { * @throws IllegalStateException if process has not been started */ protected void checkStarted() { - if (! isStarted()) { + if (!isStarted()) { throw new IllegalStateException("The process is not started yet"); } } From 17c554f98a76918352143ea0cfd0d11191066da9 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 22 Oct 2014 19:33:02 +0400 Subject: [PATCH 060/217] 118571 Changed default value for "svn.executable.locale" to "en_US.UTF-8" (instead of "C.UTF-8") --- platform/util/resources/misc/registry.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index c7a10d57d8e2..d2365fb50adc 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -353,7 +353,7 @@ search.everywhere.configurations=true search.everywhere.settings=false svn.use.incoming.optimization=false -svn.executable.locale=C.UTF-8 +svn.executable.locale=en_US.UTF-8 svn.lowest.supported.format.for.command.line=1.7.0 svn.use.svnkit.for.https.server.certificate.check=true From 542aa23b043654eb6b7366ea8f9cbdd4476827f1 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 22 Oct 2014 17:38:07 +0200 Subject: [PATCH 061/217] continue Firefox RDP --- .../jetbrains/rpc/ChannelBufferToString.java | 11 ++- .../src/org/jetbrains/rpc/MessageDecoder.java | 87 ++++++++++++++++++ .../connection/RemoteVmConnection.java | 49 +++++++++++ .../debugger/connection/VmConnection.java | 1 - .../src/org/jetbrains/io/JsonReaderEx.java | 22 +++-- .../jsonProtocol/JsonParseMethod.java | 1 - .../protocol-reader/protocol-reader.iml | 6 +- .../protocolReader/AbsentSubtypeAspect.java | 29 ------ .../protocolReader/DynamicReader.java | 45 +++++----- .../protocolReader/ExistingSubtypeAspect.java | 8 +- .../protocolReader/FieldProcessor.java | 17 +--- .../jetbrains/protocolReader/GlobalScope.java | 3 +- .../protocolReader/InterfaceReader.java | 5 +- .../protocolReader/MethodHandler.java | 17 ++-- .../protocolReader/ObjectValueReader.java | 2 +- .../protocolReader/ReadDelegate.java | 17 +++- .../protocolReader/ReaderGenerator.java | 19 ++-- .../jetbrains/protocolReader/ReaderRoot.java | 9 +- .../protocolReader/SubtypeAspect.java | 19 ---- .../jetbrains/protocolReader/TypeHandler.java | 88 ++++++++++++------- .../org/jetbrains/protocolReader/Util.java | 6 +- 21 files changed, 296 insertions(+), 165 deletions(-) create mode 100644 platform/script-debugger/backend/src/org/jetbrains/rpc/MessageDecoder.java delete mode 100644 platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/AbsentSubtypeAspect.java delete mode 100644 platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/SubtypeAspect.java diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/ChannelBufferToString.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/ChannelBufferToString.java index 0b18ebcd1eb2..bb776e55ea20 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/ChannelBufferToString.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/ChannelBufferToString.java @@ -3,6 +3,8 @@ package org.jetbrains.rpc; import com.intellij.util.text.StringFactory; import io.netty.buffer.ByteBuf; import io.netty.util.CharsetUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.nio.ByteBuffer; import java.nio.CharBuffer; @@ -29,7 +31,7 @@ public final class ChannelBufferToString { } } - public static CharBuffer readIntoCharBuffer(CharBuffer charBuffer, ByteBuf buffer, int byteCount) { + public static CharBuffer readIntoCharBuffer(@Nullable CharBuffer charBuffer, @NotNull ByteBuf buffer, int byteCount) { CharsetDecoder decoder = CharsetUtil.getDecoder(CharsetUtil.UTF_8); ByteBuffer in = buffer.nioBuffer(buffer.readerIndex(), byteCount); if (charBuffer == null) { @@ -52,4 +54,11 @@ public final class ChannelBufferToString { buffer.skipBytes(byteCount); return charBuffer; } + + public static void writeIntAsAscii(int value, @NotNull ByteBuf buffer) { + String string = Integer.toString(value); + for (int i = 0; i < string.length(); i++) { + buffer.writeByte(string.charAt(i)); + } + } } \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageDecoder.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageDecoder.java new file mode 100644 index 000000000000..9d7e35198225 --- /dev/null +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageDecoder.java @@ -0,0 +1,87 @@ +package org.jetbrains.rpc; + +import io.netty.buffer.ByteBuf; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.io.SimpleChannelInboundHandlerAdapter; + +import java.nio.CharBuffer; + +public abstract class MessageDecoder extends SimpleChannelInboundHandlerAdapter { + protected int contentLength; + protected final StringBuilder builder = new StringBuilder(64); + + private CharBuffer chunkedContent; + private int consumedContentByteCount = 0; + + protected final int parseContentLength() { + return parseInt(builder, 0, false, 10); + } + + @Nullable + protected String doReadContent(@NotNull ByteBuf buffer) { + int required = contentLength - consumedContentByteCount; + String result; + if (buffer.readableBytes() < required) { + if (chunkedContent == null) { + chunkedContent = CharBuffer.allocate(contentLength); + } + + int count = buffer.readableBytes(); + ChannelBufferToString.readIntoCharBuffer(chunkedContent, buffer, count); + consumedContentByteCount += count; + return null; + } + else if (chunkedContent != null) { + ChannelBufferToString.readIntoCharBuffer(chunkedContent, buffer, required); + result = ChannelBufferToString.charBufferToString(chunkedContent); + + chunkedContent = null; + consumedContentByteCount = 0; + return result; + } + else { + // we can produce char sequence CharSequence result = CharsetUtil.UTF_8.decode(buffer.toByteBuffer(buffer.readerIndex(), required)); + // but later, in JsonReaderEx, it will be toString in any case, so, in this case, intermediate java.nio.HeapCharBuffer will be created - so, we stay with String + return ChannelBufferToString.readString(buffer, required); + } + } + + /** + * Javolution - Java(TM) Solution for Real-Time and Embedded Systems + * Copyright (C) 2006 - Javolution (http://javolution.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ + private static int parseInt(final CharSequence value, final int start, final boolean isNegative, final int radix) { + final int end = value.length(); + int result = 0; // Accumulates negatively (avoid MIN_VALUE overflow). + int i = start; + for (; i < end; i++) { + char c = value.charAt(i); + int digit = (c <= '9') ? c - '0' + : ((c <= 'Z') && (c >= 'A')) ? c - 'A' + 10 + : ((c <= 'z') && (c >= 'a')) ? c - 'a' + 10 : -1; + if ((digit >= 0) && (digit < radix)) { + int newResult = result * radix - digit; + if (newResult > result) { + throw new NumberFormatException("Overflow parsing " + value.subSequence(start, end)); + } + result = newResult; + } + else { + break; + } + } + // Requires one valid digit character and checks for opposite overflow. + if ((result == 0) && ((end == 0) || (value.charAt(i - 1) != '0'))) { + throw new NumberFormatException("Invalid integer representation for " + value.subSequence(start, end)); + } + if ((result == Integer.MIN_VALUE) && !isNegative) { + throw new NumberFormatException("Overflow parsing " + value.subSequence(start, end)); + } + return isNegative ? result : -result; + } +} \ No newline at end of file diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/RemoteVmConnection.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/RemoteVmConnection.java index 6557de5130fe..753ec0c05cb9 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/RemoteVmConnection.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/RemoteVmConnection.java @@ -2,15 +2,22 @@ package org.jetbrains.debugger.connection; import com.intellij.ide.browsers.WebBrowser; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.AsyncResult; +import com.intellij.ui.ColoredListCellRenderer; +import com.intellij.ui.components.JBList; import com.intellij.util.Consumer; +import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.socketConnection.ConnectionStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.debugger.Vm; +import javax.swing.*; import java.net.InetSocketAddress; +import java.util.Collection; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicReference; @@ -87,4 +94,46 @@ public abstract class RemoteVmConnection extends VmConnection { } return callback; } + + @NotNull + public static AsyncResult chooseDebuggee(@NotNull final Collection targets, final int selectedIndex, @NotNull final Function itemToString) { + if (targets.size() == 1) { + return AsyncResult.done(ContainerUtil.getFirstItem(targets)); + } + + final AsyncResult result = new AsyncResult(); + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + final JBList list = new JBList(targets); + list.setCellRenderer(new ColoredListCellRenderer() { + @Override + protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { + //noinspection unchecked + append(itemToString.fun((T)value)); + } + }); + list.setSelectedIndex(selectedIndex); + + JBPopupFactory.getInstance(). + createListPopupBuilder(list). + setTitle("Choose Page to debug"). + setItemChoosenCallback(new Runnable() { + @Override + public void run() { + @SuppressWarnings("unchecked") + T value = (T)list.getSelectedValue(); + if (value == null) { + result.setRejected(); + } + else { + result.setDone(value); + } + } + }). + createPopup().showInFocusCenter(); + } + }); + return result; + } } \ No newline at end of file diff --git a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java index 7a6c17169e7f..6f7d14c65100 100644 --- a/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java +++ b/platform/script-debugger/debugger-ui/src/org/jetbrains/debugger/connection/VmConnection.java @@ -24,7 +24,6 @@ public abstract class VmConnection implements Disposable, BrowserC protected volatile T vm; private final ActionCallback opened = new ActionCallback(); - private final AtomicBoolean closed = new AtomicBoolean(); public final Vm getVm() { diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java index 7dad7854ca0d..eaf83b872be8 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/io/JsonReaderEx.java @@ -665,6 +665,15 @@ public final class JsonReaderEx implements Closeable { * Returns the next token, a {@link JsonToken#NAME property name}, and consumes it */ public String nextName() { + String result = nextNameOrNull(); + if (result == null) { + throw createParseError("Expected a name but was " + peek()); + } + return result; + } + + @Nullable + public String nextNameOrNull() { int p = peeked; if (p == PEEKED_NONE) { p = doPeek(); @@ -680,7 +689,10 @@ public final class JsonReaderEx implements Closeable { result = nextQuotedValue('"'); } else { - throw createParseError("Expected a name but was " + peek()); + if (p != PEEKED_END_OBJECT && p != PEEKED_END_ARRAY) { + throw createParseError("Expected a name but was " + peek()); + } + return null; } peeked = PEEKED_NONE; return result; @@ -713,6 +725,7 @@ public final class JsonReaderEx implements Closeable { return in.charAt(offset + index); } + @NotNull @Override public CharSequence subSequence(int start, int end) { if ((end - start) > length) { @@ -1153,6 +1166,7 @@ public final class JsonReaderEx implements Closeable { /** * Closes this JSON reader and the underlying {@link java.io.Reader}. */ + @Override public void close() { peeked = PEEKED_NONE; stack[0] = JsonScope.CLOSED; @@ -1180,11 +1194,7 @@ public final class JsonReaderEx implements Closeable { push(JsonScope.EMPTY_OBJECT); count++; } - else if (p == PEEKED_END_ARRAY) { - stackSize--; - count--; - } - else if (p == PEEKED_END_OBJECT) { + else if (p == PEEKED_END_ARRAY || p == PEEKED_END_OBJECT) { stackSize--; count--; } diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/JsonParseMethod.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/JsonParseMethod.java index 8016b9b59539..6e7d21dee963 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/JsonParseMethod.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/JsonParseMethod.java @@ -1,7 +1,6 @@ // Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. - package org.jetbrains.jsonProtocol; import java.lang.annotation.ElementType; diff --git a/platform/script-debugger/protocol/protocol-reader/protocol-reader.iml b/platform/script-debugger/protocol/protocol-reader/protocol-reader.iml index d809f8c5132e..f8259f8992b9 100644 --- a/platform/script-debugger/protocol/protocol-reader/protocol-reader.iml +++ b/platform/script-debugger/protocol/protocol-reader/protocol-reader.iml @@ -1,6 +1,6 @@ - + @@ -10,6 +10,6 @@ + - - + \ No newline at end of file diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/AbsentSubtypeAspect.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/AbsentSubtypeAspect.java deleted file mode 100644 index 4a3b18df1d0e..000000000000 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/AbsentSubtypeAspect.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.jetbrains.protocolReader; - -class AbsentSubtypeAspect extends SubtypeAspect { - - @Override - void writeGetSuperMethodJava(TextOutput out) { - } - - @Override - void writeSuperFieldJava(TextOutput out) { - } - - @Override - void writeSuperConstructorParamJava(TextOutput out) { - } - - @Override - void writeSuperConstructorInitialization(TextOutput out) { - } - - @Override - void writeParseMethod(String className, ClassScope scope, TextOutput out) { - } - - @Override - public void writeInstantiateCode(String className, TextOutput out) { - out.append("new ").append(className); - } -} diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java index 3485c83e684f..bd4b5f332ada 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java @@ -1,10 +1,11 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - package org.jetbrains.protocolReader; -import java.util.*; +import gnu.trove.THashMap; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; public class DynamicReader { final LinkedHashMap, TypeHandler> typeToTypeHandler; @@ -15,20 +16,20 @@ public class DynamicReader { root = new ReaderRoot<>(readerRootClass, typeToTypeHandler); } - public GeneratedCodeMap generateStaticReader(StringBuilder stringBuilder, String packageName, String className, - Collection basePackages) { - final GlobalScope globalScope = new GlobalScope(typeToTypeHandler.values(), basePackages); + @NotNull + public GeneratedCodeMap generateReader(StringBuilder stringBuilder, String packageName, String className, + Collection basePackages) { + GlobalScope globalScope = new GlobalScope(typeToTypeHandler.values(), basePackages); FileScope fileScope = globalScope.newFileScope(stringBuilder); - final TextOutput out = fileScope.getOutput(); + TextOutput out = fileScope.getOutput(); out.append("// Generated source"); out.newLine().append("package ").append(packageName).append(';'); out.newLine().newLine().append("import org.jetbrains.jsonProtocol.*;"); out.newLine().newLine().append("import static org.jetbrains.jsonProtocol.JsonReaders.*;"); out.newLine().newLine().append("public final class ").append(className).space(); - out.append(root.getType().isInterface() ? "implements" : "extends").space().append(root.getType().getCanonicalName()).openBlock( - false); + out.append(root.getType().isInterface() ? "implements" : "extends").space().append(root.getType().getCanonicalName()).openBlock(false); - final ClassScope rootClassScope = fileScope.newClassScope(); + ClassScope rootClassScope = fileScope.newClassScope(); root.writeStaticMethodJava(rootClassScope); for (TypeHandler typeHandler : typeToTypeHandler.values()) { @@ -37,27 +38,31 @@ public class DynamicReader { out.newLine(); } + boolean isFirst = true; for (TypeHandler typeHandler : globalScope.getTypeFactories()) { - String name = globalScope.getTypeImplShortName(typeHandler); + if (isFirst) { + isFirst = false; + } + else { + out.newLine(); + } + String originName = typeHandler.getTypeClass().getCanonicalName(); - out.newLine().append("static final class ").append(name).append(Util.TYPE_FACTORY_NAME_POSTFIX).append(" extends ObjectFactory<"); + out.newLine().append("private static final class ").append(globalScope.getTypeImplShortName(typeHandler)).append(Util.TYPE_FACTORY_NAME_POSTFIX).append(" extends ObjectFactory<"); out.append(originName).append('>').openBlock(); out.append("@Override").newLine().append("public ").append(originName).append(" read(").append(Util.JSON_READER_PARAMETER_DEF); out.append(')').openBlock(); out.append("return "); typeHandler.writeInstantiateCode(rootClassScope, out); - out.append('(').append(Util.READER_NAME).append(");").closeBlock(); + out.append('(').append(Util.READER_NAME).append(", null);").closeBlock(); out.closeBlock(); - out.newLine(); } out.closeBlock(); - Map, String> typeToImplClassName = new HashMap<>(); + Map, String> typeToImplClassName = new THashMap<>(); for (TypeHandler typeHandler : typeToTypeHandler.values()) { - String shortName = fileScope.getTypeImplShortName(typeHandler); - String fullReference = packageName + "." + className + "." + shortName; - typeToImplClassName.put(typeHandler.getTypeClass(), fullReference); + typeToImplClassName.put(typeHandler.getTypeClass(), packageName + "." + className + "." + fileScope.getTypeImplShortName(typeHandler)); } return new GeneratedCodeMap(typeToImplClassName); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ExistingSubtypeAspect.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ExistingSubtypeAspect.java index 4e79fb71498d..326d3f9a1c81 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ExistingSubtypeAspect.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ExistingSubtypeAspect.java @@ -1,6 +1,6 @@ package org.jetbrains.protocolReader; -class ExistingSubtypeAspect extends SubtypeAspect { +class ExistingSubtypeAspect { private SubtypeCaster subtypeCaster; private final TypeRef jsonSuperClass; @@ -12,28 +12,23 @@ class ExistingSubtypeAspect extends SubtypeAspect { this.subtypeCaster = subtypeCaster; } - @Override void writeGetSuperMethodJava(TextOutput out) { out.newLine().append("@Override").newLine().append("public ").append(jsonSuperClass.get().getTypeClass().getCanonicalName() ).append(" getSuper()").openBlock(); out.append("return ").append(Util.BASE_VALUE_PREFIX).semi().closeBlock(); } - @Override void writeSuperFieldJava(TextOutput out) { out.newLine().append("private final ").append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX).semi().newLine(); } - @Override void writeSuperConstructorParamJava(TextOutput out) { out.comma().append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX); } - @Override void writeSuperConstructorInitialization(TextOutput out) { out.append("this.").append(Util.BASE_VALUE_PREFIX).append(" = ").append(Util.BASE_VALUE_PREFIX).append(';').newLine().newLine(); } - @Override void writeParseMethod(String className, ClassScope scope, TextOutput out) { out.newLine().append("public static ").append(className).space().append("parse").append("(").append(Util.JSON_READER_PARAMETER_DEF).append(')').openBlock(); out.append("return "); @@ -44,7 +39,6 @@ class ExistingSubtypeAspect extends SubtypeAspect { out.newLine(); } - @Override public void writeInstantiateCode(String className, TextOutput out) { out.append(className).append(".parse"); } diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/FieldProcessor.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/FieldProcessor.java index 111e58caa3a6..77a91e8543d1 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/FieldProcessor.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/FieldProcessor.java @@ -1,5 +1,6 @@ package org.jetbrains.protocolReader; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jsonProtocol.JsonField; import org.jetbrains.jsonProtocol.JsonNullable; import org.jetbrains.jsonProtocol.JsonOptionalField; @@ -28,7 +29,7 @@ class FieldProcessor { // todo sort by source location Arrays.sort(methods, new Comparator() { @Override - public int compare(Method o1, Method o2) { + public int compare(@NotNull Method o1, @NotNull Method o2) { return o1.getName().compareTo(o2.getName()); } }); @@ -120,20 +121,10 @@ class FieldProcessor { int position = volatileFields.size(); FieldTypeInfo fieldTypeInfo; if (internalType) { - fieldTypeInfo = new FieldTypeInfo() { - @Override - public void appendValueTypeNameJava(FileScope scope, TextOutput out) { - fieldTypeParser.appendInternalValueTypeName(scope, out); - } - }; + fieldTypeInfo = fieldTypeParser::appendInternalValueTypeName; } else { - fieldTypeInfo = new FieldTypeInfo() { - @Override - public void appendValueTypeNameJava(FileScope scope, TextOutput out) { - fieldTypeParser.appendFinishedValueTypeName(out); - } - }; + fieldTypeInfo = (scope, out) -> fieldTypeParser.appendFinishedValueTypeName(out); } VolatileFieldBinding binding = new VolatileFieldBinding(position, fieldTypeInfo); volatileFields.add(binding); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java index 6a31b5ad59c0..9866d7b71d01 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java @@ -2,6 +2,7 @@ package org.jetbrains.protocolReader; import gnu.trove.THashMap; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import java.util.*; @@ -84,7 +85,7 @@ public class GlobalScope { // Sort to produce consistent GeneratedCodeMap later. Collections.sort(list, new Comparator>() { @Override - public int compare(TypeHandler o1, TypeHandler o2) { + public int compare(@NotNull TypeHandler o1, @NotNull TypeHandler o2) { return getName(o1).compareTo(getName(o2)); } diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/InterfaceReader.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/InterfaceReader.java index cc4e2566f4dd..a02b4ae8f18a 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/InterfaceReader.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/InterfaceReader.java @@ -117,7 +117,10 @@ class InterfaceReader { } for (SubtypeCaster subtypeCaster : subtypeCasters) { - subtypeCaster.getSubtypeHandler().getSubtypeSupport().setSubtypeCaster(subtypeCaster); + ExistingSubtypeAspect subtypeSupport = subtypeCaster.getSubtypeHandler().getSubtypeSupport(); + if (subtypeSupport != null) { + subtypeSupport.setSubtypeCaster(subtypeCaster); + } } return typeToTypeHandler; diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/MethodHandler.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/MethodHandler.java index adf5ac6f7ddf..a877b654c020 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/MethodHandler.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/MethodHandler.java @@ -4,19 +4,22 @@ package org.jetbrains.protocolReader; +import org.jetbrains.annotations.NotNull; + import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.Collections; -import java.util.Iterator; +import java.util.List; abstract class MethodHandler { abstract void writeMethodImplementationJava(ClassScope classScope, Method m, TextOutput out); - protected static void appendMethodSignatureJava(Method m, Iterable paramNames, TextOutput out) { + protected static void appendMethodSignatureJava(@NotNull Method m, @NotNull List paramNames, @NotNull TextOutput out) { out.append(m.getName()).append('('); boolean firstArg = true; - Iterator namesIt = paramNames.iterator(); - for (Type arg : m.getGenericParameterTypes()) { + Type[] types = m.getGenericParameterTypes(); + for (int i = 0, length = types.length; i < length; i++) { + Type arg = types[i]; if (firstArg) { firstArg = false; } @@ -24,7 +27,7 @@ abstract class MethodHandler { out.comma(); } Util.writeJavaTypeName(arg, out); - out.append(' ').append(namesIt.next()); + out.space().append(paramNames.get(i)); } out.append(')'); } @@ -33,10 +36,10 @@ abstract class MethodHandler { writeMethodDeclarationJava(out, m, Collections.emptyList()); } - protected static void writeMethodDeclarationJava(TextOutput out, Method m, Iterable paramNames) { + protected static void writeMethodDeclarationJava(@NotNull TextOutput out, @NotNull Method m, @NotNull List paramNames) { out.append("@Override").newLine().append("public "); Util.writeJavaTypeName(m.getGenericReturnType(), out); - out.append(' '); + out.space(); appendMethodSignatureJava(m, paramNames, out); } } diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ObjectValueReader.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ObjectValueReader.java index 025fb525c367..d6e4275ae0e3 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ObjectValueReader.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ObjectValueReader.java @@ -43,7 +43,7 @@ class ObjectValueReader extends ValueReader { refToType.get().writeInstantiateCode(scope.getRootClassScope(), subtyping, out); out.append('('); addReaderParameter(subtyping, out); - if (subtyping && refToType.get().getSubtypeSupport() instanceof ExistingSubtypeAspect) { + if (subtyping && refToType.get().getSubtypeSupport() != null) { out.comma().append("this"); } out.append(')'); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReadDelegate.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReadDelegate.java index fade272204a5..56dcc310fa83 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReadDelegate.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReadDelegate.java @@ -1,22 +1,30 @@ package org.jetbrains.protocolReader; +import org.jetbrains.annotations.NotNull; + import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Collections; import java.util.List; class ReadDelegate { private static final List STATIC_METHOD_PARAM_NAME_LIST = Collections.singletonList(Util.READER_NAME); + private static final List STATIC_METHOD_PARAM_NAME_LIST2 = Arrays.asList(Util.READER_NAME, "nextName"); private final TypeHandler typeHandler; private final boolean isList; - ReadDelegate(TypeHandler typeHandler, boolean isList) { + private final List paramNames; + + ReadDelegate(@NotNull TypeHandler typeHandler, boolean isList, boolean hasNextNameParam) { this.typeHandler = typeHandler; this.isList = isList; + + paramNames = hasNextNameParam ? STATIC_METHOD_PARAM_NAME_LIST2 : STATIC_METHOD_PARAM_NAME_LIST; } void write(ClassScope scope, Method method, TextOutput out) { - MethodHandler.writeMethodDeclarationJava(out, method, STATIC_METHOD_PARAM_NAME_LIST); + MethodHandler.writeMethodDeclarationJava(out, method, paramNames); out.openBlock(); out.append("return "); if (isList) { @@ -24,7 +32,10 @@ class ReadDelegate { } else { typeHandler.writeInstantiateCode(scope, out); - out.append("(").append(Util.READER_NAME).append(')'); + out.append('(').append(Util.READER_NAME); + out.comma().space(); + out.append(paramNames.size() == 1 ? "null" : "nextName"); + out.append(')'); } out.semi(); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java index 6988139a5bcb..8299afe91ece 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java @@ -18,7 +18,7 @@ public class ReaderGenerator { configuration.getPackageName().replace('.', File.separatorChar), configuration.getClassName() + ".java")); - generateImpl(configuration, fileUpdater.builder); + generate(configuration, fileUpdater.builder); fileUpdater.update(); } @@ -96,12 +96,7 @@ public class ReaderGenerator { } } - return new Params() { - @Override - public String outputDirectory() { - return outputDirParam.getValue(); - } - }; + return outputDirParam::getValue; } private interface ParamListener { @@ -128,12 +123,12 @@ public class ReaderGenerator { } protected static GeneratedCodeMap buildParserMap(GenerateConfiguration configuration) { - return generateImpl(configuration, new StringBuilder()); + return generate(configuration, new StringBuilder()); } - private static GeneratedCodeMap generateImpl(GenerateConfiguration configuration, StringBuilder stringBuilder) { - return configuration.getParser().generateStaticReader(stringBuilder, - configuration.getPackageName(), configuration.getClassName(), - configuration.getBasePackagesMap()); + private static GeneratedCodeMap generate(GenerateConfiguration configuration, StringBuilder stringBuilder) { + return configuration.getParser().generateReader(stringBuilder, + configuration.getPackageName(), configuration.getClassName(), + configuration.getBasePackagesMap()); } } diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderRoot.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderRoot.java index 7914a5103ac6..f7ce9eb9eb39 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderRoot.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderRoot.java @@ -1,7 +1,8 @@ package org.jetbrains.protocolReader; -import org.jetbrains.io.JsonReaderEx; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.io.JsonReaderEx; import org.jetbrains.jsonProtocol.JsonParseMethod; import java.lang.reflect.Method; @@ -32,7 +33,7 @@ class ReaderRoot { Method[] methods = clazz.getMethods(); Arrays.sort(methods, new Comparator() { @Override - public int compare(Method o1, Method o2) { + public int compare(@NotNull Method o1, @NotNull Method o2) { return o1.getName().compareTo(o2.getName()); } }); @@ -68,12 +69,12 @@ class ReaderRoot { } Type[] arguments = m.getGenericParameterTypes(); - if (arguments.length != 1) { + if (arguments.length > 2) { throw new JsonProtocolModelParseException("Exactly one argument is expected in " + m); } Type argument = arguments[0]; if (argument == JsonReaderEx.class || argument == Object.class) { - methodMap.put(m, new ReadDelegate(typeHandler, isList)); + methodMap.put(m, new ReadDelegate(typeHandler, isList, arguments.length != 1)); } else { throw new JsonProtocolModelParseException("Unrecognized argument type in " + m); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/SubtypeAspect.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/SubtypeAspect.java deleted file mode 100644 index 9af37de01e55..000000000000 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/SubtypeAspect.java +++ /dev/null @@ -1,19 +0,0 @@ -package org.jetbrains.protocolReader; - -/** - * Encapsulate subtype aspects of the type. - */ -abstract class SubtypeAspect { - abstract void writeSuperFieldJava(TextOutput out); - abstract void writeSuperConstructorParamJava(TextOutput out); - abstract void writeSuperConstructorInitialization(TextOutput out); - - abstract void writeParseMethod(String className, ClassScope scope, TextOutput out); - - public abstract void writeInstantiateCode(String className, TextOutput out); - - abstract void writeGetSuperMethodJava(TextOutput out); - - public void setSubtypeCaster(SubtypeCaster subtypeCaster) { - } -} \ No newline at end of file diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java index 401fbcff79d0..a2aaf4424429 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java @@ -1,9 +1,7 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - package org.jetbrains.protocolReader; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jsonProtocol.JsonObjectBased; import java.lang.reflect.Method; @@ -16,14 +14,13 @@ class TypeHandler { private final List volatileFields; - /** Method implementation for dynamic proxy. */ private final LinkedHashMap methodHandlerMap; /** Loaders that should read values and save them in field array on parse time. */ private final List fieldLoaders; /** Subtype aspects of the type or null */ - private final SubtypeAspect subtypeAspect; + private final ExistingSubtypeAspect subtypeAspect; private final boolean hasLazyFields; @@ -37,29 +34,25 @@ class TypeHandler { this.methodHandlerMap = methodHandlerMap; this.fieldLoaders = fieldLoaders; this.hasLazyFields = hasLazyFields; - if (jsonSuperClass == null) { - subtypeAspect = new AbsentSubtypeAspect(); - } - else { - subtypeAspect = new ExistingSubtypeAspect(jsonSuperClass); - } + subtypeAspect = jsonSuperClass == null ? null : new ExistingSubtypeAspect(jsonSuperClass); } public Class getTypeClass() { return typeClass; } - public SubtypeAspect getSubtypeSupport() { + @Nullable + public ExistingSubtypeAspect getSubtypeSupport() { return subtypeAspect; } - public void writeInstantiateCode(ClassScope scope, TextOutput out) { + public void writeInstantiateCode(@NotNull ClassScope scope, @NotNull TextOutput out) { writeInstantiateCode(scope, false, out); } - public void writeInstantiateCode(ClassScope scope, boolean deferredReading, TextOutput out) { + public void writeInstantiateCode(@NotNull ClassScope scope, boolean deferredReading, @NotNull TextOutput out) { String className = scope.getTypeImplReference(this); - if (deferredReading) { + if (deferredReading || subtypeAspect == null) { out.append("new ").append(className); } else { @@ -67,10 +60,10 @@ class TypeHandler { } } - public void writeStaticClassJava(FileScope fileScope) { + public void writeStaticClassJava(@NotNull FileScope fileScope) { TextOutput out = fileScope.getOutput(); String valueImplClassName = fileScope.getTypeImplShortName(this); - out.append("public static final class ").append(valueImplClassName); + out.append("private static final class ").append(valueImplClassName); out.append(" implements ").append(getTypeClass().getCanonicalName()).openBlock(); @@ -89,12 +82,16 @@ class TypeHandler { out.newLine(); } - subtypeAspect.writeSuperFieldJava(out); + if (subtypeAspect != null) { + subtypeAspect.writeSuperFieldJava(out); + } writeConstructorMethod(valueImplClassName, classScope, out); out.newLine(); - subtypeAspect.writeParseMethod(valueImplClassName, classScope, out); + if (subtypeAspect != null) { + subtypeAspect.writeParseMethod(valueImplClassName, classScope, out); + } for (Map.Entry en : methodHandlerMap.entrySet()) { out.newLine(); @@ -103,7 +100,9 @@ class TypeHandler { } writeBaseMethods(out); - subtypeAspect.writeGetSuperMethodJava(out); + if (subtypeAspect != null) { + subtypeAspect.writeGetSuperMethodJava(out); + } out.indentOut().append('}'); } @@ -132,27 +131,47 @@ class TypeHandler { out.closeBlock(); } - private void writeConstructorMethod(String valueImplClassName, ClassScope classScope, TextOutput out) { - out.newLine().append("public ").append(valueImplClassName).append("(").append(Util.JSON_READER_PARAMETER_DEF); - subtypeAspect.writeSuperConstructorParamJava(out); + private void writeConstructorMethod(@NotNull String valueImplClassName, @NotNull ClassScope classScope, @NotNull TextOutput out) { + out.newLine().append(valueImplClassName).append('(').append(Util.JSON_READER_PARAMETER_DEF).comma().append("String name"); + if (subtypeAspect != null) { + subtypeAspect.writeSuperConstructorParamJava(out); + } out.append(')').openBlock(); - subtypeAspect.writeSuperConstructorInitialization(out); + if (subtypeAspect != null) { + subtypeAspect.writeSuperConstructorInitialization(out); + } if (JsonObjectBased.class.isAssignableFrom(typeClass) || hasLazyFields) { - out.append(Util.PENDING_INPUT_READER_NAME).append(" = ").append(Util.READER_NAME).append(".subReader();").newLine(); + out.append(Util.PENDING_INPUT_READER_NAME).append(" = ").append(Util.READER_NAME).append(".subReader()").semi().newLine(); } if (fieldLoaders.isEmpty()) { out.append(Util.READER_NAME).append(".skipValue()").semi(); } else { - out.append(Util.READER_NAME).append(".beginObject();"); + out.append("if (name == null)").openBlock(); + { + out.append("reader.beginObject()").semi(); + out.newLine().append("if (reader.hasNext())").openBlock(); + { + out.append("name = reader.nextName()").semi(); + } + out.closeBlock(); + out.newLine().append("else").openBlock(); + { + out.append("return").semi(); + } + out.closeBlock(); + } + out.closeBlock(); + out.newLine(); + writeReadFields(out, classScope); // we don't read all data if we have lazy fields, so, we should not check end of stream //if (!hasLazyFields) { - out.newLine().append(Util.READER_NAME).append(".endObject();"); + out.newLine().newLine().append(Util.READER_NAME).append(".endObject()").semi(); //} } out.closeBlock(); @@ -166,16 +185,16 @@ class TypeHandler { out.newLine().append("int i = 0").semi(); } - out.newLine().append("while (reader.hasNext())").openBlock(!hasOnlyOneFieldLoader); - if (!hasOnlyOneFieldLoader) { - out.append("CharSequence name = reader.nextNameAsCharSequence();"); - } - + out.newLine().append("do").openBlock(); boolean isFirst = true; String operator = "if"; for (FieldLoader fieldLoader : fieldLoaders) { + if (!isFirst) { + out.newLine(); + } + String fieldName = fieldLoader.getFieldName(); - out.newLine().append(operator).append(" (").append(hasOnlyOneFieldLoader ? "reader.nextName()" : "name"); + out.append(operator).append(" (").append(hasOnlyOneFieldLoader ? "reader.nextName()" : "name"); out.append(".equals(\"").append(fieldName).append("\"))").openBlock(); { assignField(out, fieldName); @@ -204,6 +223,7 @@ class TypeHandler { out.newLine().append("else").openBlock().append("i++").semi().closeBlock(); } out.closeBlock(); + out.newLine().append("while ((name = reader.nextNameOrNull()) != null)").semi(); } private static TextOutput assignField(TextOutput out, String fieldName) { diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/Util.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/Util.java index 105cd6665b2e..13c7fd1c39e0 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/Util.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/Util.java @@ -1,5 +1,7 @@ package org.jetbrains.protocolReader; +import org.jetbrains.annotations.NotNull; + import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.WildcardType; @@ -14,12 +16,12 @@ public class Util { public static final String BASE_VALUE_PREFIX = "baseMessage"; public static final String JSON_READER_CLASS_NAME = "org.jetbrains.io.JsonReaderEx"; - public static final String JSON_READER_PARAMETER_DEF = JSON_READER_CLASS_NAME + " " + READER_NAME; + public static final String JSON_READER_PARAMETER_DEF = JSON_READER_CLASS_NAME + ' ' + READER_NAME; /** * Generate Java type name of the passed type. Type may be parameterized. */ - public static void writeJavaTypeName(Type arg, TextOutput out) { + public static void writeJavaTypeName(@NotNull Type arg, @NotNull TextOutput out) { if (arg instanceof Class) { out.append(((Class)arg).getCanonicalName()); } From 3542ff05a7ee30525728d2dc04be410fde48eb05 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 17:39:16 +0200 Subject: [PATCH 062/217] update icons for new welcome --- platform/icons/src/welcome/createNewProject.png | Bin 410 -> 442 bytes .../icons/src/welcome/createNewProject@2x.png | Bin 741 -> 857 bytes platform/icons/src/welcome/fromVCS.png | Bin 247 -> 225 bytes platform/icons/src/welcome/fromVCS@2x.png | Bin 374 -> 318 bytes platform/icons/src/welcome/importProject.png | Bin 250 -> 321 bytes platform/icons/src/welcome/importProject@2x.png | Bin 438 -> 487 bytes platform/icons/src/welcome/openProject.png | Bin 174 -> 183 bytes platform/icons/src/welcome/openProject@2x.png | Bin 226 -> 218 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/welcome/createNewProject.png b/platform/icons/src/welcome/createNewProject.png index 3bf27883974ba38d7fb7d6afcd8482799f36dde6..27f390cbaeebd33a9c4cc08059f9812b90db677e 100644 GIT binary patch delta 417 zcmV;S0bc%^1G)o{BYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz zTuDShRCwBi(#tD^Q5eVZcU~j5l!kFjVIvEa71>!ywwRSafXsrOe?ZAXDP=qU03yl) z$xgYf6uFEHWg`paGQN*~uTICzIQ8j$&pFR|&NX(C9u7*B4u6C=D;5yyTV13-h4BLI zF;uw;tg?eXFK85FPMnoNY)5TT$0ZJNfGzYWSu+~Zk6!F*@H(DiT6>C3L9qwPce%Y4B$~gtEfR8R@C;65#3B0Cvhk1mkutW z`jE2)cjk6{7CJ=R-;(|)PzfW^j#t z+~7_x^a|73|B)sMqBA%a{}$Fz<}BaJi&hf235u1>KN|hPw*UhGS${`2FtM5{00000 LNkvXXu0mjf*Oa?w delta 384 zcmV-`0e}9w1DXSnBYy#5NkliYS!X zU_wd^aQ+d{fO%6tz&8l1)G$@y2W-QLs)3^14#PY_f5Z6>{;u(fzt e6J-ga-17rmCLmU2C#c&10000fVvI< diff --git a/platform/icons/src/welcome/createNewProject@2x.png b/platform/icons/src/welcome/createNewProject@2x.png index 4486b9a4a32654c9269af684c0a7164b467c18b3..b1df70704f192e4c165e293b3a01b07cbb2be9e8 100644 GIT binary patch delta 835 zcmV-J1HAm@1=$9WBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU! z`$HGC&^`qNHj6?f;2TI^1wV$iWv=#aT))w{zt22?X}n0dw=GuU+ultUf=rG+TShu zsyZ17A=AMC&>B=hED}ztKstcT-_Ndapsz$7pM%yV2*1S-7@$WhS~ zu-HLa+T+>lpz=){7-;(ihrnoXpUk$LWS#Q978HAYy9_)9b>KC)Wivo-VJDyE7Mj5g zFjM<(DHy4|kADEmwQt1uhu}7t1%86vE>0*GUQ^yzfoI?{m}a^1v=W+E`70MF^QS=j zf1d1-2PT4-V6Zm+3tR;24Rbjfxe3IzxsRY6bh?J&J8;l2E{ZdT&GS)|F>Ee!z_htv z9yo5gvHGEUV1EcGp`*4LzLT|0K~k|KizJ;Y zY1n)&!?PQF1&tijjY!dm6my5wfG9KJ8SnvI2OB^_TeIK8p}N36Z7jivk+6ObYQcQ& z^)C!(Fox62?S4|iQ%5`^;k$zliL!bj#(Ey_gVJ1x6qC4Y`U30$lfgo84t%mKUSyfG zRa3c{OMhSm7!Rr?MAcJEs5}DOz&Nl5TrphfVNhz=U?@1EjpcQ21!MV}r8fNbi-I3? z9I1GB4Q-g@`IU6C1fQEZr^*-VxIia0rdFG51gkxI!J7{MdKfs$8z?vtjRB|oz~Q!l zIYA7lWt|Tz67w~THfIAiGkfXMO~bw!=5m}f<$nliNVdBgAQ5m<8+*gBDWf9O|8L}+ zG^u+*hc++eeUys6JX0 zUQX|5$*Pm_t#?libU-1?JW%0fKoQ@|*ax)x^a@$!JFrKotR@uG+)g*J^^ zgEoo{epV`a@tDmXJ$Xg#niNE1;3)GAb#Bh=sy4zfq_&FoG*0$Pa(dl27}8jiQ5$6?P&Wc?H{iUl)vh^4Gu?25Jf zH~6Y2LBLVKVpXpV|K6rd(bfPJj$UI zPz{cNCm<|3O@CHlaz6+p@Qf$tbeBjx4IBg`AnNoA<^W#OpI`v2rC`~QS1XtOE8scB z%6`>UogwnOFIQNlHY_a6=>q}Dr&aRdY?FLeft!N;2Uuac39l&fEja zUp*xMLMO>nC+znipx5sb=u+YbovBr&nULQB$J=;F9cWklv|&30s9VxSO=8h|ih8Z_kp5Z}S0`92O*%{N?u_!@{kp)>_Cl3=m)dvehky@;Icr;?ei-4FNW>f$OM-Z?b8P7urL?oOH z6#PX%^Gu9bK*qrE$i}02I@V}JGXR83v1p!!CE4RN0EFAH`I!_0Kp3QP0WQrT3;<9R VEccCwO*jAm002ovPDHLkV1mxHTvq@9 diff --git a/platform/icons/src/welcome/fromVCS@2x.png b/platform/icons/src/welcome/fromVCS@2x.png index 1734213448d9e0701e2abfbe0da8941d3c709546..d19eb74ea8c9f2a8b166ec5c19363e98ee40e391 100644 GIT binary patch delta 292 zcmV+<0o(re0=@!}BYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy z;7LS5RCwBA{Qv(y!$1Nih5-gFFoyTk{e;w#8dQwdBqG?R%G*OCeFhAI;&@kIt8n68+JNU`}8IG~tN&LXBDnhM0z z$*>%xXCk#qLQ=~Jl)O$22ar-mkd$_qsFj+@%{@%i%FpDMALP`A*nCNL2}*8tj2zDt q)gdfYsMS~~sU1ZbM||%XAiw~_VNSAe*4Ci_0000xsBYy!sNklVRS800uG~z(A}6a)G!Ph}-bssbn}{DgiV5fjA4~ zfM_xdrxp%|1%(q3|DdDAPdq2@H2_BekO9U(jy({6ri10TfPeOBz|#QC0Z{A;6#Pyr z%Yo*f17caIhp{>Ugac^gfD1sg6_7$4rvpF|{y_Yjik5?XE{A3ZZU;bdC{V#aDg^s} zAQr;nNrDal;aCbCuoq|sKaNl)$^jrnab#M)2dG~dkGaG-0E*K{4EC)+%uT>!Bsl0onfg0l@;0B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0002v zNklB?AFa4#bm~7{~*eK-><*{EX->Aj0N!Af5)qAj^62xxfU6 zv!_EfzXakh_zc(!#5Pbi2N2Hz;tn8Ygo^D05nwNLc6Gyb@qfLQgE2vV`v$}rKwJpK zhG-Tz0`UPBB*kFxN%#?n%7q%l1;mT6xDMo+0}N2VkP3DHaW;&@f+op`07*qoM6N<$g03cc5dZ)H delta 222 zcmV<403rXu0{Q`vB!9t4L_t(|+GF_t|33pIm|@@zh+dp=3y7cNz^{P#1rX;0F#|RX zBK{M=cY#0ax)FAl{24rUZ+|cR*|j zwZRIAUlS3%EwESsg|;V}|IC2+A|B0aftV9!fDMj75{IV1J6ph+APCdOCm+h#P>oABaCw z6a{1eE+C!<#Nkl>Kaw3lLA)yg@j4*ZM-qEYNfdCApw=0P&wrp<4gwD;allp}<|RU1 zCJ^rcVnHl&_b73I0}$`RVK4}A0P!3ko`xri&r+HTEP!|~5R0OTD+2K`AWp`k_dhgb zD9(n4KztC0rJ#IoAU+2b#|O3}rvZ2nb#`^*)y2mkhfP=$hz|qtHXzQ1=5<1#16NUu zw^H~d{0KxP@_)UR!X)YUO@bjQU{O& z9s{ux5I-TcI!5s=Qrs^g!ScI6>;l9Oa4Dc=2!IlG6F$pn?Ep{+&PJ*M>Fxj!U<2Z% zK%6j84gdjWXj>p_pd0{;j;TOg2CgPM!zpT%GNP4`F-K^*g_K-El_uF@G(K${0Ids% zQdeG9O0)w8qFGLK2+*a=G~gjH>Hx-p?i~+!2mk~a0HcIT_9(n_c>n+a07*qoM6N<$ Ef|S9tE&u=k delta 413 zcmV;O0b>5=1GWQ@BYy#XNklhT5&x-(L&$N!M=DtS9*8YTwVYZG0O|K4$8u^o;42VEl507o4)_bisgzhwi331B z&!^OKAl4<<0S#2J9E9u1b-+w2Sgs7jYbi+sEfhKc z^ehKr4tx&S2*is>bOTzK@QtW zq2-T(SRPx8=oHkKgt8DQg*TCD`5hqE!&Vz^2VyxA3lnP~UI@g$iL@M~RuNZqEJ0>* z$^pb$K%4=@i=md%B!6{DL_t(|+G998(cl&kKgWWv1FWn4l^$t?!8R01E&B07*qoM6N<$f>Dq< Ah5!Hn diff --git a/platform/icons/src/welcome/openProject@2x.png b/platform/icons/src/welcome/openProject@2x.png index 35646a827e078efae33a6b021182dcecfbaa0d1f..8e8c4d2ca40bc847cb2571deaca3600ccfdf7c20 100644 GIT binary patch delta 190 zcmV;v073ua0onnOB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0001d zNklsW%D!k4C|$14bP%>VQ!P s47s}C|7aA92nR5Z_6ZOR3WNaP(5R_+5W;;nPVs)OClpbexQa@<{R5Jjo00bZa0k8my z832U^(2Qcwns|;E3mAxiK>^*k1xB6Ff5&XV4`MO+R$0+s3IG5A07*qoM6N<$f=k;{ AC;$Ke From 3f102212fa657310018fae662194667d36e66277 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 17:39:44 +0200 Subject: [PATCH 063/217] put Register action in left bottom corner --- .../impl/welcomeScreen/FlatWelcomeFrame.java | 58 +++++++++++++------ 1 file changed, 41 insertions(+), 17 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 2d77629feeb5..320171a1e55f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -59,7 +59,6 @@ import java.awt.event.*; import java.io.File; import java.io.InputStream; import java.net.URL; -import java.util.Arrays; /** * @author Konstantin Bulenkov @@ -173,6 +172,10 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { return new JBColor(Gray.xFF, new Color(58, 61, 63)); } + public static Color getLinkNormalColor() { + return new JBColor(Gray._0, Gray.xBB); + } + private class FlatWelcomeScreen extends JPanel implements WelcomeScreen { public FlatWelcomeScreen() { super(new BorderLayout()); @@ -224,17 +227,41 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } private JComponent createSettingsAndDocs() { - NonOpaquePanel toolbar = new NonOpaquePanel(); - toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS)); - toolbar.add(createActionLink("Configure", IdeActions.GROUP_WELCOME_SCREEN_CONFIGURE, AllIcons.General.Settings)); - toolbar.add(createActionLink("Get Help", IdeActions.GROUP_WELCOME_SCREEN_DOC, null)); JPanel panel = new NonOpaquePanel(new BorderLayout()); + NonOpaquePanel toolbar = new NonOpaquePanel(); + AnAction register = ActionManager.getInstance().getAction("Register"); + boolean registeredVisible = false; + if (register != null) { + Presentation presentation = register.getTemplatePresentation(); + register.update(new AnActionEvent(null, DataManager.getInstance().getDataContext(this), + ActionPlaces.WELCOME_SCREEN, presentation, ActionManager.getInstance(), 0)); + if (presentation.isEnabled()) { + ActionLink registerLink = new ActionLink("Register", register); + registerLink.setNormalColor(getLinkNormalColor()); + NonOpaquePanel button = new NonOpaquePanel(new BorderLayout()); + button.setBorder(new EmptyBorder(4, 10, 4, 10)); + button.add(registerLink); + installFocusable(button, register, KeyEvent.VK_UP, KeyEvent.VK_RIGHT, true); + NonOpaquePanel wrap = new NonOpaquePanel(); + wrap.setBorder(new EmptyBorder(0, 10, 0, 0)); + wrap.add(button); + panel.add(wrap, BorderLayout.WEST); + registeredVisible = true; + } + } + + toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS)); + toolbar.add(createActionLink("Configure", IdeActions.GROUP_WELCOME_SCREEN_CONFIGURE, AllIcons.General.Settings, !registeredVisible)); + toolbar.add(createActionLink("Get Help", IdeActions.GROUP_WELCOME_SCREEN_DOC, null, false)); + panel.add(toolbar, BorderLayout.EAST); + + panel.setBorder(new EmptyBorder(0,0,8,21)); return panel; } - private JComponent createActionLink(final String text, final String groupId, Icon icon) { + private JComponent createActionLink(final String text, final String groupId, Icon icon, boolean focusListOnLeft) { final Ref settings = new Ref(null); AnAction action = new AnAction() { @Override @@ -248,11 +275,14 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { }; settings.set(new ActionLink(text, icon, action)); settings.get().setPaintUnderline(false); + settings.get().setNormalColor(getLinkNormalColor()); NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); - panel.setBorder(new EmptyBorder(4, 16, 4, 4)); + panel.setBorder(new EmptyBorder(4, 10, 4, 10)); panel.add(settings.get()); - panel.add(new JLabel(AllIcons.General.Combo2), BorderLayout.EAST); - installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, !Arrays.asList("Get Help", "Register").contains(text)); + JLabel arrow = new JLabel(AllIcons.General.Combo2); + arrow.setVerticalAlignment(SwingConstants.BOTTOM); + panel.add(arrow, BorderLayout.EAST); + installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, focusListOnLeft); return panel; } @@ -264,12 +294,6 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { DefaultActionGroup group = new DefaultActionGroup(); collectAllActions(group, quickStart); - // so, we sure this is the last action - final AnAction register = actionManager.getAction("WelcomeScreen.Register"); - if (register != null) { - group.add(register); - } - for (AnAction action : group.getChildren(null)) { JPanel button = new JPanel(new BorderLayout()); button.setOpaque(false); @@ -280,7 +304,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { if (presentation.isVisible()) { ActionLink link = new ActionLink(presentation.getText(), presentation.getIcon(), action); link.setPaintUnderline(false); - link.setNormalColor(new JBColor(Gray._0, Gray.xBB)); + link.setNormalColor(getLinkNormalColor()); installFocusable(button, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); button.add(link); actions.add(button); @@ -306,7 +330,6 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { private JComponent createLogo() { NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); JLabel logo = new JLabel(IconLoader.getIcon(ApplicationInfoEx.getInstanceEx().getWelcomeScreenLogoUrl())); - logo.setBorder(new EmptyBorder(20, 0, 0, 0)); logo.setHorizontalAlignment(SwingConstants.CENTER); panel.add(logo, BorderLayout.NORTH); JLabel appName = new JLabel(ApplicationNamesInfo.getInstance().getFullProductName()); @@ -321,6 +344,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { panel.add(appName); panel.add(version, BorderLayout.SOUTH); + panel.setBorder(new EmptyBorder(20, 10, 30, 10)); return panel; } From fdc313450baf1bdf11743cfc319d4037cf897ac5 Mon Sep 17 00:00:00 2001 From: "Vassiliy.Kudryashov" Date: Wed, 22 Oct 2014 19:53:46 +0400 Subject: [PATCH 064/217] IDEA-131592 Menu disappeared after debugging Node application --- .../platform-impl/src/com/intellij/ui/BalloonImpl.java | 9 +++++++++ .../com/intellij/xdebugger/impl/ui/BreakpointEditor.java | 4 ---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java index d41d0bb5ef18..88353779a83c 100644 --- a/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java @@ -57,6 +57,7 @@ import java.awt.geom.GeneralPath; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; +import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; @@ -792,6 +793,7 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui { private void hideAndDispose(final boolean ok) { if (myDisposed) return; myDisposed = true; + hideComboBoxPopups(); final Runnable disposeRunnable = new Runnable() { @Override @@ -827,6 +829,13 @@ public class BalloonImpl implements Balloon, IdeTooltip.Ui { myTracker = null; } + private void hideComboBoxPopups() { + List comboBoxes = UIUtil.findComponentsOfType(myComp, JComboBox.class); + for (JComboBox box : comboBoxes) { + box.hidePopup(); + } + } + protected void onDisposed() { } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/BreakpointEditor.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/BreakpointEditor.java index 5c14020f603f..79c8dc49c398 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/BreakpointEditor.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/BreakpointEditor.java @@ -90,10 +90,6 @@ public class BreakpointEditor { } public void actionPerformed(AnActionEvent e) { - Component component = PlatformDataKeys.CONTEXT_COMPONENT.getData(e.getDataContext()); - if (component instanceof JComboBox && SwingUtilities.isDescendingFrom(component, getMainPanel())) { - ((JComboBox)component).hidePopup(); - } done(); } }; From 01d3aedd0430f067e83f8fb8d48bc5063dc6ba31 Mon Sep 17 00:00:00 2001 From: Alexander Kirillin Date: Wed, 22 Oct 2014 18:25:04 +0400 Subject: [PATCH 065/217] OC-10346 AppCode marks available API as not available for deployment target 10.10 --- platform/util/src/com/intellij/openapi/util/Version.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/openapi/util/Version.java b/platform/util/src/com/intellij/openapi/util/Version.java index afcd6eaaecf7..638d3100d7b6 100644 --- a/platform/util/src/com/intellij/openapi/util/Version.java +++ b/platform/util/src/com/intellij/openapi/util/Version.java @@ -1,8 +1,9 @@ package com.intellij.openapi.util; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class Version { +public class Version implements Comparable { public final int major; public final int minor; public final int bugfix; @@ -49,6 +50,10 @@ public class Version { return compareTo(major, minor, bugfix) < 0; } + public int compareTo(@NotNull Version version) { + return compareTo(version.major, version.minor, version.bugfix); + } + public int compareTo(@Nullable Integer major) { return compareTo(major, null); } From 3723e7b196b9f21ecc7b9f8bbac5cd650c015577 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 22 Oct 2014 20:36:57 +0400 Subject: [PATCH 066/217] IDEA-131530 Search field in Settings dialog should receive focus when you start typing --- .../intellij/openapi/options/newEditor/SettingsFilter.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsFilter.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsFilter.java index 1885a852c5da..fdd4fa96aaee 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsFilter.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsFilter.java @@ -22,6 +22,7 @@ import com.intellij.openapi.options.ConfigurableGroup; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.ActionCallback; +import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.LightColors; import com.intellij.ui.SearchTextField; @@ -58,6 +59,11 @@ abstract class SettingsFilter extends ElementFilter.Active.Impl { @Override protected void textChanged(DocumentEvent event) { update(event.getType(), true, false); + // request focus if needed on changing the filter text + IdeFocusManager manager = IdeFocusManager.findInstanceByComponent(mySearch); + if (manager.getFocusedDescendantFor(mySearch) == null) { + manager.requestFocus(mySearch, true); + } } }); mySearch.getTextEditor().addMouseListener(new MouseAdapter() { From 95055340e3500568ff40cd6ed1f641d2f303ffe6 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 22 Oct 2014 20:42:20 +0400 Subject: [PATCH 067/217] 118571 Implemented ability to configure svn command line client locale in "Subversion" settings (instead of using "svn.executable.locale" registry key) --- .../openapi/ui/FixedComboBoxEditor.java | 6 ++- .../util/resources/misc/registry.properties | 1 - .../idea/svn/SvnApplicationSettings.java | 11 +++++ .../jetbrains/idea/svn/SvnBundle.properties | 2 + .../jetbrains/idea/svn/SvnConfigurable.form | 32 ++++++++++---- .../jetbrains/idea/svn/SvnConfigurable.java | 43 ++++++++++++++++++- .../idea/svn/api/CmdVersionClient.java | 3 +- .../idea/svn/commandLine/CommandExecutor.java | 11 +++-- .../idea/svn/commandLine/CommandRuntime.java | 12 ++++-- .../svn/commandLine/TerminalExecutor.java | 4 +- .../svn/commandLine/WinTerminalExecutor.java | 4 +- 11 files changed, 101 insertions(+), 28 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/FixedComboBoxEditor.java b/platform/platform-api/src/com/intellij/openapi/ui/FixedComboBoxEditor.java index 2066f661ca89..317d44c364bd 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/FixedComboBoxEditor.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/FixedComboBoxEditor.java @@ -21,6 +21,7 @@ import com.intellij.ui.components.JBTextField; import com.intellij.util.ReflectionUtil; import com.intellij.util.ui.MacUIUtil; import com.intellij.util.ui.UIUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -47,7 +48,7 @@ public class FixedComboBoxEditor implements ComboBoxEditor { public static final Border EDITOR_BORDER = new MacComboBoxEditorBorder(false); public static final Border DISABLED_EDITOR_BORDER = new MacComboBoxEditorBorder(true); - private JBTextField myField; + @NotNull private final JBTextField myField; private Object oldValue; public FixedComboBoxEditor() { @@ -60,7 +61,8 @@ public class FixedComboBoxEditor implements ComboBoxEditor { } } - protected JTextField getField() { + @NotNull + public JBTextField getField() { return myField; } diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index d2365fb50adc..92ff474f2d4f 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -353,7 +353,6 @@ search.everywhere.configurations=true search.everywhere.settings=false svn.use.incoming.optimization=false -svn.executable.locale=en_US.UTF-8 svn.lowest.supported.format.for.command.line=1.7.0 svn.use.svnkit.for.https.server.certificate.check=true diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java index a01dc322d9a3..5cf6d6db4389 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnApplicationSettings.java @@ -18,6 +18,7 @@ package org.jetbrains.idea.svn; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; @@ -43,6 +44,7 @@ public class SvnApplicationSettings implements PersistentStateComponent myCheckoutURLs = new ArrayList(); public List myTypedURLs = new ArrayList(); public String mySvnCommandLine = "svn"; + public String myExecutableLocale = SvnConfigurable.EN_US_LOCALE; } private ConfigurationBean myConfigurationBean; @@ -74,6 +76,15 @@ public class SvnApplicationSettings implements PersistentStateComponentEmulates the behavior when Subversion commands are executed directly from the terminal (in the interactive mode).
\ This is required to handle password/passphrase prompts for svn+ssh repositories, and trust invalid server certificates for https repositories. +command.line.locale.label=Locale\: +command.line.locale.system.default.title= ssh.settings.title=SSH Settings ssh.settings.executable.label=SSH executable\: diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form index b3d5afb2e2d4..12ca521de64a 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form @@ -18,7 +18,7 @@ - + @@ -29,7 +29,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -123,18 +123,18 @@ - + - + - + @@ -158,7 +158,7 @@ - + @@ -167,12 +167,26 @@ - + + + + + + + + + + + + + + +
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index 2433a816adce..e28fe277beb1 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -24,6 +24,8 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.ComboBox; +import com.intellij.openapi.ui.FixedComboBoxEditor; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.SystemInfo; @@ -31,10 +33,13 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.ui.CollectionComboBoxModel; +import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ui.MultiLineTooltipUI; import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBRadioButton; import com.intellij.util.Consumer; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,11 +52,18 @@ import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import java.io.File; +import java.util.List; public class SvnConfigurable implements Configurable { public static final String DISPLAY_NAME = SvnVcs.VCS_DISPLAY_NAME; + + public static final String EN_US_LOCALE = "en_US.UTF-8"; + public static final List EXECUTABLE_LOCALES = ContainerUtil.newArrayList("", EN_US_LOCALE, "C.UTF-8", "C"); + private final Project myProject; private JCheckBox myUseDefaultCheckBox; private TextFieldWithBrowseButton myConfigurationDirectoryText; @@ -68,6 +80,7 @@ public class SvnConfigurable implements Configurable { private JCheckBox myShowMergeSourceInAnnotate; private JBCheckBox myWithCommandLineClient; private JBCheckBox myRunUnderTerminal; + private ComboBox myLocalesList; private JSpinner myNumRevsInAnnotations; private JCheckBox myMaximumNumberOfRevisionsCheckBox; private JSpinner mySSHConnectionTimeout; @@ -108,7 +121,28 @@ public class SvnConfigurable implements Configurable { } }); myCommandLineClient.addBrowseFolderListener("Subversion", "Select path to Subversion executable (1.7+)", project, - FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()); + FileChooserDescriptorFactory.createSingleFileNoJarsDescriptor()); + //noinspection unchecked + myLocalesList.setModel(new CollectionComboBoxModel(EXECUTABLE_LOCALES)); + myLocalesList.setEditable(true); + FixedComboBoxEditor editor = new FixedComboBoxEditor(); + editor.getField().getEmptyText().setText(SvnBundle.message("command.line.locale.system.default.title")); + myLocalesList.setEditor(editor); + myLocalesList.setRenderer(new ListCellRendererWrapper() { + + @Override + public void customize(JList list, String value, int index, boolean selected, boolean hasFocus) { + setText(StringUtil.isEmpty(value) ? SvnBundle.message("command.line.locale.system.default.title") : value); + } + }); + myLocalesList.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + myLocalesList.getEditor().setItem(myLocalesList.getSelectedItem()); + } + } + }); myClearAuthButton.addActionListener(new ActionListener(){ public void actionPerformed(final ActionEvent e) { @@ -263,6 +297,7 @@ public class SvnConfigurable implements Configurable { if (! getSelectedSSL().equals(configuration.getSslProtocols())) return true; final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); if (! Comparing.equal(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim())) return true; + if (!Comparing.equal(applicationSettings17.getExecutableLocale(), myLocalesList.getEditor().getItem())) return true; if (!configuration.getConfigurationDirectory().equals(myConfigurationDirectoryText.getText().trim())) return true; return mySshSettingsPanel.isModified(configuration); } @@ -292,13 +327,16 @@ public class SvnConfigurable implements Configurable { final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); boolean reloadWorkingCopies = !acceleration().equals(configuration.getUseAcceleration()) || - !StringUtil.equals(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim()); + !StringUtil.equals(applicationSettings17.getCommandLinePath(), myCommandLineClient.getText().trim()) || + !StringUtil.equals(applicationSettings17.getExecutableLocale(), + myLocalesList.getEditor().getItem().toString()); configuration.setUseAcceleration(acceleration()); configuration.setRunUnderTerminal(myRunUnderTerminal.isSelected()); configuration.setSslProtocols(getSelectedSSL()); SvnVcs.getInstance(myProject).getSvnKitManager().refreshSSLProperty(); applicationSettings17.setCommandLinePath(myCommandLineClient.getText().trim()); + applicationSettings17.setExecutableLocale(myLocalesList.getEditor().getItem().toString()); boolean isClientValid = vcs17.checkCommandLineVersion(); if (isClientValid && reloadWorkingCopies) { vcs17.invokeRefreshSvnRoots(); @@ -345,6 +383,7 @@ public class SvnConfigurable implements Configurable { myRunUnderTerminal.setEnabled(myWithCommandLineClient.isSelected()); final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); myCommandLineClient.setText(applicationSettings17.getCommandLinePath()); + myLocalesList.setSelectedItem(applicationSettings17.getExecutableLocale()); if (SvnConfiguration.SSLProtocols.sslv3.equals(configuration.getSslProtocols())) { mySSLv3RadioButton.setSelected(true); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java index 5b1484944285..95b4734f84d1 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/api/CmdVersionClient.java @@ -30,7 +30,8 @@ public class CmdVersionClient extends BaseSvnClient implements VersionClient { Command command = new Command(SvnCommandName.version); command.put("--quiet"); - CommandExecutor executor = new CommandExecutor(SvnApplicationSettings.getInstance().getCommandLinePath(), command); + SvnApplicationSettings settings = SvnApplicationSettings.getInstance(); + CommandExecutor executor = new CommandExecutor(settings.getCommandLinePath(), settings.getExecutableLocale(), command); executor.run(30 * 1000); return executor.getProcessOutput(); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java index e00b8f1e3183..97c5f9c00ed2 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandExecutor.java @@ -23,7 +23,6 @@ import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.util.EventDispatcher; @@ -58,6 +57,7 @@ public class CommandExecutor { private volatile String myDestroyReason; private volatile boolean myWasCancelled; @NotNull protected final GeneralCommandLine myCommandLine; + @NotNull protected final String myLocale; protected Process myProcess; protected SvnProcessHandler myHandler; private OutputStreamWriter myProcessWriter; @@ -72,7 +72,7 @@ public class CommandExecutor { @Nullable private final LineCommandListener myResultBuilder; @NotNull private final Command myCommand; - public CommandExecutor(@NotNull @NonNls String exePath, @NotNull Command command) { + public CommandExecutor(@NotNull @NonNls String exePath, @NotNull String locale, @NotNull Command command) { myCommand = command; myResultBuilder = command.getResultBuilder(); if (myResultBuilder != null) { @@ -89,6 +89,7 @@ public class CommandExecutor { } myCommandLine.addParameter(command.getName().getName()); myCommandLine.addParameters(prepareParameters(command)); + myLocale = locale; myExitCodeReference = new AtomicReference(); } @@ -158,13 +159,11 @@ public class CommandExecutor { } private void setupLocale() { - String locale = Registry.stringValue("svn.executable.locale"); - - if (!StringUtil.isEmpty(locale)) { + if (!StringUtil.isEmpty(myLocale)) { Map environment = myCommandLine.getEnvironment(); environment.put("LANGUAGE", ""); - environment.put("LC_ALL", locale); + environment.put("LC_ALL", myLocale); } } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java index 46b716c3bde2..a64821e24aad 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/CommandRuntime.java @@ -43,11 +43,15 @@ public class CommandRuntime { @NotNull private final SvnVcs myVcs; @NotNull private final List myModules; private final String exePath; + @NotNull private final String executableLocale; public CommandRuntime(@NotNull SvnVcs vcs, @NotNull AuthenticationService authenticationService) { myVcs = vcs; myAuthenticationService = authenticationService; - exePath = SvnApplicationSettings.getInstance().getCommandLinePath(); + + SvnApplicationSettings settings = SvnApplicationSettings.getInstance(); + exePath = settings.getCommandLinePath(); + executableLocale = settings.getExecutableLocale(); myModules = ContainerUtil.newArrayList(); myModules.add(new CommandParametersResolutionModule(this)); @@ -218,7 +222,7 @@ public class CommandRuntime { if (!myVcs.getSvnConfiguration().isRunUnderTerminal() || isLocal(command)) { command.putIfNotPresent("--non-interactive"); - executor = new CommandExecutor(exePath, command); + executor = new CommandExecutor(exePath, executableLocale, command); } else { // do not explicitly specify "--force-interactive" as it is not supported in svn 1.7 - commands will be interactive by default as @@ -234,7 +238,9 @@ public class CommandRuntime { @NotNull private TerminalExecutor newTerminalExecutor(@NotNull Command command) { - return SystemInfo.isWindows ? new WinTerminalExecutor(exePath, command) : new TerminalExecutor(exePath, command); + return SystemInfo.isWindows + ? new WinTerminalExecutor(exePath, executableLocale, command) + : new TerminalExecutor(exePath, executableLocale, command); } public static boolean isLocal(@NotNull Command command) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/TerminalExecutor.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/TerminalExecutor.java index 63fa3bbc0700..1509629b032b 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/TerminalExecutor.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/TerminalExecutor.java @@ -35,8 +35,8 @@ public class TerminalExecutor extends CommandExecutor { private final List myInteractiveListeners = ContainerUtil.createLockFreeCopyOnWriteList(); - public TerminalExecutor(@NotNull @NonNls String exePath, @NotNull Command command) { - super(exePath, command); + public TerminalExecutor(@NotNull @NonNls String exePath, @NotNull String locale, @NotNull Command command) { + super(exePath, locale, command); } public void addInteractiveListener(@NotNull InteractiveCommandListener listener) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/WinTerminalExecutor.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/WinTerminalExecutor.java index e08594d33c28..08979ab6d3e3 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/WinTerminalExecutor.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/commandLine/WinTerminalExecutor.java @@ -49,8 +49,8 @@ public class WinTerminalExecutor extends TerminalExecutor { @Nullable private File myRedirectFile; @Nullable private FileInputStream myRedirectStream; - public WinTerminalExecutor(@NotNull @NonNls String exePath, @NotNull Command command) { - super(exePath, command); + public WinTerminalExecutor(@NotNull @NonNls String exePath, @NotNull String locale, @NotNull Command command) { + super(exePath, locale, command); } @NotNull From 515e42f93f997760201926023f4f42f33595e907 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 22 Oct 2014 20:48:05 +0400 Subject: [PATCH 068/217] IDEA-131710 Unclear behavior of smart step into method after conditional operator --- .../actions/JavaSmartStepIntoHandler.java | 24 +++++++++++++++---- .../debugger/actions/SmartStepTarget.java | 6 ++++- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java index 48efa9ac87dc..cbeca23dd6f3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/JavaSmartStepIntoHandler.java @@ -19,6 +19,7 @@ import com.intellij.debugger.SourcePosition; import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -80,8 +81,7 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { //noinspection unchecked final List targets = new OrderedSet(); - TextRange textRange = element.getTextRange(); - final Range lines = new Range(doc.getLineNumber(textRange.getStartOffset()), doc.getLineNumber(textRange.getEndOffset())); + final Ref textRange = new Ref(lineRange); final PsiElementVisitor methodCollector = new JavaRecursiveElementVisitor() { final Stack myContextStack = new Stack(); @@ -96,12 +96,12 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { @Override public void visitAnonymousClass(PsiAnonymousClass aClass) { for (PsiMethod psiMethod : aClass.getMethods()) { - targets.add(new MethodSmartStepTarget(psiMethod, getCurrentParamName(), psiMethod.getBody(), true, lines)); + targets.add(new MethodSmartStepTarget(psiMethod, getCurrentParamName(), psiMethod.getBody(), true, null)); } } public void visitLambdaExpression(PsiLambdaExpression expression) { - targets.add(new LambdaSmartStepTarget(expression, getCurrentParamName(), expression.getBody(), myNextLambdaExpressionOrdinal++, lines)); + targets.add(new LambdaSmartStepTarget(expression, getCurrentParamName(), expression.getBody(), myNextLambdaExpressionOrdinal++, null)); } @Override @@ -111,6 +111,15 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { } } + @Override + public void visitExpression(PsiExpression expression) { + TextRange range = expression.getTextRange(); + if (lineRange.intersects(range)) { + textRange.set(textRange.get().union(range)); + } + super.visitExpression(expression); + } + public void visitExpressionList(PsiExpressionList expressionList) { final PsiMethod psiMethod = myContextStack.isEmpty()? null : myContextStack.peek(); if (psiMethod != null) { @@ -146,7 +155,7 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { ((PsiMethodCallExpression)expression).getMethodExpression().getReferenceNameElement() : expression instanceof PsiNewExpression? ((PsiNewExpression)expression).getClassOrAnonymousClassReference() : expression, false, - lines + null )); } try { @@ -168,6 +177,11 @@ public class JavaSmartStepIntoHandler extends JvmSmartStepIntoHandler { } sibling.accept(methodCollector); } + + Range lines = new Range(doc.getLineNumber(textRange.get().getStartOffset()), doc.getLineNumber(textRange.get().getEndOffset())); + for (SmartStepTarget target : targets) { + target.setCallingExpressionLines(lines); + } return targets; } return Collections.emptyList(); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java b/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java index ed758c902784..a6579a94357c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/SmartStepTarget.java @@ -27,7 +27,7 @@ public abstract class SmartStepTarget { private final PsiElement myHighlightElement; private final String myLabel; private final boolean myNeedBreakpointRequest; - private final Range myExpressionLines; + private Range myExpressionLines; protected SmartStepTarget(@Nullable String label, @Nullable PsiElement highlightElement, boolean needBreakpointRequest, Range expressionLines) { myHighlightElement = highlightElement; @@ -53,4 +53,8 @@ public abstract class SmartStepTarget { public Range getCallingExpressionLines() { return myExpressionLines; } + + public void setCallingExpressionLines(Range expressionLines) { + myExpressionLines = expressionLines; + } } From a8e01bb0eebd3e5e786a469155adb62161948230 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Wed, 22 Oct 2014 21:36:44 +0400 Subject: [PATCH 069/217] svn: Fixed enabling/disabling svn command line client options ("Locale", "Enable interactive mode") in "Subversion" settings (depending on whether "Use command line client" checkbox is checked) --- .../jetbrains/idea/svn/SvnConfigurable.form | 78 +++++++++++-------- .../jetbrains/idea/svn/SvnConfigurable.java | 14 +++- 2 files changed, 54 insertions(+), 38 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form index 12ca521de64a..c09b5cee65cd 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.form @@ -18,7 +18,7 @@ - + @@ -29,7 +29,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -123,12 +123,12 @@ - + - + @@ -156,37 +156,47 @@ - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java index e28fe277beb1..b12a830a722e 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnConfigurable.java @@ -40,6 +40,7 @@ import com.intellij.ui.components.JBCheckBox; import com.intellij.ui.components.JBRadioButton; import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -86,6 +87,7 @@ public class SvnConfigurable implements Configurable { private JSpinner mySSHConnectionTimeout; private JSpinner mySSHReadTimeout; private TextFieldWithBrowseButton myCommandLineClient; + private JPanel myCommandLineClientOptions; private JSpinner myHttpTimeout; private JBRadioButton mySSLv3RadioButton; private JBRadioButton myTLSv1RadioButton; @@ -98,12 +100,13 @@ public class SvnConfigurable implements Configurable { public SvnConfigurable(Project project) { myProject = project; - myWithCommandLineClient.addActionListener(new ActionListener() { + myWithCommandLineClient.addItemListener(new ItemListener() { @Override - public void actionPerformed(ActionEvent e) { - myRunUnderTerminal.setEnabled(myWithCommandLineClient.isSelected()); + public void itemStateChanged(ItemEvent e) { + enableCommandLineClientOptions(); } }); + enableCommandLineClientOptions(); myUseDefaultCheckBox.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { boolean enabled = !myUseDefaultCheckBox.isSelected(); @@ -209,6 +212,10 @@ public class SvnConfigurable implements Configurable { mySshSettingsPanel.load(SvnConfiguration.getInstance(myProject)); } + public void enableCommandLineClientOptions() { + UIUtil.setEnabled(myCommandLineClientOptions, myWithCommandLineClient.isSelected(), true); + } + public static void selectConfigurationDirectory(@NotNull String path, @NotNull final Consumer dirConsumer, final Project project, @@ -380,7 +387,6 @@ public class SvnConfigurable implements Configurable { myHttpTimeout.setValue(Long.valueOf(configuration.getHttpTimeout() / 1000)); myWithCommandLineClient.setSelected(configuration.isCommandLine()); myRunUnderTerminal.setSelected(configuration.isRunUnderTerminal()); - myRunUnderTerminal.setEnabled(myWithCommandLineClient.isSelected()); final SvnApplicationSettings applicationSettings17 = SvnApplicationSettings.getInstance(); myCommandLineClient.setText(applicationSettings17.getCommandLinePath()); myLocalesList.setSelectedItem(applicationSettings17.getExecutableLocale()); From 3943e99e658f0f9031bf8015d258a72e59d84c25 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 22 Oct 2014 20:05:18 +0200 Subject: [PATCH 070/217] IDEA-131555 (Named capture groups in Groovy regular expressions - "This named group syntax is not supported") --- plugins/groovy/jetgroovy.iml | 4 +- plugins/groovy/src/META-INF/plugin.xml | 3 ++ .../groovy/regexp/GroovyRegExpHost.java | 40 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 plugins/groovy/src/org/jetbrains/plugins/groovy/regexp/GroovyRegExpHost.java diff --git a/plugins/groovy/jetgroovy.iml b/plugins/groovy/jetgroovy.iml index 4ae317b2555c..c06341abadd7 100644 --- a/plugins/groovy/jetgroovy.iml +++ b/plugins/groovy/jetgroovy.iml @@ -37,6 +37,6 @@ + - - + \ No newline at end of file diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index ea356d13e917..6d171987ccd5 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -598,6 +598,9 @@ + + = 0; + } + } + return false; + } +} From 7d1d700ea631090e8d28c3f5d139dc1c5c2de900 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 21:33:42 +0200 Subject: [PATCH 071/217] fix borders under Darcula in Change method signature and other places --- .../ui/laf/darcula/ui/DarculaEditorTextFieldBorder.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaEditorTextFieldBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaEditorTextFieldBorder.java index 4cb617e5440a..cf96ea6235f4 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaEditorTextFieldBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaEditorTextFieldBorder.java @@ -32,7 +32,9 @@ import java.awt.*; public class DarculaEditorTextFieldBorder implements Border { @Override public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - if (isComboBoxEditor(c) || isCellEditor(c)) { + if (isComboBoxEditor(c) /*|| isCellEditor(c)*/) { + g.setColor(c.getBackground()); + g.fillRect(x, y, width, height); return; } final EditorTextField textField = UIUtil.getParentOfType(EditorTextField.class, c); @@ -65,8 +67,8 @@ public class DarculaEditorTextFieldBorder implements Border { @Override public Insets getBorderInsets(Component c) { - if (isComboBoxEditor(c) || isCellEditor(c)) { - return new InsetsUIResource(0,0,0,0); + if (isComboBoxEditor(c) /*|| isCellEditor(c)*/) { + return new InsetsUIResource(2,3,2,3); } return new InsetsUIResource(6, 7, 6, 7); } From 2a5d9c635b771f1fb41e220542592ceb87d85166 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 21:34:39 +0200 Subject: [PATCH 072/217] UI Designer under Darcula: combo cell editor has gaps around text editor --- .../com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java index 0eba3d3ce28a..9c61666f3a2d 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/ui/DarculaComboBoxUI.java @@ -199,7 +199,7 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border { public void paint(Graphics g, JComponent c) { final Container parent = c.getParent(); if (parent != null) { - g.setColor(parent.getBackground()); + g.setColor(isTableCellEditor(c) && editor != null ? editor.getBackground() : parent.getBackground()); g.fillRect(0, 0, c.getWidth(), c.getHeight()); } Rectangle r = rectangleForCurrentValue(); @@ -212,7 +212,7 @@ public class DarculaComboBoxUI extends BasicComboBoxUI implements Border { } private static boolean isTableCellEditor(JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty("JComboBox.isTableCellEditor")); + return Boolean.TRUE.equals(c.getClientProperty("JComboBox.isTableCellEditor")) || c.getParent() instanceof JTable; } @Override From 1b233b361be345831c1fd3c6991be76b31fd1c67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Wed, 22 Oct 2014 21:48:47 +0200 Subject: [PATCH 073/217] DomService: getDomFileCandidates() cleanup/performance, deprecation --- .../src/util/ExtensionPointLocator.java | 2 +- .../util/xml/impl/DomServiceImpl.java | 12 ++++++-- .../intellij/util/xml/DomFileDescription.java | 3 +- .../src/com/intellij/util/xml/DomService.java | 29 +++++++++---------- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/plugins/devkit/src/util/ExtensionPointLocator.java b/plugins/devkit/src/util/ExtensionPointLocator.java index c4a5b19c156a..e8d895a1e7dc 100644 --- a/plugins/devkit/src/util/ExtensionPointLocator.java +++ b/plugins/devkit/src/util/ExtensionPointLocator.java @@ -75,7 +75,7 @@ public class ExtensionPointLocator { } final Project project = psiClass.getProject(); - final Collection candidates = DomService.getInstance().getDomFileCandidates(IdeaPlugin.class, project); + final Collection candidates = DomService.getInstance().getDomFileCandidates(IdeaPlugin.class, project, GlobalSearchScope.allScope(project)); GlobalSearchScope scope = GlobalSearchScope.filesScope(project, candidates); PsiSearchHelper.SERVICE.getInstance(project).processUsagesInNonJavaFiles(name, new PsiNonJavaFileReferenceProcessor() { @Override diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java index 94987bc604a9..eb8c57a9c281 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomServiceImpl.java @@ -164,12 +164,19 @@ public class DomServiceImpl extends DomService { @Override public Collection getDomFileCandidates(Class description, Project project) { - return FileBasedIndex.getInstance().getContainingFiles(DomFileIndex.NAME, description.getName(), GlobalSearchScope.allScope(project)); + return getDomFileCandidates(description, project, GlobalSearchScope.allScope(project)); + } + + @Override + public Collection getDomFileCandidates(Class rootElementClass, + Project project, + final GlobalSearchScope scope) { + return FileBasedIndex.getInstance().getContainingFiles(DomFileIndex.NAME, rootElementClass.getName(), scope); } @Override public List> getFileElements(final Class clazz, final Project project, @Nullable final GlobalSearchScope scope) { - final Collection list = scope == null ? getDomFileCandidates(clazz, project) : getDomFileCandidates(clazz, project, scope); + final Collection list = getDomFileCandidates(clazz, project, scope != null ? scope : GlobalSearchScope.allScope(project)); final ArrayList> result = new ArrayList>(list.size()); for (VirtualFile file : list) { final PsiFile psiFile = PsiManager.getInstance(project).findFile(file); @@ -189,5 +196,4 @@ public class DomServiceImpl extends DomService { public StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, final Function modeProvider) { return new DomStructureViewBuilder(file, modeProvider); } - } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java b/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java index eb5de3eebf43..97950b30037e 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/DomFileDescription.java @@ -126,7 +126,8 @@ public class DomFileDescription { /** * @return some version. Override and change (e.g. super.getVersion()+1) when after some changes some files stopped being * described by this description or vice versa, so that the - * {@link com.intellij.util.xml.DomService#getDomFileCandidates(Class, com.intellij.openapi.project.Project)} index is rebuilt correctly. + * {@link com.intellij.util.xml.DomService#getDomFileCandidates(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope)} + * index is rebuilt correctly. */ public int getVersion() { return myRootTagName.hashCode(); diff --git a/xml/dom-openapi/src/com/intellij/util/xml/DomService.java b/xml/dom-openapi/src/com/intellij/util/xml/DomService.java index dced490f43d5..a2d567e9c87a 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/DomService.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/DomService.java @@ -19,12 +19,10 @@ package com.intellij.util.xml; import com.intellij.ide.structureView.StructureViewBuilder; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.XmlFile; import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -44,24 +42,21 @@ public abstract class DomService { return ourCachedInstance; } + /** + * @deprecated use {@link #getDomFileCandidates(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope)} (to remove in IDEA 15) + */ + public abstract Collection getDomFileCandidates(Class description, Project project); + /** * @param rootElementClass class of root (file-level) element in DOM model - * @param project current project - * @param scope search scope + * @param project current project + * @param scope search scope * @return files containing given root element - * * @see #getFileElements(Class, com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope) */ - public Collection getDomFileCandidates(Class rootElementClass, Project project, final GlobalSearchScope scope) { - return ContainerUtil.findAll(getDomFileCandidates(rootElementClass, project), new Condition() { - @Override - public boolean value(final VirtualFile file) { - return scope.contains(file); - } - }); - } - - public abstract Collection getDomFileCandidates(Class description, Project project); + public abstract Collection getDomFileCandidates(Class rootElementClass, + Project project, + GlobalSearchScope scope); /** * @param rootElementClass class of root (file-level) element in DOM model @@ -89,5 +84,7 @@ public abstract class DomService { public enum StructureViewMode { SHOW, SHOW_CHILDREN, SKIP } - public abstract StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, final Function modeProvider); + + public abstract StructureViewBuilder createSimpleStructureViewBuilder(final XmlFile file, + final Function modeProvider); } From d12935c039007beb19a4e682fc59d51724be0be6 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 22:02:37 +0200 Subject: [PATCH 074/217] update new Welcome for Darcula --- .../impl/welcomeScreen/FlatWelcomeFrame.java | 24 ++++++++++++++----- .../welcomeScreen/NewRecentProjectPanel.java | 10 ++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 320171a1e55f..d5a9660c1b00 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -165,17 +165,29 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } public static Color getMainBackground() { - return new JBColor(new Color(0xf5f6f8), new Color(0x3c3f41)); + return new JBColor(0xf7f7f7, 0x45474a); } - public static Color getProjectsBackGround() { - return new JBColor(Gray.xFF, new Color(58, 61, 63)); + public static Color getProjectsBackground() { + return new JBColor(Gray.xFF, Gray.x39); } public static Color getLinkNormalColor() { return new JBColor(Gray._0, Gray.xBB); } + public static Color getListSelectionColor() { + return new JBColor(0x3875d6, 0x4b6eaf); + } + + public static Color getActionLinkSelectionColor() { + return new JBColor(0xdbe5f5, 0x485875); + } + + public static JBColor getSeparatorColor() { + return new JBColor(Gray.xEC, new Color(0x4e5154)); + } + private class FlatWelcomeScreen extends JPanel implements WelcomeScreen { public FlatWelcomeScreen() { super(new BorderLayout()); @@ -374,8 +386,8 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { private JComponent createRecentProjects() { JPanel panel = new JPanel(new BorderLayout()); panel.add(new NewRecentProjectPanel(this), BorderLayout.CENTER); - panel.setBackground(getProjectsBackGround()); - panel.setBorder(new CustomLineBorder(new JBColor(Gray.xEC, new Color(0x3c3f41)), 0,0,0,1)); + panel.setBackground(getProjectsBackground()); + panel.setBorder(new CustomLineBorder(getSeparatorColor(), 0,0,0,1)); return panel; } @@ -414,7 +426,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { @Override public void focusGained(FocusEvent e) { comp.setOpaque(true); - comp.setBackground(new JBColor(new Color(0xd2e1f0), new Color(0x455565))); + comp.setBackground(getActionLinkSelectionColor()); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java index f2152bd449c8..9f48ba5435b0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java @@ -37,17 +37,17 @@ public class NewRecentProjectPanel extends RecentProjectPanel { public NewRecentProjectPanel(WelcomeScreen screen) { super(screen); setBorder(null); - setBackground(FlatWelcomeFrame.getProjectsBackGround()); + setBackground(FlatWelcomeFrame.getProjectsBackground()); JScrollPane scrollPane = UIUtil.findComponentOfType(this, JScrollPane.class); if (scrollPane != null) { - scrollPane.setBackground(FlatWelcomeFrame.getProjectsBackGround()); + scrollPane.setBackground(FlatWelcomeFrame.getProjectsBackground()); scrollPane.setSize(245, 460); scrollPane.setMinimumSize(new Dimension(245, 460)); scrollPane.setPreferredSize(new Dimension(245, 460)); } ListWithFilter panel = UIUtil.findComponentOfType(this, ListWithFilter.class); if (panel != null) { - panel.setBackground(FlatWelcomeFrame.getProjectsBackGround()); + panel.setBackground(FlatWelcomeFrame.getProjectsBackground()); } } @@ -58,7 +58,7 @@ public class NewRecentProjectPanel extends RecentProjectPanel { @Override protected JBList createList(AnAction[] recentProjectActions, Dimension size) { final JBList list = super.createList(recentProjectActions, size); - list.setBackground(FlatWelcomeFrame.getProjectsBackGround()); + list.setBackground(FlatWelcomeFrame.getProjectsBackground()); list.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { @@ -87,7 +87,7 @@ public class NewRecentProjectPanel extends RecentProjectPanel { } @Override protected Color getListBackground(boolean isSelected, boolean hasFocus) { - return isSelected ? new Color(0x2484fd) : FlatWelcomeFrame.getProjectsBackGround(); + return isSelected ? FlatWelcomeFrame.getListSelectionColor() : FlatWelcomeFrame.getProjectsBackground(); } @Override From 1c014fae8d0da337d348dc639e53a2ea16497b9c Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 22:36:43 +0200 Subject: [PATCH 075/217] update selection bg for new welcome screen --- .../impl/welcomeScreen/FlatWelcomeFrame.java | 18 +++++++++++++++--- .../welcomeScreen/NewRecentProjectPanel.java | 4 ++-- .../impl/welcomeScreen/RecentProjectPanel.java | 4 ++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index d5a9660c1b00..31259a6aad4b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -91,6 +91,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } else { setSize(555, 460); } + setResizable(false); //int x = bounds.x + (bounds.width - getWidth()) / 2; //int y = bounds.y + (bounds.height - getHeight()) / 2; Point location = DimensionService.getInstance().getLocation(WelcomeFrame.DIMENSION_KEY, null); @@ -176,8 +177,8 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { return new JBColor(Gray._0, Gray.xBB); } - public static Color getListSelectionColor() { - return new JBColor(0x3875d6, 0x4b6eaf); + public static Color getListSelectionColor(boolean hasFocus) { + return hasFocus ? new JBColor(0x3875d6, 0x4b6eaf) : new JBColor(Gray.xDD, Gray.x45); } public static Color getActionLinkSelectionColor() { @@ -185,7 +186,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } public static JBColor getSeparatorColor() { - return new JBColor(Gray.xEC, new Color(0x4e5154)); + return new JBColor(Gray.xEC, new Color(72, 75, 78)); } private class FlatWelcomeScreen extends JPanel implements WelcomeScreen { @@ -220,6 +221,17 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { removeIfNeeded(); } }); + projectsList.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + projectsList.repaint(); + } + + @Override + public void focusLost(FocusEvent e) { + projectsList.repaint(); + } + }); } } add(createBody(), BorderLayout.CENTER); diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java index 9f48ba5435b0..0d7fccb29982 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewRecentProjectPanel.java @@ -87,12 +87,12 @@ public class NewRecentProjectPanel extends RecentProjectPanel { } @Override protected Color getListBackground(boolean isSelected, boolean hasFocus) { - return isSelected ? FlatWelcomeFrame.getListSelectionColor() : FlatWelcomeFrame.getProjectsBackground(); + return isSelected ? FlatWelcomeFrame.getListSelectionColor(hasFocus) : FlatWelcomeFrame.getProjectsBackground(); } @Override protected Color getListForeground(boolean isSelected, boolean hasFocus) { - return UIUtil.getListForeground(isSelected); + return UIUtil.getListForeground(isSelected && hasFocus); } }; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java index 2c2d68541bc6..f47c53330771 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/RecentProjectPanel.java @@ -257,8 +257,8 @@ public class RecentProjectPanel extends JPanel { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { ReopenProjectAction item = (ReopenProjectAction)value; - Color fore = getListForeground(isSelected, cellHasFocus); - Color back = getListBackground(isSelected, cellHasFocus); + Color fore = getListForeground(isSelected, list.hasFocus()); + Color back = getListBackground(isSelected, list.hasFocus()); myName.setForeground(fore); myPath.setForeground(isSelected ? fore : UIUtil.getInactiveTextColor()); From 89f20ace026003667ddb53dc3b3a04dac22c8bbe Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 22 Oct 2014 22:43:34 +0200 Subject: [PATCH 076/217] don't remove recent project panel on speed search --- .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 31259a6aad4b..47353f52326e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -209,7 +209,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } private void removeIfNeeded() { - if (projectsList.getModel().getSize() == 0) { + if (RecentProjectsManager.getInstance().getRecentProjectsActions(false).length == 0) { FlatWelcomeScreen.this.remove(recentProjects); FlatWelcomeScreen.this.revalidate(); FlatWelcomeScreen.this.repaint(); From aa6fec2634652f4a8b8222422748d73365942776 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 01:44:14 +0200 Subject: [PATCH 077/217] add combo3 icon --- platform/icons/src/general/combo3.png | Bin 0 -> 128 bytes platform/icons/src/general/combo3@2x.png | Bin 0 -> 212 bytes platform/icons/src/general/combo3@2x_dark.png | Bin 0 -> 212 bytes platform/icons/src/general/combo3_dark.png | Bin 0 -> 129 bytes .../util/src/com/intellij/icons/AllIcons.java | 1 + 5 files changed, 1 insertion(+) create mode 100644 platform/icons/src/general/combo3.png create mode 100644 platform/icons/src/general/combo3@2x.png create mode 100644 platform/icons/src/general/combo3@2x_dark.png create mode 100644 platform/icons/src/general/combo3_dark.png diff --git a/platform/icons/src/general/combo3.png b/platform/icons/src/general/combo3.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdd4c4627e570065da499fa1e538afe4ba53952 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`?w&4=Ar-fhfBgS%l@k&Et zwnIwF6BC7h{jC1V*BH_i?sY7aJd&<T>dG=4 zy6EtSzvDl{MtL*SEoBTG;S7apdOt5tDu7tdU?{<`wmE3KrT=<%pfedfUHx3vIVCg! E02cO2AOHXW literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/combo3@2x_dark.png b/platform/icons/src/general/combo3@2x_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9313cace3c80996f0b830b3deb628efac3e0a5e8 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ*`6+rAr-fhfBgS%f7l_ZEs(v( zD&Y#_Vm^t|11p%_WDQhgHk7@+mFe(jzRMj~Uv>lLk8VOb>?>23En{|=!QJ66koc2x zMHE|>HA9PQ;}0{r)A`O<4KAEwR9M4yM1DiWKdz3@30E%x`EOW`*iY2?&voS4i&q&h z83g*+9@RViVek06VdcWD%nm!4I*bcX_D^epTHSGwVcU)a-*;^KTn=<5gQu&X%Q~lo FCIG*rQ>g#| literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/combo3_dark.png b/platform/icons/src/general/combo3_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..51040859202b09448b72d926cd4046e946fdc34f GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`9-c0aAr-fhfBgS%l@k&Et z_JLblvzIe|tk Date: Thu, 23 Oct 2014 01:45:14 +0200 Subject: [PATCH 078/217] use combo3 icon to align combo triangle --- .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 47353f52326e..126e827b0af5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -303,7 +303,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); panel.setBorder(new EmptyBorder(4, 10, 4, 10)); panel.add(settings.get()); - JLabel arrow = new JLabel(AllIcons.General.Combo2); + JLabel arrow = new JLabel(AllIcons.General.Combo3); arrow.setVerticalAlignment(SwingConstants.BOTTOM); panel.add(arrow, BorderLayout.EAST); installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, focusListOnLeft); From d0557917aee7555e7a2aa6a2db0795b1ee27fbed Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 01:45:40 +0200 Subject: [PATCH 079/217] optimize icons size --- platform/icons/src/welcome/createNewProject.png | Bin 442 -> 344 bytes .../icons/src/welcome/createNewProject@2x.png | Bin 857 -> 630 bytes platform/icons/src/welcome/fromVCS.png | Bin 225 -> 178 bytes platform/icons/src/welcome/fromVCS@2x.png | Bin 318 -> 263 bytes platform/icons/src/welcome/importProject.png | Bin 321 -> 219 bytes platform/icons/src/welcome/importProject@2x.png | Bin 487 -> 372 bytes platform/icons/src/welcome/openProject.png | Bin 183 -> 118 bytes platform/icons/src/welcome/openProject@2x.png | Bin 218 -> 153 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/welcome/createNewProject.png b/platform/icons/src/welcome/createNewProject.png index 27f390cbaeebd33a9c4cc08059f9812b90db677e..0055e1840808f3d935bf4049fc323670cfdff670 100644 GIT binary patch delta 318 zcmV-E0m1&d1K0wPBYy!ONkl520fnnV}p5h04W@jh6liloUyPg%8L|&BB z9`q#=_OKs`cc9l77{@v0gQOeWqT=E!%I)_B%r1U#hFL7=+kY%!4j1~~43A*Cajk@J zJh%e)irM%QU9kdY)h$X{jy17;X503Y5>HXX2%3u7+@kMEroYL$-3oqb&=nsD=2}{l z+vF4uA_Zy%1s-vTX@7)@w)d>0rWOw4M6nO7p)=LQ^%70oNi}f@FG~8vom*t%FOA>T z*gpkqo3ChKR5zE$U!*Y{;SI-Off;O|r^HpRVhag9~qs(he$^U!Kzp;4rbN9w& QhyVZp07*qoM6N<$f)ibrb^rhX delta 417 zcmV;S0bc&t0=ff`BYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz zTuDShRCwBi(#tD^Q5eVZcU~j5l!kFjVIvEa71>!ywwRSafXsrOe?ZAXDP=qU03yl) z$xgYf6uFEHWg`paGQN*~uTICzIQ8j$&pFR|&NX(C9u7*B4u6C=D;5yyTV13-h4BLI zF;uw;tg?eXFK85FPMnoNY)5TT$0ZJNfGzYWSu+~Zk6!F*@H(DiT6>C3L9qwPce%Y4B$~gtEfR8R@C;65#3B0Cvhk1mkutW z`jE2)cjk6{7CJ=R-;(|)PzfW^j#t z+~7_x^a|73|B)sMqBA%a{}$Fz<}BaJi&hf235u1>KN|hPw*UhGS${`2FtM5{00000 LNkvXXu0mjfI{~|- diff --git a/platform/icons/src/welcome/createNewProject@2x.png b/platform/icons/src/welcome/createNewProject@2x.png index b1df70704f192e4c165e293b3a01b07cbb2be9e8..7cf70232ada78cb120ba7f5581fed44f94ceb4f0 100644 GIT binary patch delta 606 zcmV-k0-^oc2KEGyBYy%tNklCN)}f4?yl9J5`~or3$G%N@2Nx6G&8^XJ;LI%nsd&4XXeZ~ zGoiiix{wcYK)#=b-) zdkuRPfxPnDOMe}pMB5Eu^8cnf;dIqXeNIk!@XK!{R3+RF--Kk41ZqG;VK?Ws6vy!d zH2JM!a#cd5DnyX)0;uOBH42F0?HcF8qTAMb!-{GReiU;86!Tnf0`kBBHx`?7O)>~b zu#9oUT{J($Rc@HO+ItB&0e?V&+%TxCO*tGvtwBJI!GDkPVHQ+@7^ftp#?rv$RZhYP zC!Fk)qDaC=?g#A}AFFG)tXNHiSDVP_uHhv}^HT?!1E_@4UInB(nR3 zwwQP}0@^fzuDDR?+A)n?YkWIx1!RB=$(i1AT|y?C9wc8ukD{(96H+B$O*p#^&hTgt zPqJ9h1XunEHZx8F+IgEtRqr?Ht#B@_E^M$b-T&90>8A?h`g4#$p8QV07*qoM6N<$g2sy-DgXcg delta 835 zcmV-J1HAn91lb0VBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU! z`$HGC&^`qNHj6?f;2TI^1wV$iWv=#aT))w{zt22?X}n0dw=GuU+ultUf=rG+TShu zsyZ17A=AMC&>B=hED}ztKstcT-_Ndapsz$7pM%yV2*1S-7@$WhS~ zu-HLa+T+>lpz=){7-;(ihrnoXpUk$LWS#Q978HAYy9_)9b>KC)Wivo-VJDyE7Mj5g zFjM<(DHy4|kADEmwQt1uhu}7t1%86vE>0*GUQ^yzfoI?{m}a^1v=W+E`70MF^QS=j zf1d1-2PT4-V6Zm+3tR;24Rbjfxe3IzxsRY6bh?J&J8;l2E{ZdT&GS)|F>Ee!z_htv z9yo5gvHGEUV1EcGp`*4LzLT|0K~k|KizJ;Y zY1n)&!?PQF1&tijjY!dm6my5wfG9KJ8SnvI2OB^_TeIK8p}N36Z7jivk+6ObYQcQ& z^)C!(Fox62?S4|iQ%5`^;k$zliL!bj#(Ey_gVJ1x6qC4Y`U30$lfgo84t%mKUSyfG zRa3c{OMhSm7!Rr?MAcJEs5}DOz&Nl5TrphfVNhz=U?@1EjpcQ21!MV}r8fNbi-I3? z9I1GB4Q-g@`IU6C1fQEZr^*-VxIia0rdFG51gkxI!J7{MdKfs$8z?vtjRB|oz~Q!l zIYA7lWt|Tz67w~THfIAiGkfXMO~bw!=5m}f<$nliNVdBgAQ5m<8+*gBDWf9O|8L}+ zG^u+*hc++eeUys6JX0 zUQX|5$*Pm_t#?libU-1?JW%0fKoQ@|*ax)x^a@$!J0kQ#*B!78HL_t(|+GF_t|33pI7)*Fg*@uq*jUjOb_tVLu@L1I2#W)DSWNgfoFS7neNT07@_bAs9-7&JPdTSO5S307*qoM6N<$ Eg7OYN-T(jq delta 197 zcmV;$06PD&0pS6VB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0001k zNkl=;F9cWklv|&30s9VxSO=8h|ih8Z_kp5Z}S0`92O*%{N?u_!@{kp)>_Cl3=m)dvehky@;I=wDp>v%Y8F}9&<}|JP+<8Vs2LQM17z70I3S-|1ra%A#58J_ zgrt@c8=-orS`-soM!@qrwH-iA8G(}5Y2g5TWdufEr$G+N l2xkIuE;)J!U*~k7FaUBUDim~IPL2Qo002ovPDHLkV1kidZ%$Aw7+_{^Gy%>lVUyonB;-UPJ^!vTMRI1-3Y($MmgP=7oA;z|SGfY=v^@6f>V zJ5aN~5lV!wf!GsDQw!iUlZh19k_qsJDibO3MFt?4u9%2OvH27@pqNn3BBmgk3dGaN zupFdkBDG3FQp*UGyiN@VkWxmFly;b?m72-TJxtWf&*YXL9fLMYYo6~{# zFA)C+Vjg@3nBZ{sKd9yxATfLfd<0?}D4PR_=Rh^W@G`go9i3fpjAQ^v(N`dj1>$pP znnBnB*?|9OI0uUcWIP*Y5jh5I2Vyo{2B3QZ9iKziOpXDd7&yqG!~htsAjSYN289PS tOfcj?dWkUrEJv&X_%PNyLmdMs!2s+?T>v}|B9{OF002ovPDHLkV1nn?M`i#3 delta 294 zcmV+>0onfB0l@;0B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0002v zNklB?AFa4#bm~7{~*eK-><*{EX->Aj0N!Af5)qAj^62xxfU6 zv!_EfzXakh_zc(!#5Pbi2N2Hz;tn8Ygo^D05nwNLc6Gyb@qfLQgE2vV`v$}rKwJpK zhG-Tz0`UPBB*kFxN%#?n%7q%l1;mT6xDMo+0}N2VkP3DHaW;&@f+op`07*qoM6N<$f{KiI@&Et; diff --git a/platform/icons/src/welcome/importProject@2x.png b/platform/icons/src/welcome/importProject@2x.png index 4aca3fc3b826d3444aaf3d11941e3d0b9ca5cbf9..e5243159e1bc4fa0796f5a81bc6318d368e6cfaf 100644 GIT binary patch delta 346 zcmV-g0j2)u1M~urBYy!qNkl)$ zEC=FG^mYIj5U+q*4#FQub^rxIt^~vvkSqt`+mtwfiv-J^f%qMocWWaGC7Q|sO2N2J}VKEG+Q|bT^J_p32Xn&R~LdEe}{tt-dso?++ zz6QinP;qY{eow%15Z($>kKurh&Mv$dhXX+PE)Y+K`s_au*cO)q{u6-{h_nP3UJCOF zxekb;!17B#%ulHUqRF)U0T9a|Cs=wq;1RSmWFXZ6#3n*~_zn;&U@I@^;Q&ysh{IJ< z(kldh0&)02I#U3I{{V5qKso>x9a#hE02nSqwwzoCpkSa}3^FFBoj`2|py;ES1MpxB sePs0u2BQPW#iI@wq7E2Ry<=)(0MV-fh`+KK3IG5A07*qoM6N<$f_3YPZU6uP delta 462 zcmV;<0Wtpc0_OveBYyxHbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz ziAh93RCwBA{Qv(y!$1NSax_gZUrDLGRhgaPZ6F5I0C>6ph+APCdOCm+h#P>oABaCw z6a{1eE+C!<#Nkl>Kaw3lLA)yg@j4*ZM-qEYNfdCApw=0P&wrp<4gwD;allp}<|RU1 zCJ^rcVnHl&_b73I0}$`RVK4}A0P!3ko`xri&r+HTEP!|~5R0OTD+2K`AWp`k_dhgb zD9(n4KztC0rJ#IoAU+2b#|O3}rvZ2nb#`^*)y2mkhfP=$hz|qtHXzQ1=5<1#16NUu zw^H~d{0KxP@_)UR!X)YUO@bjQU{O& z9s{ux5I-TcI!5s=Qrs^g!ScI6>;l9Oa4Dc=2!IlG6F$pn?Ep{+&PJ*M>Fxj!U<2Z% zK%6j84gdjWXj>p_pd0{;j;TOg2CgPM!zpT%GNP4`F-K^*g_K-El_uF@G(K${0Ids% zQdeG9O0)w8qFGLK2+*a=G~gjH>Hx-p?i~+!2mk~a0HcIT_9(n_c>n+a07*qoM6N<$ Ef&%BWYXATM diff --git a/platform/icons/src/welcome/openProject.png b/platform/icons/src/welcome/openProject.png index fa9914f605ff51b374bd3eeea2ccabba532ceaf6..ea39bc0f541c08701966bc22a45b4f7513c4ef4d 100644 GIT binary patch delta 88 zcmdnaST;c=$kx-vF{I*F@{j-j?U_|)G-|QEnLF)^Joi85Bc2Xt8n}gx7+U@_7HX=p sJveG&*wE-jzZihP)78&qol`;+04UudQ2+n{ delta 154 zcmV;L0A>Gnw*inOe;IT|SaefwW^{L9a%BKPWN%_+AW3auXJt}lVPtu6$z?nM003D@ zL_t(|+G70w|33pIfRQQ&?3xw=2oPWZ6qwu|sb$8@u>b%707*qo IM6N<$g0sW%D!k4C|$14bP%>VQ!P s47s}C|7aA92nR5Z_6 Date: Thu, 23 Oct 2014 06:55:11 +0200 Subject: [PATCH 080/217] cleanup --- .../src/com/intellij/ide/util/TipPanel.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/util/TipPanel.java b/platform/platform-impl/src/com/intellij/ide/util/TipPanel.java index 8ca9576795c5..b2221f632a89 100644 --- a/platform/platform-impl/src/com/intellij/ide/util/TipPanel.java +++ b/platform/platform-impl/src/com/intellij/ide/util/TipPanel.java @@ -24,6 +24,7 @@ import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.components.JBLabel; import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -44,13 +45,13 @@ public class TipPanel extends JPanel { setLayout(new BorderLayout()); JLabel jlabel = new JLabel(AllIcons.General.Tip); jlabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5)); - JLabel jlabel1 = new JLabel(IdeBundle.message("label.did.you.know")); - Font font = jlabel1.getFont(); - jlabel1.setFont(font.deriveFont(Font.PLAIN, font.getSize() + 4)); + JLabel label1 = new JLabel(IdeBundle.message("label.did.you.know")); + Font font = label1.getFont(); + label1.setFont(font.deriveFont(Font.PLAIN, font.getSize() + 4)); JPanel jpanel = new JPanel(); jpanel.setLayout(new BorderLayout()); jpanel.add(jlabel, BorderLayout.WEST); - jpanel.add(jlabel1, BorderLayout.CENTER); + jpanel.add(label1, BorderLayout.CENTER); jpanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); add(jpanel, BorderLayout.NORTH); myBrowser = TipUIUtil.createTipBrowser(); @@ -63,7 +64,8 @@ public class TipPanel extends JPanel { final GeneralSettings settings = GeneralSettings.getInstance(); showOnStartCheckBox.setSelected(settings.isShowTipsOnStartup()); showOnStartCheckBox.addItemListener(new ItemListener() { - public void itemStateChanged(ItemEvent e) { + @Override + public void itemStateChanged(@NotNull ItemEvent e) { settings.setShowTipsOnStartup(e.getStateChange() == ItemEvent.SELECTED); } }); @@ -79,6 +81,7 @@ public class TipPanel extends JPanel { Collections.addAll(myTips, Extensions.getExtensions(TipAndTrickBean.EP_NAME)); } + @Override public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); } From 260ae5220e4d4cd5565544cc192064147d8a65fd Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 07:13:27 +0200 Subject: [PATCH 081/217] IDEA-131692 Settings repository plugin: it doesn't make sense to sync last seen tip between different IDEs --- .../src/com/intellij/ide/GeneralSettings.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ide/GeneralSettings.java b/platform/platform-api/src/com/intellij/ide/GeneralSettings.java index 57128945ef5c..3be1a37f7094 100644 --- a/platform/platform-api/src/com/intellij/ide/GeneralSettings.java +++ b/platform/platform-api/src/com/intellij/ide/GeneralSettings.java @@ -15,9 +15,12 @@ */ package com.intellij.ide; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.components.*; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.xmlb.XmlSerializerUtil; import com.intellij.util.xmlb.annotations.OptionTag; +import com.intellij.util.xmlb.annotations.Transient; import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -38,7 +41,6 @@ public class GeneralSettings implements PersistentStateComponent Date: Thu, 23 Oct 2014 07:22:12 +0200 Subject: [PATCH 082/217] IDEA-131691 Settings repository plugin: it doesn't make sense to sync last opened project between IDEs --- .../ide/RecentDirectoryProjectsManagerEx.java | 11 ++++++----- .../intellij/ide/RecentDirectoryProjectsManager.java | 11 ++++++----- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/RecentDirectoryProjectsManagerEx.java b/platform/lang-impl/src/com/intellij/ide/RecentDirectoryProjectsManagerEx.java index b9086439906b..c65aa04b91a1 100644 --- a/platform/lang-impl/src/com/intellij/ide/RecentDirectoryProjectsManagerEx.java +++ b/platform/lang-impl/src/com/intellij/ide/RecentDirectoryProjectsManagerEx.java @@ -15,10 +15,7 @@ */ package com.intellij.ide; -import com.intellij.openapi.components.RoamingType; -import com.intellij.openapi.components.State; -import com.intellij.openapi.components.Storage; -import com.intellij.openapi.components.StoragePathMacros; +import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.platform.ModuleAttachProcessor; import com.intellij.util.messages.MessageBus; @@ -29,7 +26,11 @@ import org.jetbrains.annotations.NotNull; */ @State( name = "RecentDirectoryProjectsManager", - storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml", roamingType = RoamingType.DISABLED)} + storages = { + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/recentProjectDirectories.xml", roamingType = RoamingType.DISABLED) + }, + storageChooser = LastStorageChooserForWrite.class ) public class RecentDirectoryProjectsManagerEx extends RecentDirectoryProjectsManager { public RecentDirectoryProjectsManagerEx(MessageBus messageBus) { diff --git a/platform/platform-impl/src/com/intellij/ide/RecentDirectoryProjectsManager.java b/platform/platform-impl/src/com/intellij/ide/RecentDirectoryProjectsManager.java index 59b115a43105..5282f61543b6 100644 --- a/platform/platform-impl/src/com/intellij/ide/RecentDirectoryProjectsManager.java +++ b/platform/platform-impl/src/com/intellij/ide/RecentDirectoryProjectsManager.java @@ -15,10 +15,7 @@ */ package com.intellij.ide; -import com.intellij.openapi.components.RoamingType; -import com.intellij.openapi.components.State; -import com.intellij.openapi.components.Storage; -import com.intellij.openapi.components.StoragePathMacros; +import com.intellij.openapi.components.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; @@ -34,7 +31,11 @@ import org.jetbrains.annotations.Nullable; */ @State( name = "RecentDirectoryProjectsManager", - storages = {@Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml", roamingType = RoamingType.DISABLED)} + storages = { + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/recentProjectDirectories.xml", roamingType = RoamingType.DISABLED) + }, + storageChooser = LastStorageChooserForWrite.class ) public class RecentDirectoryProjectsManager extends RecentProjectsManagerBase { public RecentDirectoryProjectsManager(MessageBus messageBus) { From 78ad5bf8ee14c333860cbe71a2036097ef9e390b Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 23 Oct 2014 11:18:19 +0400 Subject: [PATCH 083/217] additional validation (following CR-IC-6639) --- .../openapi/fileEditor/impl/FileEditorManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java index 0dc4f5bc7209..fdbba254571b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileEditorManagerImpl.java @@ -774,6 +774,9 @@ public class FileEditorManagerImpl extends FileEditorManagerEx implements Projec builders[i] = ApplicationManager.getApplication().runReadAction(new Computable() { @Override public AsyncFileEditorProvider.Builder compute() { + if (myProject.isDisposed() || !file.isValid()) { + return null; + } LOG.assertTrue(provider.accept(myProject, file), "Provider " + provider + " doesn't accept file " + file); return provider instanceof AsyncFileEditorProvider ? ((AsyncFileEditorProvider)provider).createEditorAsync(myProject, file) : null; } From d24f468b482d849e9f7a1c38792499eb95f83178 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 23 Oct 2014 09:32:24 +0200 Subject: [PATCH 084/217] skip null TextAttributesKey when processing var arg (EA-59728) --- platform/usageView/src/com/intellij/usages/ChunkExtractor.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/usageView/src/com/intellij/usages/ChunkExtractor.java b/platform/usageView/src/com/intellij/usages/ChunkExtractor.java index b9db68c69ce3..ceba6f18df09 100644 --- a/platform/usageView/src/com/intellij/usages/ChunkExtractor.java +++ b/platform/usageView/src/com/intellij/usages/ChunkExtractor.java @@ -282,6 +282,7 @@ public class ChunkExtractor { ) { return true; } + if (key == null) continue; final TextAttributesKey fallbackAttributeKey = key.getFallbackAttributeKey(); if (fallbackAttributeKey != null && isHighlightedAsComment(fallbackAttributeKey)) { return true; @@ -295,6 +296,7 @@ public class ChunkExtractor { if (key == DefaultLanguageHighlighterColors.STRING || key == SyntaxHighlighterColors.STRING) { return true; } + if (key == null) continue; final TextAttributesKey fallbackAttributeKey = key.getFallbackAttributeKey(); if (fallbackAttributeKey != null && isHighlightedAsString(fallbackAttributeKey)) { return true; From f40e4521db87d4d54f2b2334052cc8ee4a8cb3ea Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 23 Oct 2014 11:49:30 +0400 Subject: [PATCH 085/217] exclude from detection: return default state instead of 'null' from 'getState' method to fix problem with not saved settings --- .../DetectionExcludesConfigurable.java | 31 ++++++++----------- .../DetectionExcludesConfigurationImpl.java | 5 +-- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurable.java b/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurable.java index 6239cbbab4ac..8cf5f461baa8 100644 --- a/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurable.java +++ b/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurable.java @@ -256,9 +256,6 @@ public class DetectionExcludesConfigurable implements Configurable { @Nullable private ExcludesConfigurationState computeState() { - if (myModel.getItems().isEmpty() && myEnabledDetectionCheckBox.isSelected()) { - return null; - } final ExcludesConfigurationState state = new ExcludesConfigurationState(); state.setDetectionEnabled(myEnabledDetectionCheckBox.isSelected()); for (ExcludeListItem item : myModel.getItems()) { @@ -278,22 +275,20 @@ public class DetectionExcludesConfigurable implements Configurable { public void reset() { myModel.clear(); final ExcludesConfigurationState state = myConfiguration.getActualState(); - myEnabledDetectionCheckBox.setSelected(state == null || state.isDetectionEnabled()); - if (state != null) { - for (String typeId : state.getFrameworkTypes()) { - final FrameworkType frameworkType = FrameworkDetectorRegistry.getInstance().findFrameworkType(typeId); - myModel.add(frameworkType != null ? new ValidExcludeListItem(frameworkType, null) : new InvalidExcludeListItem(typeId, null)); + myEnabledDetectionCheckBox.setSelected(state.isDetectionEnabled()); + for (String typeId : state.getFrameworkTypes()) { + final FrameworkType frameworkType = FrameworkDetectorRegistry.getInstance().findFrameworkType(typeId); + myModel.add(frameworkType != null ? new ValidExcludeListItem(frameworkType, null) : new InvalidExcludeListItem(typeId, null)); + } + for (ExcludedFileState fileState : state.getFiles()) { + VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(fileState.getUrl()); + final String typeId = fileState.getFrameworkType(); + if (typeId == null) { + myModel.add(file != null ? new ValidExcludeListItem(null, file) : new InvalidExcludeListItem(null, fileState.getUrl())); } - for (ExcludedFileState fileState : state.getFiles()) { - VirtualFile file = VirtualFileManager.getInstance().findFileByUrl(fileState.getUrl()); - final String typeId = fileState.getFrameworkType(); - if (typeId == null) { - myModel.add(file != null ? new ValidExcludeListItem(null, file) : new InvalidExcludeListItem(null, fileState.getUrl())); - } - else { - final FrameworkType frameworkType = FrameworkDetectorRegistry.getInstance().findFrameworkType(typeId); - myModel.add(frameworkType != null && file != null? new ValidExcludeListItem(frameworkType, file) : new InvalidExcludeListItem(typeId, fileState.getUrl())); - } + else { + final FrameworkType frameworkType = FrameworkDetectorRegistry.getInstance().findFrameworkType(typeId); + myModel.add(frameworkType != null && file != null? new ValidExcludeListItem(frameworkType, file) : new InvalidExcludeListItem(typeId, fileState.getUrl())); } } } diff --git a/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurationImpl.java b/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurationImpl.java index a110e3435984..e89c65197563 100644 --- a/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurationImpl.java +++ b/platform/lang-impl/src/com/intellij/framework/detection/impl/exclude/DetectionExcludesConfigurationImpl.java @@ -185,12 +185,9 @@ public class DetectionExcludesConfigurationImpl extends DetectionExcludesConfigu } } - @Nullable + @NotNull public ExcludesConfigurationState getActualState() { ensureOldSettingsLoaded(); - if (myExcludedFiles.isEmpty() && myExcludedFrameworks.isEmpty() && myDetectionEnabled) { - return null; - } final ExcludesConfigurationState state = new ExcludesConfigurationState(); state.setDetectionEnabled(myDetectionEnabled); From 01e9523b959373c9498ca3853c35fbe4894c85d8 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Thu, 23 Oct 2014 12:17:52 +0400 Subject: [PATCH 086/217] WEB-13295 Incorrect files downloaded for ZURB Foundation projects, on phpStorm 7.1.3 (and don't re-use previously downloaded archives) --- ...ctGithubTagDownloadedProjectGenerator.java | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/AbstractGithubTagDownloadedProjectGenerator.java b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/AbstractGithubTagDownloadedProjectGenerator.java index 09bca34d2a24..6ab678bf722c 100644 --- a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/AbstractGithubTagDownloadedProjectGenerator.java +++ b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/AbstractGithubTagDownloadedProjectGenerator.java @@ -89,34 +89,22 @@ public abstract class AbstractGithubTagDownloadedProjectGenerator extends WebPro @NotNull File extractToDir, @NotNull GithubTagInfo tag) throws GeneratorException { File zipArchiveFile = getCacheFile(tag); - boolean brokenZip = true; - boolean unitTestMode = ApplicationManager.getApplication().isUnitTestMode(); - if (!unitTestMode && zipArchiveFile.isFile()) { + String primaryUrl = getPrimaryZipArchiveUrlForDownload(tag); + boolean downloaded = false; + if (primaryUrl != null) { try { - ZipUtil.unzipWithProgressSynchronously(project, getTitle(), zipArchiveFile, extractToDir, true); - brokenZip = false; - } - catch (GeneratorException ignored) { + downloadAndUnzip(project, primaryUrl, zipArchiveFile, extractToDir, false); + downloaded = true; + } catch (GeneratorException e) { + LOG.info("Can't download " + primaryUrl, e); + FileUtil.delete(zipArchiveFile); } } - if (brokenZip) { - String primaryUrl = getPrimaryZipArchiveUrlForDownload(tag); - boolean downloaded = false; - if (primaryUrl != null) { - try { - downloadAndUnzip(project, primaryUrl, zipArchiveFile, extractToDir, false); - downloaded = true; - } catch (GeneratorException e) { - LOG.info("Can't download " + primaryUrl, e); - FileUtil.delete(zipArchiveFile); - } - } - if (!downloaded) { - if (unitTestMode) { - throw new GeneratorException("Download " + tag.getZipballUrl() + " is skipped in unit test mode"); - } - downloadAndUnzip(project, tag.getZipballUrl(), zipArchiveFile, extractToDir, true); + if (!downloaded) { + if (ApplicationManager.getApplication().isUnitTestMode()) { + throw new GeneratorException("Download " + tag.getZipballUrl() + " is skipped in unit test mode"); } + downloadAndUnzip(project, tag.getZipballUrl(), zipArchiveFile, extractToDir, true); } } From ba07a9515abacda6cdc6f2edfdd181594ce83fc5 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 10:13:37 +0200 Subject: [PATCH 087/217] =?UTF-8?q?UsageViewSettings,=20RefactoringSetting?= =?UTF-8?q?s=20=E2=80=94=20set=20exportable=20name,=20use=20own=20storage?= =?UTF-8?q?=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/intellij/refactoring/RefactoringSettings.java | 10 +++++----- .../src/messages/OptionsBundle.properties | 2 ++ .../src/com/intellij/usages/UsageViewSettings.java | 9 +++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/RefactoringSettings.java b/platform/lang-impl/src/com/intellij/refactoring/RefactoringSettings.java index e2952f9b5a53..a5ef4e198993 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/RefactoringSettings.java +++ b/platform/lang-impl/src/com/intellij/refactoring/RefactoringSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.refactoring; import com.intellij.openapi.components.*; @@ -25,9 +24,10 @@ import com.intellij.util.xmlb.XmlSerializerUtil; @State( name = "BaseRefactoringSettings", storages = { - @Storage( - file = StoragePathMacros.APP_CONFIG + "/other.xml" - )} + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/baseRefactoring.xml") + }, + storageChooser = LastStorageChooserForWrite.class ) public class RefactoringSettings implements PersistentStateComponent { public static RefactoringSettings getInstance() { diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties index aa64f5d80717..c76075a2bb85 100644 --- a/platform/platform-resources-en/src/messages/OptionsBundle.properties +++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties @@ -303,3 +303,5 @@ exportable.NotificationConfiguration.presentable.name=Notifications exportable.CodeInsightSettings.presentable.name=CodeInsight exportable.HttpConfigurable.presentable.name=HTTP Proxy exportable.KeymapManager.presentable.name=Key maps +exportable.UsageViewSettings.presentable.name=Usage View +exportable.BaseRefactoringSettings.presentable.name=Refactoring diff --git a/platform/usageView/src/com/intellij/usages/UsageViewSettings.java b/platform/usageView/src/com/intellij/usages/UsageViewSettings.java index 8312c330b987..136d95038c24 100644 --- a/platform/usageView/src/com/intellij/usages/UsageViewSettings.java +++ b/platform/usageView/src/com/intellij/usages/UsageViewSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,9 +25,10 @@ import java.io.File; @State( name = "UsageViewSettings", storages = { - @Storage( - file = StoragePathMacros.APP_CONFIG + "/other.xml" - )} + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/usageView.xml") + }, + storageChooser = LastStorageChooserForWrite.class ) public class UsageViewSettings implements PersistentStateComponent { @NonNls public String EXPORT_FILE_NAME = "report.txt"; From 0e281c4f60a349a8e76f83005f610d36f71f06a4 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 10:19:21 +0200 Subject: [PATCH 088/217] =?UTF-8?q?DuplocatorSettings=20=E2=80=94=20set=20?= =?UTF-8?q?exportable=20name,=20use=20own=20storage=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dupLocator/DuplocatorSettings.java | 19 ++++++------------- .../src/messages/OptionsBundle.properties | 1 + 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java index 66983d376eb6..337b52e293de 100644 --- a/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java +++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2007 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.dupLocator; import com.intellij.openapi.components.*; @@ -22,19 +21,13 @@ import com.intellij.util.xmlb.XmlSerializerUtil; import java.util.HashSet; import java.util.Set; -/** - * Created by IntelliJ IDEA. - * User: db - * Date: Apr 8, 2004 - * Time: 2:47:43 PM - * To change this template use File | Settings | File Templates. - */ @State( - name="DuplocatorSettings", + name = "DuplocatorSettings", storages = { - @Storage( - file = StoragePathMacros.APP_CONFIG + "/other.xml" - )} + @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), + @Storage(file = StoragePathMacros.APP_CONFIG + "/duplocator.xml") + }, + storageChooser = LastStorageChooserForWrite.class ) public class DuplocatorSettings implements PersistentStateComponent { public boolean DISTINGUISH_VARIABLES = false; diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties index c76075a2bb85..6078417810ba 100644 --- a/platform/platform-resources-en/src/messages/OptionsBundle.properties +++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties @@ -305,3 +305,4 @@ exportable.HttpConfigurable.presentable.name=HTTP Proxy exportable.KeymapManager.presentable.name=Key maps exportable.UsageViewSettings.presentable.name=Usage View exportable.BaseRefactoringSettings.presentable.name=Refactoring +exportable.DuplocatorSettings.presentable.name=Duplocator From 8fd638506bafd7c8ba460075ee70067a239971df Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 10:20:44 +0200 Subject: [PATCH 089/217] use existing duplocatorSettings file --- .../src/com/intellij/dupLocator/DuplocatorSettings.java | 2 +- .../intellij/dupLocator/MultilanguageDuplocatorSettings.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java index 337b52e293de..d805b8319743 100644 --- a/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java +++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/DuplocatorSettings.java @@ -25,7 +25,7 @@ import java.util.Set; name = "DuplocatorSettings", storages = { @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml"), - @Storage(file = StoragePathMacros.APP_CONFIG + "/duplocator.xml") + @Storage(file = StoragePathMacros.APP_CONFIG + "/duplocatorSettings.xml") }, storageChooser = LastStorageChooserForWrite.class ) diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java index 92fc5b3b3175..738c498838f0 100644 --- a/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java +++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java @@ -17,9 +17,7 @@ import java.util.Map; */ @State( name = "MultiLanguageDuplocatorSettings", - storages = { - @Storage(file = StoragePathMacros.APP_CONFIG + "/duplocatorSettings.xml") - } + storages = @Storage(file = StoragePathMacros.APP_CONFIG + "/duplocatorSettings.xml") ) public class MultilanguageDuplocatorSettings implements PersistentStateComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.dupLocator.MultiLanguageDuplocatorSettings"); From f8e2472341e5f9b93deb1618f645c8e3f3492e6b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 10:23:12 +0200 Subject: [PATCH 090/217] =?UTF-8?q?MultiLanguageDuplocatorSettings=20?= =?UTF-8?q?=E2=80=94=20set=20exportable=20name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../intellij/dupLocator/MultilanguageDuplocatorSettings.java | 4 ++-- .../src/messages/OptionsBundle.properties | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java b/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java index 738c498838f0..da840978ff4b 100644 --- a/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java +++ b/platform/duplicates-analysis/src/com/intellij/dupLocator/MultilanguageDuplocatorSettings.java @@ -6,7 +6,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMExternalizable; import com.intellij.openapi.util.WriteExternalException; -import com.intellij.util.containers.HashMap; +import com.intellij.util.containers.hash.LinkedHashMap; import org.jdom.Element; import org.jetbrains.annotations.NotNull; @@ -22,7 +22,7 @@ import java.util.Map; public class MultilanguageDuplocatorSettings implements PersistentStateComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.dupLocator.MultiLanguageDuplocatorSettings"); - private final Map mySettingsMap = new HashMap(); + private final Map mySettingsMap = new LinkedHashMap(); public static MultilanguageDuplocatorSettings getInstance() { return ServiceManager.getService(MultilanguageDuplocatorSettings.class); diff --git a/platform/platform-resources-en/src/messages/OptionsBundle.properties b/platform/platform-resources-en/src/messages/OptionsBundle.properties index 6078417810ba..1906440c7ecc 100644 --- a/platform/platform-resources-en/src/messages/OptionsBundle.properties +++ b/platform/platform-resources-en/src/messages/OptionsBundle.properties @@ -306,3 +306,4 @@ exportable.KeymapManager.presentable.name=Key maps exportable.UsageViewSettings.presentable.name=Usage View exportable.BaseRefactoringSettings.presentable.name=Refactoring exportable.DuplocatorSettings.presentable.name=Duplocator +exportable.MultiLanguageDuplocatorSettings.presentable.name=Duplocator From 54a94da28fc0a24e4cdfe89fc2008effaedae533 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Thu, 23 Oct 2014 12:51:39 +0400 Subject: [PATCH 091/217] maven: resolve run configuration system properties https://youtrack.jetbrains.com/issue/IDEA-120890#comment=27-826442 --- .../maven/execution/MavenJUnitPatcher.java | 26 +++++++++++++++ .../execution/MavenJUnitPatcherTest.java | 33 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcher.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcher.java index 7636a02fe98b..3249bd48ac32 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcher.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcher.java @@ -17,9 +17,12 @@ package org.jetbrains.idea.maven.execution; import com.intellij.execution.JUnitPatcher; import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.ParametersList; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.containers.ContainerUtil; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.idea.maven.dom.MavenDomUtil; import org.jetbrains.idea.maven.dom.MavenPropertyResolver; @@ -31,11 +34,15 @@ import org.jetbrains.idea.maven.project.MavenTestRunningSettings; import org.jetbrains.idea.maven.utils.MavenJDOMUtil; import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * @author Sergey Evdokimov */ public class MavenJUnitPatcher extends JUnitPatcher { + public static final Pattern PROPERTY_PATTERN = Pattern.compile("\\$\\{(.+?)\\}"); @Override public void patchJavaParameters(@Nullable Module module, JavaParameters javaParameters) { @@ -71,6 +78,7 @@ public class MavenJUnitPatcher extends JUnitPatcher { if (!javaParameters.getVMParametersList().hasProperty(propertyName)) { String value = resolveSurefireProperties(element.getValue()); + value = resolveVmProperties(javaParameters.getVMParametersList(), value); if (isResolved(value)) { javaParameters.getVMParametersList().addProperty(propertyName, value); } @@ -87,6 +95,7 @@ public class MavenJUnitPatcher extends JUnitPatcher { if (!javaParameters.getEnv().containsKey(variableName)) { String value = resolveSurefireProperties(element.getValue()); + value = resolveVmProperties(javaParameters.getVMParametersList(), value); if (isResolved(value)) { javaParameters.addEnv(variableName, value); } @@ -99,6 +108,7 @@ public class MavenJUnitPatcher extends JUnitPatcher { Element argLine = config.getChild("argLine"); if (argLine != null) { String value = resolveSurefireProperties(argLine.getTextTrim()); + value = resolveVmProperties(javaParameters.getVMParametersList(), value); if (StringUtil.isNotEmpty(value) && isResolved(value)) { javaParameters.getVMParametersList().addParametersString(value); } @@ -110,6 +120,22 @@ public class MavenJUnitPatcher extends JUnitPatcher { return value.replaceAll("\\$\\{surefire\\.(forkNumber|threadNumber)\\}", "1"); } + private static String resolveVmProperties(@NotNull ParametersList vmParameters, @NotNull String value) { + Matcher matcher = PROPERTY_PATTERN.matcher(value); + Map toReplace = ContainerUtil.newHashMap(); + while (matcher.find()) { + String finding = matcher.group(); + final String propertyValue = vmParameters.getPropertyValue(finding.substring(2, finding.length() - 1)); + if(propertyValue == null) continue; + toReplace.put(finding, propertyValue); + } + for (Map.Entry entry : toReplace.entrySet()) { + value = value.replace(entry.getKey(), entry.getValue()); + } + + return value; + } + private static boolean isEnabled(String s) { return !Boolean.valueOf(System.getProperty("idea.maven.surefire.disable." + s)); } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcherTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcherTest.java index d2166e9383a7..4d285412a00c 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcherTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/execution/MavenJUnitPatcherTest.java @@ -64,4 +64,37 @@ public class MavenJUnitPatcherTest extends MavenImportingTestCase { assertEquals(asList("-Xmx2048M", "-XX:MaxPermSize=512M", "-Dargs=can have spaces"), javaParameters.getVMParametersList().getList()); } + + public void testVmPropertiesResolve() throws Exception { + VirtualFile m1 = createModulePom("m1", "test" + + "m1" + + "1" + + "" + + " " + + " test" + + " m2" + + " 1" + + " " + + "" + + "" + + " " + + " org.apache.maven.plugins" + + " maven-surefire-plugin" + + " 2.16" + + " " + + " -Xmx2048M -XX:MaxPermSize=512M \"-Dargs=can have spaces\" ${argLineApx}" + + " " + + " " + + ""); + + importProjects(m1); + Module module = getModule("m1"); + + MavenJUnitPatcher mavenJUnitPatcher = new MavenJUnitPatcher(); + JavaParameters javaParameters = new JavaParameters(); + javaParameters.getVMParametersList().addProperty("argLineApx", "-DsomeKey=someValue"); + mavenJUnitPatcher.patchJavaParameters(module, javaParameters); + assertEquals(asList("-DargLineApx=-DsomeKey=someValue", "-Xmx2048M", "-XX:MaxPermSize=512M", "-Dargs=can have spaces", "-DsomeKey=someValue"), + javaParameters.getVMParametersList().getList()); + } } From 1869ad4cb089e4efb7491c92103599aa280536e4 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 23 Oct 2014 12:54:30 +0400 Subject: [PATCH 092/217] update from sources for community: skip android plugin if its sources aren't checked out --- build/update.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/build/update.xml b/build/update.xml index e06cfce3ee93..ae4871b2eb6b 100644 --- a/build/update.xml +++ b/build/update.xml @@ -31,6 +31,7 @@ + From 086d2083e8ecf39edb4cc10b1e6a5dd93f2c949d Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 23 Oct 2014 11:40:23 +0200 Subject: [PATCH 093/217] don't expose whole document text through subsequences in document change events (IDEA-131780) --- .../openapi/editor/impl/DocumentImpl.java | 15 +++++++++------ .../src/com/intellij/util/text/ImmutableText.java | 11 +++++++++-- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java index 918ebaa22425..34512a6fc714 100644 --- a/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/editor/impl/DocumentImpl.java @@ -493,7 +493,9 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { throwGuardedFragment(marker, offset, null, s.toString()); } - updateText(myText.insert(offset, ImmutableText.valueOf(s)), offset, null, s, false, LocalTimeCounter.currentTime()); + myText = myText.ensureChunked(); + ImmutableText newText = myText.insert(offset, ImmutableText.valueOf(s)); + updateText(newText, offset, null, newText.subtext(offset, offset + s.length()), false, LocalTimeCounter.currentTime()); trimToSize(); } @@ -511,14 +513,13 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { if (!isWritable()) throw new ReadOnlyModificationException(this); if (startOffset == endOffset) return; - CharSequence sToDelete = myText.subSequence(startOffset, endOffset); - RangeMarker marker = getRangeGuard(startOffset, endOffset); if (marker != null) { - throwGuardedFragment(marker, startOffset, sToDelete.toString(), null); + throwGuardedFragment(marker, startOffset, myText.subSequence(startOffset, endOffset).toString(), null); } - updateText(myText.delete(startOffset, endOffset), startOffset, sToDelete, null, false, LocalTimeCounter.currentTime()); + myText = myText.ensureChunked(); + updateText(myText.delete(startOffset, endOffset), startOffset, myText.subtext(startOffset, endOffset), null, false, LocalTimeCounter.currentTime()); } @Override @@ -582,7 +583,7 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { } CharSequence changedPart = s.subSequence(newStartInString, newEndInString); - CharSequence sToDelete = myText.subSequence(startOffset, endOffset); + CharSequence sToDelete = myText.subtext(startOffset, endOffset); RangeMarker guard = getRangeGuard(startOffset, endOffset); if (guard != null) { throwGuardedFragment(guard, startOffset, sToDelete.toString(), changedPart.toString()); @@ -593,7 +594,9 @@ public class DocumentImpl extends UserDataHolderBase implements DocumentEx { newText = (ImmutableText)s; } else { + myText = myText.ensureChunked(); newText = myText.delete(startOffset, endOffset).insert(startOffset, changedPart); + changedPart = newText.subtext(startOffset, startOffset + changedPart.length()); } updateText(newText, startOffset, sToDelete, changedPart, wholeTextReplaced, newModificationStamp); trimToSize(); diff --git a/platform/util/src/com/intellij/util/text/ImmutableText.java b/platform/util/src/com/intellij/util/text/ImmutableText.java index 4ec4b93ec2b2..2dde3eb60293 100644 --- a/platform/util/src/com/intellij/util/text/ImmutableText.java +++ b/platform/util/src/com/intellij/util/text/ImmutableText.java @@ -96,7 +96,14 @@ public final class ImmutableText extends ImmutableCharSequence implements CharAr return new ImmutableText(new LeafNode(chars)); } - private ImmutableText ensureChunked() { + /** + * When first loaded, ImmutableText contents are stored as a single large array. This saves memory but isn't + * modification-friendly as it disallows slightly changed texts to retain most of the internal structure of the + * original document. Whoever retains old non-chunked version will use more memory than really needed. + * + * @return a copy of this text better prepared for small modifications to fully enable structure-sharing capabilities + */ + public ImmutableText ensureChunked() { if (length() > BLOCK_SIZE && myNode instanceof LeafNode) { return new ImmutableText(nodeOf(((LeafNode)myNode)._data, 0, length())); } @@ -292,7 +299,7 @@ public final class ImmutableText extends ImmutableCharSequence implements CharAr * @throws IndexOutOfBoundsException if (start < 0) || (end < 0) || * (start > end) || (end > this.length()) */ - private ImmutableText subtext(int start, int end) { + public ImmutableText subtext(int start, int end) { if ((start < 0) || (start > end) || (end > length())) throw new IndexOutOfBoundsException(); if ((start == 0) && (end == length())) From 8d49d9feab7e23d0a2c68fa915d36e72b22e8095 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 23 Oct 2014 11:54:31 +0200 Subject: [PATCH 094/217] fixt test --- RegExpSupport/testData/RETest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RegExpSupport/testData/RETest.xml b/RegExpSupport/testData/RETest.xml index 3aac79ea8de6..0a8d963a861b 100644 --- a/RegExpSupport/testData/RETest.xml +++ b/RegExpSupport/testData/RETest.xml @@ -719,7 +719,7 @@ ERR - \1)]]> + \1)]]> OK From 371db8c42b809963767158520d56d005bc55a506 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 23 Oct 2014 13:54:47 +0400 Subject: [PATCH 095/217] in resource bundle getBaseName counts of getUrl() calls and regexp matching reduced --- .../com/intellij/lang/properties/PropertiesUtil.java | 5 +++++ .../lang/properties/ResourceBundleManager.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/plugins/properties/properties-psi-api/src/com/intellij/lang/properties/PropertiesUtil.java b/plugins/properties/properties-psi-api/src/com/intellij/lang/properties/PropertiesUtil.java index 0867b6b5faa1..ac673f634791 100644 --- a/plugins/properties/properties-psi-api/src/com/intellij/lang/properties/PropertiesUtil.java +++ b/plugins/properties/properties-psi-api/src/com/intellij/lang/properties/PropertiesUtil.java @@ -80,6 +80,11 @@ public class PropertiesUtil { @NotNull public static String getDefaultBaseName(@NotNull final VirtualFile file) { final String name = file.getName(); + + if (!StringUtil.containsChar(name, '_')) { + return FileUtil.getNameWithoutExtension(name); + } + final Matcher matcher = LOCALE_PATTERN.matcher(name); final String baseNameWithExtension; if (matcher.find()) { diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index a01c123f8763..2dba8899afe7 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -21,6 +21,7 @@ import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NullableComputable; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.util.Function; @@ -151,6 +152,11 @@ public class ResourceBundleManager implements PersistentStateComponent Date: Thu, 23 Oct 2014 11:52:25 +0200 Subject: [PATCH 096/217] remove "..." from welcome screen --- .../wm/impl/welcomeScreen/FlatWelcomeFrame.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 126e827b0af5..5a3800cff537 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -46,6 +46,7 @@ import com.intellij.ui.*; import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.labels.ActionLink; import com.intellij.ui.components.panels.NonOpaquePanel; +import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -326,7 +327,15 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { action.update(new AnActionEvent(null, DataManager.getInstance().getDataContext(this), ActionPlaces.WELCOME_SCREEN, presentation, ActionManager.getInstance(), 0)); if (presentation.isVisible()) { - ActionLink link = new ActionLink(presentation.getText(), presentation.getIcon(), action); + String text = presentation.getText(); + if (text.endsWith("...")) { + text = text.substring(0, text.length() - 3); + } + Icon icon = presentation.getIcon(); + if (icon.getIconHeight() != 16 || icon.getIconWidth() != 16) { + icon = EmptyIcon.ICON_16; + } + ActionLink link = new ActionLink(text, icon, action); link.setPaintUnderline(false); link.setNormalColor(getLinkNormalColor()); installFocusable(button, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); From 084c0a3e94a185e9966ae84317f2b774c0cf531b Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 23 Oct 2014 14:10:17 +0400 Subject: [PATCH 097/217] resource bundle manager reduced count of getUrl() call while listening psi changes --- .../properties/ResourceBundleManager.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index 2dba8899afe7..9e2e8e477d64 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -20,7 +20,9 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.NotNullLazyValue; import com.intellij.openapi.util.NullableComputable; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -65,18 +67,31 @@ public class ResourceBundleManager implements PersistentStateComponent> oldAndNewUrls = new NotNullLazyValue>() { + @NotNull + @Override + protected Pair compute() { + final String newUrl = propertiesFile.getVirtualFile().getUrl(); + return Pair.create(oldParentUrl + newUrl.substring(newParentUrl.length()), newUrl); + } + }; + + if (!myState.getDissociatedFiles().isEmpty()) { + if (myState.getDissociatedFiles().remove(oldAndNewUrls.getValue().getFirst())) { + myState.getDissociatedFiles().add(oldAndNewUrls.getValue().getSecond()); } } + + if (!myState.getCustomResourceBundles().isEmpty()) { + for (CustomResourceBundleState customResourceBundleState : myState.getCustomResourceBundles()) { + if (customResourceBundleState.getFileUrls().remove(oldAndNewUrls.getValue().getFirst())) { + customResourceBundleState.getFileUrls().add(oldAndNewUrls.getValue().getSecond()); + break; + } + } + } + } @Nullable From 435754bba0bf4567758eed057e0476c443471327 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 12:32:51 +0200 Subject: [PATCH 098/217] add arrow button to get from VCS --- .../impl/welcomeScreen/FlatWelcomeFrame.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 5a3800cff537..d2a21a482e1a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -304,9 +304,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); panel.setBorder(new EmptyBorder(4, 10, 4, 10)); panel.add(settings.get()); - JLabel arrow = new JLabel(AllIcons.General.Combo3); - arrow.setVerticalAlignment(SwingConstants.BOTTOM); - panel.add(arrow, BorderLayout.EAST); + panel.add(createArrow(settings.get()), BorderLayout.EAST); installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, focusListOnLeft); return panel; } @@ -338,8 +336,11 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { ActionLink link = new ActionLink(text, icon, action); link.setPaintUnderline(false); link.setNormalColor(getLinkNormalColor()); - installFocusable(button, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); button.add(link); + if (action instanceof WelcomePopupAction) { + button.add(createArrow(link), BorderLayout.EAST); + } + installFocusable(button, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, true); actions.add(button); } } @@ -536,6 +537,22 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } } + private static JLabel createArrow(final ActionLink link) { + JLabel arrow = new JLabel(AllIcons.General.Combo3); + arrow.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + arrow.setVerticalAlignment(SwingConstants.BOTTOM); + new ClickListener() { + @Override + public boolean onClick(@NotNull MouseEvent e, int clickCount) { + final MouseEvent newEvent = new MouseEvent(link, e.getID(), e.getWhen(), e.getModifiers(), e.getX(), e.getY(), e.getClickCount(), + e.isPopupTrigger(), e.getButton()); + link.doClick(newEvent); + return true; + } + }.installOn(arrow); + return arrow; + } + @Override public BalloonLayout getBalloonLayout() { return myBalloonLayout; From 5d1a55df95ad25c7c22580585cf6508ef7f3c0ca Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 14:35:32 +0400 Subject: [PATCH 099/217] added run in-place action with shortcut --- python/ipnb/resources/META-INF/plugin.xml | 5 +++- .../editor/actions/IpnbAddCellAction.java | 2 +- .../editor/actions/IpnbRunCellAction.java | 24 ++-------------- .../editor/actions/IpnbRunCellBaseAction.java | 28 +++++++++++++++++++ .../actions/IpnbRunCellInplaceAction.java | 25 +++++++++++++++++ .../panels/code/IpnbCodeSourcePanel.java | 7 ++++- 6 files changed, 67 insertions(+), 24 deletions(-) create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellInplaceAction.java diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index de8cdf1bc623..f93520bb4a73 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -31,9 +31,12 @@ - + + + + diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java index 1078f633a513..f135879bc839 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java @@ -16,7 +16,7 @@ public class IpnbAddCellAction extends AnAction { } @Override - public void actionPerformed(AnActionEvent event) { + public void actionPerformed(@NotNull AnActionEvent event) { final DataContext context = event.getDataContext(); final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); if (editor instanceof IpnbFileEditor) { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellAction.java index 4a41e17d85ac..f28517b32894 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellAction.java @@ -1,19 +1,16 @@ package org.jetbrains.plugins.ipnb.editor.actions; -import com.intellij.icons.AllIcons; -import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.fileEditor.FileEditor; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; -import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; -public class IpnbRunCellAction extends AnAction { +public class IpnbRunCellAction extends IpnbRunCellBaseAction { public IpnbRunCellAction() { - super(AllIcons.General.Run); + super(); } @Override @@ -22,22 +19,7 @@ public class IpnbRunCellAction extends AnAction { final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); if (editor instanceof IpnbFileEditor) { final IpnbFilePanel component = ((IpnbFileEditor)editor).getIpnbFilePanel(); - runCell(component, false); + runCell(component, true); } } - - public void runCell(@NotNull final IpnbFilePanel ipnbFilePanel, boolean selectNext) { - final IpnbEditablePanel cell = ipnbFilePanel.getSelectedCell(); - cell.runCell(); - if (selectNext) { - final int index = ipnbFilePanel.getSelectedIndex(); - if (ipnbFilePanel.getIpnbPanels().size()-1 == index) { - ipnbFilePanel.createAndAddCell(); - } - ipnbFilePanel.selectNext(cell); - } - ipnbFilePanel.revalidate(); - ipnbFilePanel.repaint(); - ipnbFilePanel.requestFocus(); - } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java new file mode 100644 index 000000000000..cacc7ae34328 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java @@ -0,0 +1,28 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.AnAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditablePanel; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public abstract class IpnbRunCellBaseAction extends AnAction { + public IpnbRunCellBaseAction() { + super(AllIcons.General.Run); + } + + public void runCell(@NotNull final IpnbFilePanel ipnbFilePanel, boolean selectNext) { + final IpnbEditablePanel cell = ipnbFilePanel.getSelectedCell(); + cell.runCell(); + if (selectNext) { + final int index = ipnbFilePanel.getSelectedIndex(); + if (ipnbFilePanel.getIpnbPanels().size()-1 == index) { + ipnbFilePanel.createAndAddCell(); + } + ipnbFilePanel.selectNext(cell); + } + ipnbFilePanel.revalidate(); + ipnbFilePanel.repaint(); + ipnbFilePanel.requestFocus(); + } +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellInplaceAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellInplaceAction.java new file mode 100644 index 000000000000..49c2099e8e1a --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellInplaceAction.java @@ -0,0 +1,25 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public class IpnbRunCellInplaceAction extends IpnbRunCellBaseAction { + public IpnbRunCellInplaceAction() { + super(); + } + + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final DataContext context = event.getDataContext(); + final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); + if (editor instanceof IpnbFileEditor) { + final IpnbFilePanel component = ((IpnbFileEditor)editor).getIpnbFilePanel(); + runCell(component, false); + } + } +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java index e8a579b39877..9aa91edfe706 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/code/IpnbCodeSourcePanel.java @@ -23,6 +23,7 @@ import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.IpnbEditorUtil; import org.jetbrains.plugins.ipnb.editor.actions.IpnbRunCellAction; +import org.jetbrains.plugins.ipnb.editor.actions.IpnbRunCellInplaceAction; import org.jetbrains.plugins.ipnb.editor.panels.IpnbEditorPanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; import org.jetbrains.plugins.ipnb.editor.panels.IpnbPanel; @@ -99,9 +100,13 @@ public class IpnbCodeSourcePanel extends IpnbPanel imp UIUtil.requestFocus(getIpnbCodePanel().getFileEditor().getIpnbFilePanel()); } else if (keyCode == KeyEvent.VK_ENTER && InputEvent.CTRL_DOWN_MASK == e.getModifiersEx()) { - final IpnbRunCellAction action = (IpnbRunCellAction)ActionManager.getInstance().getAction("IpnbRunCellAction"); + final IpnbRunCellInplaceAction action = (IpnbRunCellInplaceAction)ActionManager.getInstance().getAction("IpnbRunCellInplaceAction"); action.runCell(ipnbFilePanel, false); } + else if (keyCode == KeyEvent.VK_ENTER && InputEvent.SHIFT_DOWN_MASK == e.getModifiersEx()) { + final IpnbRunCellAction action = (IpnbRunCellAction)ActionManager.getInstance().getAction("IpnbRunCellAction"); + action.runCell(ipnbFilePanel, true); + } } } From ad789d7b7b9b0397d275f3dbb7b7ee7e9cc86173 Mon Sep 17 00:00:00 2001 From: irengrig Date: Thu, 23 Oct 2014 13:12:12 +0200 Subject: [PATCH 100/217] jscs config file rename test --- .../com/intellij/testFramework/VfsTestUtil.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/platform/testFramework/src/com/intellij/testFramework/VfsTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/VfsTestUtil.java index 986ba6e6a9d8..279e640d4a2d 100644 --- a/platform/testFramework/src/com/intellij/testFramework/VfsTestUtil.java +++ b/platform/testFramework/src/com/intellij/testFramework/VfsTestUtil.java @@ -89,6 +89,21 @@ public class VfsTestUtil { } } + public static void deleteFile(final VirtualFile file) { + try { + AccessToken token = WriteAction.start(); + try { + file.delete(VfsTestUtil.class); + } + finally { + token.finish(); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + public static void clearContent(VirtualFile file) { Assert.assertNotNull(file); try { From fa1542efb768cc5eaa588f68c4e0cdbdcb6e0b72 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 11:23:14 +0200 Subject: [PATCH 101/217] simplify protocol reader generator --- .../protocolReader/DynamicReader.java | 70 ------------ .../protocolReader/GeneratedCodeMap.java | 22 ---- .../jetbrains/protocolReader/GlobalScope.java | 58 ++++------ .../protocolReader/ReaderGenerator.java | 104 ++++++++++++------ .../jsonProtocol/SchemaReaderGenerator.java | 5 +- 5 files changed, 90 insertions(+), 169 deletions(-) delete mode 100644 platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java delete mode 100644 platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GeneratedCodeMap.java diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java deleted file mode 100644 index bd4b5f332ada..000000000000 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/DynamicReader.java +++ /dev/null @@ -1,70 +0,0 @@ -package org.jetbrains.protocolReader; - -import gnu.trove.THashMap; -import org.jetbrains.annotations.NotNull; - -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; - -public class DynamicReader { - final LinkedHashMap, TypeHandler> typeToTypeHandler; - private final ReaderRoot root; - - public DynamicReader(Class readerRootClass, Class[] protocolInterfaces) { - typeToTypeHandler = new InterfaceReader(protocolInterfaces).go(); - root = new ReaderRoot<>(readerRootClass, typeToTypeHandler); - } - - @NotNull - public GeneratedCodeMap generateReader(StringBuilder stringBuilder, String packageName, String className, - Collection basePackages) { - GlobalScope globalScope = new GlobalScope(typeToTypeHandler.values(), basePackages); - FileScope fileScope = globalScope.newFileScope(stringBuilder); - TextOutput out = fileScope.getOutput(); - out.append("// Generated source"); - out.newLine().append("package ").append(packageName).append(';'); - out.newLine().newLine().append("import org.jetbrains.jsonProtocol.*;"); - out.newLine().newLine().append("import static org.jetbrains.jsonProtocol.JsonReaders.*;"); - out.newLine().newLine().append("public final class ").append(className).space(); - out.append(root.getType().isInterface() ? "implements" : "extends").space().append(root.getType().getCanonicalName()).openBlock(false); - - ClassScope rootClassScope = fileScope.newClassScope(); - root.writeStaticMethodJava(rootClassScope); - - for (TypeHandler typeHandler : typeToTypeHandler.values()) { - out.newLine(); - typeHandler.writeStaticClassJava(rootClassScope); - out.newLine(); - } - - boolean isFirst = true; - for (TypeHandler typeHandler : globalScope.getTypeFactories()) { - if (isFirst) { - isFirst = false; - } - else { - out.newLine(); - } - - String originName = typeHandler.getTypeClass().getCanonicalName(); - out.newLine().append("private static final class ").append(globalScope.getTypeImplShortName(typeHandler)).append(Util.TYPE_FACTORY_NAME_POSTFIX).append(" extends ObjectFactory<"); - out.append(originName).append('>').openBlock(); - out.append("@Override").newLine().append("public ").append(originName).append(" read(").append(Util.JSON_READER_PARAMETER_DEF); - out.append(')').openBlock(); - out.append("return "); - typeHandler.writeInstantiateCode(rootClassScope, out); - out.append('(').append(Util.READER_NAME).append(", null);").closeBlock(); - out.closeBlock(); - } - - out.closeBlock(); - - Map, String> typeToImplClassName = new THashMap<>(); - for (TypeHandler typeHandler : typeToTypeHandler.values()) { - typeToImplClassName.put(typeHandler.getTypeClass(), packageName + "." + className + "." + fileScope.getTypeImplShortName(typeHandler)); - } - - return new GeneratedCodeMap(typeToImplClassName); - } -} \ No newline at end of file diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GeneratedCodeMap.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GeneratedCodeMap.java deleted file mode 100644 index ec474f2f0303..000000000000 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GeneratedCodeMap.java +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.jetbrains.protocolReader; - -import java.util.Map; - -/** - * Maps json type interfaces to full class name of their generated implementations. - */ -public class GeneratedCodeMap { - private final Map, String> typeToImplClassName; - - public GeneratedCodeMap(Map, String> typeToImplClassName) { - this.typeToImplClassName = typeToImplClassName; - } - - String getTypeImplementationReference(Class type) { - return typeToImplClassName.get(type); - } -} diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java index 9866d7b71d01..28c91b7520d3 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/GlobalScope.java @@ -4,12 +4,15 @@ import gnu.trove.THashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; public class GlobalScope { private final State state; - public GlobalScope(Collection> typeHandlers, Collection basePackages) { + public GlobalScope(Collection> typeHandlers, Collection, String>> basePackages) { state = new State(typeHandlers, basePackages); } @@ -39,13 +42,22 @@ public class GlobalScope { private static class State { private final Map, String> typeToName; - private final Collection basePackages; + private final Collection, String>> basePackages; private final THashSet> typesWithFactories = new THashSet<>(); private final List> typesWithFactoriesList = new ArrayList<>(); - State(Collection> typeHandlers, Collection basePackages) { + State(Collection> typeHandlers, Collection, String>> basePackages) { this.basePackages = basePackages; - typeToName = buildLocalTypeNameMap(typeHandlers); + + int uniqueCode = 0; + Map, String> result = new THashMap<>(typeHandlers.size()); + for (TypeHandler handler : typeHandlers) { + String conflict = result.put(handler, Util.TYPE_NAME_PREFIX + Integer.toString(uniqueCode++)); + if (conflict != null) { + throw new RuntimeException(); + } + } + typeToName = result; } String getTypeImplReference(TypeHandler typeHandler) { @@ -54,8 +66,8 @@ public class GlobalScope { return localName; } - for (GeneratedCodeMap base : basePackages) { - String result = base.getTypeImplementationReference(typeHandler.getTypeClass()); + for (Map, String> base : basePackages) { + String result = base.get(typeHandler.getTypeClass()); if (result != null) { return result; } @@ -72,37 +84,9 @@ public class GlobalScope { return name; } + @NotNull String getTypeImplShortName(TypeHandler typeHandler) { - String result = typeToName.get(typeHandler); - if (result == null) { - throw new RuntimeException(); - } - return result; - } - - private static Map, String> buildLocalTypeNameMap(Collection> typeHandlers) { - List> list = new ArrayList<>(typeHandlers); - // Sort to produce consistent GeneratedCodeMap later. - Collections.sort(list, new Comparator>() { - @Override - public int compare(@NotNull TypeHandler o1, @NotNull TypeHandler o2) { - return getName(o1).compareTo(getName(o2)); - } - - private String getName(TypeHandler handler) { - return handler.getTypeClass().getName(); - } - }); - - int uniqueCode = 0; - Map, String> result = new THashMap<>(list.size()); - for (TypeHandler handler : list) { - String conflict = result.put(handler, Util.TYPE_NAME_PREFIX + Integer.toString(uniqueCode++)); - if (conflict != null) { - throw new RuntimeException(); - } - } - return result; + return typeToName.get(typeHandler); } } } diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java index 8299afe91ece..5ea0ed1a6bb0 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java @@ -4,55 +4,43 @@ package org.jetbrains.protocolReader; +import gnu.trove.THashMap; +import org.jetbrains.annotations.Nullable; + import java.io.File; import java.io.IOException; import java.nio.file.FileSystems; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class ReaderGenerator { protected static void mainImpl(String[] args, GenerateConfiguration configuration) throws IOException { FileUpdater fileUpdater = new FileUpdater(FileSystems.getDefault().getPath(parseArgs(args).outputDirectory(), - configuration.getPackageName().replace('.', - File.separatorChar), - configuration.getClassName() + ".java")); + configuration.packageName.replace('.', + File.separatorChar), + configuration.className + ".java")); generate(configuration, fileUpdater.builder); fileUpdater.update(); } - protected static class GenerateConfiguration { + protected static class GenerateConfiguration { private final String packageName; private final String className; - private final DynamicReader parser; - private final Collection basePackagesMap; + final Collection, String>> basePackagesMap; - public GenerateConfiguration(String packageName, String className, DynamicReader parser) { - this(packageName, className, parser, Collections.emptyList()); + final LinkedHashMap, TypeHandler> typeToTypeHandler; + final ReaderRoot root; + + public GenerateConfiguration(String packageName, String className, Class readerRootClass, Class[] protocolInterfaces) { + this(packageName, className, readerRootClass, protocolInterfaces, null); } - public GenerateConfiguration(String packageName, String className, DynamicReader parser, Collection basePackagesMap) { + public GenerateConfiguration(String packageName, String className, Class readerRootClass, Class[] protocolInterfaces, @Nullable Map, String> basePackagesMap) { this.packageName = packageName; this.className = className; - this.parser = parser; - this.basePackagesMap = basePackagesMap; - } + this.basePackagesMap = basePackagesMap == null ? Collections.emptyList() : Collections.singletonList(basePackagesMap); - public String getPackageName() { - return packageName; - } - - public String getClassName() { - return className; - } - - public DynamicReader getParser() { - return parser; - } - - public Collection getBasePackagesMap() { - return basePackagesMap; + typeToTypeHandler = new InterfaceReader(protocolInterfaces).go(); + root = new ReaderRoot<>(readerRootClass, typeToTypeHandler); } } @@ -122,13 +110,57 @@ public class ReaderGenerator { } } - protected static GeneratedCodeMap buildParserMap(GenerateConfiguration configuration) { - return generate(configuration, new StringBuilder()); + protected static Map, String> buildParserMap(GenerateConfiguration configuration) { + FileScope fileScope = generate(configuration, new StringBuilder()); + + Map, String> typeToImplClassName = new THashMap<>(); + for (TypeHandler typeHandler : configuration.typeToTypeHandler.values()) { + typeToImplClassName.put(typeHandler.getTypeClass(), configuration.packageName + "." + configuration.className + "." + fileScope.getTypeImplShortName(typeHandler)); + } + return typeToImplClassName; } - private static GeneratedCodeMap generate(GenerateConfiguration configuration, StringBuilder stringBuilder) { - return configuration.getParser().generateReader(stringBuilder, - configuration.getPackageName(), configuration.getClassName(), - configuration.getBasePackagesMap()); + private static FileScope generate(GenerateConfiguration configuration, StringBuilder stringBuilder) { + GlobalScope globalScope = new GlobalScope(configuration.typeToTypeHandler.values(), configuration.basePackagesMap); + FileScope fileScope = globalScope.newFileScope(stringBuilder); + TextOutput out = fileScope.getOutput(); + out.append("// Generated source"); + out.newLine().append("package ").append(configuration.packageName).append(';'); + out.newLine().newLine().append("import org.jetbrains.jsonProtocol.*;"); + out.newLine().newLine().append("import static org.jetbrains.jsonProtocol.JsonReaders.*;"); + out.newLine().newLine().append("public final class ").append(configuration.className).space(); + out.append(configuration.root.getType().isInterface() ? "implements" : "extends").space().append(configuration.root.getType().getCanonicalName()).openBlock(false); + + ClassScope rootClassScope = fileScope.newClassScope(); + configuration.root.writeStaticMethodJava(rootClassScope); + + for (TypeHandler typeHandler : configuration.typeToTypeHandler.values()) { + out.newLine(); + typeHandler.writeStaticClassJava(rootClassScope); + out.newLine(); + } + + boolean isFirst = true; + for (TypeHandler typeHandler : globalScope.getTypeFactories()) { + if (isFirst) { + isFirst = false; + } + else { + out.newLine(); + } + + String originName = typeHandler.getTypeClass().getCanonicalName(); + out.newLine().append("private static final class ").append(globalScope.getTypeImplShortName(typeHandler)).append(Util.TYPE_FACTORY_NAME_POSTFIX).append(" extends ObjectFactory<"); + out.append(originName).append('>').openBlock(); + out.append("@Override").newLine().append("public ").append(originName).append(" read(").append(Util.JSON_READER_PARAMETER_DEF); + out.append(')').openBlock(); + out.append("return "); + typeHandler.writeInstantiateCode(rootClassScope, out); + out.append('(').append(Util.READER_NAME).append(", null);").closeBlock(); + out.closeBlock(); + } + + out.closeBlock(); + return fileScope; } } diff --git a/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java b/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java index 6fc9c48c266b..eabd6e7831b9 100644 --- a/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java +++ b/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java @@ -1,14 +1,11 @@ package org.jetbrains.jsonProtocol; -import org.jetbrains.protocolReader.DynamicReader; import org.jetbrains.protocolReader.ReaderGenerator; import java.io.IOException; public class SchemaReaderGenerator extends ReaderGenerator { public static void main(String[] args) throws IOException { - mainImpl(args, new GenerateConfiguration("org.jetbrains.jsonProtocol", "ProtocolSchemaReaderImpl", - new DynamicReader<>(ProtocolSchemaReader.class, - ProtocolMetaModel.class.getDeclaredClasses()))); + mainImpl(args, new GenerateConfiguration<>("org.jetbrains.jsonProtocol", "ProtocolSchemaReaderImpl", ProtocolSchemaReader.class, ProtocolMetaModel.class.getDeclaredClasses())); } } \ No newline at end of file From 1646636b2b3014f51875280e4868f92511441f7e Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 11:33:45 +0200 Subject: [PATCH 102/217] cleanup --- .../protocolReader/ReaderGenerator.java | 29 ++++++++----------- .../jsonProtocol/SchemaReaderGenerator.java | 4 +-- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java index 5ea0ed1a6bb0..a6c1966d8242 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java @@ -1,10 +1,7 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - package org.jetbrains.protocolReader; import gnu.trove.THashMap; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -12,8 +9,8 @@ import java.io.IOException; import java.nio.file.FileSystems; import java.util.*; -public class ReaderGenerator { - protected static void mainImpl(String[] args, GenerateConfiguration configuration) throws IOException { +public final class ReaderGenerator { + public static void generate(String[] args, @NotNull GenerateConfiguration configuration) throws IOException { FileUpdater fileUpdater = new FileUpdater(FileSystems.getDefault().getPath(parseArgs(args).outputDirectory(), configuration.packageName.replace('.', File.separatorChar), @@ -22,7 +19,7 @@ public class ReaderGenerator { fileUpdater.update(); } - protected static class GenerateConfiguration { + public static class GenerateConfiguration { private final String packageName; private final String className; final Collection, String>> basePackagesMap; @@ -64,17 +61,19 @@ public class ReaderGenerator { if (equalsPos == -1) { key = arg.substring(2).trim(); value = null; - } else { + } + else { key = arg.substring(2, equalsPos).trim(); value = arg.substring(equalsPos + 1).trim(); } - ParamListener paramListener = paramMap.get(key); + StringParam paramListener = paramMap.get(key); if (paramListener == null) { throw new IllegalArgumentException("Unrecognized param name: " + key); } try { paramListener.setValue(value); - } catch (IllegalArgumentException e) { + } + catch (IllegalArgumentException e) { throw new IllegalArgumentException("Failed to set value of " + key, e); } } @@ -87,14 +86,9 @@ public class ReaderGenerator { return outputDirParam::getValue; } - private interface ParamListener { - void setValue(String value); - } - - private static class StringParam implements ParamListener { + private static class StringParam { private String value; - @Override public void setValue(String value) { if (value == null) { throw new IllegalArgumentException("Argument with value expected"); @@ -110,7 +104,7 @@ public class ReaderGenerator { } } - protected static Map, String> buildParserMap(GenerateConfiguration configuration) { + public static Map, String> buildParserMap(GenerateConfiguration configuration) { FileScope fileScope = generate(configuration, new StringBuilder()); Map, String> typeToImplClassName = new THashMap<>(); @@ -120,6 +114,7 @@ public class ReaderGenerator { return typeToImplClassName; } + @NotNull private static FileScope generate(GenerateConfiguration configuration, StringBuilder stringBuilder) { GlobalScope globalScope = new GlobalScope(configuration.typeToTypeHandler.values(), configuration.basePackagesMap); FileScope fileScope = globalScope.newFileScope(stringBuilder); diff --git a/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java b/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java index eabd6e7831b9..1220ffa0cd91 100644 --- a/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java +++ b/platform/script-debugger/protocol/schema-reader-generator/src/org/jetbrains/jsonProtocol/SchemaReaderGenerator.java @@ -4,8 +4,8 @@ import org.jetbrains.protocolReader.ReaderGenerator; import java.io.IOException; -public class SchemaReaderGenerator extends ReaderGenerator { +public class SchemaReaderGenerator { public static void main(String[] args) throws IOException { - mainImpl(args, new GenerateConfiguration<>("org.jetbrains.jsonProtocol", "ProtocolSchemaReaderImpl", ProtocolSchemaReader.class, ProtocolMetaModel.class.getDeclaredClasses())); + ReaderGenerator.generate(args, new ReaderGenerator.GenerateConfiguration<>("org.jetbrains.jsonProtocol", "ProtocolSchemaReaderImpl", ProtocolSchemaReader.class, ProtocolMetaModel.class.getDeclaredClasses())); } } \ No newline at end of file From c7aa16f1849818b15f926339b5172b9ff0a63351 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 13:13:45 +0200 Subject: [PATCH 103/217] CR-IC-6607 ability to dynamically compute exportable component presentable name --- .../ide/actions/ExportSettingsAction.java | 18 ++++++++++++++++-- .../com/intellij/openapi/components/State.java | 7 +++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java index df1ad8941bf5..a0d35ea70d2b 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java @@ -33,6 +33,7 @@ import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.components.*; import com.intellij.openapi.components.impl.ServiceManagerImpl; import com.intellij.openapi.components.impl.stores.StateStorageManager; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.PluginDescriptor; import com.intellij.openapi.options.OptionsBundle; import com.intellij.openapi.project.DumbAware; @@ -40,6 +41,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.PairProcessor; +import com.intellij.util.ReflectionUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import com.intellij.util.io.ZipUtil; @@ -55,6 +57,8 @@ import java.util.*; import java.util.jar.JarOutputStream; public class ExportSettingsAction extends AnAction implements DumbAware { + private static final Logger LOG = Logger.getInstance(ExportSettingsAction.class); + @Override public void actionPerformed(@Nullable AnActionEvent e) { ApplicationManager.getApplication().saveSettings(); @@ -200,7 +204,7 @@ public class ExportSettingsAction extends AnAction implements DumbAware { else { files = fileExists ? new File[]{file, additionalExportFile} : new File[]{additionalExportFile}; } - result.putValue(file, new MyExportableComponent(files, getExportableComponentPresentableName(stateAnnotation.name(), aClass, pluginDescriptor))); + result.putValue(file, new MyExportableComponent(files, getExportableComponentPresentableName(stateAnnotation, aClass, pluginDescriptor))); } } } @@ -211,7 +215,17 @@ public class ExportSettingsAction extends AnAction implements DumbAware { } @NotNull - private static String getExportableComponentPresentableName(@NotNull String defaultName, @NotNull Class aClass, @Nullable PluginDescriptor pluginDescriptor) { + private static String getExportableComponentPresentableName(@NotNull State state, @NotNull Class aClass, @Nullable PluginDescriptor pluginDescriptor) { + if (state.presentableName() != State.NameGetter.class) { + try { + return ReflectionUtil.newInstance(state.presentableName()).get(); + } + catch (Exception e) { + LOG.error(e); + } + } + + String defaultName = state.name(); String resourceBundleName; if (pluginDescriptor != null && pluginDescriptor instanceof IdeaPluginDescriptor && !"com.intellij".equals(pluginDescriptor.getPluginId().getIdString())) { resourceBundleName = ((IdeaPluginDescriptor)pluginDescriptor).getResourceBundleBaseName(); diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/State.java b/platform/projectModel-api/src/com/intellij/openapi/components/State.java index bb1f48724f84..23d3a806e2d2 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/components/State.java +++ b/platform/projectModel-api/src/com/intellij/openapi/components/State.java @@ -16,6 +16,8 @@ package com.intellij.openapi.components; +import com.intellij.openapi.util.Getter; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -36,4 +38,9 @@ public @interface State { boolean reloadable() default true; String additionalExportFile() default ""; + + Class presentableName() default NameGetter.class; + + abstract class NameGetter implements Getter { + } } From 794a9d408667f05ab708a561d0aea3d637d3a79d Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 15:24:11 +0400 Subject: [PATCH 104/217] added default shortcuts for cu/copy/paste --- python/ipnb/resources/META-INF/plugin.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index f93520bb4a73..c9bb43624f83 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -40,8 +40,8 @@ - - - + + + \ No newline at end of file From b8bf5bb18544824314893f2bba0808f477bfb4f8 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 15:21:30 +0400 Subject: [PATCH 105/217] [vcs] IDEA-77576 Separate "Compare with Local" action from FileHistoryPanelImpl Get all necessary data from the data context (declare a couple of more DataKeys for that), instead of referencing to FHPI fields. Also extract StandardDiffFromHistoryHandler to make if referable from the action. --- .../src/messages/VcsBundle.properties | 2 - .../src/idea/VcsActions.xml | 4 ++ .../com/intellij/openapi/vcs/VcsDataKeys.java | 4 ++ .../vcs/history/DiffFromHistoryHandler.java | 12 ++-- .../history/BaseDiffFromHistoryHandler.java | 7 ++- .../vcs/history/FileHistoryPanelImpl.java | 62 +++---------------- .../vcs/history/ShowDiffWithLocalAction.java | 62 +++++++++++++++++++ .../StandardDiffFromHistoryHandler.java | 38 ++++++++++++ .../actions/GitCompareWithBranchAction.java | 2 +- .../history/GitDiffFromHistoryHandler.java | 6 +- .../provider/HgDiffFromHistoryHandler.java | 2 +- 11 files changed, 134 insertions(+), 67 deletions(-) create mode 100644 platform/vcs-impl/src/com/intellij/openapi/vcs/history/ShowDiffWithLocalAction.java create mode 100644 platform/vcs-impl/src/com/intellij/openapi/vcs/history/StandardDiffFromHistoryHandler.java diff --git a/platform/platform-resources-en/src/messages/VcsBundle.properties b/platform/platform-resources-en/src/messages/VcsBundle.properties index 2d311769db26..4ffad83a50b7 100644 --- a/platform/platform-resources-en/src/messages/VcsBundle.properties +++ b/platform/platform-resources-en/src/messages/VcsBundle.properties @@ -162,8 +162,6 @@ action.name.refresh=Refresh action.desctiption.refresh=Refresh file history message.text.cannot.refresh.file.history=Cannot refresh: {0} message.title.refresh.file.history=Refresh -action.name.compare.with.local=Compare with Local -action.description.compare.with.local=Compare with local version action.name.get.file.content.from.repository=Get action.description.get.file.content.from.repository=Get version from repository acton.name.get.revision=Get Revision diff --git a/platform/platform-resources/src/idea/VcsActions.xml b/platform/platform-resources/src/idea/VcsActions.xml index 2ac8bd3ef823..fdb2e9f8a20e 100644 --- a/platform/platform-resources/src/idea/VcsActions.xml +++ b/platform/platform-resources/src/idea/VcsActions.xml @@ -259,6 +259,10 @@ + + diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java index c1d37be8758b..0ba448546366 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsDataKeys.java @@ -22,6 +22,8 @@ import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangeList; import com.intellij.openapi.vcs.changes.ChangeRequestChain; import com.intellij.openapi.vcs.history.VcsFileRevision; +import com.intellij.openapi.vcs.history.VcsHistoryProvider; +import com.intellij.openapi.vcs.history.VcsHistorySession; import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.pointers.VirtualFilePointer; @@ -39,6 +41,7 @@ public interface VcsDataKeys { DataKey IO_FILE = DataKey.create("IO_FILE"); DataKey VCS = DataKey.create("VCS"); DataKey VCS_NON_LOCAL_HISTORY_SESSION = DataKey.create("VCS_NON_LOCAL_HISTORY_SESSION"); + DataKey HISTORY_SESSION = DataKey.create("VCS_HISTORY_SESSION"); DataKey VCS_FILE_REVISION = DataKey.create("VCS_FILE_REVISION"); DataKey VCS_FILE_REVISIONS = DataKey.create("VCS_FILE_REVISIONS"); DataKey VCS_VIRTUAL_FILE = DataKey.create("VCS_VIRTUAL_FILE"); @@ -67,4 +70,5 @@ public interface VcsDataKeys { DataKey REMOTE_HISTORY_LOCATION = DataKey.create("REMOTE_HISTORY_LOCATION"); DataKey VCS_REVISION_NUMBER = DataKey.create("VCS_REVISION_NUMBER"); DataKey VCS_REVISION_NUMBERS = DataKey.create("VCS_REVISION_NUMBERS"); + DataKey HISTORY_PROVIDER = DataKey.create("VCS_HISTORY_PROVIDER"); } diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/history/DiffFromHistoryHandler.java b/platform/vcs-api/src/com/intellij/openapi/vcs/history/DiffFromHistoryHandler.java index f49fc4d3bc84..923965dc311b 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/history/DiffFromHistoryHandler.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/history/DiffFromHistoryHandler.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs.history; import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.FilePath; import org.jetbrains.annotations.NotNull; @@ -24,20 +25,18 @@ import org.jetbrains.annotations.NotNull; * or selected one revision and invokes "Show Diff with Local" * Default handler is implemented in {@code vcs-impl}. * Custom handlers should be returned via {@link VcsHistoryProvider#getHistoryDiffHandler()}. - * - * @author Kirill Likhodedov */ public interface DiffFromHistoryHandler { /** * Show diff when a single revision is selected in the file history panel. - * * @param e AnActionEvent which happened, when user invoked "Show Diff". * @param filePath the file which history is shown. - * @param previousRevision the previous revision in the list displayed file history panel, may be {@link VcsFileRevision#NULL}. + * @param previousRevision the previous revision in the list displayed file history panel, may be {@link com.intellij.openapi.vcs.history.VcsFileRevision#NULL}. * @param revision the revision selected in the file history panel. */ void showDiffForOne(@NotNull AnActionEvent e, + @NotNull Project project, @NotNull FilePath filePath, @NotNull VcsFileRevision previousRevision, @NotNull VcsFileRevision revision); @@ -51,6 +50,9 @@ public interface DiffFromHistoryHandler { * @param revision1 one of the selected revisions. * @param revision2 another selected revision. */ - void showDiffForTwo(@NotNull FilePath filePath, @NotNull VcsFileRevision revision1, @NotNull VcsFileRevision revision2); + void showDiffForTwo(@NotNull Project project, + @NotNull FilePath filePath, + @NotNull VcsFileRevision revision1, + @NotNull VcsFileRevision revision2); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/BaseDiffFromHistoryHandler.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/BaseDiffFromHistoryHandler.java index 8a16ba6a481f..1417d014569e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/BaseDiffFromHistoryHandler.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/BaseDiffFromHistoryHandler.java @@ -49,14 +49,17 @@ public abstract class BaseDiffFromHistoryHandler impl @Override public void showDiffForOne(@NotNull AnActionEvent e, - @NotNull FilePath filePath, + @NotNull Project project, @NotNull FilePath filePath, @NotNull VcsFileRevision previousRevision, @NotNull VcsFileRevision revision) { doShowDiff(filePath, previousRevision, revision, false); } @Override - public void showDiffForTwo(@NotNull FilePath filePath, @NotNull VcsFileRevision revision1, @NotNull VcsFileRevision revision2) { + public void showDiffForTwo(@NotNull Project project, + @NotNull FilePath filePath, + @NotNull VcsFileRevision revision1, + @NotNull VcsFileRevision revision2) { doShowDiff(filePath, revision1, revision2, true); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java index a89c4eefbd71..cd57250bcd46 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/FileHistoryPanelImpl.java @@ -773,8 +773,7 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { else { diffAction.registerCustomShortcutSet(CommonShortcuts.getDiff(), this); } - final MyShowDiffWithLocalAction showDiffWithLocalAction = new MyShowDiffWithLocalAction(); - result.add(showDiffWithLocalAction); + result.add(ActionManager.getInstance().getAction("Vcs.ShowDiffWithLocal")); final AnAction diffGroup = ActionManager.getInstance().getAction(VCS_HISTORY_ACTIONS_GROUP); if (diffGroup != null) result.add(diffGroup); @@ -855,7 +854,7 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { int selectionSize = sel.size(); if (selectionSize > 1) { - myDiffHandler.showDiffForTwo(myFilePath, sel.get(0).getRevision(), sel.get(sel.size() - 1).getRevision()); + myDiffHandler.showDiffForTwo(e.getRequiredData(CommonDataKeys.PROJECT), myFilePath, sel.get(0).getRevision(), sel.get(sel.size() - 1).getRevision()); } else if (selectionSize == 1) { final TableView flatView = myDualView.getFlatView(); @@ -871,7 +870,7 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { } if (revision != null) { - myDiffHandler.showDiffForOne(e, myFilePath, previousRevision, revision); + myDiffHandler.showDiffForOne(e, e.getRequiredData(CommonDataKeys.PROJECT), myFilePath, previousRevision, revision); } } } @@ -900,38 +899,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { } } - private class MyShowDiffWithLocalAction extends AbstractActionForSomeSelection { - private MyShowDiffWithLocalAction() { - super(VcsBundle.message("action.name.compare.with.local"), VcsBundle.message("action.description.compare.with.local"), "diffWithCurrent", 1, - FileHistoryPanelImpl.this); - } - - @Override - protected void executeAction(AnActionEvent e) { - final List selection = getSelection(); - if (selection.size() != 1) return; - if (ChangeListManager.getInstance(myVcs.getProject()).isFreezedWithNotification(null)) return; - final VcsRevisionNumber currentRevisionNumber = myHistorySession.getCurrentRevisionNumber(); - VcsFileRevision selectedRevision = getFirstSelectedRevision(); - if (currentRevisionNumber != null && selectedRevision != null) { - myDiffHandler.showDiffForTwo(myFilePath, selectedRevision, new CurrentRevision(myFilePath.getVirtualFile(), currentRevisionNumber)); - } - } - - private boolean isDiffWithCurrentEnabled() { - if (myHistorySession.getCurrentRevisionNumber() == null) return false; - if (myFilePath.getVirtualFile() == null) return false; - if (!myHistorySession.isContentAvailable(getFirstSelectedRevision())) return false; - return true; - } - - @Override - public boolean isEnabled() { - final int size = getSelection().size(); - return size == 1 && isDiffWithCurrentEnabled(); - } - } - private class MyGetVersionAction extends AbstractActionForSomeSelection { public MyGetVersionAction() { super(VcsBundle.message("action.name.get.file.content.from.repository"), @@ -1246,6 +1213,12 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { else if (VcsDataKeys.FILE_HISTORY_PANEL.is(dataId)) { return this; } + else if (VcsDataKeys.HISTORY_SESSION.is(dataId)) { + return myHistorySession; + } + else if (VcsDataKeys.HISTORY_PROVIDER.is(dataId)) { + return myProvider; + } else { return super.getData(dataId); } @@ -1801,23 +1774,6 @@ public class FileHistoryPanelImpl extends PanelWithActionsAndCloseButton { } } - /** - * @author Kirill Likhodedov - */ - private class StandardDiffFromHistoryHandler implements DiffFromHistoryHandler { - - @Override - public void showDiffForOne(@NotNull AnActionEvent e, @NotNull FilePath filePath, - @NotNull VcsFileRevision previousRevision, @NotNull VcsFileRevision revision) { - VcsHistoryUtil.showDifferencesInBackground(myVcs.getProject(), myFilePath, previousRevision, revision, true); - } - - @Override - public void showDiffForTwo(@NotNull FilePath filePath, @NotNull VcsFileRevision revision1, @NotNull VcsFileRevision revision2) { - VcsHistoryUtil.showDifferencesInBackground(myProject, myFilePath, revision1, revision2, true); - } - } - private class MyToggleAction extends ToggleAction implements DumbAware { public MyToggleAction() { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/ShowDiffWithLocalAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/ShowDiffWithLocalAction.java new file mode 100644 index 000000000000..7b96d50dc3a9 --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/ShowDiffWithLocalAction.java @@ -0,0 +1,62 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.vcs.history; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.project.DumbAwareAction; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vcs.FilePath; +import com.intellij.openapi.vcs.VcsDataKeys; +import com.intellij.openapi.vcs.changes.ChangeListManager; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ObjectUtils; +import org.jetbrains.annotations.NotNull; + +public class ShowDiffWithLocalAction extends DumbAwareAction { + + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + Project project = e.getRequiredData(CommonDataKeys.PROJECT); + if (ChangeListManager.getInstance(project).isFreezedWithNotification(null)) return; + + VcsRevisionNumber currentRevisionNumber = e.getRequiredData(VcsDataKeys.HISTORY_SESSION).getCurrentRevisionNumber(); + VcsFileRevision selectedRevision = e.getRequiredData(VcsDataKeys.VCS_FILE_REVISIONS)[0]; + FilePath filePath = e.getRequiredData(VcsDataKeys.FILE_PATH); + + if (currentRevisionNumber != null && selectedRevision != null) { + DiffFromHistoryHandler diffHandler = ObjectUtils.notNull(e.getRequiredData(VcsDataKeys.HISTORY_PROVIDER).getHistoryDiffHandler(), + new StandardDiffFromHistoryHandler()); + diffHandler.showDiffForTwo(project, filePath, + selectedRevision, new CurrentRevision(filePath.getVirtualFile(), currentRevisionNumber)); + } + } + + @Override + public void update(@NotNull AnActionEvent e) { + VcsFileRevision[] selectedRevisions = e.getData(VcsDataKeys.VCS_FILE_REVISIONS); + VirtualFile virtualFile = e.getData(CommonDataKeys.VIRTUAL_FILE); + VcsHistorySession historySession = e.getData(VcsDataKeys.HISTORY_SESSION); + + e.getPresentation().setVisible(true); + e.getPresentation().setEnabled(selectedRevisions != null && selectedRevisions.length == 1 && virtualFile != null && + historySession != null && historySession.getCurrentRevisionNumber() != null && + historySession.isContentAvailable(selectedRevisions[0]) && + e.getData(VcsDataKeys.FILE_PATH) != null && e.getData(VcsDataKeys.HISTORY_PROVIDER) != null && + e.getData(CommonDataKeys.PROJECT) != null); + } + +} diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/StandardDiffFromHistoryHandler.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/StandardDiffFromHistoryHandler.java new file mode 100644 index 000000000000..f2d58ff4613e --- /dev/null +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/StandardDiffFromHistoryHandler.java @@ -0,0 +1,38 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.openapi.vcs.history; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vcs.FilePath; +import org.jetbrains.annotations.NotNull; + +class StandardDiffFromHistoryHandler implements DiffFromHistoryHandler { + + @Override + public void showDiffForOne(@NotNull AnActionEvent e, @NotNull Project project, @NotNull FilePath filePath, + @NotNull VcsFileRevision previousRevision, @NotNull VcsFileRevision revision) { + VcsHistoryUtil.showDifferencesInBackground(project, filePath, previousRevision, revision, true); + } + + @Override + public void showDiffForTwo(@NotNull Project project, + @NotNull FilePath filePath, + @NotNull VcsFileRevision revision1, + @NotNull VcsFileRevision revision2) { + VcsHistoryUtil.showDifferencesInBackground(project, filePath, revision1, revision2, true); + } +} diff --git a/plugins/git4idea/src/git4idea/actions/GitCompareWithBranchAction.java b/plugins/git4idea/src/git4idea/actions/GitCompareWithBranchAction.java index 3288fba14bcf..9d22582f8e2a 100644 --- a/plugins/git4idea/src/git4idea/actions/GitCompareWithBranchAction.java +++ b/plugins/git4idea/src/git4idea/actions/GitCompareWithBranchAction.java @@ -211,7 +211,7 @@ public class GitCompareWithBranchAction extends DumbAwareAction { VcsFileRevision compareRevision = new GitFileRevision(project, filePath, new GitRevisionNumber(branchToCompare, compareRevisionNumber.getTimestamp())); CurrentRevision currentRevision = new CurrentRevision(file, new GitRevisionNumber(head, currentRevisionNumber.getTimestamp())); - new GitDiffFromHistoryHandler(project).showDiffForTwo(new FilePathImpl(file), compareRevision, currentRevision); + new GitDiffFromHistoryHandler(project).showDiffForTwo(project, new FilePathImpl(file), compareRevision, currentRevision); } private static void fileDoesntExistInBranchError(@NotNull Project project, @NotNull VirtualFile file, @NotNull String branchToCompare) { diff --git a/plugins/git4idea/src/git4idea/history/GitDiffFromHistoryHandler.java b/plugins/git4idea/src/git4idea/history/GitDiffFromHistoryHandler.java index d0f051c50475..6208ecd9c0c7 100644 --- a/plugins/git4idea/src/git4idea/history/GitDiffFromHistoryHandler.java +++ b/plugins/git4idea/src/git4idea/history/GitDiffFromHistoryHandler.java @@ -57,7 +57,7 @@ import java.util.Collections; import java.util.List; /** - * {@link DiffFromHistoryHandler#showDiffForTwo(FilePath, VcsFileRevision, VcsFileRevision) "Show Diff" for 2 revision} calls the common code. + * {@link DiffFromHistoryHandler#showDiffForTwo(com.intellij.openapi.project.Project, com.intellij.openapi.vcs.FilePath, com.intellij.openapi.vcs.history.VcsFileRevision, com.intellij.openapi.vcs.history.VcsFileRevision) "Show Diff" for 2 revision} calls the common code. * {@link DiffFromHistoryHandler#showDiffForOne(com.intellij.openapi.actionSystem.AnActionEvent, com.intellij.openapi.vcs.FilePath, com.intellij.openapi.vcs.history.VcsFileRevision, com.intellij.openapi.vcs.history.VcsFileRevision) "Show diff" for 1 revision} * behaves differently for merge commits: for them it shown a popup displaying the parents of the selected commit. Selecting a parent * from the popup shows the difference with this parent. @@ -80,13 +80,13 @@ public class GitDiffFromHistoryHandler extends BaseDiffFromHistoryHandler parents = rev.getParents(); if (parents.size() < 2) { - super.showDiffForOne(e, filePath, previousRevision, revision); + super.showDiffForOne(e, project, filePath, previousRevision, revision); } else { // merge showDiffForMergeCommit(e, filePath, rev, parents); diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffFromHistoryHandler.java b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffFromHistoryHandler.java index 1d556a8b19cb..032fc56dcf48 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffFromHistoryHandler.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/provider/HgDiffFromHistoryHandler.java @@ -31,7 +31,7 @@ import org.zmlx.hg4idea.util.HgUtil; import java.util.List; /** - * {@link com.intellij.openapi.vcs.history.DiffFromHistoryHandler#showDiffForTwo(com.intellij.openapi.vcs.FilePath, com.intellij.openapi.vcs.history.VcsFileRevision, com.intellij.openapi.vcs.history.VcsFileRevision) "Show Diff" for 2 revision} calls the common code. + * {@link com.intellij.openapi.vcs.history.DiffFromHistoryHandler#showDiffForTwo(com.intellij.openapi.project.Project, com.intellij.openapi.vcs.FilePath, com.intellij.openapi.vcs.history.VcsFileRevision, com.intellij.openapi.vcs.history.VcsFileRevision) "Show Diff" for 2 revision} calls the common code. * * @author Nadya Zabrodina */ From bc70dc8e272e13f10e7bdbb0ab73c9ffeacd9be2 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 13:33:58 +0200 Subject: [PATCH 106/217] remove title from action popups on new welcome --- .../wm/impl/welcomeScreen/FlatWelcomeFrame.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index d2a21a482e1a..95799485a995 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -43,6 +43,7 @@ import com.intellij.openapi.wm.StatusBar; import com.intellij.openapi.wm.WelcomeScreen; import com.intellij.openapi.wm.impl.IdeGlassPaneImpl; import com.intellij.ui.*; +import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.labels.ActionLink; import com.intellij.ui.components.panels.NonOpaquePanel; @@ -287,24 +288,24 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } private JComponent createActionLink(final String text, final String groupId, Icon icon, boolean focusListOnLeft) { - final Ref settings = new Ref(null); + final Ref ref = new Ref(null); AnAction action = new AnAction() { @Override public void actionPerformed(@NotNull AnActionEvent e) { ActionGroup configureGroup = (ActionGroup)ActionManager.getInstance().getAction(groupId); JBPopupFactory.getInstance() - .createActionGroupPopup(text, new IconsFreeActionGroup(configureGroup), e.getDataContext(), false, false, false, null, + .createActionGroupPopup(null, new IconsFreeActionGroup(configureGroup), e.getDataContext(), false, false, false, null, 10, null) - .showUnderneathOf(settings.get()); + .show(new RelativePoint(ref.get(), new Point(12, ref.get().getHeight() + 1))); } }; - settings.set(new ActionLink(text, icon, action)); - settings.get().setPaintUnderline(false); - settings.get().setNormalColor(getLinkNormalColor()); + ref.set(new ActionLink(text, icon, action)); + ref.get().setPaintUnderline(false); + ref.get().setNormalColor(getLinkNormalColor()); NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); panel.setBorder(new EmptyBorder(4, 10, 4, 10)); - panel.add(settings.get()); - panel.add(createArrow(settings.get()), BorderLayout.EAST); + panel.add(ref.get()); + panel.add(createArrow(ref.get()), BorderLayout.EAST); installFocusable(panel, action, KeyEvent.VK_UP, KeyEvent.VK_DOWN, focusListOnLeft); return panel; } From 9e854ecde1b1bc07df2b33da4fc71584658ef233 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 23 Oct 2014 15:30:33 +0400 Subject: [PATCH 107/217] WEB-2323 HTML formatter can only format 200 lines. --- .../src/com/intellij/psi/codeStyle/CodeStyleSettings.java | 2 +- .../com/intellij/application/options/CodeStyleHtmlPanel.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java index 9b8bb18ff196..658015f3b9ce 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java @@ -374,7 +374,7 @@ public class CodeStyleSettings extends CommonCodeStyleSettings implements Clonea @NonNls public String HTML_ELEMENTS_TO_INSERT_NEW_LINE_BEFORE = "body,div,p,form,h1,h2,h3"; @NonNls public String HTML_ELEMENTS_TO_REMOVE_NEW_LINE_BEFORE = "br"; @NonNls public String HTML_DO_NOT_INDENT_CHILDREN_OF = "html,body,thead,tbody,tfoot"; - public int HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES = 200; + public int HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES = 0; @NonNls public String HTML_KEEP_WHITESPACES_INSIDE = "span,pre"; @NonNls public String HTML_INLINE_ELEMENTS = diff --git a/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java b/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java index 476181ff256d..f96c71490abb 100644 --- a/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java +++ b/xml/impl/src/com/intellij/application/options/CodeStyleHtmlPanel.java @@ -31,7 +31,6 @@ import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.ArrayUtil; import com.intellij.util.PlatformIcons; -import com.intellij.util.ui.Centerizer; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -193,7 +192,7 @@ public class CodeStyleHtmlPanel extends CodeStyleAbstractPanel { myInsertNewLineTagNames.setText(settings.HTML_ELEMENTS_TO_INSERT_NEW_LINE_BEFORE); myRemoveNewLineTagNames.setText(settings.HTML_ELEMENTS_TO_REMOVE_NEW_LINE_BEFORE); myDoNotAlignChildrenTagNames.setText(settings.HTML_DO_NOT_INDENT_CHILDREN_OF); - myDoNotAlignChildrenMinSize.setText(String.valueOf(settings.HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES)); + myDoNotAlignChildrenMinSize.setText(settings.HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES == 0 ? "" : String.valueOf(settings.HTML_DO_NOT_ALIGN_CHILDREN_OF_MIN_LINES)); myInlineElementsTagNames.setText(settings.HTML_INLINE_ELEMENTS); myDontBreakIfInlineContent.setText(settings.HTML_DONT_ADD_BREAKS_IF_INLINE_CONTENT); myKeepWhiteSpacesTagNames.setText(settings.HTML_KEEP_WHITESPACES_INSIDE); From 1f4cef5deee5599155c88cccf83df8629c8e18cb Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 15:39:50 +0400 Subject: [PATCH 108/217] added "add cell above" action with shortcut (ctrl + =) --- python/ipnb/resources/META-INF/plugin.xml | 7 ++++- .../plugins/ipnb/editor/IpnbFileEditor.java | 2 +- .../actions/IpnbAddCellAboveAction.java | 31 +++++++++++++++++++ ...ction.java => IpnbAddCellBelowAction.java} | 6 ++-- .../editor/actions/IpnbRunCellBaseAction.java | 2 +- .../ipnb/editor/panels/IpnbFilePanel.java | 20 ++++++------ 6 files changed, 53 insertions(+), 15 deletions(-) create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java rename python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/{IpnbAddCellAction.java => IpnbAddCellBelowAction.java} (88%) diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index c9bb43624f83..d89c83a72ea2 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -39,7 +39,12 @@ - + + + + + + diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbFileEditor.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbFileEditor.java index 6a2a4e2be687..58b57abd32e6 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbFileEditor.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/IpnbFileEditor.java @@ -226,7 +226,7 @@ public class IpnbFileEditor extends UserDataHolderBase implements FileEditor, Te addButton(controlPanel, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - final IpnbAddCellAction action = (IpnbAddCellAction)ActionManager.getInstance().getAction("IpnbAddCellAction"); + final IpnbAddCellBelowAction action = (IpnbAddCellBelowAction)ActionManager.getInstance().getAction("IpnbAddCellAction"); action.addCell(myIpnbFilePanel); } }, AllIcons.General.Add, "Insert Cell Below"); diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java new file mode 100644 index 000000000000..f9b739fb2735 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java @@ -0,0 +1,31 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public class IpnbAddCellAboveAction extends AnAction { + public IpnbAddCellAboveAction() { + super(AllIcons.General.Run); + } + + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final DataContext context = event.getDataContext(); + final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); + if (editor instanceof IpnbFileEditor) { + final IpnbFilePanel component = ((IpnbFileEditor)editor).getIpnbFilePanel(); + addCell(component); + } + } + + public void addCell(@NotNull final IpnbFilePanel ipnbFilePanel) { + ipnbFilePanel.createAndAddCell(false); + } +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java similarity index 88% rename from python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java rename to python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java index f135879bc839..4451dcdd3735 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java @@ -10,8 +10,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; -public class IpnbAddCellAction extends AnAction { - public IpnbAddCellAction() { +public class IpnbAddCellBelowAction extends AnAction { + public IpnbAddCellBelowAction() { super(AllIcons.General.Run); } @@ -26,6 +26,6 @@ public class IpnbAddCellAction extends AnAction { } public void addCell(@NotNull final IpnbFilePanel ipnbFilePanel) { - ipnbFilePanel.createAndAddCell(); + ipnbFilePanel.createAndAddCell(true); } } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java index cacc7ae34328..2d6e538da018 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbRunCellBaseAction.java @@ -17,7 +17,7 @@ public abstract class IpnbRunCellBaseAction extends AnAction { if (selectNext) { final int index = ipnbFilePanel.getSelectedIndex(); if (ipnbFilePanel.getIpnbPanels().size()-1 == index) { - ipnbFilePanel.createAndAddCell(); + ipnbFilePanel.createAndAddCell(true); } ipnbFilePanel.selectNext(cell); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 33a5e19f05e9..9689763d2e8c 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -139,15 +139,15 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { return c.gridy + 1; } - public void createAndAddCell() { + public void createAndAddCell(boolean below) { removeAll(); final IpnbCodeCell cell = new IpnbCodeCell("python", new String[]{""}, null, new ArrayList()); final IpnbCodePanel codePanel = new IpnbCodePanel(myProject, myParent, cell); - addCell(cell, codePanel); + addCell(cell, codePanel, below); } - private void addCell(IpnbEditableCell cell, IpnbEditablePanel panel) { + private void addCell(IpnbEditableCell cell, IpnbEditablePanel panel, boolean below) { final GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; @@ -156,10 +156,12 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { c.insets = new Insets(INSET_Y, INSET_X, 0, 0); final IpnbEditablePanel selectedCell = getSelectedCell(); - final int index = myIpnbPanels.indexOf(selectedCell); - myIpnbFile.addCell(cell, index + 1); - myIpnbPanels.add(index + 1, panel); - + int index = myIpnbPanels.indexOf(selectedCell); + if (below) { + index += 1; + } + myIpnbFile.addCell(cell, index); + myIpnbPanels.add(index, panel); final JPanel promptPanel = new JPanel(); promptPanel.setPreferredSize(new Dimension(IpnbEditorUtil.PROMPT_SIZE.width, 1)); @@ -201,7 +203,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { remove(myBufferPanel); if (myIpnbPanels.isEmpty()) { - createAndAddCell(); + createAndAddCell(true); } } @@ -213,7 +215,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { if (myBufferPanel == null) return; removeAll(); final IpnbEditablePanel editablePanel = (IpnbEditablePanel)myBufferPanel.clone(); - addCell(editablePanel.getCell(), editablePanel); + addCell(editablePanel.getCell(), editablePanel, true); } public void replaceComponent(@NotNull final IpnbEditablePanel from, @NotNull final IpnbCell cell) { From f2c5610b7732c2babca5e3c91f68d9757a124d87 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 23 Oct 2014 15:42:49 +0400 Subject: [PATCH 109/217] speed up gutter painting --- .../openapi/editor/impl/IterationState.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java index 1c88507fbe5a..2d1ded2c9a36 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/IterationState.java @@ -83,6 +83,7 @@ public final class IterationState { private final TextAttributes myMergedAttributes = new TextAttributes(); + @Nullable private final HighlighterIterator myHighlighterIterator; private final HighlighterSweep myView; private final HighlighterSweep myDoc; @@ -118,6 +119,7 @@ public final class IterationState { private final DocumentEx myDocument; private final EditorEx myEditor; private final Color myReadOnlyColor; + private final boolean myUseOnlyFullLineHighlighters; public IterationState(@NotNull EditorEx editor, int start, int end, boolean useCaretAndSelection) { this(editor, start, end, useCaretAndSelection, false); @@ -130,9 +132,10 @@ public final class IterationState { myEnd = end; myEditor = editor; + myUseOnlyFullLineHighlighters = useOnlyFullLineHighlighters; LOG.assertTrue(myStartOffset <= myEnd); - myHighlighterIterator = editor.getHighlighter().createIterator(start); + myHighlighterIterator = useOnlyFullLineHighlighters ? null : editor.getHighlighter().createIterator(start); boolean hasSelection = useCaretAndSelection && (editor.getCaretModel().supportsMultipleCarets() || editor.getSelectionModel().hasSelection() || editor.getSelectionModel().hasBlockSelection()); if (!hasSelection) { @@ -265,7 +268,9 @@ public final class IterationState { advanceCurrentSelectionIndex(); advanceCurrentVirtualSelectionIndex(); - myCurrentFold = myFoldingModel.fetchOutermost(myStartOffset); + if (!myUseOnlyFullLineHighlighters) { + myCurrentFold = myFoldingModel.fetchOutermost(myStartOffset); + } if (myCurrentFold != null) { myEndOffset = myCurrentFold.getEndOffset(); } @@ -281,6 +286,9 @@ public final class IterationState { } private int getHighlighterEnd(int start) { + if (myHighlighterIterator == null) { + return myEnd; + } while (!myHighlighterIterator.atEnd()) { int end = myHighlighterIterator.getEnd(); if (end > start) { @@ -304,6 +312,9 @@ public final class IterationState { } private int getGuardedBlockEnd(int start) { + if (myUseOnlyFullLineHighlighters) { + return myEnd; + } List blocks = myDocument.getGuardedBlocks(); int min = myEnd; //noinspection ForLoopReplaceableByForEach @@ -359,6 +370,9 @@ public final class IterationState { } private int getFoldRangesEnd(int startOffset) { + if (myUseOnlyFullLineHighlighters) { + return myEnd; + } int end = myEnd; FoldRegion[] topLevelCollapsed = myFoldingModel.fetchTopLevel(); if (topLevelCollapsed != null) { @@ -401,15 +415,15 @@ public final class IterationState { } private void reinit() { - if (myHighlighterIterator.atEnd()) { + if (myHighlighterIterator != null && myHighlighterIterator.atEnd()) { return; } boolean isInSelection = isInSelection(); boolean isInCaretRow = myStartOffset >= myCaretRowStart && myStartOffset < myCaretRowEnd; - boolean isInGuardedBlock = myDocument.getOffsetGuard(myStartOffset) != null; + boolean isInGuardedBlock = !myUseOnlyFullLineHighlighters && myDocument.getOffsetGuard(myStartOffset) != null; - TextAttributes syntax = myHighlighterIterator.getTextAttributes(); + TextAttributes syntax = myHighlighterIterator == null ? null : myHighlighterIterator.getTextAttributes(); TextAttributes selection = isInSelection ? mySelectionAttributes : null; TextAttributes caret = isInCaretRow ? myCaretRowAttributes : null; From eee618bd84695e1e9e320bc11e1458aea17b29aa Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 15:47:58 +0400 Subject: [PATCH 110/217] added delete cell action with delete shortcut --- python/ipnb/resources/META-INF/plugin.xml | 1 + .../editor/actions/IpnbDeleteCellAction.java | 33 +++++++++++++++++++ .../ipnb/editor/panels/IpnbFilePanel.java | 11 +++++-- 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index d89c83a72ea2..f2a36ff5086e 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -48,5 +48,6 @@ + \ No newline at end of file diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java new file mode 100644 index 000000000000..94c3ce9afa76 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java @@ -0,0 +1,33 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public class IpnbDeleteCellAction extends AnAction { + public IpnbDeleteCellAction() { + super(AllIcons.General.Run); + } + + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final DataContext context = event.getDataContext(); + final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); + if (editor instanceof IpnbFileEditor) { + final IpnbFilePanel component = ((IpnbFileEditor)editor).getIpnbFilePanel(); + cutCell(component); + } + } + + public void cutCell(@NotNull final IpnbFilePanel ipnbFilePanel) { + ipnbFilePanel.deleteCell(); + ipnbFilePanel.revalidate(); + ipnbFilePanel.repaint(); + } +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index 9689763d2e8c..f1d88f78c86f 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -195,13 +195,18 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { public void cutCell() { myBufferPanel = getSelectedCell(); if (myBufferPanel == null) return; - selectNextOrPrev(myBufferPanel); - final int index = myIpnbPanels.indexOf(myBufferPanel); + deleteCell(); + } + + public void deleteCell() { + final IpnbEditablePanel cell = getSelectedCell(); + selectNextOrPrev(cell); + final int index = myIpnbPanels.indexOf(cell); if (index < 0) return; myIpnbPanels.remove(index); myIpnbFile.removeCell(index); - remove(myBufferPanel); + remove(cell); if (myIpnbPanels.isEmpty()) { createAndAddCell(true); } From f6008a37879646b1189b6830d8ffad880ba6e85f Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 15:50:43 +0400 Subject: [PATCH 111/217] [vcs] IDEA-119375 assign shortcut to "Move to Changelist" only if not found in keymap --- .../com/intellij/openapi/vcs/changes/ChangesViewManager.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java index 54dde17c7b9f..fa89cb3f67a6 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java @@ -247,7 +247,10 @@ public class ChangesViewManager implements ChangesViewI, JDOMExternalizable, Pro ActionManager.getInstance().getAction("ChangesView.Refresh").registerCustomShortcutSet(CommonShortcuts.getRerun(), panel); ActionManager.getInstance().getAction("ChangesView.NewChangeList").registerCustomShortcutSet(CommonShortcuts.getNew(), panel); ActionManager.getInstance().getAction("ChangesView.RemoveChangeList").registerCustomShortcutSet(CommonShortcuts.getDelete(), panel); - ActionManager.getInstance().getAction(IdeActions.MOVE_TO_ANOTHER_CHANGE_LIST).registerCustomShortcutSet(CommonShortcuts.getMove(), panel); + AnAction moveToChangeList = ActionManager.getInstance().getAction(IdeActions.MOVE_TO_ANOTHER_CHANGE_LIST); + if (moveToChangeList.getShortcutSet().getShortcuts().length == 0) { + moveToChangeList.registerCustomShortcutSet(CommonShortcuts.getMove(), panel); + } ActionManager.getInstance().getAction("ChangesView.Rename").registerCustomShortcutSet(CommonShortcuts.getRename(), panel); ActionManager.getInstance().getAction("ChangesView.SetDefault").registerCustomShortcutSet( new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_U, KeyEvent.ALT_DOWN_MASK | ctrlMask())), panel); From d0820374d29a4ffc97673fd1ef0d0777cd3b2d47 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 15:58:22 +0400 Subject: [PATCH 112/217] [vcs] mark the root dirty recursively after reset --- plugins/git4idea/src/git4idea/reset/GitResetOperation.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/git4idea/src/git4idea/reset/GitResetOperation.java b/plugins/git4idea/src/git4idea/reset/GitResetOperation.java index f211057cdff0..528a9e1277f3 100644 --- a/plugins/git4idea/src/git4idea/reset/GitResetOperation.java +++ b/plugins/git4idea/src/git4idea/reset/GitResetOperation.java @@ -25,6 +25,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Function; @@ -32,7 +33,6 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import com.intellij.util.ui.UIUtil; import com.intellij.vcs.log.VcsFullCommitDetails; -import com.intellij.vcsUtil.VcsUtil; import git4idea.GitPlatformFacade; import git4idea.GitUtil; import git4idea.branch.GitBranchUiHandlerImpl; @@ -95,7 +95,7 @@ public class GitResetOperation { results.put(repository, result); repository.update(); VfsUtil.markDirtyAndRefresh(true, true, false, root); - VcsUtil.markFileAsDirty(myProject, root); + VcsDirtyScopeManager.getInstance(myProject).dirDirtyRecursively(root); } } finally { From cc21d5ce583dd7f09df4b2c8a51aa1299d4c7cc0 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 16:00:05 +0400 Subject: [PATCH 113/217] [vcs] IDEA-131714 copy full revision number at least until the option is available for user and/or we guarantee that the short hash we give is enough. --- .../intellij/openapi/vcs/history/CopyRevisionNumberAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java index 4bdbdfbd287c..6f5b7c5478dd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/history/CopyRevisionNumberAction.java @@ -67,7 +67,7 @@ public class CopyRevisionNumberAction extends DumbAwareAction { return StringUtil.join(revisions, new Function() { @Override public String fun(VcsRevisionNumber revision) { - return revision instanceof ShortVcsRevisionNumber ? ((ShortVcsRevisionNumber)revision).toShortString() : revision.asString(); + return revision.asString(); } }, " "); } From cd923f2a14129bba8cf43afc99bda02471d9ea97 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Thu, 23 Oct 2014 15:57:39 +0400 Subject: [PATCH 114/217] ResolvingHint support for dom value reference --- .../src/com/intellij/psi/ResolvingHint.java | 0 .../xml/impl/GenericDomValueReference.java | 9 +- .../intellij/util/xml/ResolvingConverter.java | 109 ++++++++++-------- 3 files changed, 66 insertions(+), 52 deletions(-) rename platform/{core-impl => core-api}/src/com/intellij/psi/ResolvingHint.java (100%) diff --git a/platform/core-impl/src/com/intellij/psi/ResolvingHint.java b/platform/core-api/src/com/intellij/psi/ResolvingHint.java similarity index 100% rename from platform/core-impl/src/com/intellij/psi/ResolvingHint.java rename to platform/core-api/src/com/intellij/psi/ResolvingHint.java diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java index 18c97c2a839d..cd679e793553 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/GenericDomValueReference.java @@ -25,6 +25,7 @@ import com.intellij.pom.references.PomService; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiReferenceBase; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.impl.PomTargetPsiElementImpl; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; @@ -42,7 +43,7 @@ import java.util.List; /** * @author peter */ -public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider { +public class GenericDomValueReference extends PsiReferenceBase implements EmptyResolveMessageProvider, ResolvingHint { private final GenericDomValue myGenericValue; public GenericDomValueReference(GenericDomValue domValue) { @@ -217,4 +218,10 @@ public class GenericDomValueReference extends PsiReferenceBase im } return ArrayUtil.EMPTY_OBJECT_ARRAY; } + + @Override + public boolean canResolveTo(Class elementClass) { + Converter converter = getConverter(); + return !(converter instanceof ResolvingConverter) || ((ResolvingConverter)converter).canResolveTo(elementClass); + } } diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java b/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java index 7c39d3ecb4c5..c00d49de288e 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ResolvingConverter.java @@ -19,6 +19,7 @@ import com.intellij.codeInsight.CodeInsightBundle; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.psi.PsiElement; +import com.intellij.psi.ResolvingHint; import com.intellij.psi.xml.XmlTag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,57 +35,7 @@ import java.util.Set; * * @author peter */ -public abstract class ResolvingConverter extends Converter { - @Deprecated - public static final ResolvingConverter EMPTY_CONVERTER = new ResolvingConverter() { - @Override - @NotNull - public Collection getVariants(final ConvertContext context) { - return Collections.emptyList(); - } - - @Override - public Object fromString(final String s, final ConvertContext context) { - return s; - } - - @Override - public String toString(final Object t, final ConvertContext context) { - return String.valueOf(t); - } - }; - - /** @see com.intellij.util.xml.converters.values.BooleanValueConverter */ - @Deprecated - public static final Converter BOOLEAN_CONVERTER = new ResolvingConverter() { - @Override - public Boolean fromString(final String s, final ConvertContext context) { - if ("true".equalsIgnoreCase(s)) { - return Boolean.TRUE; - } - if ("false".equalsIgnoreCase(s)) { - return Boolean.FALSE; - } - return null; - } - - @Override - public String toString(final Boolean t, final ConvertContext context) { - return t == null? null:t.toString(); - } - - @Override - @NotNull - public Collection getVariants(final ConvertContext context) { - final DomElement element = context.getInvocationElement(); - if (element instanceof GenericDomValue) { - final SubTag annotation = element.getAnnotation(SubTag.class); - if (annotation != null && annotation.indicator()) return Collections.emptyList(); - } - - return Arrays.asList(Boolean.FALSE, Boolean.TRUE); - } - }; +public abstract class ResolvingConverter extends Converter implements ResolvingHint { @Override public String getErrorMessage(@Nullable String s, final ConvertContext context) { @@ -170,6 +121,11 @@ public abstract class ResolvingConverter extends Converter { return resolveResult != null && element.getManager().areElementsEquivalent(element, getPsiElement(resolveResult)); } + @Override + public boolean canResolveTo(Class elementClass) { + return true; + } + /** * Delegate from {@link com.intellij.psi.PsiReference#resolve()} * @param o {@link #fromString(String, ConvertContext)} result @@ -242,4 +198,55 @@ public abstract class ResolvingConverter extends Converter { return myWrappedConverter.toString(t, context); } } + + @Deprecated + public static final ResolvingConverter EMPTY_CONVERTER = new ResolvingConverter() { + @Override + @NotNull + public Collection getVariants(final ConvertContext context) { + return Collections.emptyList(); + } + + @Override + public Object fromString(final String s, final ConvertContext context) { + return s; + } + + @Override + public String toString(final Object t, final ConvertContext context) { + return String.valueOf(t); + } + }; + + /** @see com.intellij.util.xml.converters.values.BooleanValueConverter */ + @Deprecated + public static final Converter BOOLEAN_CONVERTER = new ResolvingConverter() { + @Override + public Boolean fromString(final String s, final ConvertContext context) { + if ("true".equalsIgnoreCase(s)) { + return Boolean.TRUE; + } + if ("false".equalsIgnoreCase(s)) { + return Boolean.FALSE; + } + return null; + } + + @Override + public String toString(final Boolean t, final ConvertContext context) { + return t == null? null:t.toString(); + } + + @Override + @NotNull + public Collection getVariants(final ConvertContext context) { + final DomElement element = context.getInvocationElement(); + if (element instanceof GenericDomValue) { + final SubTag annotation = element.getAnnotation(SubTag.class); + if (annotation != null && annotation.indicator()) return Collections.emptyList(); + } + + return Arrays.asList(Boolean.FALSE, Boolean.TRUE); + } + }; } From 4ae41f73cf73011c0eff4430103f6c568bb3b961 Mon Sep 17 00:00:00 2001 From: Alexander Kirillin Date: Thu, 23 Oct 2014 16:38:19 +0400 Subject: [PATCH 115/217] CR-OC-1970 --- platform/util/src/com/intellij/openapi/util/Version.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/openapi/util/Version.java b/platform/util/src/com/intellij/openapi/util/Version.java index 638d3100d7b6..17a579db51b8 100644 --- a/platform/util/src/com/intellij/openapi/util/Version.java +++ b/platform/util/src/com/intellij/openapi/util/Version.java @@ -3,7 +3,7 @@ package com.intellij.openapi.util; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class Version implements Comparable { +public class Version { public final int major; public final int minor; public final int bugfix; From fa2c07e579d2761db235a661b4ca1ed78429e58e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 12:27:55 +0200 Subject: [PATCH 116/217] block lambda -> expr: disable if found comments outside of expression (IDEA-131749) --- .../RedundantLambdaCodeBlockInspection.java | 16 ++++++++++++---- .../afterCommentsInsideExpr.java | 7 +++++++ .../lambdaCodeBlock2Expr/beforeComments.java | 19 +++++++++++++++++++ .../beforeCommentsInsideExpr.java | 9 +++++++++ 4 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterCommentsInsideExpr.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComments.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeCommentsInsideExpr.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java index d65abf63dda3..7a96ab1cc8bc 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/RedundantLambdaCodeBlockInspection.java @@ -21,19 +21,17 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession; import com.intellij.psi.infos.CandidateInfo; -import com.intellij.psi.infos.MethodCandidateInfo; import com.intellij.psi.scope.conflictResolvers.JavaMethodsConflictResolver; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; -import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; /** @@ -77,7 +75,7 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec final PsiElement body = expression.getBody(); if (body instanceof PsiCodeBlock) { PsiExpression psiExpression = getExpression((PsiCodeBlock)body); - if (psiExpression != null) { + if (psiExpression != null && !findCommentsOutsideExpression(body, psiExpression)) { if (!expression.isVoidCompatible() && LambdaUtil.isExpressionStatementExpression(psiExpression)) { final PsiElement parent = PsiUtil.skipParenthesizedExprUp(expression.getParent()); if (parent instanceof PsiExpressionList) { @@ -110,6 +108,16 @@ public class RedundantLambdaCodeBlockInspection extends BaseJavaBatchLocalInspec } } } + + private boolean findCommentsOutsideExpression(PsiElement body, PsiExpression psiExpression) { + final Collection comments = PsiTreeUtil.findChildrenOfType(body, PsiComment.class); + for (PsiComment comment : comments) { + if (!PsiTreeUtil.isAncestor(psiExpression, comment, true)) { + return true; + } + } + return false; + } }; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterCommentsInsideExpr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterCommentsInsideExpr.java new file mode 100644 index 000000000000..2205522b62e4 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/afterCommentsInsideExpr.java @@ -0,0 +1,7 @@ +// "Replace with expression lambda" "true" +class Test { + { + Runnable r = () -> System.out.println(""//todo comment + ); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComments.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComments.java new file mode 100644 index 000000000000..d6731a471d4d --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeComments.java @@ -0,0 +1,19 @@ +// "Replace with expression lambda" "false" +class Test { + { + a(() -> { + //my comment here + return new Object(){}; + }); + } + + void a(Supplier s) {} + void a(AI s) {} + + interface AI { + void m(); + } + interface Supplier { + T get(); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeCommentsInsideExpr.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeCommentsInsideExpr.java new file mode 100644 index 000000000000..a664b6a1bb6b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/lambdaCodeBlock2Expr/beforeCommentsInsideExpr.java @@ -0,0 +1,9 @@ +// "Replace with expression lambda" "true" +class Test { + { + Runnable r = () -> { + System.out.println(""//todo comment + ); + }; + } +} \ No newline at end of file From ce254d21de50a83bd51cc8b6391b4200058ccd2c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 12:31:09 +0200 Subject: [PATCH 117/217] generate delegate: provide correct context so @Override could be inserted (IDEA-131776) --- .../codeInsight/generation/GenerateDelegateHandler.java | 2 +- .../intellij/codeInsight/generation/GenerateMembersUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java index fe4208deada7..9ec8d1a32f84 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateDelegateHandler.java @@ -106,7 +106,7 @@ public class GenerateDelegateHandler implements LanguageCodeInsightActionHandler } private PsiGenerationInfo generateDelegatePrototype(PsiMethodMember methodCandidate, PsiElement target) throws IncorrectOperationException { - PsiMethod method = GenerateMembersUtil.substituteGenericMethod(methodCandidate.getElement(), methodCandidate.getSubstitutor()); + PsiMethod method = GenerateMembersUtil.substituteGenericMethod(methodCandidate.getElement(), methodCandidate.getSubstitutor(), target); clearMethod(method); clearModifiers(method); diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index 936f587d5fb7..4d55138cad1c 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -475,7 +475,7 @@ public class GenerateMembersUtil { if (method.isConstructor()) { return factory.createConstructor(method.getName(), target); } - return factory.createMethod(method.getName(), PsiType.VOID); + return factory.createMethodFromText("public void " + method.getName() + "(){}", target); } private static void substituteReturnType(@NotNull PsiManager manager, From 247fbc358ff7b0b54cd8636af3e3f43cb9f22dfd Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 12:33:06 +0200 Subject: [PATCH 118/217] testdata for IDEA-131700 --- .../lambda/newLambda/IDEA131700.java | 41 +++++++++++++++++++ .../lambda/NewLambdaHighlightingTest.java | 4 ++ 2 files changed, 45 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA131700.java diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA131700.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA131700.java new file mode 100644 index 000000000000..970305015f41 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/IDEA131700.java @@ -0,0 +1,41 @@ +import java.util.Optional; +import java.util.function.Function; + +class Scratch +{ + public static void main(String[] args) throws Exception + { + final Optional i = foo(); + System.out.println(i); + } + + private static Optional foo() + { + final Optional s = returnsR( + "foo", + z -> { + if (z.isEmpty()) + { + return Optional.empty(); + } + else + { + return Optional.of("a string"); + } + }); + + if (s.isPresent()) + { + return Optional.of(1); + } + else + { + return Optional.of(2); + } + } + + private static R returnsR(String s, Function f) + { + return f.apply(s); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java index be6f71ba76fb..d7b123839b3a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java @@ -151,6 +151,10 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testIDEA131700() throws Exception { + doTest(); + } + private void doTest() { doTest(false); } From 71d92723a829d8aaaf296dad78246d49e5f5e30c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 14:03:45 +0200 Subject: [PATCH 119/217] create constructor params from field: do not reject next constructors if current one is chained (IDEA-131746) --- .../CreateConstructorParameterFromFieldFix.java | 10 +++++++--- .../afterMultipleChainedConstructors.java | 16 ++++++++++++++++ .../beforeMultipleChainedConstructors.java | 15 +++++++++++++++ 3 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleChainedConstructors.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleChainedConstructors.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java index 12cf5d8aae2f..5f2a00d6a18a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java @@ -144,7 +144,9 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { } for (PsiMethodMember member : elements) { - if (!addParameterToConstructor(project, file, editor, member.getElement(), new PsiField[] {getField()}, cleanupElements)) break; + if (!addParameterToConstructor(project, file, editor, member.getElement(), new PsiField[] {getField()}, cleanupElements)) { + break; + } } } else if (!constrs.isEmpty()) { @@ -317,9 +319,9 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { assert constructor != null; PsiParameter[] newParameters = constructor.getParameterList().getParameters(); if (newParameters == parameters) return false; //user must have canceled dialog - boolean created = false; // do not introduce assignment in chanined constructor if (JavaHighlightUtil.getChainedConstructors(constructor) == null) { + boolean created = false; for (PsiField field : fields.keySet()) { final String defaultParamName = fields.get(field); PsiParameter parameter = findParamByName(defaultParamName, field.getType(), newParameters, parameterInfos); @@ -334,8 +336,10 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { } created = true; } + return created; + } else { + return true; } - return created; } private static void notNull(PsiField field, PsiParameter parameter) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleChainedConstructors.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleChainedConstructors.java new file mode 100644 index 000000000000..f71c0f6e1dcd --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterMultipleChainedConstructors.java @@ -0,0 +1,16 @@ +// "Add constructor parameter" "true" +abstract class FooBar { + protected final String myFoo; + + public FooBar(String myFoo) { + this.myFoo = myFoo; + } + + public FooBar(Integer interestingType, String myFoo) { + this(myFoo); + } + + public FooBar(int i, String myFoo) { + this(myFoo); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleChainedConstructors.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleChainedConstructors.java new file mode 100644 index 000000000000..705a3bfad74b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeMultipleChainedConstructors.java @@ -0,0 +1,15 @@ +// "Add constructor parameter" "true" +abstract class FooBar { + protected final String myFoo; + + public FooBar() { + } + + public FooBar(Integer interestingType) { + this(); + } + + public FooBar(int i) { + this(); + } +} \ No newline at end of file From cd7819ad1d58f051d5628b48401727ddb9b5e2fe Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 14:28:56 +0200 Subject: [PATCH 120/217] if -> conditional: preserve comments (IDEA-131574) --- .../ReplaceIfWithConditionalIntention.java | 19 +++++++++++++++---- .../replaceIfWithConditional/Comments.java | 10 ++++++++++ .../Comments_after.java | 6 ++++++ ...ReplaceIfWithConditionalIntentionTest.java | 1 + 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments.java create mode 100644 plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments_after.java diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java index 47901e781ee2..60c4f3221b36 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntention.java @@ -27,6 +27,8 @@ import com.siyeh.ipp.base.PsiElementPredicate; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import java.util.Collection; + public class ReplaceIfWithConditionalIntention extends Intention { @Override @@ -67,7 +69,7 @@ public class ReplaceIfWithConditionalIntention extends Intention { return; } final String conditional = getConditionalText(condition, thenRhs, elseRhs, thenAssign.getType()); - PsiReplacementUtil.replaceStatement(ifStatement, lhsText + operator + conditional + ';'); + replaceIfStatement(ifStatement, lhsText + operator + conditional + ';'); } else if (ReplaceIfWithConditionalPredicate.isReplaceableReturn(ifStatement)) { final PsiExpression condition = ifStatement.getCondition(); @@ -92,7 +94,7 @@ public class ReplaceIfWithConditionalIntention extends Intention { } final PsiType returnType = method.getReturnType(); final String conditional = getConditionalText(condition, thenReturnValue, elseReturnValue, returnType); - PsiReplacementUtil.replaceStatement(ifStatement, "return " + conditional + ';'); + replaceIfStatement(ifStatement, "return " + conditional + ';'); } else if (ReplaceIfWithConditionalPredicate.isReplaceableMethodCall(ifStatement)) { final PsiExpression condition = ifStatement.getCondition(); @@ -135,7 +137,7 @@ public class ReplaceIfWithConditionalIntention extends Intention { } } replacementText.append(");"); - PsiReplacementUtil.replaceStatement(ifStatement, replacementText.toString()); + replaceIfStatement(ifStatement, replacementText.toString()); } else if (ReplaceIfWithConditionalPredicate.isReplaceableImplicitReturn(ifStatement)) { final PsiExpression condition = ifStatement.getCondition(); @@ -165,11 +167,20 @@ public class ReplaceIfWithConditionalIntention extends Intention { if (conditional == null) { return; } - PsiReplacementUtil.replaceStatement(ifStatement, "return " + conditional + ';'); + replaceIfStatement(ifStatement, "return " + conditional + ';'); elseBranch.delete(); } } + private static void replaceIfStatement(PsiIfStatement ifStatement, String text) { + PsiElement parent = ifStatement.getParent(); + final Collection comments = PsiTreeUtil.findChildrenOfType(ifStatement, PsiComment.class); + for (PsiComment comment : comments) { + parent.addBefore(comment, ifStatement); + } + PsiReplacementUtil.replaceStatement(ifStatement, text); + } + private static String getConditionalText(PsiExpression condition, PsiExpression thenValue, PsiExpression elseValue, diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments.java new file mode 100644 index 000000000000..4dd9a4b11b72 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments.java @@ -0,0 +1,10 @@ +class Test { + String foo(String currentBranch) { + if (currentBranch.isEmpty()) { + return currentBranch; + } + else { + return currentBranch.substring(0); // comment + } + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments_after.java new file mode 100644 index 000000000000..20f955e33d33 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/trivialif/replaceIfWithConditional/Comments_after.java @@ -0,0 +1,6 @@ +class Test { + String foo(String currentBranch) { + // comment + return currentBranch.isEmpty() ? currentBranch : currentBranch.substring(0); + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntentionTest.java index d39fe0f02832..4e5238317608 100644 --- a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntentionTest.java +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/trivialif/ReplaceIfWithConditionalIntentionTest.java @@ -27,6 +27,7 @@ public class ReplaceIfWithConditionalIntentionTest extends IPPTestCase { public void testReplaceableAssignmentsWithDiamonds() { doTest(); } public void testReplaceableAssignmentsWithDiamondsLeave() { doTest(); } public void testConditionalCondition() { doTest(); } + public void testComments() { doTest(); } @Override protected String getIntentionName() { From 196040951f6039da011e63e9b1e9459e921d3b4e Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 14:51:50 +0200 Subject: [PATCH 121/217] OS independent way to adjust actions popup location on welcome screen --- .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 95799485a995..48f335a77cb5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -292,11 +292,16 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { AnAction action = new AnAction() { @Override public void actionPerformed(@NotNull AnActionEvent e) { + int offset = - UIUtil.getListCellHPadding() - UIUtil.getListViewportPadding().left; + if (ref.get().getIcon() != null) { + offset += ref.get().getIcon().getIconWidth() + ref.get().getIconTextGap(); + } + RelativePoint point = new RelativePoint(ref.get(), new Point(offset, ref.get().getHeight() + 1)); ActionGroup configureGroup = (ActionGroup)ActionManager.getInstance().getAction(groupId); JBPopupFactory.getInstance() .createActionGroupPopup(null, new IconsFreeActionGroup(configureGroup), e.getDataContext(), false, false, false, null, 10, null) - .show(new RelativePoint(ref.get(), new Point(12, ref.get().getHeight() + 1))); + .show(point); } }; ref.set(new ActionLink(text, icon, action)); From b01e60b4d7fd8cabf3f73335419a8ca4a7819e7e Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 23 Oct 2014 16:59:08 +0400 Subject: [PATCH 122/217] resource bundle manager optimization VirtualFile#getUrl() calls count --- .../properties/ResourceBundleManager.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index 9e2e8e477d64..e2d582945884 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -33,6 +33,7 @@ import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.regex.Matcher; /** @@ -63,8 +64,11 @@ public class ResourceBundleManager implements PersistentStateComponent url = new NotNullLazyValue() { + @NotNull + @Override + protected String compute() { + return virtualFile.getUrl(); + } + }; + if (!myState.getDissociatedFiles().isEmpty()) { + myState.getDissociatedFiles().remove(url.getValue()); + } for (CustomResourceBundleState customResourceBundleState : myState.getCustomResourceBundles()) { - if (customResourceBundleState.getFileUrls().remove(url)) { - if (customResourceBundleState.getFileUrls().size() < 2) { + final Set urls = customResourceBundleState.getFileUrls(); + if (urls.remove(url.getValue())) { + if (urls.size() < 2) { myState.getCustomResourceBundles().remove(customResourceBundleState); } break; From b9029df0cb6fc958bc58b2444c938adc0f871937 Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 23 Oct 2014 17:08:53 +0400 Subject: [PATCH 123/217] ResourceBundleManager mehtod childRemoved -> beforeChildRemoval in psi listener. Exception EA-61152 for null document in xml file fixed --- .../lang/properties/ResourceBundleManager.java | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index e2d582945884..232a6a131631 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -104,22 +104,7 @@ public class ResourceBundleManager implements PersistentStateComponent Date: Thu, 23 Oct 2014 17:19:33 +0400 Subject: [PATCH 124/217] 1px block scope indicator --- .../codeInsight/highlighting/BraceHighlightingHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java index f39aec5c5bec..5daaac4bfe16 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java @@ -34,6 +34,7 @@ import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.colors.CodeInsightColors; +import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.ex.DocumentEx; import com.intellij.openapi.editor.ex.EditorEx; @@ -58,7 +59,6 @@ import com.intellij.util.Alarm; import com.intellij.util.Processor; import com.intellij.util.containers.WeakHashMap; import com.intellij.util.text.CharArrayUtil; -import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -440,7 +440,7 @@ public class BraceHighlightingHandler { if (myProject.isDisposed() || myEditor.isDisposed()) return; Color color = attributes.getBackgroundColor(); if (color == null) return; - color = UIUtil.isUnderDarcula() ? ColorUtil.shift(color, 1.1d) : color.darker(); + color = ColorUtil.isDark(EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground()) ? ColorUtil.shift(color, 1.1d) : color.darker(); lineMarkFragment(startLine, endLine, color); } }; @@ -561,7 +561,7 @@ public class BraceHighlightingHandler { private static class MyLineMarkerRenderer implements LineMarkerRenderer { private static final int DEEPNESS = 2; - private static final int THICKNESS = 2; + private static final int THICKNESS = 1; private final Color myColor; private MyLineMarkerRenderer(@NotNull Color color) { From 2bf1888c4de717952649449b05897ca2463c78b6 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Thu, 23 Oct 2014 17:51:52 +0400 Subject: [PATCH 125/217] nice painting for version control gutter stripes --- .../vcs/ex/LineStatusTrackerDrawing.java | 90 ++++++++----------- 1 file changed, 36 insertions(+), 54 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerDrawing.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerDrawing.java index e5ccc07b61ef..4902f01f9c8e 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerDrawing.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/LineStatusTrackerDrawing.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.ex; import com.intellij.codeInsight.hint.EditorFragmentComponent; import com.intellij.codeInsight.hint.HintManagerImpl; +import com.intellij.ide.ui.UISettings; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ActionUtil; import com.intellij.openapi.diff.DiffColors; @@ -37,16 +38,13 @@ import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.LineMarkerRenderer; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vcs.actions.ShowNextChangeMarkerAction; import com.intellij.openapi.vcs.actions.ShowPrevChangeMarkerAction; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.ui.ColoredSideBorder; -import com.intellij.ui.HintHint; -import com.intellij.ui.HintListener; -import com.intellij.ui.LightweightHint; +import com.intellij.ui.*; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; @@ -73,48 +71,44 @@ public class LineStatusTrackerDrawing { final EditorGutterComponentEx gutter = ((EditorEx)editor).getGutterComponentEx(); Color stripeColor = getDiffGutterColor(range); - if (range.getInnerRanges() == null) { // legacy painter + boolean foldingOutlineShown = ((EditorEx)editor).getGutterComponentEx().isFoldingOutlineShown(); + int triangle = 4; + if (range.getInnerRanges() == null) { // actual painter g.setColor(stripeColor); final int endX = gutter.getWhitespaceSeparatorOffset(); - final int x = r.x + r.width - 5; + final int x = r.x + r.width - 4; final int width = endX - x; if (r.height > 0) { g.fillRect(x, r.y, width, r.height); - g.setColor(gutter.getOutlineColor(false)); - UIUtil.drawLine(g, x, r.y, x + width, r.y); - UIUtil.drawLine(g, x, r.y, x, r.y + r.height - 1); - UIUtil.drawLine(g, x, r.y + r.height - 1, x + width, r.y + r.height - 1); + if (!isDistractionFreeMode()) { + g.setColor(gutter.getOutlineColor(false)); + UIUtil.drawLine(g, x, r.y, x + width, r.y); + UIUtil.drawLine(g, x, r.y, x, r.y + r.height - 1); + UIUtil.drawLine(g, x, r.y + r.height - 1, x + width, r.y + r.height - 1); + } } else { - final int[] xPoints = new int[]{x, - x, - x + width - 1}; - final int[] yPoints = new int[]{r.y - 4, - r.y + 4, - r.y}; + final int[] xPoints = new int[]{x, x, endX - (foldingOutlineShown ? 0 : triangle - 1)}; + final int[] yPoints = new int[]{r.y - triangle, r.y + triangle, r.y}; g.fillPolygon(xPoints, yPoints, 3); - g.setColor(gutter.getOutlineColor(false)); - g.drawPolygon(xPoints, yPoints, 3); + if (!isDistractionFreeMode()) { + g.setColor(gutter.getOutlineColor(false)); + g.drawPolygon(xPoints, yPoints, 3); + } } } - else { - final int x = gutter.getLineMarkerAreaOffset() + gutter.getIconsAreaWidth(); + else { // registry: diff.status.tracker.smart + final int x = gutter.getLineMarkerAreaOffset() + gutter.getIconsAreaWidth() + 1; final int endX = gutter.getWhitespaceSeparatorOffset(); final int width = endX - x; if (range.getType() == Range.DELETED) { final int y = lineToY(editor, range.getLine1()); - final int[] xPoints = new int[]{ - x, - x, - endX - 1}; - final int[] yPoints = new int[]{ - y - 4, - y + 4, - y}; + final int[] xPoints = new int[]{x, x, endX - (foldingOutlineShown ? 0 : triangle - 1)}; + final int[] yPoints = new int[]{y - triangle, y + triangle, y}; g.setColor(stripeColor); g.fillPolygon(xPoints, yPoints, 3); @@ -127,8 +121,7 @@ public class LineStatusTrackerDrawing { int endY = lineToY(editor, range.getLine2()); List innerRanges = range.getInnerRanges(); - for (int i = 0; i < innerRanges.size(); i++) { - Range.InnerRange innerRange = innerRanges.get(i); + for (Range.InnerRange innerRange : innerRanges) { if (innerRange.getType() == Range.DELETED) continue; int start = lineToY(editor, innerRange.getLine1()); @@ -179,28 +172,6 @@ public class LineStatusTrackerDrawing { return editor.logicalPositionToXY(editor.offsetToLogicalPosition(document.getLineStartOffset(line))).y; } - @Nullable - private static Color brighter(final Color color) { - if (color == null) { - return null; - } - - final float[] hsbStripeColor = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); - - if (hsbStripeColor[1] < 0.02f) { - // color is grey - hsbStripeColor[2] = Math.min(1.0f, hsbStripeColor[2] * 1.3f); - } - else { - // let's decrease color saturation - hsbStripeColor[1] *= 0.3; - - // max brightness - hsbStripeColor[2] = 1.0f; - } - return Color.getHSBColor(hsbStripeColor[0], hsbStripeColor[1], hsbStripeColor[2]); - } - public static LineMarkerRenderer createRenderer(final Range range, final LineStatusTracker tracker) { return new ActiveGutterRenderer() { public void paint(final Editor editor, final Graphics g, final Rectangle r) { @@ -384,6 +355,17 @@ public class LineStatusTrackerDrawing { @NotNull private static Color getDiffGutterColor(@NotNull Range range) { final EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme(); + Color color = getDiffGutterColor(range, globalScheme); + return !isDistractionFreeMode() ? color : + ColorUtil.isDark(globalScheme.getDefaultBackground()) ? ColorUtil.brighter(color, 1) : ColorUtil.darker(color, 1); + } + + private static boolean isDistractionFreeMode() { + return Registry.is("editor.distraction.free.mode") || UISettings.getInstance().PRESENTATION_MODE; + } + + @NotNull + private static Color getDiffGutterColor(@NotNull Range range, @NotNull EditorColorsScheme globalScheme) { switch (range.getType()) { case Range.INSERTED: return globalScheme.getColor(EditorColors.ADDED_LINES_COLOR); From 1bfd04acd5eda16f3b1fb6f1f8c1cadbf21f6f72 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 17:56:48 +0400 Subject: [PATCH 126/217] added move cell up/down actions with shortcuts --- python/ipnb/resources/META-INF/plugin.xml | 7 ++++ .../actions/IpnbAddCellAboveAction.java | 4 -- .../actions/IpnbAddCellBelowAction.java | 4 -- .../editor/actions/IpnbCopyCellAction.java | 2 +- .../editor/actions/IpnbCutCellAction.java | 2 +- .../editor/actions/IpnbDeleteCellAction.java | 4 +- .../actions/IpnbMoveCellDownAction.java | 23 +++++++++++ .../editor/actions/IpnbMoveCellUpAction.java | 24 +++++++++++ .../editor/actions/IpnbPasteCellAction.java | 4 +- .../ipnb/editor/actions/IpnbSaveAction.java | 4 +- .../ipnb/editor/panels/IpnbFilePanel.java | 41 ++++++++++++++++--- 11 files changed, 98 insertions(+), 21 deletions(-) create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java create mode 100644 python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java diff --git a/python/ipnb/resources/META-INF/plugin.xml b/python/ipnb/resources/META-INF/plugin.xml index f2a36ff5086e..5f2b691d6d49 100644 --- a/python/ipnb/resources/META-INF/plugin.xml +++ b/python/ipnb/resources/META-INF/plugin.xml @@ -49,5 +49,12 @@ + + + + + + + \ No newline at end of file diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java index f9b739fb2735..457818532e6f 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellAboveAction.java @@ -1,6 +1,5 @@ package org.jetbrains.plugins.ipnb.editor.actions; -import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; @@ -11,9 +10,6 @@ import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbAddCellAboveAction extends AnAction { - public IpnbAddCellAboveAction() { - super(AllIcons.General.Run); - } @Override public void actionPerformed(@NotNull AnActionEvent event) { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java index 4451dcdd3735..fcf9013d37d8 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbAddCellBelowAction.java @@ -1,6 +1,5 @@ package org.jetbrains.plugins.ipnb.editor.actions; -import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; @@ -11,9 +10,6 @@ import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbAddCellBelowAction extends AnAction { - public IpnbAddCellBelowAction() { - super(AllIcons.General.Run); - } @Override public void actionPerformed(@NotNull AnActionEvent event) { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCopyCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCopyCellAction.java index b12569f62447..3bc37039ba8e 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCopyCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCopyCellAction.java @@ -12,7 +12,7 @@ import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbCopyCellAction extends AnAction { public IpnbCopyCellAction() { - super(AllIcons.General.Run); + super(AllIcons.Actions.Copy); } @Override diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCutCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCutCellAction.java index 145cd8b2a8cb..d8a0ae09f20e 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCutCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbCutCellAction.java @@ -12,7 +12,7 @@ import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbCutCellAction extends AnAction { public IpnbCutCellAction() { - super(AllIcons.General.Run); + super(AllIcons.Actions.Menu_cut); } @Override diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java index 94c3ce9afa76..a1ade7f40dc3 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbDeleteCellAction.java @@ -12,7 +12,7 @@ import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbDeleteCellAction extends AnAction { public IpnbDeleteCellAction() { - super(AllIcons.General.Run); + super(AllIcons.Actions.Delete); } @Override @@ -26,7 +26,7 @@ public class IpnbDeleteCellAction extends AnAction { } public void cutCell(@NotNull final IpnbFilePanel ipnbFilePanel) { - ipnbFilePanel.deleteCell(); + ipnbFilePanel.deleteSelectedCell(); ipnbFilePanel.revalidate(); ipnbFilePanel.repaint(); } diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java new file mode 100644 index 000000000000..618863a7f486 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellDownAction.java @@ -0,0 +1,23 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public class IpnbMoveCellDownAction extends AnAction { + + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final DataContext context = event.getDataContext(); + final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); + if (editor instanceof IpnbFileEditor) { + final IpnbFilePanel ipnbFilePanel = ((IpnbFileEditor)editor).getIpnbFilePanel(); + ipnbFilePanel.moveCell(true); + } + } +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java new file mode 100644 index 000000000000..6821ad53fe60 --- /dev/null +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbMoveCellUpAction.java @@ -0,0 +1,24 @@ +package org.jetbrains.plugins.ipnb.editor.actions; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.PlatformDataKeys; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.ipnb.editor.IpnbFileEditor; +import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; + +public class IpnbMoveCellUpAction extends AnAction { + + @Override + public void actionPerformed(@NotNull AnActionEvent event) { + final DataContext context = event.getDataContext(); + final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); + if (editor instanceof IpnbFileEditor) { + final IpnbFilePanel filePanel = ((IpnbFileEditor)editor).getIpnbFilePanel(); + filePanel.moveCell(false); + } + } + +} diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbPasteCellAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbPasteCellAction.java index de10dca7f866..ac330a4df9fb 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbPasteCellAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbPasteCellAction.java @@ -12,11 +12,11 @@ import org.jetbrains.plugins.ipnb.editor.panels.IpnbFilePanel; public class IpnbPasteCellAction extends AnAction { public IpnbPasteCellAction() { - super(AllIcons.General.Run); + super(AllIcons.Actions.Menu_paste); } @Override - public void actionPerformed(AnActionEvent event) { + public void actionPerformed(@NotNull AnActionEvent event) { final DataContext context = event.getDataContext(); final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); if (editor instanceof IpnbFileEditor) { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbSaveAction.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbSaveAction.java index ae880d7fd88e..1053b7bc6d6c 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbSaveAction.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/actions/IpnbSaveAction.java @@ -14,11 +14,11 @@ import org.jetbrains.plugins.ipnb.format.IpnbParser; public class IpnbSaveAction extends AnAction { public IpnbSaveAction() { - super(AllIcons.General.Run); + super(AllIcons.Actions.Menu_saveall); } @Override - public void actionPerformed(AnActionEvent event) { + public void actionPerformed(@NotNull AnActionEvent event) { final DataContext context = event.getDataContext(); final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(context); if (editor instanceof IpnbFileEditor) { diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java index f1d88f78c86f..6ccd4ba385c7 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/editor/panels/IpnbFilePanel.java @@ -144,10 +144,10 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { final IpnbCodeCell cell = new IpnbCodeCell("python", new String[]{""}, null, new ArrayList()); final IpnbCodePanel codePanel = new IpnbCodePanel(myProject, myParent, cell); - addCell(cell, codePanel, below); + addCell(codePanel, below); } - private void addCell(IpnbEditableCell cell, IpnbEditablePanel panel, boolean below) { + private void addCell(@NotNull final IpnbEditablePanel panel, boolean below) { final GridBagConstraints c = new GridBagConstraints(); c.fill = GridBagConstraints.HORIZONTAL; c.gridx = 0; @@ -160,6 +160,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { if (below) { index += 1; } + final IpnbEditableCell cell = panel.getCell(); myIpnbFile.addCell(cell, index); myIpnbPanels.add(index, panel); @@ -195,11 +196,41 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { public void cutCell() { myBufferPanel = getSelectedCell(); if (myBufferPanel == null) return; - deleteCell(); + deleteSelectedCell(); } - public void deleteCell() { + public void moveCell(boolean down) { + final IpnbEditablePanel selectedCell = getSelectedCell(); + if (selectedCell == null) return; + + final int index = getSelectedIndex(); + int siblingIndex = down ? index + 1 : index - 1; + + if (myIpnbPanels.size() <= siblingIndex && down) { + return; + } + if (siblingIndex < 0 && !down) { + return; + } + + if (down) { + deleteSelectedCell(); + addCell(selectedCell, true); + } + else { + final IpnbEditablePanel siblingPanel = myIpnbPanels.get(siblingIndex); + deleteCell(siblingPanel); + addCell(siblingPanel, true); + setSelectedCell(selectedCell); + } + } + + public void deleteSelectedCell() { final IpnbEditablePanel cell = getSelectedCell(); + deleteCell(cell); + } + + private void deleteCell(@NotNull final IpnbEditablePanel cell) { selectNextOrPrev(cell); final int index = myIpnbPanels.indexOf(cell); if (index < 0) return; @@ -220,7 +251,7 @@ public class IpnbFilePanel extends JPanel implements Scrollable, DataProvider { if (myBufferPanel == null) return; removeAll(); final IpnbEditablePanel editablePanel = (IpnbEditablePanel)myBufferPanel.clone(); - addCell(editablePanel.getCell(), editablePanel, true); + addCell(editablePanel, true); } public void replaceComponent(@NotNull final IpnbEditablePanel from, @NotNull final IpnbCell cell) { From 5aba8270ee29848ace26ea6a5d061064fb2db892 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Oct 2014 18:19:15 +0400 Subject: [PATCH 127/217] fixed EDU-245 More clear UI for creating task windows --- .../actions/CCAddTaskWindow.java | 8 +++---- .../ui/CreateTaskWindowDialog.java | 2 +- .../ui/CreateTaskWindowPanel.form | 24 ++++++++++--------- .../ui/CreateTaskWindowPanel.java | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java index 70fc53ea727d..f9e99103d1d4 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java @@ -1,6 +1,6 @@ package org.jetbrains.plugins.coursecreator.actions; -import com.intellij.codeInsight.daemon.impl.DaemonCodeAnalyzerImpl; +import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.Presentation; @@ -23,11 +23,11 @@ public class CCAddTaskWindow extends DumbAwareAction { private static final Logger LOG = Logger.getInstance(CCAddTaskWindow.class); public CCAddTaskWindow() { - super("Add task window","Add task window", null); + super("Add problem to solve","Add problem to solve", null); } @Override - public void actionPerformed(AnActionEvent e) { + public void actionPerformed(@NotNull AnActionEvent e) { final Project project = e.getData(CommonDataKeys.PROJECT); if (project == null) { return; @@ -65,7 +65,7 @@ public class CCAddTaskWindow extends DumbAwareAction { taskFile.addTaskWindow(taskWindow, index); taskWindow.drawHighlighter(editor, false); taskWindow.createGuardedBlocks(editor); - DaemonCodeAnalyzerImpl.getInstance(project).restart(file); + DaemonCodeAnalyzer.getInstance(project).restart(file); } @Override diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowDialog.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowDialog.java index 53a4a77b97f7..0755393b62fe 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowDialog.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowDialog.java @@ -18,7 +18,7 @@ import java.io.*; public class CreateTaskWindowDialog extends DialogWrapper { - public static final String TITLE = "New Task Window"; + public static final String TITLE = "Add Problem to Solve"; private static final Logger LOG = Logger.getInstance(CreateTaskWindowDialog.class.getName()); private final TaskWindow myTaskWindow; private final CreateTaskWindowPanel myPanel; diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.form b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.form index ccd91e4154b0..5348fbbc016f 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.form +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.form @@ -3,7 +3,7 @@ - + @@ -13,18 +13,17 @@ - - + - + - + @@ -39,11 +38,11 @@ - + - + @@ -79,13 +78,15 @@ - + - - + + - + + + @@ -94,6 +95,7 @@ + diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.java index a50840deaf2f..4fc64fa769c6 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CreateTaskWindowPanel.java @@ -12,12 +12,12 @@ public class CreateTaskWindowPanel extends JPanel { private final CreateTaskWindowDialog myDialog; private JPanel myPanel; - private JTextArea myTaskWindowText; private JTextField myHintName; private JTextArea myHintText; private JCheckBox myCreateHintCheckBox; private JLabel myHintNameLabel; private JLabel myHintTextLabel; + private JTextField myTaskWindowText; private String myGeneratedHintName = ""; public CreateTaskWindowPanel(CreateTaskWindowDialog dialog) { From 33452acbc1fb2bdce4c0a9b075be1a109050f484 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 23 Oct 2014 18:25:03 +0400 Subject: [PATCH 128/217] The OccurencesChooser popup should be located within the current screen --- .../refactoring/introduce/inplace/OccurrencesChooser.java | 2 +- .../platform-impl/src/com/intellij/ui/popup/AbstractPopup.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/OccurrencesChooser.java b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/OccurrencesChooser.java index 444bc492aa81..9b8ba1fa9e03 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/OccurrencesChooser.java +++ b/platform/lang-impl/src/com/intellij/refactoring/introduce/inplace/OccurrencesChooser.java @@ -137,7 +137,7 @@ public abstract class OccurrencesChooser { JBPopupFactory.getInstance().createListPopupBuilder(list) .setTitle("Multiple occurrences found") - .setMovable(false) + .setMovable(true) .setResizable(false) .setRequestFocus(true) .setItemChoosenCallback(new Runnable() { diff --git a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java index 039868096f10..2f87b866e68a 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/AbstractPopup.java @@ -782,7 +782,7 @@ public class AbstractPopup implements JBPopup { Rectangle original = new Rectangle(targetBounds); if (myLocateWithinScreen) { if (myMovable) { - ScreenUtil.moveRectangleToFitTheScreen(targetBounds); + ScreenUtil.moveToFit(targetBounds, ScreenUtil.getScreenRectangle(aScreenX, aScreenY), null); } } From c10c7e57875d62606934cd4fc6c21720e4f820fc Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 16:53:27 +0400 Subject: [PATCH 129/217] GitBranchWidget: add log debug, call later only for non-edt event Additional investigation attempt for IDEA-113231. According to comments, update() is not called when needed (but updates properly on click). --- .../git4idea/ui/branch/GitBranchWidget.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitBranchWidget.java b/plugins/git4idea/src/git4idea/ui/branch/GitBranchWidget.java index 4d3497fae299..4ce4b0eccd92 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitBranchWidget.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitBranchWidget.java @@ -16,6 +16,7 @@ package git4idea.ui.branch; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileEditor.FileEditorManagerEvent; import com.intellij.openapi.project.Project; @@ -41,6 +42,8 @@ import java.awt.event.MouseEvent; public class GitBranchWidget extends EditorBasedWidget implements StatusBarWidget.MultipleTextValuesPresentation, StatusBarWidget.Multiframe, GitRepositoryChangeListener { + private static final Logger LOG = Logger.getInstance(GitBranchWidget.class); + private final GitVcsSettings mySettings; private volatile String myText = ""; private volatile String myTooltip = ""; @@ -71,22 +74,32 @@ public class GitBranchWidget extends EditorBasedWidget implements StatusBarWidge @Override public void selectionChanged(@NotNull FileEditorManagerEvent event) { + LOG.debug("selection changed"); update(); } @Override public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) { + LOG.debug("file opened"); update(); } @Override public void fileClosed(@NotNull FileEditorManager source, @NotNull VirtualFile file) { + LOG.debug("file closed"); update(); } @Override public void repositoryChanged(@NotNull GitRepository repository) { - update(); + LOG.debug("repository changed"); + ApplicationManager.getApplication().invokeLater(new Runnable() { + @Override + public void run() { + LOG.debug("update after repository change"); + update(); + } + }); } @Override @@ -132,28 +145,23 @@ public class GitBranchWidget extends EditorBasedWidget implements StatusBarWidge } private void update() { - ApplicationManager.getApplication().invokeLater(new Runnable() { - @Override - public void run() { - Project project = getProject(); - if (project == null || project.isDisposed()) { - emptyTextAndTooltip(); - return; - } + Project project = getProject(); + if (project == null || project.isDisposed()) { + emptyTextAndTooltip(); + return; + } - GitRepository repo = GitBranchUtil.getCurrentRepository(project); - if (repo == null) { // the file is not under version control => display nothing - emptyTextAndTooltip(); - return; - } + GitRepository repo = GitBranchUtil.getCurrentRepository(project); + if (repo == null) { // the file is not under version control => display nothing + emptyTextAndTooltip(); + return; + } - int maxLength = myMaxString.length() - 1; // -1, because there are arrows indicating that it is a popup - myText = StringUtil.shortenTextWithEllipsis(GitBranchUtil.getDisplayableBranchText(repo), maxLength, 5); - myTooltip = getDisplayableBranchTooltip(repo); - myStatusBar.updateWidget(ID()); - mySettings.setRecentRoot(repo.getRoot().getPath()); - } - }); + int maxLength = myMaxString.length() - 1; // -1, because there are arrows indicating that it is a popup + myText = StringUtil.shortenTextWithEllipsis(GitBranchUtil.getDisplayableBranchText(repo), maxLength, 5); + myTooltip = getDisplayableBranchTooltip(repo); + myStatusBar.updateWidget(ID()); + mySettings.setRecentRoot(repo.getRoot().getPath()); } private void emptyTextAndTooltip() { From 6d96f36182567eb51e6f3f738ece774fd9b99a13 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 18:58:05 +0400 Subject: [PATCH 130/217] [log] more debug info for "no references pointing to head" error Check if GitLogProvider returns sync data --- .../src/git4idea/log/GitLogProvider.java | 130 +++++++++++++++++- 1 file changed, 124 insertions(+), 6 deletions(-) diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index a497b3395246..c00861533b6b 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -15,6 +15,7 @@ */ package git4idea.log; +import com.intellij.openapi.diagnostic.Attachment; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -26,8 +27,11 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.OpenTHashSet; import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogSorter; -import com.intellij.vcs.log.impl.LogDataImpl; +import com.intellij.vcs.log.graph.GraphColorManager; +import com.intellij.vcs.log.graph.GraphCommit; +import com.intellij.vcs.log.graph.impl.facade.PermanentGraphImpl; import com.intellij.vcs.log.impl.HashImpl; +import com.intellij.vcs.log.impl.LogDataImpl; import git4idea.*; import git4idea.branch.GitBranchUtil; import git4idea.config.GitVersionSpecialty; @@ -100,9 +104,12 @@ public class GitLogProvider implements VcsLogProvider { Set safeRefs = data.getRefs(); Set allRefs = new OpenTHashSet(safeRefs, REF_ONLY_NAME_STRATEGY); - addNewElements(allRefs, readBranches(repository)); + Set branches = readBranches(repository); + addNewElements(allRefs, branches); Collection allDetails; + Set currentTagNames = null; + DetailedLogData commitsFromTags = null; if (!refresh) { allDetails = data.getCommits(); } @@ -111,17 +118,17 @@ public class GitLogProvider implements VcsLogProvider { // on init: just ignore such tagged-only branches. The price for speed-up. VcsLogProviderRequirementsEx rex = (VcsLogProviderRequirementsEx)requirements; - Set currentTags = readCurrentTagNames(root); - addOldStillExistingTags(allRefs, currentTags, rex.getPreviousRefs()); + currentTagNames = readCurrentTagNames(root); + addOldStillExistingTags(allRefs, currentTagNames, rex.getPreviousRefs()); allDetails = ContainerUtil.newHashSet(data.getCommits()); Set previousTags = new HashSet(ContainerUtil.mapNotNull(rex.getPreviousRefs(), GET_TAG_NAME)); Set safeTags = new HashSet(ContainerUtil.mapNotNull(safeRefs, GET_TAG_NAME)); - Set newUnmatchedTags = remove(currentTags, previousTags, safeTags); + Set newUnmatchedTags = remove(currentTagNames, previousTags, safeTags); if (!newUnmatchedTags.isEmpty()) { - DetailedLogData commitsFromTags = loadSomeCommitsOnTaggedBranches(root, commitCount, newUnmatchedTags); + commitsFromTags = loadSomeCommitsOnTaggedBranches(root, commitCount, newUnmatchedTags); addNewElements(allDetails, commitsFromTags.getCommits()); addNewElements(allRefs, commitsFromTags.getRefs()); } @@ -130,9 +137,120 @@ public class GitLogProvider implements VcsLogProvider { List sortedCommits = VcsLogSorter.sortByDateTopoOrder(allDetails); sortedCommits = sortedCommits.subList(0, Math.min(sortedCommits.size(), requirements.getCommitCount())); + if (LOG.isDebugEnabled()) { + validateDataAndReportError(root, allRefs, sortedCommits, data, branches, currentTagNames, commitsFromTags); + } + return new LogDataImpl(allRefs, sortedCommits); } + private static void validateDataAndReportError(final VirtualFile root, + final Set allRefs, + final List sortedCommits, + final DetailedLogData firstBlockSyncData, + final Set manuallyReadBranches, + @Nullable final Set currentTagNames, + @Nullable final DetailedLogData commitsFromTags) { + final Set refs = ContainerUtil.map2Set(allRefs, new Function() { + @Override + public Hash fun(VcsRef ref) { + return ref.getCommitHash(); + } + }); + + PermanentGraphImpl.newInstance(sortedCommits, new GraphColorManager() { + @Override + public int getColorOfBranch(Hash headCommit) { + return 0; + } + + @Override + public int getColorOfFragment(Hash headCommit, int magicIndex) { + return 0; + } + + @Override + public int compareHeads(Hash head1, Hash head2) { + if (!refs.contains(head1) || !refs.contains(head2)) { + LOG.error("GitLogProvider returned inconsistent data", + new Attachment("error-details.txt", printErrorDetails(root, allRefs, sortedCommits, + firstBlockSyncData, manuallyReadBranches, + currentTagNames, commitsFromTags))); + } + return 0; + } + }, refs); + } + + @SuppressWarnings("StringConcatenationInsideStringBufferAppend") + private static String printErrorDetails(VirtualFile root, + final Set allRefs, + final List sortedCommits, + final DetailedLogData firstBlockSyncData, + final Set manuallyReadBranches, + @Nullable final Set currentTagNames, + @Nullable final DetailedLogData commitsFromTags) { + + StringBuilder sb = new StringBuilder(); + sb.append("[" + root.getName() + "]\n"); + sb.append("First block data from Git:\n"); + sb.append(printLogData(firstBlockSyncData)); + sb.append("\n\nManually read refs:\n"); + sb.append(printRefs(manuallyReadBranches)); + sb.append("\n\nCurrent tag names:\n"); + if (currentTagNames != null) { + sb.append(StringUtil.join(currentTagNames, ", ")); + if (commitsFromTags != null) { + sb.append(printLogData(commitsFromTags)); + } + else { + sb.append("\n\nCommits from new tags were not read.\n"); + } + } + else { + sb.append("\n\nCurrent tags were not read\n"); + } + + sb.append("\n\nResult:\n"); + sb.append("\nCommits (last 100): \n"); + sb.append(printCommits(sortedCommits)); + sb.append("\nAll refs:\n"); + sb.append(printRefs(allRefs)); + return sb.toString(); + } + + private static String printLogData(DetailedLogData firstBlockSyncData) { + StringBuilder sb = new StringBuilder(); + sb.append("Last 100 commits:\n"); + sb.append(printCommits(firstBlockSyncData.getCommits())); + sb.append("\nRefs:\n"); + sb.append(printRefs(firstBlockSyncData.getRefs())); + return sb.toString(); + } + + private static String printCommits(List commits) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < Math.min(commits.size(), 100); i++) { + GraphCommit commit = commits.get(i); + sb.append(String.format("%s -> %s\n", commit.getId().toShortString(), StringUtil.join(commit.getParents(), new Function() { + @Override + public String fun(Hash hash) { + return hash.toShortString(); + } + }, ", "))); + } + return sb.toString(); + } + + private static String printRefs(Set refs) { + return StringUtil.join(refs, new Function() { + @Override + public String fun(VcsRef ref) { + return ref.getCommitHash().toShortString() + " : " + ref.getName(); + } + }, "\n"); + } + private static void addOldStillExistingTags(@NotNull Set allRefs, @NotNull Set currentTags, @NotNull Set previousRefs) { From 0626192503d0aa29f9ae84f652ab11ac294ba5b2 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 16:40:50 +0200 Subject: [PATCH 131/217] inplace local rename: provide old/new names in events (IDEA-131802) as local refactoring doesn't revert template changes before refactoring started local variable name was already changed. if refactoring was ended with invalid name 'after' event got old name because it was already reverted --- .../intellij/refactoring/listeners/RefactoringEventData.java | 5 +++++ .../refactoring/rename/inplace/VariableInplaceRenamer.java | 2 ++ 2 files changed, 7 insertions(+) diff --git a/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringEventData.java b/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringEventData.java index 6435024bf7fc..292e30701d09 100644 --- a/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringEventData.java +++ b/platform/lang-api/src/com/intellij/refactoring/listeners/RefactoringEventData.java @@ -33,6 +33,7 @@ import java.util.Map; public class RefactoringEventData extends UserDataHolderBase { public static final Key> CONFLICTS_KEY = Key.create("conflicts"); public static final Key PSI_ELEMENT_KEY = Key.create("element"); + public static final Key STRING_PROPERTIES = Key.create("stringProperties"); public static final Key PSI_ELEMENT_ARRAY_KEY = Key.create("elementArray"); public static final Key> USAGE_INFOS_KEY = Key.create("usageInfos"); @@ -59,4 +60,8 @@ public class RefactoringEventData extends UserDataHolderBase { public void addUsages(Collection usageInfos) { putUserData(USAGE_INFOS_KEY, usageInfos); } + + public void addStringProperties(String... properties) { + putUserData(STRING_PROPERTIES, properties); + } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java index 0f9011308533..af36c2a03fe9 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java @@ -216,6 +216,7 @@ public class VariableInplaceRenamer extends InplaceRefactoring { if (refactoringId != null) { final RefactoringEventData beforeData = new RefactoringEventData(); beforeData.addElement(elementToRename); + beforeData.addStringProperties(myOldName); myProject.getMessageBus() .syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC).refactoringStarted(refactoringId, beforeData); } @@ -300,6 +301,7 @@ public class VariableInplaceRenamer extends InplaceRefactoring { if (refactoringId != null) { final RefactoringEventData afterData = new RefactoringEventData(); afterData.addElement(getVariable()); + afterData.addStringProperties(newName); myProject.getMessageBus() .syncPublisher(RefactoringEventListener.REFACTORING_EVENT_TOPIC).refactoringDone(refactoringId, afterData); } From 38fb18868f3d6790a5eca3592c088e59e6d5ff6b Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 23 Oct 2014 17:32:25 +0200 Subject: [PATCH 132/217] fix GroovyDebuggerTest.testAnonymousClassInScript --- .../plugins/groovy/debugger/GroovyPositionManager.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java index 1591ee6e97a1..dbbc4333a02d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyPositionManager.java @@ -179,7 +179,8 @@ public class GroovyPositionManager implements PositionManager { String suffix = typeDefinition instanceof GrTypeDefinition && ((GrTypeDefinition)typeDefinition).isTrait() ? "$Trait$Helper" : ""; final PsiClass psiClass = typeDefinition.getContainingClass(); if (psiClass != null) { - return getClassNameForJvm(psiClass) + "$" + typeDefinition.getName() + suffix; + String parent = getClassNameForJvm(psiClass); + return parent == null ? null : parent + "$" + typeDefinition.getName() + suffix; } for (ScriptPositionManagerHelper helper : ScriptPositionManagerHelper.EP_NAME.getExtensions()) { @@ -189,7 +190,8 @@ public class GroovyPositionManager implements PositionManager { } } - return typeDefinition.getQualifiedName() + suffix; + String qname = typeDefinition.getQualifiedName(); + return qname == null ? null : qname + suffix; } @Nullable From 0062ad33c35920a44e3484e86f3e16f6bb8877d1 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Thu, 23 Oct 2014 19:33:57 +0400 Subject: [PATCH 133/217] [git log] Load first commit block always with refs To avoid desynchronization when refresh starts from scratch. --- plugins/git4idea/src/git4idea/log/GitLogProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index c00861533b6b..5e05a8a72de6 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -100,7 +100,7 @@ public class GitLogProvider implements VcsLogProvider { boolean refresh = requirements instanceof VcsLogProviderRequirementsEx && ((VcsLogProviderRequirementsEx)requirements).isRefresh(); - DetailedLogData data = GitHistoryUtils.loadMetadata(myProject, root, refresh, params); + DetailedLogData data = GitHistoryUtils.loadMetadata(myProject, root, true, params); Set safeRefs = data.getRefs(); Set allRefs = new OpenTHashSet(safeRefs, REF_ONLY_NAME_STRATEGY); From 7f91add3b052270ba000f8807d9d806aa356720f Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 23 Oct 2014 17:53:23 +0400 Subject: [PATCH 134/217] [vcs-log] lightning-fast contained in branches for git --- .../com/intellij/vcs/log/VcsLogDataPack.java | 4 + .../intellij/vcs/log/VcsLogProperties.java | 36 +++++++++ .../com/intellij/vcs/log/VcsLogProvider.java | 9 +++ .../src/com/intellij/vcs/log/VcsLogRefs.java | 2 + .../log/data/ContainingBranchesGetter.java | 76 +++++++++++++------ .../vcs/log/impl/TestVcsLogProvider.java | 6 ++ .../src/git4idea/log/GitLogProvider.java | 9 +++ .../org/zmlx/hg4idea/log/HgLogProvider.java | 6 ++ 8 files changed, 124 insertions(+), 24 deletions(-) create mode 100644 platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProperties.java diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogDataPack.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogDataPack.java index fd0afe998a3e..60978dd3a564 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogDataPack.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogDataPack.java @@ -16,6 +16,7 @@ package com.intellij.vcs.log; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.vcs.log.graph.PermanentGraph; import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -28,4 +29,7 @@ public interface VcsLogDataPack { @NotNull VcsLogRefs getRefs(); + @NotNull + PermanentGraph getPermanentGraph(); + } diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProperties.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProperties.java new file mode 100644 index 000000000000..effece19984f --- /dev/null +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProperties.java @@ -0,0 +1,36 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log; + +import org.jetbrains.annotations.NotNull; + +public class VcsLogProperties { + public static class VcsLogProperty { + private final T defaultValue; + private VcsLogProperty(@NotNull T defaultValue) { + this.defaultValue = defaultValue; + } + } + + @NotNull public static final VcsLogProperty LIGHTWEIGHT_BRANCHES = new VcsLogProperty(false); + + @NotNull + public static T get(@NotNull VcsLogProvider provider, VcsLogProperty property) { + T value = provider.getPropertyValue(property); + if (value == null) return property.defaultValue; + return value; + } +} diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java index d9c72314edbc..94c2049fb11a 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogProvider.java @@ -97,6 +97,15 @@ public interface VcsLogProvider { @NotNull Collection getContainingBranches(@NotNull VirtualFile root, @NotNull Hash commitHash) throws VcsException; + /** + * In order to tune log for it's VCS, provider may set value to one of the properties specified in {@link com.intellij.vcs.log.VcsLogProperties}. + * @param property Property instance to return value for. + * @param Type of property value. + * @return Property value or null if unset. + */ + @Nullable + T getPropertyValue(VcsLogProperties.VcsLogProperty property); + interface Requirements { /** diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefs.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefs.java index 53338124f735..de55a562053e 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefs.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLogRefs.java @@ -30,4 +30,6 @@ public interface VcsLogRefs { @NotNull Collection getBranches(); + @NotNull + Collection refsToCommit(@NotNull Hash hash); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.java index d1576fd12390..507829a22c31 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/ContainingBranchesGetter.java @@ -22,18 +22,14 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ThrowableConsumer; import com.intellij.util.containers.SLRUMap; -import com.intellij.vcs.log.Hash; -import com.intellij.vcs.log.VcsLogDataPack; -import com.intellij.vcs.log.VcsLogListener; -import com.intellij.vcs.log.VcsRef; +import com.intellij.vcs.log.*; +import com.intellij.vcs.log.graph.PermanentGraph; import com.intellij.vcs.log.util.SequentialLimitedLifoExecutor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.awt.*; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; +import java.util.*; import java.util.List; /** @@ -48,13 +44,15 @@ public class ContainingBranchesGetter implements VcsLogListener { @NotNull private volatile SLRUMap> myCache = createCache(); @Nullable private Runnable myLoadingFinishedListener; // access only from EDT private int myCurrentBranchesChecksum; + @Nullable private VcsLogRefs myRefs; + @Nullable private PermanentGraph myGraph; ContainingBranchesGetter(@NotNull VcsLogDataHolder dataHolder, @NotNull Disposable parentDisposable) { myDataHolder = dataHolder; myTaskExecutor = new SequentialLimitedLifoExecutor(parentDisposable, 10, new ThrowableConsumer() { @Override public void consume(final Task task) throws Throwable { - final List branches = getContainingBranches(task.root, task.hash); + final List branches = task.getContainingBranches(myDataHolder); ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { @@ -71,12 +69,14 @@ public class ContainingBranchesGetter implements VcsLogListener { @Override public void onChange(@NotNull VcsLogDataPack dataPack, boolean refreshHappened) { if (refreshHappened) { - Collection currentBranches = dataPack.getRefs().getBranches(); + myRefs = dataPack.getRefs(); + Collection currentBranches = myRefs.getBranches(); int checksum = currentBranches.hashCode(); if (myCurrentBranchesChecksum != 0 && myCurrentBranchesChecksum != checksum) { // clear cache if branches set changed after refresh clearCache(); } myCurrentBranchesChecksum = checksum; + myGraph = dataPack.getPermanentGraph(); } } @@ -115,7 +115,7 @@ public class ContainingBranchesGetter implements VcsLogListener { public List requestContainingBranches(@NotNull VirtualFile root, @NotNull Hash hash) { List refs = myCache.get(hash); if (refs == null) { - myTaskExecutor.queue(new Task(root, hash, myCache)); + myTaskExecutor.queue(new Task(root, hash, myCache, myGraph, myRefs)); } return refs; } @@ -125,28 +125,56 @@ public class ContainingBranchesGetter implements VcsLogListener { return new SLRUMap>(1000, 1000); } - @NotNull - private List getContainingBranches(@NotNull VirtualFile root, @NotNull Hash hash) { - try { - List branches = new ArrayList(myDataHolder.getLogProvider(root).getContainingBranches(root, hash)); - Collections.sort(branches); - return branches; - } - catch (VcsException e) { - LOG.warn(e); - return Collections.emptyList(); - } - } - private static class Task { private final VirtualFile root; private final Hash hash; private final SLRUMap> cache; + @Nullable private final VcsLogRefs refs; + @Nullable private final PermanentGraph graph; - public Task(VirtualFile root, Hash hash, SLRUMap> cache) { + public Task(VirtualFile root, + Hash hash, + SLRUMap> cache, + @Nullable PermanentGraph graph, + @Nullable VcsLogRefs refs) { this.root = root; this.hash = hash; this.cache = cache; + this.graph = graph; + this.refs = refs; + } + + @NotNull + public List getContainingBranches(VcsLogDataHolder dataHolder) { + try { + VcsLogProvider provider = dataHolder.getLogProvider(root); + if (graph != null && refs != null && VcsLogProperties.get(provider, VcsLogProperties.LIGHTWEIGHT_BRANCHES)) { + Set branchesIndexes = graph.getContainingBranches(dataHolder.getCommitIndex(hash)); + + Set branchesRefs = new HashSet(); + for (Integer index : branchesIndexes) { + branchesRefs.addAll(refs.refsToCommit(dataHolder.getHash(index))); + } + + ArrayList branchesList = new ArrayList(); + for (VcsRef ref : branchesRefs) { + if (ref.getType().isBranch()) { + branchesList.add(ref.getName()); + } + } + Collections.sort(branchesList); + return branchesList; + } + else { + List branches = new ArrayList(provider.getContainingBranches(root, hash)); + Collections.sort(branches); + return branches; + } + } + catch (VcsException e) { + LOG.warn(e); + return Collections.emptyList(); + } } } diff --git a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java index 54adb9c73e3c..7173fd9db2e2 100644 --- a/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java +++ b/platform/vcs-log/impl/test/com/intellij/vcs/log/impl/TestVcsLogProvider.java @@ -198,6 +198,12 @@ public class TestVcsLogProvider implements VcsLogProvider { return myReadFirstBlockCounter; } + @Nullable + @Override + public T getPropertyValue(VcsLogProperties.VcsLogProperty property) { + return null; + } + private static class MockRefManager implements VcsLogRefManager { @NotNull @Override diff --git a/plugins/git4idea/src/git4idea/log/GitLogProvider.java b/plugins/git4idea/src/git4idea/log/GitLogProvider.java index 5e05a8a72de6..0b50a55c5e1a 100644 --- a/plugins/git4idea/src/git4idea/log/GitLogProvider.java +++ b/plugins/git4idea/src/git4idea/log/GitLogProvider.java @@ -464,6 +464,15 @@ public class GitLogProvider implements VcsLogProvider { return GitBranchUtil.getBranches(myProject, root, true, true, commitHash.asString()); } + @Nullable + @Override + public T getPropertyValue(VcsLogProperties.VcsLogProperty property) { + if (property == VcsLogProperties.LIGHTWEIGHT_BRANCHES) { + return (T)Boolean.TRUE; + } + return null; + } + private static String prepareParameter(String paramName, String value) { return "--" + paramName + "=" + value; // no value quoting needed, because the parameter itself will be quoted by GeneralCommandLine } diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java index 109e83899e5b..842e415a8476 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/log/HgLogProvider.java @@ -268,6 +268,12 @@ public class HgLogProvider implements VcsLogProvider { return HgHistoryUtil.getDescendingHeadsOfBranches(myProject, root, commitHash); } + @Nullable + @Override + public T getPropertyValue(VcsLogProperties.VcsLogProperty property) { + return null; + } + private static boolean branchExists(@NotNull HgRepository repository, @NotNull String branchName) { return repository.getBranches().keySet().contains(branchName) || HgUtil.getNamesWithoutHashes(repository.getBookmarks()).contains(branchName); From b597dffff315c719ada37f1919947fe21a93d6eb Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 23 Oct 2014 19:48:05 +0400 Subject: [PATCH 135/217] fixing leaking debugger virtual machine --- .../intellij/xdebugger/impl/ui/tree/XDebuggerTree.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java index 4191c11e7f26..91de065a12d8 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java @@ -33,6 +33,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; import com.intellij.util.containers.TransferToEDTQueue; import com.intellij.util.ui.TextTransferable; +import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeModelAdapter; import com.intellij.xdebugger.XSourcePosition; import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider; @@ -339,6 +340,13 @@ public class XDebuggerTree extends DnDAwareTree implements DataProvider, Disposa actionManager.getAction(XDebuggerActions.JUMP_TO_SOURCE).unregisterCustomShortcutSet(this); actionManager.getAction(XDebuggerActions.JUMP_TO_TYPE_SOURCE).unregisterCustomShortcutSet(this); actionManager.getAction(XDebuggerActions.MARK_OBJECT).unregisterCustomShortcutSet(this); + + // clear all possible inner fields that may still have links to debugger objects + myTreeModel.setRoot(null); + setCellRenderer(null); + UIUtil.dispose(this); + setLeadSelectionPath(null); + setAnchorSelectionPath(null); } private void registerShortcuts() { From 09442e164f8dc7f63be30b34308870e52965d006 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 23 Oct 2014 20:14:53 +0400 Subject: [PATCH 136/217] IDEA-131783 debugger: icon value is partly shown in variables view --- .../debugger/settings/IconObjectRenderer.java | 9 +++------ .../com/intellij/rt/debugger/ImageSerializer.java | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java b/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java index 02fa84ef4f2c..26ddb3ff8155 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/IconObjectRenderer.java @@ -23,8 +23,8 @@ import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.debugger.ui.tree.ValueDescriptor; import com.intellij.debugger.ui.tree.render.CompoundReferenceRenderer; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; +import com.intellij.icons.AllIcons; import com.intellij.ui.components.JBLabel; -import com.intellij.util.IconUtil; import com.intellij.xdebugger.frame.XFullValueEvaluator; import org.jetbrains.annotations.NotNull; @@ -52,11 +52,8 @@ class IconObjectRenderer extends CompoundReferenceRenderer implements FullValueE @Override public Icon calcValueIcon(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener listener) throws EvaluateException { - ImageIcon icon = ImageObjectRenderer.getIcon(evaluationContext, descriptor.getValue(), "iconToBytes"); - if (icon != null) { - return IconUtil.cropIcon(icon, 16, 16); - } - return null; + String getterName = AllIcons.Debugger.Value.getIconHeight() <= 16 ? "iconToBytesPreviewNormal" : "iconToBytesPreviewRetina"; + return ImageObjectRenderer.getIcon(evaluationContext, descriptor.getValue(), getterName); } @NotNull diff --git a/java/java-runtime/src/com/intellij/rt/debugger/ImageSerializer.java b/java/java-runtime/src/com/intellij/rt/debugger/ImageSerializer.java index 5b727483a0f9..ad38e2c87103 100644 --- a/java/java-runtime/src/com/intellij/rt/debugger/ImageSerializer.java +++ b/java/java-runtime/src/com/intellij/rt/debugger/ImageSerializer.java @@ -35,6 +35,21 @@ public class ImageSerializer { return baos.toByteArray(); } + public static byte[] iconToBytesPreview(Icon icon, int maxSize) throws IOException { + if (icon.getIconHeight() <= maxSize && icon.getIconWidth() <= maxSize) { + return imageToBytes(toImage(icon)); + } + return null; + } + + public static byte[] iconToBytesPreviewNormal(Icon icon) throws IOException { + return iconToBytesPreview(icon, 16); + } + + public static byte[] iconToBytesPreviewRetina(Icon icon) throws IOException { + return iconToBytesPreview(icon, 32); + } + public static byte[] iconToBytes(Icon icon) throws IOException { return imageToBytes(toImage(icon)); } From e7cebf550be16f752622ca7b75cb547962ee476c Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Thu, 23 Oct 2014 12:35:30 +0400 Subject: [PATCH 137/217] clean up --- .../ide/util/treeView/AbstractTreeBuilder.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeBuilder.java b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeBuilder.java index 5f4417c920f6..3a64a06d9c38 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeBuilder.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/AbstractTreeBuilder.java @@ -305,16 +305,10 @@ public class AbstractTreeBuilder implements Disposable { getUi().invokeLaterIfNeeded(false, new Runnable() { @Override public void run() { - if (updateStructure) { - if (forceResort) { - getUi().incComparatorStamp(); - } - - getUi().queueUpdate(element, true).notify(result); - } - else { - getUi().queueUpdate(element, false).notify(result); + if (updateStructure && forceResort) { + getUi().incComparatorStamp(); } + getUi().queueUpdate(element, updateStructure).notify(result); } }); From fea46ef1f6383708e1954eee0453d1eddd5ab33b Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Thu, 23 Oct 2014 19:42:12 +0400 Subject: [PATCH 138/217] allow showing placeholder text in focused editor --- .../src/com/intellij/openapi/editor/ex/EditorEx.java | 3 +++ .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java index 8752e13681b8..237f272266f0 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/ex/EditorEx.java @@ -48,6 +48,7 @@ public interface EditorEx extends Editor { @NonNls String PROP_COLUMN_MODE = "columnMode"; @NonNls String PROP_FONT_SIZE = "fontSize"; Key LAST_PASTED_REGION = Key.create("LAST_PASTED_REGION"); + Key SHOW_PLACEHOLDER_WHEN_FOCUSED = Key.create("SHOW_PLACEHOLDER_WHEN_FOCUSED"); @NotNull @Override @@ -198,6 +199,8 @@ public interface EditorEx extends Editor { * Allows to define 'placeholder text' for the current editor, i.e. virtual text that will be represented until * any user data is entered and current editor is not focused. *

+ * If {@link EditorEx#SHOW_PLACEHOLDER_WHEN_FOCUSED} is set to 'true', the placeholder is shown in focused editor as well. + *

* Feel free to see the detailed feature * definition here. * diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 8ce4d9a29fc8..04990d63e5a9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -1964,7 +1964,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi LogicalPosition clipEndPosition = xyToLogicalPosition(new Point(0, clip.y + clip.height + getLineHeight())); int clipEndOffset = logicalPositionToOffset(clipEndPosition); paintBackgrounds(g, clip, clipStartPosition, clipStartVisualPos, clipStartOffset, clipEndOffset); - if (paintPlaceholderText(g, clip)) return; + if (paintPlaceholderText(g, clip)) { + paintCaretCursor(g); + return; + } paintRectangularSelection(g); paintRightMargin(g, clip); @@ -2876,7 +2879,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return false; } - if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == myEditorComponent) { + if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() == myEditorComponent && + !Boolean.TRUE.equals(SHOW_PLACEHOLDER_WHEN_FOCUSED.get(this))) { // There is a possible case that placeholder text was painted and the editor gets focus now. We want to over-paint previously // used placeholder text then. myLastBackgroundColor = getBackgroundColor(); From c15b5d4f5b9366b9925ba298522087d4c10e4c90 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 14:51:01 +0200 Subject: [PATCH 139/217] continue firefox rdp --- .../jetbrains/debugger/StandaloneVmHelper.java | 4 ++-- .../jetbrains/rpc/AsyncResultCallbackBase.java | 4 ++-- .../rpc/CommandCallbackWithResponse.java | 2 +- .../rpc/CommandCallbackWithResponseBase.java | 2 +- .../src/org/jetbrains/rpc/MessageHandler.java | 15 ++++++++++----- .../src/org/jetbrains/rpc/MessageManager.java | 13 +++++-------- .../src/org/jetbrains/rpc/MessageProcessor.java | 13 +++++++++++++ .../src/org/jetbrains/rpc/MessageWriter.java | 4 ++-- .../org/jetbrains/jsonProtocol/OutMessage.java | 5 +++-- .../src/org/jetbrains/jsonProtocol/Request.java | 3 ++- .../org/jetbrains/jsonProtocol/StringWriter.java | 3 +++ .../jetbrains/protocolReader/ReaderGenerator.java | 3 +-- .../org/jetbrains/protocolReader/TypeHandler.java | 2 +- 13 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 platform/script-debugger/backend/src/org/jetbrains/rpc/MessageProcessor.java diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java index 37d0512813ef..635f7d4e7056 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java @@ -8,7 +8,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.io.NettyUtil; import org.jetbrains.jsonProtocol.Request; -import org.jetbrains.rpc.MessageHandler; +import org.jetbrains.rpc.MessageProcessor; import org.jetbrains.rpc.MessageWriter; public class StandaloneVmHelper extends MessageWriter { @@ -35,7 +35,7 @@ public class StandaloneVmHelper extends MessageWriter { } public interface VmEx extends Vm { - MessageHandler getCommandProcessor(); + MessageProcessor getCommandProcessor(); @Nullable Request createDisconnectRequest(); diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java index ddd473ffda7a..ecbe53591cf0 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java @@ -27,13 +27,13 @@ abstract class AsyncResultCallbackBasereadResult(methodName, response)); } catch (Throwable e) { - MessageManager.LOG.error(e); + MessageHandler.LOG.error(e); callback.reject(e.getMessage()); } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java index 1b87843c7168..af3f41b4ac98 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java @@ -1,5 +1,6 @@ package org.jetbrains.rpc; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.AsyncResult; import com.intellij.util.Function; @@ -12,7 +13,9 @@ import org.jetbrains.jsonProtocol.RequestWithResponse; import java.util.concurrent.atomic.AtomicInteger; public abstract class MessageHandler - implements MessageManager.Handler, ResultReader, CommandSender { + implements MessageManager.Handler, ResultReader, CommandSender, MessageProcessor { + public static final Logger LOG = Logger.getInstance(MessageManager.class); + private final AtomicInteger currentSequence = new AtomicInteger(); protected final MessageManager messageManager; @@ -20,23 +23,25 @@ public abstract class MessageHandler(this); } - public void cancelWaitingRequests() { + @Override + public final void cancelWaitingRequests() { messageManager.cancelWaitingRequests(); } - public void closed() { + @Override + public final void closed() { messageManager.closed(); } @Override - public final int getUpdatedSequence(Request message) { + public final int getUpdatedSequence(@NotNull Request message) { int id = currentSequence.incrementAndGet(); message.finalize(id); return id; } @Override - public final ActionCallback send(Request message) { + public final ActionCallback send(@NotNull Request message) { CommandCallbackWithoutResponse callback = new CommandCallbackWithoutResponse(); messageManager.send(message, callback); return callback.callback; diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java index 4502894441a2..e7a9d94b0d53 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java @@ -15,7 +15,6 @@ */ package org.jetbrains.rpc; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.util.containers.ConcurrentIntObjectMap; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -29,8 +28,6 @@ import java.util.Arrays; * @param type of incoming message that is a command (has sequence number) */ public final class MessageManager { - public static final Logger LOG = Logger.getInstance(MessageManager.class); - private final ConcurrentIntObjectMap> callbackMap = ContainerUtil.createConcurrentIntObjectMap(); private final Handler handler; @@ -41,7 +38,7 @@ public final class MessageManager { - int getUpdatedSequence(OUTGOING message); + int getUpdatedSequence(@NotNull OUTGOING message); boolean write(@NotNull OUTGOING message) throws IOException; @@ -75,7 +72,7 @@ public final class MessageManager { public boolean fun(@NotNull Request message) { CharSequence content = message.toJson(); if (isDebugLoggingEnabled()) { - MessageManager.LOG.debug("OUT: " + content.toString()); + MessageHandler.LOG.debug("OUT: " + content.toString()); } return write(content); } protected boolean isDebugLoggingEnabled() { - return MessageManager.LOG.isDebugEnabled(); + return MessageHandler.LOG.isDebugEnabled(); } protected abstract boolean write(@NotNull CharSequence content); diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java index 7381eea575f3..5164b57a99f5 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/OutMessage.java @@ -5,6 +5,7 @@ import gnu.trove.TIntArrayList; import gnu.trove.TIntHashSet; import gnu.trove.TIntProcedure; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.io.JsonUtil; import java.io.IOException; @@ -279,7 +280,7 @@ public abstract class OutMessage { } } - protected final void writeString(String name, String value) { + protected final void writeString(@NotNull String name, @Nullable String value) { if (value != null) { writeNullableString(name, value); } @@ -297,7 +298,7 @@ public abstract class OutMessage { } } - protected final void writeNullableString(String name, String value) { + protected final void writeNullableString(@NotNull String name, @Nullable String value) { try { beginArguments(); writer.name(name).value(value); diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java index f313c96d9873..a3f52c963deb 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/Request.java @@ -6,7 +6,8 @@ public interface Request { @NotNull CharSequence toJson(); + @NotNull String getMethodName(); void finalize(int id); -} +} \ No newline at end of file diff --git a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/StringWriter.java b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/StringWriter.java index e72b2e291b26..774f5ff68f1b 100644 --- a/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/StringWriter.java +++ b/platform/script-debugger/protocol/protocol-reader-runtime/src/org/jetbrains/jsonProtocol/StringWriter.java @@ -42,18 +42,21 @@ public class StringWriter extends Writer { builder.append(str, off, off + length); } + @NotNull @Override public StringWriter append(CharSequence charSequence) { builder.append(charSequence); return this; } + @NotNull @Override public StringWriter append(CharSequence charSequence, int start, int end) { builder.append(charSequence, start, end); return this; } + @NotNull @Override public StringWriter append(char c) { write(c); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java index a6c1966d8242..c51ae4c55e0f 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/ReaderGenerator.java @@ -12,8 +12,7 @@ import java.util.*; public final class ReaderGenerator { public static void generate(String[] args, @NotNull GenerateConfiguration configuration) throws IOException { FileUpdater fileUpdater = new FileUpdater(FileSystems.getDefault().getPath(parseArgs(args).outputDirectory(), - configuration.packageName.replace('.', - File.separatorChar), + configuration.packageName.replace('.', File.separatorChar), configuration.className + ".java")); generate(configuration, fileUpdater.builder); fileUpdater.update(); diff --git a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java index a2aaf4424429..261b0e94e07c 100644 --- a/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java +++ b/platform/script-debugger/protocol/protocol-reader/src/org/jetbrains/protocolReader/TypeHandler.java @@ -194,7 +194,7 @@ class TypeHandler { } String fieldName = fieldLoader.getFieldName(); - out.append(operator).append(" (").append(hasOnlyOneFieldLoader ? "reader.nextName()" : "name"); + out.append(operator).append(" (name"); out.append(".equals(\"").append(fieldName).append("\"))").openBlock(); { assignField(out, fieldName); From a62ad029972db1e61d9a8f87690381cd43e72d0b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 14:55:28 +0200 Subject: [PATCH 140/217] rename to CommandProcessor --- .../src/org/jetbrains/rpc/AsyncResultCallbackBase.java | 4 ++-- .../org/jetbrains/rpc/CommandCallbackWithResponse.java | 2 +- .../jetbrains/rpc/CommandCallbackWithResponseBase.java | 2 +- .../rpc/{MessageHandler.java => CommandProcessor.java} | 4 ++-- .../backend/src/org/jetbrains/rpc/MessageManager.java | 8 ++++---- .../backend/src/org/jetbrains/rpc/MessageWriter.java | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) rename platform/script-debugger/backend/src/org/jetbrains/rpc/{MessageHandler.java => CommandProcessor.java} (97%) diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java index ecbe53591cf0..85b715584cd6 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/AsyncResultCallbackBase.java @@ -27,13 +27,13 @@ abstract class AsyncResultCallbackBasereadResult(methodName, response)); } catch (Throwable e) { - MessageHandler.LOG.error(e); + CommandProcessor.LOG.error(e); callback.reject(e.getMessage()); } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java similarity index 97% rename from platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java rename to platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java index af3f41b4ac98..57bb53f0f524 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageHandler.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java @@ -12,14 +12,14 @@ import org.jetbrains.jsonProtocol.RequestWithResponse; import java.util.concurrent.atomic.AtomicInteger; -public abstract class MessageHandler +public abstract class CommandProcessor implements MessageManager.Handler, ResultReader, CommandSender, MessageProcessor { public static final Logger LOG = Logger.getInstance(MessageManager.class); private final AtomicInteger currentSequence = new AtomicInteger(); protected final MessageManager messageManager; - protected MessageHandler() { + protected CommandProcessor() { messageManager = new MessageManager(this); } diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java index e7a9d94b0d53..1467e67ca48e 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java @@ -72,7 +72,7 @@ public final class MessageManager { public boolean fun(@NotNull Request message) { CharSequence content = message.toJson(); if (isDebugLoggingEnabled()) { - MessageHandler.LOG.debug("OUT: " + content.toString()); + CommandProcessor.LOG.debug("OUT: " + content.toString()); } return write(content); } protected boolean isDebugLoggingEnabled() { - return MessageHandler.LOG.isDebugEnabled(); + return CommandProcessor.LOG.isDebugEnabled(); } protected abstract boolean write(@NotNull CharSequence content); From 8916185890cb9f39af0dbc72b9bc1b8afb3494dc Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 23 Oct 2014 18:54:27 +0200 Subject: [PATCH 141/217] continue firefox rdp --- .../debugger/StandaloneVmHelper.java | 14 ++-- .../org/jetbrains/rpc/CommandProcessor.java | 60 ++--------------- .../org/jetbrains/rpc/CommandSenderBase.java | 66 +++++++++++++++++++ .../src/org/jetbrains/rpc/MessageManager.java | 46 +++++-------- .../org/jetbrains/rpc/MessageManagerBase.java | 23 +++++++ 5 files changed, 117 insertions(+), 92 deletions(-) create mode 100644 platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java create mode 100644 platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManagerBase.java diff --git a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java index 635f7d4e7056..01f1279eb4cb 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java +++ b/platform/script-debugger/backend/src/org/jetbrains/debugger/StandaloneVmHelper.java @@ -25,13 +25,15 @@ public class StandaloneVmHelper extends MessageWriter { return write(((Object)content)); } - public boolean write(@NotNull Object content) { + @Nullable + public Channel getChannelIfActive() { Channel currentChannel = channel; - if (currentChannel == null || !currentChannel.isActive()) { - return false; - } - currentChannel.writeAndFlush(content); - return true; + return currentChannel == null || !currentChannel.isActive() ? null : currentChannel; + } + + public boolean write(@NotNull Object content) { + Channel channel = getChannelIfActive(); + return channel != null && !channel.writeAndFlush(content).isCancelled(); } public interface VmEx extends Vm { diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java index 57bb53f0f524..49a45554600f 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandProcessor.java @@ -1,19 +1,16 @@ package org.jetbrains.rpc; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.ActionCallback; -import com.intellij.openapi.util.AsyncResult; -import com.intellij.util.Function; -import com.intellij.util.PairConsumer; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jsonProtocol.Request; -import org.jetbrains.jsonProtocol.RequestWithResponse; import java.util.concurrent.atomic.AtomicInteger; public abstract class CommandProcessor - implements MessageManager.Handler, ResultReader, CommandSender, MessageProcessor { + extends CommandSenderBase + implements MessageManager.Handler, + ResultReader, + MessageProcessor { public static final Logger LOG = Logger.getInstance(MessageManager.class); private final AtomicInteger currentSequence = new AtomicInteger(); @@ -41,54 +38,7 @@ public abstract class CommandProcessor callback = new CommandCallbackWithoutResponse(); + protected void send(@NotNull Request message, @NotNull AsyncResultCallback callback) { messageManager.send(message, callback); - return callback.callback; - } - - @Override - public final AsyncResult send(@NotNull RequestWithResponse message, @NotNull Function transform) { - return send(message, transform, null); - } - - @Override - public final AsyncResult send(@NotNull RequestWithResponse message, - @NotNull Function transform, - @Nullable ErrorConsumer, ERROR_DETAILS> errorConsumer) { - CommandCallbackWithResponse callback = - new CommandCallbackWithResponse(message.getMethodName(), transform, errorConsumer); - messageManager.send(message, callback); - return callback.callback; - } - - @Override - public final void send(@NotNull AsyncResult result, - @NotNull RequestWithResponse message, - @NotNull Function transform) { - messageManager.send(message, new CommandCallbackWithResponse(result, message.getMethodName(), transform, null)); - } - - @Override - public final AsyncResult send(@NotNull RequestWithResponse message, - @NotNull PairConsumer> consumer) { - return send(new AsyncResult(), message, consumer); - } - - @Override - public final AsyncResult send(@NotNull AsyncResult result, - @NotNull RequestWithResponse message, - @NotNull PairConsumer> consumer) { - messageManager.send(message, new NestedCommandCallbackWithResponse(result, message.getMethodName(), consumer, null)); - return result; - } - - @Override - public final AsyncResult send(@NotNull AsyncResult result, - @NotNull RequestWithResponse message, - @NotNull PairConsumer> consumer, - @Nullable ErrorConsumer, ERROR_DETAILS> errorConsumer) { - messageManager.send(message, new NestedCommandCallbackWithResponse(result, message.getMethodName(), consumer, errorConsumer)); - return result; } } \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java new file mode 100644 index 000000000000..381be59ebb93 --- /dev/null +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/CommandSenderBase.java @@ -0,0 +1,66 @@ +package org.jetbrains.rpc; + +import com.intellij.openapi.util.ActionCallback; +import com.intellij.openapi.util.AsyncResult; +import com.intellij.util.Function; +import com.intellij.util.PairConsumer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jsonProtocol.Request; +import org.jetbrains.jsonProtocol.RequestWithResponse; + +public abstract class CommandSenderBase implements CommandSender { + protected abstract void send(@NotNull Request message, @NotNull AsyncResultCallback callback); + + @Override + public final ActionCallback send(@NotNull Request message) { + CommandCallbackWithoutResponse callback = new CommandCallbackWithoutResponse(); + send(message, callback); + return callback.callback; + } + + @Override + public final AsyncResult send(@NotNull RequestWithResponse message, @NotNull Function transform) { + return send(message, transform, null); + } + + @Override + public final AsyncResult send(@NotNull RequestWithResponse message, + @NotNull Function transform, + @Nullable ErrorConsumer, ERROR_DETAILS> errorConsumer) { + CommandCallbackWithResponse callback = + new CommandCallbackWithResponse(message.getMethodName(), transform, errorConsumer); + send(message, callback); + return callback.callback; + } + + @Override + public final void send(@NotNull AsyncResult result, + @NotNull RequestWithResponse message, + @NotNull Function transform) { + send(message, new CommandCallbackWithResponse(result, message.getMethodName(), transform, null)); + } + + @Override + public final AsyncResult send(@NotNull RequestWithResponse message, + @NotNull PairConsumer> consumer) { + return send(new AsyncResult(), message, consumer); + } + + @Override + public final AsyncResult send(@NotNull AsyncResult result, + @NotNull RequestWithResponse message, + @NotNull PairConsumer> consumer) { + send(message, new NestedCommandCallbackWithResponse(result, message.getMethodName(), consumer, null)); + return result; + } + + @Override + public final AsyncResult send(@NotNull AsyncResult result, + @NotNull RequestWithResponse message, + @NotNull PairConsumer> consumer, + @Nullable ErrorConsumer, ERROR_DETAILS> errorConsumer) { + send(message, new NestedCommandCallbackWithResponse(result, message.getMethodName(), consumer, errorConsumer)); + return result; + } +} \ No newline at end of file diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java index 1467e67ca48e..042f2ee907f1 100644 --- a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManager.java @@ -23,17 +23,15 @@ import java.io.IOException; import java.util.Arrays; /** - * @param type of outgoing message + * @param type of outgoing message * @param type of incoming message * @param type of incoming message that is a command (has sequence number) */ -public final class MessageManager { +public final class MessageManager extends MessageManagerBase { private final ConcurrentIntObjectMap> callbackMap = ContainerUtil.createConcurrentIntObjectMap(); - private final Handler handler; + private final Handler handler; - private volatile boolean closed; - - public MessageManager(Handler handler) { + public MessageManager(Handler handler) { this.handler = handler; } @@ -51,18 +49,14 @@ public final class MessageManager callback); } - public void send(@NotNull OUTGOING message, @NotNull AsyncResultCallback callback) { - if (closed) { - callback.onError("Connection is closed", null); + public void send(@NotNull REQUEST message, @NotNull AsyncResultCallback callback) { + if (rejectIfClosed(callback)) { return; } int sequence = handler.getUpdatedSequence(message); callbackMap.put(sequence, callback); - doSend(message, sequence); - } - - private void doSend(@NotNull OUTGOING message, int sequence) { + boolean success; try { success = handler.write(message); @@ -103,13 +97,12 @@ public final class MessageManager callback = getCallbackAndRemove(handler.getSequence(commandResponse)); + if (rejectIfClosed(callback)) { + return; + } + try { - if (closed) { - callback.onError("Connection closed", null); - } - else { - handler.call(commandResponse, callback); - } + handler.call(commandResponse, callback); } catch (Throwable e) { callback.onError("Failed to dispatch response to callback", null); @@ -125,24 +118,15 @@ public final class MessageManager> map = callbackMap; int[] keys = map.keys(); Arrays.sort(keys); for (int key : keys) { - try { - AsyncResultCallback callback = map.get(key); - if (callback != null) { - callback.onError("Connection closed", null); - } - } - catch (Throwable e) { - CommandProcessor.LOG.error("Failed to reject callback on connection closed", e); + AsyncResultCallback callback = map.get(key); + if (callback != null) { + rejectCallback(callback); } } } diff --git a/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManagerBase.java b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManagerBase.java new file mode 100644 index 000000000000..97672b220de8 --- /dev/null +++ b/platform/script-debugger/backend/src/org/jetbrains/rpc/MessageManagerBase.java @@ -0,0 +1,23 @@ +package org.jetbrains.rpc; + +import org.jetbrains.annotations.NotNull; + +public abstract class MessageManagerBase { + protected volatile boolean closed; + + protected final boolean rejectIfClosed(AsyncResultCallback callback) { + if (closed) { + callback.onError("Connection closed", null); + return true; + } + return false; + } + + public final void closed() { + closed = true; + } + + protected static void rejectCallback(@NotNull AsyncResultCallback callback) { + callback.onError("Connection closed", null); + } +} \ No newline at end of file From 9e683bd138b55190a8eeeffb09bd00856ff849a0 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 18:55:44 +0200 Subject: [PATCH 142/217] install plugin from disc: remember location (IDEA-119389) --- .../ide/plugins/InstalledPluginsManagerMain.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsManagerMain.java b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsManagerMain.java index fa34e90a4c70..2fd8bf4201c2 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsManagerMain.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/InstalledPluginsManagerMain.java @@ -21,6 +21,7 @@ import com.intellij.ide.actions.ShowSettingsUtilImpl; import com.intellij.ide.startup.StartupActionScriptManager; import com.intellij.ide.ui.search.ActionFromOptionDescriptorProvider; import com.intellij.ide.ui.search.OptionDescription; +import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ComboBoxAction; import com.intellij.openapi.application.ex.ApplicationEx; @@ -35,7 +36,9 @@ import com.intellij.openapi.ui.ex.MessagesEx; import com.intellij.openapi.updateSettings.impl.PluginDownloader; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.IdeBorderFactory; @@ -62,6 +65,7 @@ import java.util.List; * User: anna */ public class InstalledPluginsManagerMain extends PluginManagerMain { + private static final String PLUGINS_PRESELECTION_PATH = "plugins.preselection.path"; public InstalledPluginsManagerMain(PluginManagerUISettings uiSettings) { super(uiSettings); @@ -138,10 +142,13 @@ public class InstalledPluginsManagerMain extends PluginManagerMain { }; descriptor.setTitle("Choose Plugin File"); descriptor.setDescription("JAR and ZIP archives are accepted"); - FileChooser.chooseFile(descriptor, null, parent, null, new Consumer() { + final String oldPath = PropertiesComponent.getInstance().getValue(PLUGINS_PRESELECTION_PATH); + final VirtualFile toSelect = oldPath == null ? null : VfsUtil.findFileByIoFile(new File(FileUtil.toSystemDependentName(oldPath)), false); + FileChooser.chooseFile(descriptor, null, parent, toSelect, new Consumer() { @Override public void consume(@NotNull VirtualFile virtualFile) { final File file = VfsUtilCore.virtualToIoFile(virtualFile); + PropertiesComponent.getInstance().setValue(PLUGINS_PRESELECTION_PATH, FileUtil.toSystemIndependentName(file.getParent())); try { final IdeaPluginDescriptorImpl pluginDescriptor = PluginDownloader.loadDescriptionFromJar(file); if (pluginDescriptor == null) { From 58de0c83c364703b19d44202b327b108c654b560 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 19:47:55 +0200 Subject: [PATCH 143/217] enable rename file for non class containers for editor tab popup (IDEA-113370) --- .../src/com/intellij/refactoring/actions/RenameFileAction.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java b/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java index d4a8d8398045..651474f94037 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java +++ b/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java @@ -42,7 +42,8 @@ public class RenameFileAction extends AnAction implements DumbAware { public void update(AnActionEvent e) { PsiFile file = e.getData(CommonDataKeys.PSI_FILE); Presentation presentation = e.getPresentation(); - boolean enabled = file instanceof PsiClassOwner && e.getPlace() != ActionPlaces.EDITOR_POPUP && e.getData(CommonDataKeys.PROJECT) != null; + String place = e.getPlace(); + boolean enabled = (file instanceof PsiClassOwner || ActionPlaces.EDITOR_TAB_POPUP.equals(place)) && place != ActionPlaces.EDITOR_POPUP && e.getData(CommonDataKeys.PROJECT) != null; presentation.setEnabled(enabled); presentation.setVisible(enabled); if (enabled) { From 100c01baf9581d00f17ccd3204e33e02c26d1c1b Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 23 Oct 2014 21:56:31 +0400 Subject: [PATCH 144/217] IDEA-131470 Change layout of the options panel in the Scopes configurable --- .../util/scopeChooser/ScopeEditorForm.form | 91 +++++-------------- .../util/scopeChooser/ScopeEditorPanel.java | 9 +- 2 files changed, 29 insertions(+), 71 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorForm.form b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorForm.form index c4719d0ff9b0..9f14c9424f79 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorForm.form +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorForm.form @@ -1,9 +1,9 @@

- + - + @@ -11,7 +11,7 @@ - + @@ -19,15 +19,14 @@ - - + - + - + @@ -39,7 +38,7 @@ - + @@ -109,77 +108,35 @@ - + + + + + + - + - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + + + + diff --git a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java index de74e6530cf2..f36f1e8f9bc7 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java +++ b/platform/lang-impl/src/com/intellij/ide/util/scopeChooser/ScopeEditorPanel.java @@ -28,7 +28,6 @@ import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.VerticalFlowLayout; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -36,9 +35,11 @@ import com.intellij.packageDependencies.DependencyUISettings; import com.intellij.packageDependencies.ui.*; import com.intellij.psi.search.scope.packageSet.*; import com.intellij.ui.*; +import com.intellij.ui.components.panels.VerticalLayout; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.Alarm; import com.intellij.util.Consumer; +import com.intellij.util.ui.ColorIcon; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; import com.intellij.util.ui.update.Activatable; @@ -152,8 +153,8 @@ public class ScopeEditorPanel { cancelCurrentProgress(); } }); - myPartiallyIncluded.setBackground(MyTreeCellRenderer.PARTIAL_INCLUDED); - myRecursivelyIncluded.setBackground(MyTreeCellRenderer.WHOLE_INCLUDED); + myPartiallyIncluded.setIcon(new ColorIcon(10, MyTreeCellRenderer.PARTIAL_INCLUDED)); + myRecursivelyIncluded.setIcon(new ColorIcon(10, MyTreeCellRenderer.WHOLE_INCLUDED)); } private void updateCaretPositionText() { @@ -246,7 +247,7 @@ public class ScopeEditorPanel { } }); - JPanel buttonsPanel = new JPanel(new VerticalFlowLayout()); + JPanel buttonsPanel = new JPanel(new VerticalLayout(5)); buttonsPanel.add(include); buttonsPanel.add(includeRec); buttonsPanel.add(exclude); From 01099830101e86941ccfb8dc3d165c41ad397365 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 23 Oct 2014 20:18:52 +0200 Subject: [PATCH 145/217] provide context for new methods: createMethod(name, returnType, context) --- .../codeInsight/generation/GenerateMembersUtil.java | 2 +- .../src/com/intellij/psi/JVMElementFactory.java | 3 +++ .../src/com/intellij/psi/impl/PsiElementFactoryImpl.java | 6 ++++++ .../plugins/groovy/lang/psi/GroovyPsiElementFactory.java | 4 ++++ .../groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java | 8 +++++++- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java index 4d55138cad1c..9c9034dc7e94 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java @@ -475,7 +475,7 @@ public class GenerateMembersUtil { if (method.isConstructor()) { return factory.createConstructor(method.getName(), target); } - return factory.createMethodFromText("public void " + method.getName() + "(){}", target); + return factory.createMethod(method.getName(), PsiType.VOID, target); } private static void substituteReturnType(@NotNull PsiManager manager, diff --git a/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java b/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java index e6c38aa5a186..7c3999e37a7b 100644 --- a/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java +++ b/java/java-psi-api/src/com/intellij/psi/JVMElementFactory.java @@ -84,6 +84,9 @@ public interface JVMElementFactory { @NotNull PsiMethod createMethod(@NotNull @NonNls String name, PsiType returnType) throws IncorrectOperationException; + @NotNull + PsiMethod createMethod(@NotNull @NonNls String name, PsiType returnType, PsiElement context) throws IncorrectOperationException; + /** * Creates an empty constructor. * diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java index 0515b4983ce2..2163057032d8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiElementFactoryImpl.java @@ -247,6 +247,12 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps return (PsiMethod)CodeStyleManager.getInstance(myManager.getProject()).reformat(method); } + @NotNull + @Override + public PsiMethod createMethod(@NotNull @NonNls String name, PsiType returnType, PsiElement context) throws IncorrectOperationException { + return createMethodFromText("public " + returnType.getCanonicalText(true) + " " + name + "() {}", context); + } + @NotNull @Override public PsiMethod createConstructor() { diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java index ff89fb349ef2..1495abab2a5e 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java @@ -265,6 +265,10 @@ public abstract class GroovyPsiElementFactory implements JVMElementFactory { @NotNull public abstract GrMethod createMethod(@NotNull @NonNls String name, @Nullable PsiType returnType) throws IncorrectOperationException; + @Override + @NotNull + public abstract GrMethod createMethod(@NotNull @NonNls String name, @Nullable PsiType returnType, @Nullable PsiElement context) throws IncorrectOperationException; + @NotNull @Override public abstract GrMethod createConstructor(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java index 682f55a6d7a2..2a2db5ecaeb9 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java @@ -1016,6 +1016,12 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { @NotNull @Override public GrMethod createMethod(@NotNull @NonNls String name, @Nullable PsiType returnType) throws IncorrectOperationException { + return createMethod(name, returnType, null); + } + + @NotNull + @Override + public GrMethod createMethod(@NotNull @NonNls String name, PsiType returnType, PsiElement context) throws IncorrectOperationException { StringBuilder builder = StringBuilderSpinAllocator.alloc(); try { builder.append("def "); @@ -1032,7 +1038,7 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { builder.append('"'); } builder.append("(){}"); - GrMethod method = createMethodFromText(builder); + GrMethod method = createMethodFromText(builder.toString(), context); if (returnType != null) { method.getModifierList().setModifierProperty(GrModifier.DEF, false); } From 944f3f32ca32f01788e56426f14e19c8704a8a9d Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 19:57:25 +0200 Subject: [PATCH 146/217] + add method to show action list with alignment to focused jlabel --- .../src/com/intellij/ui/popup/list/ListPopupImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java index 15e804495c84..83b2322284e9 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/list/ListPopupImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import com.intellij.psi.statistics.StatisticsManager; import com.intellij.ui.JBListWithHintProvider; import com.intellij.ui.ListScrollingUtil; import com.intellij.ui.SeparatorWithText; +import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.popup.ClosableByLeftArrow; import com.intellij.ui.popup.WizardPopup; import com.intellij.util.ui.UIUtil; @@ -76,6 +77,14 @@ public class ListPopupImpl extends WizardPopup implements ListPopup { } } + public void showUnderneathOfLabel(@NotNull JLabel label) { + int offset = -UIUtil.getListCellHPadding() - UIUtil.getListViewportPadding().left; + if (label.getIcon() != null) { + offset += label.getIcon().getIconWidth() + label.getIconTextGap(); + } + show(new RelativePoint(label, new Point(offset, label.getHeight() + 1))); + } + protected ListPopupModel getListModel() { return myListModel; } From 5a57e1e1b90ccf64bf690a2244a874a8a21bd84e Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 20:03:07 +0200 Subject: [PATCH 147/217] align actions popup according jlabel --- .../openapi/wm/impl/welcomeScreen/GetFromVcsAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java index fdf027b6272a..87d53cfc8800 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java @@ -38,7 +38,7 @@ public class GetFromVcsAction extends WelcomePopupAction{ } protected String getCaption() { - return UIBundle.message("welcome.screen.get.from.vcs.action.checkout.from.list.popup.title"); + return null; } protected String getTextForEmpty() { From ec91d8470d3f76d61b1fb0c1176db3de32d87e59 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 23 Oct 2014 20:18:26 +0200 Subject: [PATCH 148/217] align actions popup according jlabel --- .../wm/impl/welcomeScreen/FlatWelcomeFrame.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 48f335a77cb5..b74d29765792 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -43,10 +43,10 @@ import com.intellij.openapi.wm.StatusBar; import com.intellij.openapi.wm.WelcomeScreen; import com.intellij.openapi.wm.impl.IdeGlassPaneImpl; import com.intellij.ui.*; -import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.components.labels.ActionLink; import com.intellij.ui.components.panels.NonOpaquePanel; +import com.intellij.ui.popup.PopupFactoryImpl; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -292,16 +292,11 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { AnAction action = new AnAction() { @Override public void actionPerformed(@NotNull AnActionEvent e) { - int offset = - UIUtil.getListCellHPadding() - UIUtil.getListViewportPadding().left; - if (ref.get().getIcon() != null) { - offset += ref.get().getIcon().getIconWidth() + ref.get().getIconTextGap(); - } - RelativePoint point = new RelativePoint(ref.get(), new Point(offset, ref.get().getHeight() + 1)); ActionGroup configureGroup = (ActionGroup)ActionManager.getInstance().getAction(groupId); - JBPopupFactory.getInstance() + final PopupFactoryImpl.ActionGroupPopup popup = (PopupFactoryImpl.ActionGroupPopup)JBPopupFactory.getInstance() .createActionGroupPopup(null, new IconsFreeActionGroup(configureGroup), e.getDataContext(), false, false, false, null, - 10, null) - .show(point); + 10, null); + popup.showUnderneathOfLabel(ref.get()); } }; ref.set(new ActionLink(text, icon, action)); From adda93a88a944731bb290162e15a71288285288e Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Fri, 24 Oct 2014 00:49:15 +0400 Subject: [PATCH 149/217] broken test fixed for custom resource bundles --- .../lang/properties/ResourceBundleManager.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java index 232a6a131631..5d8487d468a2 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/ResourceBundleManager.java @@ -87,12 +87,10 @@ public class ResourceBundleManager implements PersistentStateComponent Date: Thu, 23 Oct 2014 23:57:40 +0200 Subject: [PATCH 150/217] show build number on welcome screen for eaps --- .../wm/impl/welcomeScreen/FlatWelcomeFrame.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 48f335a77cb5..47ef2a898127 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -369,7 +369,8 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { private JComponent createLogo() { NonOpaquePanel panel = new NonOpaquePanel(new BorderLayout()); - JLabel logo = new JLabel(IconLoader.getIcon(ApplicationInfoEx.getInstanceEx().getWelcomeScreenLogoUrl())); + ApplicationInfoEx app = ApplicationInfoEx.getInstanceEx(); + JLabel logo = new JLabel(IconLoader.getIcon(app.getWelcomeScreenLogoUrl())); logo.setHorizontalAlignment(SwingConstants.CENTER); panel.add(logo, BorderLayout.NORTH); JLabel appName = new JLabel(ApplicationNamesInfo.getInstance().getFullProductName()); @@ -377,7 +378,13 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { appName.setForeground(JBColor.foreground()); appName.setFont(font.deriveFont(36f).deriveFont(Font.PLAIN)); appName.setHorizontalAlignment(SwingConstants.CENTER); - JLabel version = new JLabel("Version " + ApplicationInfoEx.getInstanceEx().getFullVersion()); + String appVersion = "Version " + app.getFullVersion(); + + if (app.isEAP() && app.getBuild().getBuildNumber() < Integer.MAX_VALUE) { + appVersion += " (" + app.getBuild().asString() + ")"; + } + + JLabel version = new JLabel(appVersion); version.setFont(font.deriveFont(16f).deriveFont(Font.PLAIN)); version.setHorizontalAlignment(SwingConstants.CENTER); version.setForeground(Gray._128); From 16de348031d8264e0d46880e14a367b0eb97b4a7 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 24 Oct 2014 00:20:00 +0200 Subject: [PATCH 151/217] gear plain icon --- platform/icons/src/general/gearPlain.png | Bin 0 -> 216 bytes platform/icons/src/general/gearPlain@2x.png | Bin 0 -> 305 bytes platform/icons/src/general/gearPlain@2x_dark.png | Bin 0 -> 303 bytes platform/icons/src/general/gearPlain_dark.png | Bin 0 -> 216 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 platform/icons/src/general/gearPlain.png create mode 100644 platform/icons/src/general/gearPlain@2x.png create mode 100644 platform/icons/src/general/gearPlain@2x_dark.png create mode 100644 platform/icons/src/general/gearPlain_dark.png diff --git a/platform/icons/src/general/gearPlain.png b/platform/icons/src/general/gearPlain.png new file mode 100644 index 0000000000000000000000000000000000000000..a5de001d4261409adcd974766db871332f302413 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^F3W0Ln>|^o$SchtRUcO*?7cc z*O#6c557eHkdIt?ubhlzC*MzL>NAOY{3y5Wq2s>>MWtf4&*qKAdE88^O?@vI$Oap> z3W%&IeG$m&pTluRgGD)urBf@yPx8pIDGhR=0Y>>I?#G%tZXK~PajcppzVK(sU!j9d zq7TpdaHk0_JKK8Weanwitvk$*J)CZ6HsQ*SSK$ePr|p(J_W!x<{trf_n^6%H!|hms PPG#_P^>bP0l+XkKPa#wM literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/gearPlain@2x.png b/platform/icons/src/general/gearPlain@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..23ff9bb817e99287b97958277c99a214507279f8 GIT binary patch literal 305 zcmV-10nYx3P)=JbM!M4)Y<|JM2crYSJYefdpG7ntAvymA0R@Ko!n8QBqBz0FA*ds6pESR0jZRd?s+MMZ2N`C@;Yja0Hn^^0y4G zv7UXP05pL>6n%cZ*(KmYd?lwg;m80OxlMQk-5CG|V~_#rNZ<#k1D#ME+FWFJ%mPSx zvo=twHpMp=KotO}mI8Q|2KadiiZ|h^wjuW*x^WL8nc*mwRDhh9k)#0VjMuTEmf#v0 zNX~)em&ib(xlO43D>ZQ>Yy4?wvqR~!0Q;ZO-vPV;<X#(0mL00000NkvXXu0mjf DbI5!@ literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/gearPlain@2x_dark.png b/platform/icons/src/general/gearPlain@2x_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f4406c39f0a6980ce299aad58f856cdd0e7ca611 GIT binary patch literal 303 zcmV+~0nq-5P)k;1g@RXuBiapOE3ogCE!AQC8svwzyKJyO?U>~82}^3AOqBqzzsV7u&_@Q6 zYasb8GLRT<6B_?YO&rOTKMn16C|wue_%r%DfER78Ck=D1GBW@G002ovPDHLkV1j-% Bbk6_) literal 0 HcmV?d00001 diff --git a/platform/icons/src/general/gearPlain_dark.png b/platform/icons/src/general/gearPlain_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..35b1f44b49a18c4c057ba21a1b6e3024e71ead47 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`^F3W0Ln>|^o$SchtRUcO*?7cc z*OwzPj(myyAs@N)UO5@bPQIVg)Mpa)_)%`#L&tv&ib}<7pUoSK^SGH-oBCcbkPS9$ z6%bib`XZ3kKZoOt28(hQOQ%+ZpX8BaQySz#1B~)b+>bSP+&W@o;#f6HeBsZMzd{F_ zL?52@;Z74=cDD7#`<5T4T6dTqdpOgTe~DWM4fYw}b? literal 0 HcmV?d00001 From 2ec670ae46a8a4585dc8683efb882be73aa912f8 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 24 Oct 2014 00:20:29 +0200 Subject: [PATCH 152/217] + gear palin icon --- platform/util/src/com/intellij/icons/AllIcons.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index f1336fe1bedc..cdf7fda9c9c0 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -414,6 +414,7 @@ public class AllIcons { public static final Icon Floating = IconLoader.getIcon("/general/floating.png"); // 14x14 public static final Icon Gear = IconLoader.getIcon("/general/gear.png"); // 21x16 public static final Icon GearHover = IconLoader.getIcon("/general/gearHover.png"); // 21x16 + public static final Icon GearPlain = IconLoader.getIcon("/general/gearPlain.png"); // 16x16 public static final Icon GetProjectfromVCS = IconLoader.getIcon("/general/getProjectfromVCS.png"); // 32x32 public static final Icon Help = IconLoader.getIcon("/general/help.png"); // 10x10 public static final Icon Help_small = IconLoader.getIcon("/general/help_small.png"); // 16x16 From 8f8695b3e573e333a73e5f1c5dc93d468be3eb59 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 24 Oct 2014 00:20:54 +0200 Subject: [PATCH 153/217] change settings icon --- .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index 350417390b0b..f4bf58990d02 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -277,7 +277,7 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { } toolbar.setLayout(new BoxLayout(toolbar, BoxLayout.X_AXIS)); - toolbar.add(createActionLink("Configure", IdeActions.GROUP_WELCOME_SCREEN_CONFIGURE, AllIcons.General.Settings, !registeredVisible)); + toolbar.add(createActionLink("Configure", IdeActions.GROUP_WELCOME_SCREEN_CONFIGURE, AllIcons.General.GearPlain, !registeredVisible)); toolbar.add(createActionLink("Get Help", IdeActions.GROUP_WELCOME_SCREEN_DOC, null, false)); panel.add(toolbar, BorderLayout.EAST); From f763669af945705b2a3ac97241b14c0d588d091e Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Fri, 24 Oct 2014 00:52:37 +0200 Subject: [PATCH 154/217] welcome screen: VCS popup shows at left under the label --- .../openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java | 9 ++++++++- .../wm/impl/welcomeScreen/WelcomePopupAction.java | 9 +++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java index f4bf58990d02..564206931b40 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/FlatWelcomeFrame.java @@ -429,7 +429,14 @@ public class FlatWelcomeFrame extends JFrame implements IdeFrame { public void keyPressed(KeyEvent e) { final JList list = UIUtil.findComponentOfType(FlatWelcomeFrame.this.getComponent(), JList.class); if (e.getKeyCode() == KeyEvent.VK_ENTER) { - action.actionPerformed(new AnActionEvent(e, + InputEvent event = e; + if (e.getComponent() instanceof JComponent) { + ActionLink link = UIUtil.findComponentOfType((JComponent)e.getComponent(), ActionLink.class); + if (link != null) { + event = new MouseEvent(link, MouseEvent.MOUSE_CLICKED, e.getWhen(), e.getModifiers(), 0, 0, 1, false, MouseEvent.BUTTON1); + } + } + action.actionPerformed(new AnActionEvent(event, DataManager.getInstance().getDataContext(), ActionPlaces.WELCOME_SCREEN, action.getTemplatePresentation().clone(), diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomePopupAction.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomePopupAction.java index d1f6ecd3c4f4..7e407a63f03b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomePopupAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomePopupAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.openapi.wm.ex.WindowManagerEx; +import com.intellij.ui.popup.PopupFactoryImpl; import javax.swing.*; import java.awt.*; @@ -92,7 +93,11 @@ public abstract class WelcomePopupAction extends AnAction implements DumbAware { protected void showPopup(DataContext context, ListPopup popup, JComponent contextComponent) { Component focusedComponent = contextComponent != null ? contextComponent : PlatformDataKeys.CONTEXT_COMPONENT.getData(context); if (focusedComponent != null) { - popup.showUnderneathOf(focusedComponent); + if (popup instanceof PopupFactoryImpl.ActionGroupPopup && focusedComponent instanceof JLabel) { + ((PopupFactoryImpl.ActionGroupPopup)popup).showUnderneathOfLabel((JLabel)focusedComponent); + } else { + popup.showUnderneathOf(focusedComponent); + } } else { Rectangle r; From 1d8b472816387a200a7b27b83ea2d4c0312a1ee5 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Oct 2014 08:55:36 +0200 Subject: [PATCH 155/217] =?UTF-8?q?don't=20serialize=20myToolWindowCapable?= =?UTF-8?q?=20=E2=80=94=20it=20is=20not=20roamable=20and=20in=20any=20case?= =?UTF-8?q?=20we=20don't=20need=20do=20it=20sort=20notifications=20?= =?UTF-8?q?=E2=80=94=20linked=20map=20depends=20on=20machine=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NotificationsConfiguration.java | 6 +- .../ui/AppearanceOptionsTopHitProvider.java | 2 +- .../EventLogToolWindowFactory.java | 4 +- .../impl/NotificationsConfigurable.java | 15 ++- .../impl/NotificationsConfigurationImpl.java | 122 +++++++----------- .../impl/NotificationsManagerImpl.java | 8 +- .../ui/NotificationsConfigurablePanel.java | 12 +- 7 files changed, 77 insertions(+), 92 deletions(-) diff --git a/platform/platform-api/src/com/intellij/notification/NotificationsConfiguration.java b/platform/platform-api/src/com/intellij/notification/NotificationsConfiguration.java index b2f55dd3de9e..7b9f708c1962 100644 --- a/platform/platform-api/src/com/intellij/notification/NotificationsConfiguration.java +++ b/platform/platform-api/src/com/intellij/notification/NotificationsConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ package com.intellij.notification; import com.intellij.openapi.application.ApplicationManager; -import org.jetbrains.annotations.NotNull; public abstract class NotificationsConfiguration extends NotificationsAdapter { public abstract void changeSettings(String groupDisplayName, NotificationDisplayType displayType, boolean shouldLog, boolean shouldReadAloud); @@ -24,7 +23,4 @@ public abstract class NotificationsConfiguration extends NotificationsAdapter { public static NotificationsConfiguration getNotificationsConfiguration() { return ApplicationManager.getApplication().getComponent(NotificationsConfiguration.class); } - - @Deprecated - public abstract void registerToolWindowCapability(@NotNull String groupId, @NotNull String toolWindowId); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java index de16bd7e9ad0..ceb910c97651 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceOptionsTopHitProvider.java @@ -84,7 +84,7 @@ public class AppearanceOptionsTopHitProvider extends OptionsTopHitProvider { return new PublicFieldBasedOptionDescription(option, "reference.settings.ide.settings.notifications", field) { @Override public Object getInstance() { - return NotificationsConfigurationImpl.getNotificationsConfigurationImpl(); + return NotificationsConfigurationImpl.getInstanceImpl(); } }; } diff --git a/platform/platform-impl/src/com/intellij/notification/EventLogToolWindowFactory.java b/platform/platform-impl/src/com/intellij/notification/EventLogToolWindowFactory.java index 32b03f3deb2b..4bdb3b0d68d4 100644 --- a/platform/platform-impl/src/com/intellij/notification/EventLogToolWindowFactory.java +++ b/platform/platform-impl/src/com/intellij/notification/EventLogToolWindowFactory.java @@ -97,12 +97,12 @@ public class EventLogToolWindowFactory implements ToolWindowFactory, DumbAware { @Override public boolean isSelected(AnActionEvent e) { - return NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS; + return NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS; } @Override public void setSelected(AnActionEvent e, boolean state) { - NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS = state; + NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS = state; } } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurable.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurable.java index 6d0c4c19fb68..038bb08bda1d 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurable.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurable.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,15 +33,19 @@ public class NotificationsConfigurable implements Configurable, SearchableConfig public static final String DISPLAY_NAME = "Notifications"; private NotificationsConfigurablePanel myComponent; + @Override @Nls public String getDisplayName() { return DISPLAY_NAME; } + @Override + @NotNull public String getHelpTopic() { return "reference.settings.ide.settings.notifications"; } + @Override public JComponent createComponent() { if (myComponent == null) { myComponent = new NotificationsConfigurablePanel(); @@ -50,33 +54,40 @@ public class NotificationsConfigurable implements Configurable, SearchableConfig return myComponent; } + @Override public boolean isModified() { return myComponent != null && myComponent.isModified(); } + @Override public void apply() throws ConfigurationException { myComponent.apply(); } + @Override public void reset() { myComponent.reset(); } + @Override public void disposeUIResources() { Disposer.dispose(myComponent); myComponent = null; } + @Override @NotNull public String getId() { return getHelpTopic(); } + @Override public Runnable enableSearch(final String option) { return null; } + @Override public boolean needDisplay() { - return NotificationsConfigurationImpl.getAllSettings().length > 0; + return NotificationsConfigurationImpl.getInstanceImpl().getAllSettings().length > 0; } } diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurationImpl.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurationImpl.java index 7e9ce39201d1..d957c6ed6f27 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurationImpl.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurationImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,15 +20,18 @@ import com.intellij.notification.NotificationGroup; import com.intellij.notification.NotificationsConfiguration; import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBus; +import gnu.trove.THashMap; +import gnu.trove.THashSet; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; /** * @author spleaner @@ -39,25 +42,28 @@ import java.util.*; ) public class NotificationsConfigurationImpl extends NotificationsConfiguration implements ApplicationComponent, PersistentStateComponent { - private static final Logger LOG = Logger.getInstance("#com.intellij.notification.impl.NotificationsConfiguration"); + private static final Logger LOG = Logger.getInstance(NotificationsConfiguration.class); private static final String SHOW_BALLOONS_ATTRIBUTE = "showBalloons"; - private final Map myIdToSettingsMap = new LinkedHashMap(); - private final Map myToolWindowCapable = new LinkedHashMap(); + private static final Comparator NOTIFICATION_SETTINGS_COMPARATOR = new Comparator() { + @Override + public int compare(@NotNull NotificationSettings o1, @NotNull NotificationSettings o2) { + return o1.getGroupId().compareToIgnoreCase(o2.getGroupId()); + } + }; + + private final Map myIdToSettingsMap = new THashMap(); + private final Map myToolWindowCapable = new THashMap(); private final MessageBus myMessageBus; + public boolean SHOW_BALLOONS = true; - public static NotificationsConfigurationImpl getNotificationsConfigurationImpl() { - return (NotificationsConfigurationImpl)getNotificationsConfiguration(); - } - - public NotificationsConfigurationImpl(@NotNull final MessageBus bus) { + public NotificationsConfigurationImpl(@NotNull MessageBus bus) { myMessageBus = bus; } - @Override - public synchronized void registerToolWindowCapability(@NotNull String groupId, @NotNull String toolWindowId) { - myToolWindowCapable.put(groupId, toolWindowId); + public static NotificationsConfigurationImpl getInstanceImpl() { + return (NotificationsConfigurationImpl)getNotificationsConfiguration(); } public synchronized boolean hasToolWindowCapability(@NotNull String groupId) { @@ -70,54 +76,35 @@ public class NotificationsConfigurationImpl extends NotificationsConfiguration i return group == null ? null : group.getToolWindowId(); } - public static NotificationSettings[] getAllSettings() { - return getNotificationsConfigurationImpl()._getAllSettings(); - } - - @Deprecated - public static void remove(NotificationSettings[] toRemove) { - getNotificationsConfigurationImpl()._remove(ContainerUtil.map2Array(toRemove, String.class, new Function() { - @Override - public String fun(NotificationSettings notificationSettings) { - return notificationSettings.getGroupId(); - } - })); - } - - public static void remove(String... toRemove) { - getNotificationsConfigurationImpl()._remove(toRemove); - } - - private synchronized void _remove(String... toRemove) { - for (final String id : toRemove) { - myIdToSettingsMap.remove(id); - myToolWindowCapable.remove(id); - } - } - - private synchronized NotificationSettings[] _getAllSettings() { - Collection settings = ContainerUtil.newHashSet(myIdToSettingsMap.values()); + public synchronized NotificationSettings[] getAllSettings() { + Collection settings = new THashSet(myIdToSettingsMap.values()); for (NotificationGroup group : NotificationGroup.getAllRegisteredGroups()) { settings.add(getSettings(group.getDisplayId())); } NotificationSettings[] result = settings.toArray(new NotificationSettings[settings.size()]); - Arrays.sort(result, new Comparator() { - @Override - public int compare(@NotNull NotificationSettings o1, @NotNull NotificationSettings o2) { - return o1.getGroupId().compareToIgnoreCase(o2.getGroupId()); - } - }); + Arrays.sort(result, NOTIFICATION_SETTINGS_COMPARATOR); return result; } - @Nullable - private synchronized NotificationSettings _getSettings(@NotNull final String groupId) { - return myIdToSettingsMap.get(groupId); + public static void remove(String... toRemove) { + getInstanceImpl().doRemove(toRemove); } + private synchronized void doRemove(String... toRemove) { + for (String groupId : toRemove) { + myIdToSettingsMap.remove(groupId); + myToolWindowCapable.remove(groupId); + } + } + + @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") @NotNull - public static NotificationSettings getSettings(@NotNull final String groupId) { - final NotificationSettings settings = getNotificationsConfigurationImpl()._getSettings(groupId); + public static NotificationSettings getSettings(@NotNull String groupId) { + NotificationSettings settings; + NotificationsConfigurationImpl impl = getInstanceImpl(); + synchronized (impl) { + settings = impl.myIdToSettingsMap.get(groupId); + } return settings == null ? getDefaultSettings(groupId) : settings; } @@ -168,7 +155,8 @@ public class NotificationsConfigurationImpl extends NotificationsConfiguration i new NotificationGroup(groupDisplayName, displayType, shouldLog); // and decide whether to save them explicitly (in case of non-default shouldReadAloud) changeSettings(groupDisplayName, displayType, shouldLog, shouldReadAloud); - } else if (displayType == NotificationDisplayType.TOOL_WINDOW && !hasToolWindowCapability(groupDisplayName)) { + } + else if (displayType == NotificationDisplayType.TOOL_WINDOW && !hasToolWindowCapability(groupDisplayName)) { // the first time with tool window capability changeSettings(getSettings(groupDisplayName).withDisplayType(NotificationDisplayType.TOOL_WINDOW)); myToolWindowCapable.put(groupDisplayName, null); @@ -184,7 +172,8 @@ public class NotificationsConfigurationImpl extends NotificationsConfiguration i String groupDisplayName = settings.getGroupId(); if (settings.equals(getDefaultSettings(groupDisplayName))) { myIdToSettingsMap.remove(groupDisplayName); - } else { + } + else { myIdToSettingsMap.put(groupDisplayName, settings); } } @@ -196,18 +185,13 @@ public class NotificationsConfigurationImpl extends NotificationsConfiguration i @Override public synchronized Element getState() { @NonNls Element element = new Element("NotificationsConfiguration"); - for (NotificationSettings settings : myIdToSettingsMap.values()) { + + NotificationSettings[] sortedNotifications = myIdToSettingsMap.values().toArray(new NotificationSettings[myIdToSettingsMap.size()]); + Arrays.sort(sortedNotifications, NOTIFICATION_SETTINGS_COMPARATOR); + for (NotificationSettings settings : sortedNotifications) { element.addContent(settings.save()); } - for (String entry: myToolWindowCapable.keySet()) { - element.addContent(new Element("toolWindow").setAttribute("group", entry)); - } - for (NotificationGroup group : NotificationGroup.getAllRegisteredGroups()) { - String displayId = group.getDisplayId(); - if (!myToolWindowCapable.containsKey(displayId) && group.getToolWindowId() != null) { - element.addContent(new Element("toolWindow").setAttribute("group", displayId)); - } - } + //noinspection NonPrivateFieldAccessedInSynchronizedContext if (!SHOW_BALLOONS) { element.setAttribute(SHOW_BALLOONS_ATTRIBUTE, "false"); @@ -227,13 +211,7 @@ public class NotificationsConfigurationImpl extends NotificationsConfiguration i myIdToSettingsMap.put(id, settings); } } - for (@NonNls Element child : state.getChildren("toolWindow")) { - String group = child.getAttributeValue("group"); - if (group != null && !myToolWindowCapable.containsKey(group)) { - myToolWindowCapable.put(group, null); - } - } - _remove("Log Only"); + doRemove("Log Only"); if ("false".equals(state.getAttributeValue(SHOW_BALLOONS_ATTRIBUTE))) { //noinspection NonPrivateFieldAccessedInSynchronizedContext SHOW_BALLOONS = false; diff --git a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java index 3887b4a6a49b..76b943d8f963 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/NotificationsManagerImpl.java @@ -85,7 +85,7 @@ public class NotificationsManagerImpl extends NotificationsManager { private static void doNotify(@NotNull final Notification notification, @Nullable NotificationDisplayType displayType, @Nullable final Project project) { - final NotificationsConfigurationImpl configuration = NotificationsConfigurationImpl.getNotificationsConfigurationImpl(); + final NotificationsConfigurationImpl configuration = NotificationsConfigurationImpl.getInstanceImpl(); if (!configuration.isRegistered(notification.getGroupId())) { configuration.register(notification.getGroupId(), displayType == null ? NotificationDisplayType.BALLOON : displayType); } @@ -94,12 +94,12 @@ public class NotificationsManagerImpl extends NotificationsManager { boolean shouldLog = settings.isShouldLog(); boolean displayable = settings.getDisplayType() != NotificationDisplayType.NONE; - boolean willBeShown = displayable && NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS; + boolean willBeShown = displayable && NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS; if (!shouldLog && !willBeShown) { notification.expire(); } - if (NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS) { + if (NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS) { final Runnable runnable = new DumbAwareRunnable() { @Override public void run() { @@ -132,7 +132,7 @@ public class NotificationsManagerImpl extends NotificationsManager { final NotificationSettings settings = NotificationsConfigurationImpl.getSettings(groupId); NotificationDisplayType type = settings.getDisplayType(); - String toolWindowId = NotificationsConfigurationImpl.getNotificationsConfigurationImpl().getToolWindowId(groupId); + String toolWindowId = NotificationsConfigurationImpl.getInstanceImpl().getToolWindowId(groupId); if (type == NotificationDisplayType.TOOL_WINDOW && (toolWindowId == null || project == null || !ToolWindowManager.getInstance(project).canShowNotification(toolWindowId))) { type = NotificationDisplayType.BALLOON; diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsConfigurablePanel.java b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsConfigurablePanel.java index 0f31e0709462..7a6115afdc91 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsConfigurablePanel.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsConfigurablePanel.java @@ -90,7 +90,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable } } - return NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS != myDisplayBalloons.isSelected(); + return NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS != myDisplayBalloons.isSelected(); } public void apply() { @@ -99,7 +99,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable settingsWrapper.apply(); } - NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS = myDisplayBalloons.isSelected(); + NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS = myDisplayBalloons.isSelected(); } public void reset() { @@ -108,7 +108,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable settingsWrapper.reset(); } - myDisplayBalloons.setSelected(NotificationsConfigurationImpl.getNotificationsConfigurationImpl().SHOW_BALLOONS); + myDisplayBalloons.setSelected(NotificationsConfigurationImpl.getInstanceImpl().SHOW_BALLOONS); myTable.invalidate(); myTable.repaint(); @@ -182,7 +182,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable if (value != NotificationDisplayType.TOOL_WINDOW) return true; String groupId = ((NotificationsTableModel)getModel()).getSettings(row).getGroupId(); - return NotificationsConfigurationImpl.getNotificationsConfigurationImpl().hasToolWindowCapability(groupId); + return NotificationsConfigurationImpl.getInstanceImpl().hasToolWindowCapability(groupId); } @Override @@ -282,7 +282,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable NotificationsConfigurationImpl.remove(getGroupId()); } else { - NotificationsConfigurationImpl.getNotificationsConfigurationImpl().changeSettings(myVersion); + NotificationsConfigurationImpl.getInstanceImpl().changeSettings(myVersion); } } @@ -301,7 +301,7 @@ public class NotificationsConfigurablePanel extends JPanel implements Disposable public NotificationsTableModel() { final List list = new ArrayList(); - for (NotificationSettings setting : NotificationsConfigurationImpl.getAllSettings()) { + for (NotificationSettings setting : NotificationsConfigurationImpl.getInstanceImpl().getAllSettings()) { list.add(new SettingsWrapper(setting)); } From 5adf49766386d32843221d4073fbfb3f37bae397 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 23 Oct 2014 18:29:59 +0400 Subject: [PATCH 156/217] Fix tests for WEB-11600 and moved them to JSON plugin --- .../com/intellij/json/JsonEditingTest.java | 36 ++++++++++++++++--- .../test/com/intellij/json/JsonTestCase.java | 20 +++++++++++ ...terWhenPropertiesAlignedOnValue.after.json | 8 +++++ .../EnterWhenPropertiesAlignedOnValue.json | 7 ++++ ...erWhenPropertiesAlignedOnValue1.after.json | 8 +++++ .../EnterWhenPropertiesAlignedOnValue1.json | 7 ++++ 6 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.after.json create mode 100644 json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.json create mode 100644 json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.after.json create mode 100644 json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.json diff --git a/json/tests/test/com/intellij/json/JsonEditingTest.java b/json/tests/test/com/intellij/json/JsonEditingTest.java index 42421979f490..6445b51400a4 100644 --- a/json/tests/test/com/intellij/json/JsonEditingTest.java +++ b/json/tests/test/com/intellij/json/JsonEditingTest.java @@ -1,10 +1,9 @@ package com.intellij.json; +import com.intellij.json.formatter.JsonCodeStyleSettings; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.util.Computable; import com.intellij.psi.PsiFile; -import com.intellij.psi.codeStyle.CodeStyleSettings; -import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import org.jetbrains.annotations.NotNull; @@ -43,9 +42,7 @@ public class JsonEditingTest extends JsonTestCase { // WEB-13675 public void testIndentWithTabsWhenSmartTabEnabled() { - CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(myFixture.getProject()); - CommonCodeStyleSettings.IndentOptions indentOptions = settings.getCommonSettings(JsonLanguage.INSTANCE).getIndentOptions(); - assertNotNull(indentOptions); + CommonCodeStyleSettings.IndentOptions indentOptions = getIndentOptions(); CommonCodeStyleSettings.IndentOptions oldSettings = (CommonCodeStyleSettings.IndentOptions)indentOptions.clone(); indentOptions.TAB_SIZE = 4; indentOptions.INDENT_SIZE = 4; @@ -58,4 +55,33 @@ public class JsonEditingTest extends JsonTestCase { indentOptions.copyFrom(oldSettings); } } + + // Moved from JavaScript + + // WEB-11600 + public void testEnterWhenPropertiesAlignedOnValue() { + doEnterTestForWeb11600(); + } + + // WEB-11600 + public void testEnterWhenPropertiesAlignedOnValue1() { + doEnterTestForWeb11600(); + } + + private void doEnterTestForWeb11600() { + final JsonCodeStyleSettings settings = getCustomCodeStyleSettings(); + final CommonCodeStyleSettings.IndentOptions indentOptions = getIndentOptions(); + + JsonCodeStyleSettings.PropertyAlignment oldPropertyAlignment = settings.PROPERTY_ALIGNMENT; + int oldIndentSize = indentOptions.INDENT_SIZE; + settings.PROPERTY_ALIGNMENT = JsonCodeStyleSettings.PropertyAlignment.ALIGN_ON_VALUE; + indentOptions.INDENT_SIZE = 4; + try { + doTest("\n"); + } + finally { + indentOptions.INDENT_SIZE = oldIndentSize; + settings.PROPERTY_ALIGNMENT = oldPropertyAlignment; + } + } } diff --git a/json/tests/test/com/intellij/json/JsonTestCase.java b/json/tests/test/com/intellij/json/JsonTestCase.java index 1a72cd389fa1..4ea65effa00a 100644 --- a/json/tests/test/com/intellij/json/JsonTestCase.java +++ b/json/tests/test/com/intellij/json/JsonTestCase.java @@ -1,6 +1,9 @@ package com.intellij.json; +import com.intellij.json.formatter.JsonCodeStyleSettings; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.testFramework.PlatformTestCase; import com.intellij.testFramework.TestDataPath; import com.intellij.testFramework.TestLoggerFactory; @@ -25,6 +28,23 @@ public abstract class JsonTestCase extends LightCodeInsightFixtureTestCase { super.setUp(); } + @NotNull + protected CommonCodeStyleSettings getCommonCodeStyleSettings() { + return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JsonLanguage.INSTANCE); + } + + @NotNull + protected JsonCodeStyleSettings getCustomCodeStyleSettings() { + return CodeStyleSettingsManager.getSettings(getProject()).getCustomSettings(JsonCodeStyleSettings.class); + } + + @NotNull + protected CommonCodeStyleSettings.IndentOptions getIndentOptions() { + final CommonCodeStyleSettings.IndentOptions options = getCommonCodeStyleSettings().getIndentOptions(); + assertNotNull(options); + return options; + } + @NotNull public String getBasePath() { return "/json/tests/testData"; diff --git a/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.after.json b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.after.json new file mode 100644 index 000000000000..4f02da0593c7 --- /dev/null +++ b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.after.json @@ -0,0 +1,8 @@ +{ + "scripts" : { + "post-install-cmd": [ + "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" + + ] + } +} \ No newline at end of file diff --git a/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.json b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.json new file mode 100644 index 000000000000..b032980d75ca --- /dev/null +++ b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue.json @@ -0,0 +1,7 @@ +{ + "scripts" : { + "post-install-cmd": [ + "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" + ] + } +} \ No newline at end of file diff --git a/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.after.json b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.after.json new file mode 100644 index 000000000000..d14283a6e260 --- /dev/null +++ b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.after.json @@ -0,0 +1,8 @@ +{ + "scripts" : { + "post-install-cmd": [ + "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" + ], + + } +} \ No newline at end of file diff --git a/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.json b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.json new file mode 100644 index 000000000000..d535269c8565 --- /dev/null +++ b/json/tests/testData/editing/EnterWhenPropertiesAlignedOnValue1.json @@ -0,0 +1,7 @@ +{ + "scripts" : { + "post-install-cmd": [ + "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile" + ], + } +} \ No newline at end of file From d092f9cc87d1d5c5acf406f517a96f25f5a3320d Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 23 Oct 2014 19:39:27 +0400 Subject: [PATCH 157/217] Automatically rollback code style settings in JSON tests using loan pattern --- .../com/intellij/json/JsonFormattingTest.java | 132 +++++++++--------- 1 file changed, 69 insertions(+), 63 deletions(-) diff --git a/json/tests/test/com/intellij/json/JsonFormattingTest.java b/json/tests/test/com/intellij/json/JsonFormattingTest.java index 1cac15d6e99c..854cdf787a22 100644 --- a/json/tests/test/com/intellij/json/JsonFormattingTest.java +++ b/json/tests/test/com/intellij/json/JsonFormattingTest.java @@ -4,11 +4,13 @@ import com.intellij.formatting.WrapType; import com.intellij.json.formatter.JsonCodeStyleSettings; import com.intellij.json.formatter.JsonCodeStyleSettings.PropertyAlignment; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CommonCodeStyleSettings; import com.intellij.psi.formatter.FormatterTestCase; import com.intellij.testFramework.IdeaTestCase; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.TestLoggerFactory; +import com.intellij.util.ThrowableRunnable; import org.jetbrains.annotations.NotNull; /** @@ -59,8 +61,13 @@ public class JsonFormattingTest extends FormatterTestCase { } public void testWrapping() throws Exception { - getSettings().setRightMargin(JsonLanguage.INSTANCE, 20); - doTest(); + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + getSettings().setRightMargin(JsonLanguage.INSTANCE, 20); + doTest(); + } + }); } // WEB-13587 @@ -73,88 +80,87 @@ public class JsonFormattingTest extends FormatterTestCase { checkPropertyAlignment(PropertyAlignment.ALIGN_ON_VALUE); } - private void checkPropertyAlignment(@NotNull PropertyAlignment alignmentType) throws Exception { - final JsonCodeStyleSettings settings = getCustomJsonSettings(); - final PropertyAlignment oldAlignment = settings.PROPERTY_ALIGNMENT; - settings.PROPERTY_ALIGNMENT = alignmentType; - try { - doTest(); - } - finally { - settings.PROPERTY_ALIGNMENT = oldAlignment; - } + private void checkPropertyAlignment(@NotNull final PropertyAlignment alignmentType) throws Exception { + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + getCustomSettings().PROPERTY_ALIGNMENT = alignmentType; + doTest(); + } + }); } public void testChopDownArrays() throws Exception { - final JsonCodeStyleSettings customSettings = getCustomJsonSettings(); - final int oldArrayWrapping = customSettings.ARRAY_WRAPPING; - customSettings.ARRAY_WRAPPING = WrapType.CHOP_DOWN_IF_LONG.getLegacyRepresentation(); - - final int oldMargin = getSettings().getRightMargin(JsonLanguage.INSTANCE); - getSettings().setRightMargin(JsonLanguage.INSTANCE, 40); - try { - doTest(); - } - finally { - getSettings().setRightMargin(JsonLanguage.INSTANCE, oldMargin); - customSettings.ARRAY_WRAPPING = oldArrayWrapping; - } + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + getCustomSettings().ARRAY_WRAPPING = WrapType.CHOP_DOWN_IF_LONG.getLegacyRepresentation(); + getSettings().setRightMargin(JsonLanguage.INSTANCE, 40); + doTest(); + } + }); } // Moved from JavaScript public void testWeb3830() throws Exception { - final CommonCodeStyleSettings.IndentOptions indentOptions = getCommonJsonSettings().getIndentOptions(); - assertNotNull(indentOptions); - final int indent = indentOptions.INDENT_SIZE; - final boolean useTabs = indentOptions.USE_TAB_CHARACTER; - final int tabSize = indentOptions.TAB_SIZE; - try { - indentOptions.INDENT_SIZE = 8; - indentOptions.USE_TAB_CHARACTER = true; - indentOptions.TAB_SIZE = 8; - doTest(); - } - finally { - indentOptions.INDENT_SIZE = indent; - indentOptions.USE_TAB_CHARACTER = useTabs; - indentOptions.TAB_SIZE = tabSize; - } + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + CommonCodeStyleSettings.IndentOptions options = getIndentOptions(); + options.INDENT_SIZE = 8; + options.USE_TAB_CHARACTER = true; + options.TAB_SIZE = 8; + doTest(); + } + }); } public void testReformatJSon() throws Exception { - final CommonCodeStyleSettings.IndentOptions indentOptions = getCommonJsonSettings().getIndentOptions(); - assertNotNull(indentOptions); - final int oldIndentSize = indentOptions.INDENT_SIZE; - try { - indentOptions.INDENT_SIZE = 4; - doTest(); - } - finally { - indentOptions.INDENT_SIZE = oldIndentSize; - } + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + getIndentOptions().INDENT_SIZE = 4; + doTest(); + } + }); } public void testReformatJSon2() throws Exception { - final CommonCodeStyleSettings.IndentOptions indentOptions = getCommonJsonSettings().getIndentOptions(); - assertNotNull(indentOptions); - final int oldIndentSize = indentOptions.INDENT_SIZE; - try { - indentOptions.INDENT_SIZE = 4; - doTest(); - } - finally { - indentOptions.INDENT_SIZE = oldIndentSize; - } + withPreservedSettings(new ThrowableRunnable() { + @Override + public void run() throws Exception { + getIndentOptions().INDENT_SIZE = 4; + doTest(); + } + }); } @NotNull - private CommonCodeStyleSettings getCommonJsonSettings() { + private CommonCodeStyleSettings.IndentOptions getIndentOptions() { + CommonCodeStyleSettings.IndentOptions options = getCommonSettings().getIndentOptions(); + assertNotNull(options); + return options; + } + + @NotNull + private CommonCodeStyleSettings getCommonSettings() { return getSettings().getCommonSettings(JsonLanguage.INSTANCE); } @NotNull - private JsonCodeStyleSettings getCustomJsonSettings() { + private JsonCodeStyleSettings getCustomSettings() { return getSettings().getCustomSettings(JsonCodeStyleSettings.class); } + + protected void withPreservedSettings(@NotNull ThrowableRunnable runnable) throws Exception { + final CodeStyleSettings globalSettings = getSettings(); + final CodeStyleSettings copy = globalSettings.clone(); + try { + runnable.run(); + } + finally { + globalSettings.copyFrom(copy); + } + } } From 9ea26bc614c1f9add7255f5639b894a9f0c9a4ee Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Fri, 24 Oct 2014 12:21:38 +0400 Subject: [PATCH 158/217] IDEA-58130 Improve editor performance during working with large files written in a single line --- .../openapi/editor/impl/EditorImpl.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 04990d63e5a9..35f08af48447 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -254,6 +254,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi private boolean mySoftWrapsChanged; + // transient fields used during painting + private VisualPosition mySelectionStartPosition; + private VisualPosition mySelectionEndPosition; + private Color myLastBackgroundColor = null; private Point myLastBackgroundPosition = null; private int myLastBackgroundWidth; @@ -2250,6 +2254,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi myLastBackgroundPosition = null; myLastBackgroundColor = null; + mySelectionStartPosition = null; + mySelectionEndPosition = null; int start = clipStartOffset; @@ -2555,6 +2561,23 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi position.x = width; } + + private VisualPosition getSelectionStartPosition() { + if (mySelectionStartPosition == null) { + // We cache the value to avoid repeated invocations of Editor.logicalPositionToOffset which is currently slow for long lines + mySelectionStartPosition = getSelectionModel().getSelectionStartPosition(); + } + return mySelectionStartPosition; + } + + private VisualPosition getSelectionEndPosition() { + if (mySelectionEndPosition == null) { + // We cache the value to avoid repeated invocations of Editor.logicalPositionToOffset which is currently slow for long lines + mySelectionEndPosition = getSelectionModel().getSelectionEndPosition(); + } + return mySelectionEndPosition; + } + /** * End user is allowed to perform selection by visual coordinates (e.g. by dragging mouse with left button hold). There is a possible * case that such a move intersects with soft wrap introduced virtual space. We want to draw corresponding selection background @@ -2576,8 +2599,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @JdkConstants.FontStyle int fontType) { // There is a possible case that the user performed selection at soft wrap virtual space. We need to paint corresponding background // there then. - VisualPosition selectionStartPosition = getSelectionModel().getSelectionStartPosition(); - VisualPosition selectionEndPosition = getSelectionModel().getSelectionEndPosition(); + VisualPosition selectionStartPosition = getSelectionStartPosition(); + VisualPosition selectionEndPosition = getSelectionEndPosition(); if (selectionStartPosition.equals(selectionEndPosition)) { return; } @@ -2637,8 +2660,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @NotNull SoftWrap softWrap) { // There is a possible case that the user performed selection at soft wrap virtual space. We need to paint corresponding background // there then. - VisualPosition selectionStartPosition = getSelectionModel().getSelectionStartPosition(); - VisualPosition selectionEndPosition = getSelectionModel().getSelectionEndPosition(); + VisualPosition selectionStartPosition = getSelectionStartPosition(); + VisualPosition selectionEndPosition = getSelectionEndPosition(); if (selectionStartPosition.equals(selectionEndPosition)) { return; } From 4d82e18d377c2c91859db7375c9dee3bde9456ca Mon Sep 17 00:00:00 2001 From: "Vladimir.Orlov" Date: Fri, 24 Oct 2014 13:00:57 +0400 Subject: [PATCH 159/217] updated mac launcher to detect and solve problems under os x 10.10 and deprecated DEV java(s). --- build/conf/mac/Contents/MacOS/idea | Bin 85580 -> 107644 bytes native/MacLauncher/Launcher.h | 1 + native/MacLauncher/Launcher.m | 112 ++++++++++++++++++++++++++--- native/MacLauncher/main.m | 15 ++-- 4 files changed, 110 insertions(+), 18 deletions(-) diff --git a/build/conf/mac/Contents/MacOS/idea b/build/conf/mac/Contents/MacOS/idea index bd5a2a3f744dffc53a59cea036798828af5cef3c..db150d7edcceda4c60b37c12e3643f31c62aa8c6 100755 GIT binary patch literal 107644 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
+Qh;8-68&BRx9=A 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 +@class NSAlert; typedef jint (JNICALL *fun_ptr_t_CreateJavaVM)(JavaVM **pvm, void **env, void *args); +NSBundle *vm; +NSString *const JVMOptions = @"JVMOptions"; +NSString* minRequiredJavaVersion = @"1.6.0_65-b14-466.1"; +NSString* osxVersion = @"10.10"; +BOOL javaUpdateRequired = false; -static NSString *const JVMOptions = @"JVMOptions"; - @interface NSString (CustomReplacements) - (NSString *)replaceAll:(NSString *)pattern to:(NSString *)replacement; @@ -65,6 +69,80 @@ static NSString *const JVMOptions = @"JVMOptions"; return self; } +NSString* getOSXVersion(){ + NSString *versionString; + NSDictionary * sv = [NSDictionary dictionaryWithContentsOfFile:@"/System/Library/CoreServices/SystemVersion.plist"]; + versionString = [sv objectForKey:@"ProductVersion"]; + //NSLog(@"OS X: %@", versionString); + return versionString; +} + +void openUrl(){ + CFURLRef url = (__bridge CFURLRef)[NSURL URLWithString:@"http://support.apple.com/kb/DL1572"]; + NSString *fileString = @"/Applications/Safari.app/"; + + FSRef appFSURL; + OSStatus stat2=FSPathMakeRef((const UInt8 *)[fileString UTF8String], &appFSURL, NULL); + if (stat2<0) { + NSLog(@"can't create FSRef of Safari"); + } + + //create the application parameters structure + LSApplicationParameters appParam; + appParam.version = 0; //should always be zero + appParam.flags = kLSLaunchDefaults; //use the default launch options + appParam.application = &appFSURL; //pass in the reference of applications FSRef + appParam.argv = NULL; + appParam.environment = NULL; + appParam.asyncLaunchRefCon = NULL; + appParam.initialEvent = NULL; + + //array of urls. now with a single object array + CFArrayRef array = (__bridge CFArrayRef)[NSArray arrayWithObject:(__bridge id)url]; + + //open the url with the application + OSStatus stat = LSOpenURLsWithRole(array, kLSRolesAll, NULL, &appParam, NULL, 0); + //kLSRolesAll - the role with which the applicaiton is to be opened (kLSRolesAll accepts any) + + if (stat<0) { + NSLog(@"Can not open the url (http://support.apple.com/kb/DL1572) with the Safari"); + } +} + +void showWarning(NSString* installedJava){ + NSAlert* alert = [[NSAlert alloc] init]; + [alert addButtonWithTitle:@"Update"]; + [alert addButtonWithTitle:@"Cancel"]; + NSString* message_description = [NSString stringWithFormat:@"%@%@%@",@"Java version: ", installedJava, @" which is installed on your mac is obsolete."]; + NSString* message_suggestion = @"Would you like to update Java?"; + NSString* informativeText =[NSString stringWithFormat:@"%@\n%@",message_description,message_suggestion]; + [alert setMessageText:@"Java Update"]; + [alert setInformativeText:informativeText ]; + [alert setAlertStyle:NSWarningAlertStyle]; + if ([alert runModal] == NSAlertFirstButtonReturn){ + openUrl(); + } + [alert release]; +} + +BOOL isJavaUpdateRequired(NSString *vmVersion, NSString *requiredVersion){ + BOOL needUpdate = false; + NSString* currentOSXVersion = getOSXVersion(); + //installedJava = vmVersion; + if ([osxVersion compare:currentOSXVersion options:NSNumericSearch] <= 0){ + if ([minRequiredJavaVersion compare:vmVersion options:NSNumericSearch] <= 0){ + NSLog(@"find Java: %@", vmVersion); + }else{ + //NSLog(@" --- Installed Java is not meet the requirements. Please visit http://support.apple.com/kb/DL1572 and update Java."); + NSLog(@"find Java: %@", vmVersion); + NSLog(@"required JavaVersion: %@", minRequiredJavaVersion); + needUpdate = true; + showWarning(vmVersion); + } + } + return needUpdate; +} + void appendBundle(NSString *path, NSMutableArray *sink) { if ([path hasSuffix:@"jdk"] || [path hasSuffix:@".jre"]) { @@ -120,7 +198,9 @@ NSArray *allVms() { } NSString *jvmVersion(NSBundle *bundle) { - return [bundle.infoDictionary valueForKey:@"JVMVersion" inDictionary:@"JavaVM" defaultObject:@"0"]; + NSString* javaVersion = [bundle.infoDictionary valueForKey:@"JVMVersion" inDictionary:@"JavaVM" defaultObject:@"0"]; + //NSLog(@"jvmVersion: %@", javaVersion); + return javaVersion; } NSString *requiredJvmVersion() { @@ -128,15 +208,17 @@ NSString *requiredJvmVersion() { } BOOL satisfies(NSString *vmVersion, NSString *requiredVersion) { + javaUpdateRequired = isJavaUpdateRequired(vmVersion, requiredVersion); + if (javaUpdateRequired){ + return !javaUpdateRequired; + } if ([requiredVersion hasSuffix:@"+"]) { - requiredVersion = [requiredVersion substringToIndex:[requiredVersion length] - 1]; - return [requiredVersion compare:vmVersion options:NSNumericSearch] <= 0; + requiredVersion = [requiredVersion substringToIndex:[requiredVersion length] - 1]; + return [requiredVersion compare:vmVersion options:NSNumericSearch] <= 0; } - if ([requiredVersion hasSuffix:@"*"]) { - requiredVersion = [requiredVersion substringToIndex:[requiredVersion length] - 1]; + requiredVersion = [requiredVersion substringToIndex:[requiredVersion length] - 1]; } - return [vmVersion hasPrefix:requiredVersion]; } @@ -158,13 +240,13 @@ NSBundle *findMatchingVm() { debugLog([NSString stringWithFormat:@"Required VM: %@", required]); if (required != nil && required != NULL) { - for (NSBundle *vm in vmBundles) { + for (NSBundle *vm in vmBundles) { if (satisfies(jvmVersion(vm), required)) { debugLog(@"Chosen VM:"); debugLog([vm bundlePath]); return vm; } - } + } } else { NSLog(@"Info.plist is corrupted, Absent JVMOptios key."); exit(-1); @@ -331,10 +413,18 @@ NSDictionary *parseProperties() { } } +BOOL validationJavaVersion(){ + vm = findMatchingVm(); + if (javaUpdateRequired) { + NSLog(@"update Java is required"); + return false; + } + return true; +} + - (void)launch { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - NSBundle *vm = findMatchingVm(); if (vm == nil) { NSString *old_launcher = [self expandMacros:@"$APP_PACKAGE/Contents/MacOS/idea_appLauncher"]; execv([old_launcher fileSystemRepresentation], self->argv); diff --git a/native/MacLauncher/main.m b/native/MacLauncher/main.m index c9ef36a1b7d1..141dd5a9bb1d 100644 --- a/native/MacLauncher/main.m +++ b/native/MacLauncher/main.m @@ -25,17 +25,18 @@ static void makeSameStackSize(NSThread *thread) { } static void launchInNewThread(Launcher *launcher) { - NSThread *thread = [[[NSThread alloc] initWithTarget:launcher selector:@selector(launch) object:nil] autorelease]; - makeSameStackSize(thread); - [thread start]; + NSThread *thread = [[[NSThread alloc] initWithTarget:launcher selector:@selector(launch) object:nil] autorelease]; + makeSameStackSize(thread); + [thread start]; + } int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - - launchInNewThread([[[Launcher alloc] initWithArgc:argc argv:argv] autorelease]); - parkRunLoop(); - + if (validationJavaVersion()){ + launchInNewThread([[[Launcher alloc] initWithArgc:argc argv:argv] autorelease]); + parkRunLoop(); + } [pool release]; return 0; } From dc91737130cff73da0cacaca3a3f1d6edff00d3c Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 24 Oct 2014 13:23:44 +0400 Subject: [PATCH 160/217] EA-60366 - NPE: DocumentationComponent$.get --- .../codeInsight/documentation/DocumentationComponent.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java index 8061ad921016..450b684d2980 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationComponent.java @@ -105,6 +105,7 @@ public class DocumentationComponent extends JPanel implements Disposable, DataPr private final MyDictionary myImageProvider = new MyDictionary() { @Override public Image get(Object key) { + if (myManager == null || key == null) return null; PsiElement element = getElement(); if (element == null) return null; URL url = (URL)key; From 53eeb42aa131d49f0bb16f750f2023c81e764442 Mon Sep 17 00:00:00 2001 From: Sergey Savenko Date: Fri, 24 Oct 2014 13:27:09 +0400 Subject: [PATCH 161/217] Editor: clip placeholder text --- .../src/com/intellij/openapi/editor/impl/EditorImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 35f08af48447..5cb16670e19b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -2913,6 +2913,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return false; } else { + hintText = SwingUtilities.layoutCompoundLabel(g.getFontMetrics(), hintText.toString(), null, 0, 0, 0, 0, + myEditorComponent.getBounds(), new Rectangle(), new Rectangle(), 0); myLastPaintedPlaceholderWidth = drawString( g, hintText, 0, hintText.length(), new Point(0, 0), clip, null, null, Font.PLAIN, myFoldingModel.getPlaceholderAttributes().getForegroundColor(), PAINT_NO_WHITESPACE From e27fa74a68a5237c76f8d06482c3de4dfd31e1bc Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 13:34:14 +0400 Subject: [PATCH 162/217] fixed EDU-143 Add documentation comments to the test_helper.py --- .../fileTemplates/internal/test_helper.py.ft | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft b/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft index 4b1d9660714b..9d1842742845 100644 --- a/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft +++ b/python/edu/course-creator/resources/fileTemplates/internal/test_helper.py.ft @@ -2,7 +2,7 @@ import sys def get_file_text(path): - """ get file text by path""" + """ Returns file text by path""" file_io = open(path, "r") text = file_io.read() file_io.close() @@ -10,6 +10,7 @@ def get_file_text(path): def get_file_output(): + """ Returns answer file output using import system """ saved_stdout = sys.stdout try: from StringIO import StringIO @@ -24,7 +25,7 @@ def get_file_output(): def test_file_importable(): - """ tests there is no obvious syntax errors""" + """ Tests there is no obvious syntax errors""" path = sys.argv[-1] if not path.endswith(".py"): import os @@ -39,6 +40,9 @@ def test_file_importable(): def check_importable_path(path): + """ Checks that file is importable. + Reports failure otherwise. + """ try: import_file(path) except: @@ -48,7 +52,7 @@ def check_importable_path(path): def import_file(path): - """ returns imported file """ + """ Returns imported file """ if sys.version_info[0] == 2: import imp @@ -60,14 +64,17 @@ def import_file(path): def import_task_file(): - """ returns imported file - imports file from which check action was run + """ Returns imported file. + Imports file from which check action was run """ path = sys.argv[-1] return import_file(path) def test_is_not_empty(): + """ + Checks that file is not empty + """ path = sys.argv[-1] file_text = get_file_text(path) @@ -78,6 +85,9 @@ def test_is_not_empty(): def test_is_initial_text(error_text="You should modify the file"): + """ + Checks that file was modified + """ path = sys.argv[-1] text = get_initial_text(path) file_text = get_file_text(path) @@ -89,6 +99,9 @@ def test_is_initial_text(error_text="You should modify the file"): def get_initial_text(path): + """ + Returns the initial task text + """ course_lib = sys.argv[-2] import os @@ -101,6 +114,9 @@ def get_initial_text(path): def test_text_equals(text, error_text): + """ + Checks that answer equals text. + """ path = sys.argv[-1] file_text = get_file_text(path) @@ -111,6 +127,9 @@ def test_text_equals(text, error_text): def test_window_text_deleted(error_text="Don't just delete task text"): + """ + Checks that task windows are not empty + """ windows = get_task_windows() for window in windows: @@ -121,18 +140,23 @@ def test_window_text_deleted(error_text="Don't just delete task text"): def failed(message="Please, reload the task and try again.", name=None): + """ Reports failure """ if not name: name = sys._getframe().f_back.f_code.co_name print("#educational_plugin " + name + " FAILED + " + message) def passed(name=None): + """ Reports success """ if not name: name = sys._getframe().f_back.f_code.co_name print("#educational_plugin " + name + " test OK") def get_task_windows(file_name=None): + """ + Returns all task windows + """ prefix = "#educational_plugin_window = " import os From 973acff4a85c009dbef247fa1fb92c63e8f57dbb Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 13:36:08 +0400 Subject: [PATCH 163/217] fixed EDU-190 Increace plugin versions --- python/edu/course-creator/resources/META-INF/plugin.xml | 2 +- python/edu/learn-python/resources/META-INF/plugin.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/edu/course-creator/resources/META-INF/plugin.xml b/python/edu/course-creator/resources/META-INF/plugin.xml index 1a9b2e851b4c..4946595910f3 100644 --- a/python/edu/course-creator/resources/META-INF/plugin.xml +++ b/python/edu/course-creator/resources/META-INF/plugin.xml @@ -1,7 +1,7 @@ org.jetbrains.plugins.coursecreator Course Creator for PyCharm Educational - 1.0 + 1.1 com.jetbrains.python.edu.learn-python Educational plugin for PyCharm - 1.0 + 1.1 YourCompany Date: Fri, 24 Oct 2014 13:38:32 +0400 Subject: [PATCH 164/217] fixed EDU-123 Plugin description --- python/edu/learn-python/resources/META-INF/plugin.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/edu/learn-python/resources/META-INF/plugin.xml b/python/edu/learn-python/resources/META-INF/plugin.xml index 32eaf5e71975..d60f21c5175d 100644 --- a/python/edu/learn-python/resources/META-INF/plugin.xml +++ b/python/edu/learn-python/resources/META-INF/plugin.xml @@ -6,7 +6,8 @@ YourCompany Date: Fri, 24 Oct 2014 13:39:29 +0400 Subject: [PATCH 165/217] fixed EDU-200 Course creation dialog - text goes beyond the window --- .../jetbrains/plugins/coursecreator/ui/CCNewProjectPanel.java | 1 + 1 file changed, 1 insertion(+) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CCNewProjectPanel.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CCNewProjectPanel.java index 83a3458576b6..d463718978bb 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CCNewProjectPanel.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/ui/CCNewProjectPanel.java @@ -24,6 +24,7 @@ public class CCNewProjectPanel { myName.getDocument().addDocumentListener(new MyValidator()); myDescription.getDocument().addDocumentListener(new MyValidator()); myAuthorField.getDocument().addDocumentListener(new MyValidator()); + myDescription.setLineWrap(true); } public JPanel getMainPanel() { From dea346e2a09516bff75fa56d349e0c2a44c8b459 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 24 Oct 2014 11:41:29 +0200 Subject: [PATCH 166/217] warn on "String.replace()" in "Dynamic regular expression could be replaced by compiled Pattern" inspection --- ...ceableByCompiledPatternInspectionBase.java | 3 +- ...eplaceableByCompiledPatternInspection.java | 32 +++++++++---------- .../DynamicRegex.java | 2 ++ 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspectionBase.java index b8b8aca2d400..feca10548dfc 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspectionBase.java @@ -34,13 +34,14 @@ import java.util.HashSet; public class DynamicRegexReplaceableByCompiledPatternInspectionBase extends BaseInspection { - @SuppressWarnings("UnusedDeclaration") + @SuppressWarnings("PublicField") public boolean ignoreForSplitOptimization = true; @NonNls protected static final Collection regexMethodNames = new HashSet(4); static { regexMethodNames.add("matches"); + regexMethodNames.add("replace"); regexMethodNames.add("replaceFirst"); regexMethodNames.add("replaceAll"); regexMethodNames.add("split"); diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspection.java index c696fd041dc6..5d2b74f7eef1 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/performance/DynamicRegexReplaceableByCompiledPatternInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2009-2012 Bas Leijdekkers + * Copyright 2009-2014 Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -73,42 +73,40 @@ public class DynamicRegexReplaceableByCompiledPatternInspection extends DynamicR if (expressionsLength > 0) { fieldText.append(expressions[0].getText()); } + @NonNls final String methodName = methodExpression.getReferenceName(); + if ("replace".equals(methodName)) { + fieldText.append(", java.util.regex.Pattern.LITERAL"); + } fieldText.append(");"); final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); final PsiField newField = factory.createFieldFromText(fieldText.toString(), element); final PsiElement field = aClass.add(newField); @NonNls final StringBuilder expressionText = new StringBuilder("PATTERN."); - @NonNls final String methodName = methodExpression.getReferenceName(); final PsiExpression qualifier = methodExpression.getQualifierExpression(); - @NonNls final String qualifierText; - if (qualifier == null) { - qualifierText = "this"; - } - else { - qualifierText = qualifier.getText(); - } + @NonNls final String qualifierText = (qualifier == null) ? "this" : qualifier.getText(); if ("split".equals(methodName)) { expressionText.append(methodName); expressionText.append('('); expressionText.append(qualifierText); for (int i = 1; i < expressionsLength; i++) { - expressionText.append(','); - expressionText.append(expressions[i].getText()); + expressionText.append(',').append(expressions[i].getText()); } expressionText.append(')'); } else { - expressionText.append("matcher("); - expressionText.append(qualifierText); - expressionText.append(")."); - expressionText.append(methodName); + expressionText.append("matcher(").append(qualifierText).append(")."); + if ("replace".equals(methodName)) { + expressionText.append("replaceAll"); + } + else { + expressionText.append(methodName); + } expressionText.append('('); if (expressionsLength > 1) { expressionText.append(expressions[1].getText()); for (int i = 2; i < expressionsLength; i++) { - expressionText.append(','); - expressionText.append(expressions[i].getText()); + expressionText.append(',').append(expressions[i].getText()); } } expressionText.append(')'); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/dynamic_regex_replaceable_by_compiled_pattern/DynamicRegex.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/dynamic_regex_replaceable_by_compiled_pattern/DynamicRegex.java index b2b827c1bef2..358b23ea0b65 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/dynamic_regex_replaceable_by_compiled_pattern/DynamicRegex.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/performance/dynamic_regex_replaceable_by_compiled_pattern/DynamicRegex.java @@ -8,5 +8,7 @@ class DynamicRegex { s.replaceFirst("first", "second"); s.split("a"); s.split("\\\\"); + "abba".replace("bb", "aa"); + "abba".replace('b', 'a'); } } \ No newline at end of file From 478790592021e30ccf37056175a87b88e173b735 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 24 Oct 2014 11:46:49 +0200 Subject: [PATCH 167/217] IDEA-91028 (Language injection for java.util.regex.Pattern does not know about special hex syntax, good code is red) --- .../org/intellij/lang/regexp/_RegExLexer.java | 76 +++++++++++-------- .../lang/regexp/RegExpLanguageHost.java | 4 +- .../lang/regexp/RegExpLanguageHosts.java | 11 ++- .../lang/regexp/psi/impl/RegExpCharImpl.java | 12 ++- .../intellij/lang/regexp/regexp-lexer.flex | 9 +-- .../regexp/validation/RegExpAnnotator.java | 7 ++ RegExpSupport/testData/RETest.xml | 20 +++++ .../com/intellij/psi/impl/JavaRegExpHost.java | 32 ++++++-- .../groovy/regexp/GroovyRegExpHost.java | 23 ++++-- .../impl/PyStringLiteralExpressionImpl.java | 6 ++ 10 files changed, 147 insertions(+), 53 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index b35848683e2d..c06aef56f783 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 10/22/14 10:42 AM */ +/* The following code was generated by JFlex 1.4.3 on 10/23/14 7:27 PM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -9,13 +9,12 @@ import java.util.LinkedList; import java.util.EnumSet; import com.intellij.psi.StringEscapesTokenTypes; -// IDEADEV-11055 -@SuppressWarnings({ "ALL", "SameParameterValue", "WeakerAccess", "SameReturnValue", "RedundantThrows", "UnusedDeclaration", "UnusedDeclaration" }) +@SuppressWarnings("ALL") /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/22/14 10:42 AM from the specification file + * on 10/23/14 7:27 PM from the specification file * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -162,12 +161,12 @@ class _RegExLexer implements FlexLexer { "\1\60\2\61\1\62\1\11\1\63\1\64\1\65\1\52"+ "\1\66\1\67\1\70\1\71\1\72\1\73\1\0\1\74"+ "\1\75\1\76\1\77\1\0\1\100\1\101\1\102\1\103"+ - "\2\64\2\65\1\52\1\104\1\105\1\106\1\107\1\0"+ - "\1\102\1\64\1\110\2\65\1\111\1\112\1\102\3\65"+ - "\1\113"; + "\2\64\1\65\1\52\1\104\1\105\1\106\1\107\1\0"+ + "\1\102\1\110\2\64\1\65\1\111\1\112\1\102\1\64"+ + "\1\65\1\64\1\113\4\64"; private static int [] zzUnpackAction() { - int [] result = new int[112]; + int [] result = new int[115]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -203,12 +202,13 @@ class _RegExLexer implements FlexLexer { "\0\u02a4\0\u02a4\0\u02a4\0\u05e4\0\u02a4\0\u02a4\0\u02a4\0\u0618"+ "\0\u064c\0\u0680\0\u02a4\0\u02a4\0\u02a4\0\u02a4\0\u02a4\0\u02a4"+ "\0\u06b4\0\u02a4\0\u02a4\0\u02a4\0\u06e8\0\u071c\0\u02a4\0\u02a4"+ - "\0\u0750\0\u02a4\0\u0784\0\u07b8\0\u07ec\0\u0820\0\u0854\0\u02a4"+ - "\0\u02a4\0\u02a4\0\u02a4\0\u0888\0\u08bc\0\u02a4\0\u02a4\0\u08f0"+ - "\0\u0924\0\u057c\0\u02a4\0\u02a4\0\u0958\0\u098c\0\u02a4\0\u02a4"; + "\0\u0750\0\u02a4\0\u0784\0\u07b8\0\u07ec\0\u0820\0\u02a4\0\u02a4"+ + "\0\u02a4\0\u02a4\0\u0854\0\u0888\0\u02a4\0\u08bc\0\u02a4\0\u08f0"+ + "\0\u057c\0\u02a4\0\u02a4\0\u0924\0\u0958\0\u098c\0\u02a4\0\u09c0"+ + "\0\u09f4\0\u0a28\0\u0a5c"; private static int [] zzUnpackRowMap() { - int [] result = new int[112]; + int [] result = new int[115]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -260,24 +260,38 @@ class _RegExLexer implements FlexLexer { "\33\0\20\62\2\0\2\62\40\0\20\63\2\0\2\63"+ "\22\0\1\120\27\0\1\121\17\0\2\122\1\123\1\124"+ "\1\125\1\126\1\127\12\0\1\130\53\0\2\74\37\0"+ - "\1\74\23\0\1\131\37\0\1\131\21\0\64\132\1\133"+ - "\2\134\20\133\2\134\2\133\3\134\3\133\1\134\1\133"+ - "\1\134\2\133\1\134\21\133\1\135\2\136\20\135\2\136"+ - "\2\135\3\136\3\135\1\136\1\135\1\136\2\135\1\136"+ - "\21\135\1\0\1\74\1\137\37\0\1\137\77\0\1\140"+ - "\1\0\1\141\61\0\1\142\1\143\4\0\5\144\1\0"+ - "\56\144\2\0\1\145\37\0\1\145\21\0\65\146\2\147"+ - "\20\146\2\147\2\146\3\147\3\146\1\147\1\146\1\147"+ - "\2\146\1\147\21\146\65\150\2\151\20\150\2\151\2\150"+ - "\3\151\3\150\1\151\1\150\1\151\2\150\1\151\21\150"+ - "\1\0\1\74\1\152\37\0\1\152\21\0\5\144\1\153"+ - "\56\144\2\0\1\154\37\0\1\154\21\0\65\155\2\156"+ - "\20\155\2\156\2\155\3\156\3\155\1\156\1\155\1\156"+ - "\2\155\1\156\21\155\65\157\2\160\20\157\2\160\2\157"+ - "\3\160\3\157\1\160\1\157\1\160\2\157\1\160\21\157"; + "\1\74\23\0\1\131\37\0\1\131\21\0\64\132\1\0"+ + "\2\133\3\0\1\134\14\0\2\133\2\0\3\133\3\0"+ + "\1\133\1\0\1\133\2\0\1\133\22\0\2\135\20\0"+ + "\2\135\2\0\3\135\3\0\1\135\1\0\1\135\2\0"+ + "\1\135\22\0\1\74\1\136\37\0\1\136\77\0\1\137"+ + "\1\0\1\140\61\0\1\141\1\142\4\0\5\143\1\0"+ + "\56\143\2\0\1\144\37\0\1\144\22\0\2\145\20\0"+ + "\2\145\2\0\3\145\3\0\1\145\1\0\1\145\2\0"+ + "\1\145\22\0\2\146\4\0\1\147\13\0\2\146\2\0"+ + "\3\146\3\0\1\146\1\0\1\146\2\0\1\146\22\0"+ + "\2\150\20\0\2\150\2\0\3\150\3\0\1\150\1\0"+ + "\1\150\2\0\1\150\22\0\1\74\1\151\37\0\1\151"+ + "\21\0\5\143\1\152\56\143\2\0\1\153\37\0\1\153"+ + "\22\0\2\154\4\0\1\145\13\0\2\154\2\0\3\154"+ + "\3\0\1\154\1\0\1\154\2\0\1\154\22\0\2\155"+ + "\20\0\2\155\2\0\3\155\3\0\1\155\1\0\1\155"+ + "\2\0\1\155\22\0\2\156\4\0\1\145\13\0\2\156"+ + "\2\0\3\156\3\0\1\156\1\0\1\156\2\0\1\156"+ + "\22\0\2\157\20\0\2\157\2\0\3\157\3\0\1\157"+ + "\1\0\1\157\2\0\1\157\22\0\2\160\4\0\1\145"+ + "\13\0\2\160\2\0\3\160\3\0\1\160\1\0\1\160"+ + "\2\0\1\160\22\0\2\161\4\0\1\145\13\0\2\161"+ + "\2\0\3\161\3\0\1\161\1\0\1\161\2\0\1\161"+ + "\22\0\2\162\4\0\1\145\13\0\2\162\2\0\3\162"+ + "\3\0\1\162\1\0\1\162\2\0\1\162\22\0\2\163"+ + "\4\0\1\145\13\0\2\163\2\0\3\163\3\0\1\163"+ + "\1\0\1\163\2\0\1\163\22\0\2\163\4\0\1\147"+ + "\13\0\2\163\2\0\3\163\3\0\1\163\1\0\1\163"+ + "\2\0\1\163\21\0"; private static int [] zzUnpackTrans() { - int [] result = new int[2496]; + int [] result = new int[2704]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -323,11 +337,11 @@ class _RegExLexer implements FlexLexer { "\1\1\1\11\1\1\2\11\1\1\2\11\2\1\4\11"+ "\1\1\1\11\1\0\1\11\2\1\6\11\1\1\3\11"+ "\3\1\6\11\1\0\3\11\1\1\1\0\2\11\1\1"+ - "\1\11\5\1\4\11\1\0\1\1\2\11\3\1\2\11"+ - "\2\1\2\11"; + "\1\11\4\1\4\11\1\0\1\1\1\11\1\1\1\11"+ + "\2\1\2\11\3\1\1\11\4\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[112]; + int [] result = new int[115]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java index 9208a3239fc3..a09dc1f49c46 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHost.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ */ package org.intellij.lang.regexp; +import org.intellij.lang.regexp.psi.RegExpChar; import org.intellij.lang.regexp.psi.RegExpGroup; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,6 +29,7 @@ public interface RegExpLanguageHost { boolean supportsPossessiveQuantifiers(); boolean supportsPythonConditionalRefs(); boolean supportsNamedGroupSyntax(RegExpGroup group); + boolean supportsExtendedHexCharacter(RegExpChar regExpChar); boolean isValidCategory(@NotNull String category); @NotNull diff --git a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java index 943103a0dfc4..ec2b9192c2d5 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/RegExpLanguageHosts.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package org.intellij.lang.regexp; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.util.ClassExtension; import com.intellij.psi.PsiComment; import com.intellij.psi.PsiElement; @@ -73,6 +74,14 @@ public final class RegExpLanguageHosts extends ClassExtension Character.MAX_CODE_POINT) { + return null; + } return i-start < len && strict ? null : (char)sum; } catch (NumberFormatException e1) { return null; diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index af0eb9bb6329..828670fbacfc 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -7,8 +7,7 @@ import java.util.LinkedList; import java.util.EnumSet; import com.intellij.psi.StringEscapesTokenTypes; -// IDEADEV-11055 -@SuppressWarnings({ "ALL", "SameParameterValue", "WeakerAccess", "SameReturnValue", "RedundantThrows", "UnusedDeclaration", "UnusedDeclaration" }) +@SuppressWarnings("ALL") %% %class _RegExLexer @@ -120,12 +119,12 @@ HEX_CHAR=[0-9a-fA-F] {ESCAPE} {ESCAPE} { return RegExpTT.ESC_CHARACTER; } /* hex escapes */ -{ESCAPE} "x" {HEX_CHAR}{2} { return RegExpTT.HEX_CHAR; } -{ESCAPE} "x" {ANY}{0,2} { return RegExpTT.BAD_HEX_VALUE; } +{ESCAPE} "x" ({HEX_CHAR}{2}|{LBRACE}{HEX_CHAR}{1,6}{RBRACE}) { return RegExpTT.HEX_CHAR; } +{ESCAPE} "x" ({HEX_CHAR}?|{LBRACE}{HEX_CHAR}*{RBRACE}?) { return RegExpTT.BAD_HEX_VALUE; } /* unicode escapes */ {ESCAPE} "u" {HEX_CHAR}{4} { return RegExpTT.UNICODE_CHAR; } -{ESCAPE} "u" {ANY}{0,4} { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; } +{ESCAPE} "u" {HEX_CHAR}{0,3} { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; } /* octal escapes */ {ESCAPE} "0" [0-7]{1,3} { return RegExpTT.OCT_CHAR; } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java index d326d2c28557..fd0c716b56af 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/validation/RegExpAnnotator.java @@ -104,6 +104,13 @@ public final class RegExpAnnotator extends RegExpElementVisitor implements Annot registerFix(a, new RemoveRedundantEscapeAction(ch)); } } + if (ch.getType() == RegExpChar.Type.HEX) { + if (text.charAt(text.length() - 1) == '}') { + if (!myLanguageHosts.supportsExtendedHexCharacter(ch)) { + myHolder.createErrorAnnotation(ch, "This hex character syntax is not supported"); + } + } + } } } diff --git a/RegExpSupport/testData/RETest.xml b/RegExpSupport/testData/RETest.xml index 0a8d963a861b..64242dcde818 100644 --- a/RegExpSupport/testData/RETest.xml +++ b/RegExpSupport/testData/RETest.xml @@ -571,6 +571,14 @@ \x4a OK + + \x{0} + OK + + + \x{2011F} + OK + [\x4a-\x4b] OK @@ -771,6 +779,18 @@ abc\x1 ERR + + abc\x{ + ERR + + + abc\x{} + ERR + + + abc\x{0 + ERR + abc\u ERR diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java b/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java index 86ca15a074dd..daf6501443df 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaRegExpHost.java @@ -21,12 +21,16 @@ import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.psi.PsiElement; import org.intellij.lang.regexp.DefaultRegExpPropertiesProvider; import org.intellij.lang.regexp.RegExpLanguageHost; +import org.intellij.lang.regexp.psi.RegExpChar; import org.intellij.lang.regexp.psi.RegExpGroup; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.regex.Pattern; + /** * @author yole */ @@ -61,18 +65,30 @@ public class JavaRegExpHost implements RegExpLanguageHost { @Override public boolean supportsNamedGroupSyntax(RegExpGroup group) { if (group.isNamedGroup()) { - final Module module = ModuleUtilCore.findModuleForPsiElement(group); - if (module != null) { - final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); - if (sdk != null && sdk.getSdkType() instanceof JavaSdk) { - final JavaSdkVersion version = JavaSdk.getInstance().getVersion(sdk); - return version != null && version.isAtLeast(JavaSdkVersion.JDK_1_7); - } - } + final JavaSdkVersion version = getJavaVersion(group); + return version != null && version.isAtLeast(JavaSdkVersion.JDK_1_7); } return false; } + @Override + public boolean supportsExtendedHexCharacter(RegExpChar regExpChar) { + final JavaSdkVersion version = getJavaVersion(regExpChar); + return version != null && version.isAtLeast(JavaSdkVersion.JDK_1_7); + } + + @Nullable + private static JavaSdkVersion getJavaVersion(PsiElement element) { + final Module module = ModuleUtilCore.findModuleForPsiElement(element); + if (module != null) { + final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); + if (sdk != null && sdk.getSdkType() instanceof JavaSdk) { + return JavaSdk.getInstance().getVersion(sdk); + } + } + return null; + } + @Override public boolean isValidCategory(@NotNull String category) { return myPropertiesProvider.isValidCategory(category); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/regexp/GroovyRegExpHost.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/regexp/GroovyRegExpHost.java index c0f3616a08d2..cd05453d0cf8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/regexp/GroovyRegExpHost.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/regexp/GroovyRegExpHost.java @@ -17,7 +17,9 @@ package org.jetbrains.plugins.groovy.regexp; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; +import com.intellij.psi.PsiElement; import com.intellij.psi.impl.JavaRegExpHost; +import org.intellij.lang.regexp.psi.RegExpChar; import org.intellij.lang.regexp.psi.RegExpGroup; import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; @@ -29,12 +31,23 @@ public class GroovyRegExpHost extends JavaRegExpHost { @Override public boolean supportsNamedGroupSyntax(RegExpGroup group) { if (group.isNamedGroup()) { - final Module module = ModuleUtilCore.findModuleForPsiElement(group); - if (module != null) { - final String version = GroovyConfigUtils.getInstance().getSDKVersion(module); - return version != null && version.compareTo(GroovyConfigUtils.GROOVY2_0) >= 0; - } + final String version = getGroovyVersion(group); + return version != null && version.compareTo(GroovyConfigUtils.GROOVY2_0) >= 0; } return false; } + + @Override + public boolean supportsExtendedHexCharacter(RegExpChar regExpChar) { + final String version = getGroovyVersion(regExpChar); + return version != null && version.compareTo(GroovyConfigUtils.GROOVY2_0) >= 0; + } + + private static String getGroovyVersion(PsiElement element) { + final Module module = ModuleUtilCore.findModuleForPsiElement(element); + if (module == null) { + return null; + } + return GroovyConfigUtils.getInstance().getSDKVersion(module); + } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java b/python/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java index 24c4cca41467..1a1d2b29fa84 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyStringLiteralExpressionImpl.java @@ -36,6 +36,7 @@ import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.TypeEvalContext; import org.intellij.lang.regexp.DefaultRegExpPropertiesProvider; import org.intellij.lang.regexp.RegExpLanguageHost; +import org.intellij.lang.regexp.psi.RegExpChar; import org.intellij.lang.regexp.psi.RegExpGroup; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -466,6 +467,11 @@ public class PyStringLiteralExpressionImpl extends PyElementImpl implements PySt return group.isPythonNamedGroup(); } + @Override + public boolean supportsExtendedHexCharacter(RegExpChar regExpChar) { + return false; + } + @Override public boolean isValidCategory(@NotNull String category) { return myPropertiesProvider.isValidCategory(category); From cf0df7032707d7935f65cf74be9b8116799ed054 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Fri, 24 Oct 2014 13:59:34 +0400 Subject: [PATCH 168/217] Allow to switch between old layout and new one in the Settings dialog --- .../options/newEditor/SettingsEditor.java | 65 +++++++++++++------ .../util/resources/misc/registry.properties | 1 + 2 files changed, 46 insertions(+), 20 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java index 630f8ebfda25..b0b1a372e5f3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/SettingsEditor.java @@ -25,9 +25,12 @@ import com.intellij.openapi.options.ex.ConfigurableVisitor; import com.intellij.openapi.options.ex.ConfigurableWrapper; import com.intellij.openapi.options.ex.Settings; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.OnePixelDivider; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.registry.Registry; import com.intellij.ui.OnePixelSplitter; +import com.intellij.ui.border.CustomLineBorder; import com.intellij.ui.treeStructure.SimpleNode; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -171,28 +174,50 @@ final class SettingsEditor extends AbstractEditor implements DataProvider { } }; myBanner = new Banner(myEditor.getResetAction()); - myBanner.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10)); mySearch.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - mySearch.setBackground(myTreeView.myTree.getBackground()); - mySearch.addComponentListener(new ComponentAdapter() { - @Override - public void componentResized(ComponentEvent event) { - Dimension size = myBanner.getPreferredSize(); - size.height = mySearch.getHeight() - 5; - myBanner.setPreferredSize(size); - myBanner.setSize(size); - myBanner.revalidate(); - myBanner.repaint(); - } - }); - JPanel left = new JPanel(new BorderLayout()); - left.add(BorderLayout.NORTH, mySearch); - left.add(BorderLayout.CENTER, myTreeView); - - JPanel right = new JPanel(new BorderLayout()); - right.add(BorderLayout.NORTH, myBanner); - right.add(BorderLayout.CENTER, myEditor); + JComponent left = myTreeView; + JComponent right = myEditor; + if (Registry.is("ide.settings.old.style")) { + myBanner.setBorder(BorderFactory.createEmptyBorder(5, 10, 0, 10)); + mySearch.setBackground(myTreeView.myTree.getBackground()); + mySearch.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent event) { + Dimension size = myBanner.getPreferredSize(); + size.height = mySearch.getHeight() - 5; + myBanner.setPreferredSize(size); + myBanner.setSize(size); + myBanner.revalidate(); + myBanner.repaint(); + } + }); + left = new JPanel(new BorderLayout()); + left.add(BorderLayout.NORTH, mySearch); + left.add(BorderLayout.CENTER, myTreeView); + right = new JPanel(new BorderLayout()); + right.add(BorderLayout.NORTH, myBanner); + right.add(BorderLayout.CENTER, myEditor); + } + else { + myBanner.setBorder(BorderFactory.createEmptyBorder(5, 10, 5, 10)); + myTreeView.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent event) { + Dimension size = mySearch.getPreferredSize(); + size.width = myTreeView.getWidth(); + mySearch.setPreferredSize(size); + mySearch.setSize(size); + mySearch.revalidate(); + mySearch.repaint(); + } + }); + JPanel panel = new JPanel(new BorderLayout()); + panel.add(BorderLayout.WEST, mySearch); + panel.add(BorderLayout.CENTER, myBanner); + panel.setBorder(new CustomLineBorder(OnePixelDivider.BACKGROUND, 0, 0, 1, 0)); + add(BorderLayout.NORTH, panel); + } mySplitter = new OnePixelSplitter(false, myProperties.getFloat(SPLITTER_PROPORTION, .2f)); mySplitter.setHonorComponentsMinimumSize(true); mySplitter.setFirstComponent(left); diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index ead4ca8869bf..e5be37cd7b30 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -433,6 +433,7 @@ console.too.much.text.buffer.ratio=10 console.too.much.text.buffer.ratio.description=Used for disabling of console processing(console filters for highlights, foldings...),\n\ when there is too much of text to process.\n\ The ratio is used against the console cycle buffer size (idea.cycle.buffer.size/theRatio=maxTextLength). +ide.settings.old.style=true ide.new.settings.view=false ide.new.settings.view.description=New view for the Settings dialog ide.new.settings.dialog=true From 6ded66d2a88b550c5ce444083eea5d110001699e Mon Sep 17 00:00:00 2001 From: "Vladimir.Orlov" Date: Fri, 24 Oct 2014 14:42:04 +0400 Subject: [PATCH 169/217] corrected text of message from mac launcher in case if java deprecated. --- build/conf/mac/Contents/MacOS/idea | Bin 107644 -> 107644 bytes native/MacLauncher/Launcher.m | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/build/conf/mac/Contents/MacOS/idea b/build/conf/mac/Contents/MacOS/idea index db150d7edcceda4c60b37c12e3643f31c62aa8c6..837f29c3094796d595e9762acff2dc8aa6125c9f 100755 GIT binary patch delta 169 zcmex!g6+=P{#>w?& zy@P{sizlPmcH1DvvrLS>+qpv-Gqr(QwwE<9%7IMWKCO{)6C02*-K&Ff7KnbOQS=I62&kLI!q!+|7ns0tssmsWiyP3awqA63E z;O0de>KH+^(k3}hAU)Y>_dO7$v}Ybux!~qQdlq>Mh=1YRaO0u%(zUyt+1CHmIX>Az zT4Z|%2jdn`M)U2qL5yda7<0FChcaer1GQ`~YhaXP1Tm&HGHzl6GNyZVFwSDC5S;$3 PgE0$8Zx8BZ)RG1O{Zl|b diff --git a/native/MacLauncher/Launcher.m b/native/MacLauncher/Launcher.m index b0baa9254f42..9de15de97ada 100644 --- a/native/MacLauncher/Launcher.m +++ b/native/MacLauncher/Launcher.m @@ -113,7 +113,7 @@ void showWarning(NSString* installedJava){ NSAlert* alert = [[NSAlert alloc] init]; [alert addButtonWithTitle:@"Update"]; [alert addButtonWithTitle:@"Cancel"]; - NSString* message_description = [NSString stringWithFormat:@"%@%@%@",@"Java version: ", installedJava, @" which is installed on your mac is obsolete."]; + NSString* message_description = [NSString stringWithFormat:@"%@%@%@",@"Java version: ", installedJava, @" which is installed on your Mac is obsolete."]; NSString* message_suggestion = @"Would you like to update Java?"; NSString* informativeText =[NSString stringWithFormat:@"%@\n%@",message_description,message_suggestion]; [alert setMessageText:@"Java Update"]; From 21a02e97acee377ebdbcd8215dc0ad26b0f87179 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 24 Oct 2014 12:42:30 +0200 Subject: [PATCH 170/217] New welcome screen icons for AppCode and CLIon --- .../src/com/intellij/ide/actions/ImportProjectAction.java | 5 ++--- .../src/com/intellij/ide/actions/NewProjectAction.java | 5 ++--- .../src/com/intellij/ide/actions/OpenFileAction.java | 5 ++--- .../openapi/wm/impl/welcomeScreen/NewWelcomeScreen.java | 6 ++++++ .../openapi/wm/impl/welcomeScreen/GetFromVcsAction.java | 4 +--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java b/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java index 031a136a488c..70026f04fff5 100644 --- a/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java +++ b/java/idea-ui/src/com/intellij/ide/actions/ImportProjectAction.java @@ -16,9 +16,8 @@ package com.intellij.ide.actions; import com.intellij.icons.AllIcons; -import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen; /** * @author Dmitry Avdeev @@ -34,7 +33,7 @@ public class ImportProjectAction extends ImportModuleAction { @Override public void update(AnActionEvent e) { - if (e.getPlace() == ActionPlaces.WELCOME_SCREEN && Registry.is("ide.new.welcome.screen")) { + if (NewWelcomeScreen.isNewWelcomeScreen(e)) { e.getPresentation().setIcon(AllIcons.Welcome.ImportProject); } } diff --git a/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java b/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java index 2b904db1197e..8c99bb408305 100644 --- a/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java +++ b/java/idea-ui/src/com/intellij/ide/actions/NewProjectAction.java @@ -18,12 +18,11 @@ package com.intellij.ide.actions; import com.intellij.icons.AllIcons; import com.intellij.ide.impl.NewProjectUtil; import com.intellij.ide.projectWizard.NewProjectWizard; -import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; -import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen; import org.jetbrains.annotations.NotNull; public class NewProjectAction extends AnAction implements DumbAware { @@ -34,7 +33,7 @@ public class NewProjectAction extends AnAction implements DumbAware { @Override public void update(@NotNull AnActionEvent e) { - if (e.getPlace() == ActionPlaces.WELCOME_SCREEN && Registry.is("ide.new.welcome.screen")) { + if (NewWelcomeScreen.isNewWelcomeScreen(e)) { e.getPresentation().setIcon(AllIcons.Welcome.CreateNewProject); } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java b/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java index 795ae103e072..55d4474787a4 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/OpenFileAction.java @@ -18,7 +18,6 @@ package com.intellij.ide.actions; import com.intellij.icons.AllIcons; import com.intellij.ide.IdeBundle; import com.intellij.ide.impl.ProjectUtil; -import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationNamesInfo; @@ -36,10 +35,10 @@ import com.intellij.openapi.fileTypes.ex.FileTypeChooser; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.wm.impl.welcomeScreen.NewWelcomeScreen; import com.intellij.platform.PlatformProjectOpenProcessor; import com.intellij.projectImport.ProjectAttachProcessor; import com.intellij.util.Consumer; @@ -73,7 +72,7 @@ public class OpenFileAction extends AnAction implements DumbAware { @Override public void update(@NotNull AnActionEvent e) { - if (e.getPlace() == ActionPlaces.WELCOME_SCREEN && Registry.is("ide.new.welcome.screen")) { + if (NewWelcomeScreen.isNewWelcomeScreen(e)) { e.getPresentation().setIcon(AllIcons.Welcome.OpenProject); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewWelcomeScreen.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewWelcomeScreen.java index a899f8bb681c..2994fede233a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewWelcomeScreen.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/NewWelcomeScreen.java @@ -28,10 +28,12 @@ import com.intellij.openapi.updateSettings.impl.UpdateChecker; import com.intellij.openapi.updateSettings.impl.UpdateSettings; import com.intellij.openapi.util.DimensionService; import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.WelcomeScreen; import com.intellij.ui.ScreenUtil; import com.intellij.ui.components.labels.LinkLabel; import com.intellij.ui.components.labels.LinkListener; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.border.EmptyBorder; @@ -146,6 +148,10 @@ public class NewWelcomeScreen extends JPanel implements WelcomeScreen { @Override public void dispose() { } + + public static boolean isNewWelcomeScreen(@NotNull AnActionEvent e) { + return e.getPlace() == ActionPlaces.WELCOME_SCREEN && Registry.is("ide.new.welcome.screen"); + } private static class WelcomeScreenGroup extends DefaultActionGroup { private WelcomeScreenGroup(Icon icon, String text, AnAction... actions) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java index 87d53cfc8800..70970c1f79a3 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/GetFromVcsAction.java @@ -16,11 +16,9 @@ package com.intellij.openapi.wm.impl.welcomeScreen; import com.intellij.icons.AllIcons; -import com.intellij.openapi.actionSystem.ActionPlaces; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vcs.CheckoutProvider; import com.intellij.openapi.vcs.checkout.CheckoutAction; import com.intellij.ui.UIBundle; @@ -53,7 +51,7 @@ public class GetFromVcsAction extends WelcomePopupAction{ @Override public void update(AnActionEvent e) { e.getPresentation().setEnabled(Extensions.getExtensions(CheckoutProvider.EXTENSION_POINT_NAME).length > 0); - if (e.getPlace() == ActionPlaces.WELCOME_SCREEN && Registry.is("ide.new.welcome.screen")) { + if (NewWelcomeScreen.isNewWelcomeScreen(e)) { e.getPresentation().setIcon(AllIcons.Welcome.FromVCS); } } From afc829cc0d1a20078cdf1186aecfee69e9e66f60 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 22 Oct 2014 19:24:07 +0400 Subject: [PATCH 171/217] cleanup --- .../intellij/psi/stubs/StubSerializer.java | 20 +------------------ .../DefaultFileTypeSpecificInputFilter.java | 3 ++- .../impl/EditorGutterComponentImpl.java | 1 - .../openapi/editor/impl/FoldRegionsTree.java | 12 +++++------ .../impl/stores/DirectoryStorageData.java | 2 +- 5 files changed, 10 insertions(+), 28 deletions(-) diff --git a/platform/core-api/src/com/intellij/psi/stubs/StubSerializer.java b/platform/core-api/src/com/intellij/psi/stubs/StubSerializer.java index fa0591d670f7..b6ca536d32e2 100644 --- a/platform/core-api/src/com/intellij/psi/stubs/StubSerializer.java +++ b/platform/core-api/src/com/intellij/psi/stubs/StubSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,26 +15,8 @@ */ package com.intellij.psi.stubs; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; - -import java.io.IOException; - /* * @author max */ public interface StubSerializer extends ObjectStubSerializer { - @Override - @NotNull - @NonNls - String getExternalId(); - - @Override - void serialize(@NotNull T stub, @NotNull StubOutputStream dataStream) throws IOException; - @NotNull - @Override - T deserialize(@NotNull StubInputStream dataStream, final StubElement parentStub) throws IOException; - - @Override - void indexStub(@NotNull T stub, @NotNull IndexSink sink); } \ No newline at end of file diff --git a/platform/indexing-api/src/com/intellij/util/indexing/DefaultFileTypeSpecificInputFilter.java b/platform/indexing-api/src/com/intellij/util/indexing/DefaultFileTypeSpecificInputFilter.java index 903c5c4992be..6161352bc134 100644 --- a/platform/indexing-api/src/com/intellij/util/indexing/DefaultFileTypeSpecificInputFilter.java +++ b/platform/indexing-api/src/com/intellij/util/indexing/DefaultFileTypeSpecificInputFilter.java @@ -21,12 +21,13 @@ import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; public class DefaultFileTypeSpecificInputFilter implements FileBasedIndex.FileTypeSpecificInputFilter { - private FileType[] myFileTypes; + private final FileType[] myFileTypes; public DefaultFileTypeSpecificInputFilter(@NotNull FileType... fileTypes) { myFileTypes = fileTypes; } + @Override public void registerFileTypesUsedForIndexing(@NotNull Consumer fileTypeSink) { for(FileType ft:myFileTypes) fileTypeSink.consume(ft); } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index f09f02257507..17c37d822fe2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -504,7 +504,6 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse lastEditorHighlighter = null; } - assert lowerHighlighter != null; if (!lowerHighlighter.isValid()) continue; int startLineIndex = lowerHighlighter.getDocument().getLineNumber(startOffset); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java index c001f6548106..32e31900b804 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/FoldRegionsTree.java @@ -43,7 +43,7 @@ abstract class FoldRegionsTree { //sorted using RangeMarker.BY_START_OFFSET comparator //i.e., first by start offset, then, if start offsets are equal, by end offset - private ArrayList myRegions = ContainerUtil.newArrayList(); + private List myRegions = ContainerUtil.newArrayList(); private static final Comparator BY_END_OFFSET = new Comparator() { @Override @@ -86,9 +86,9 @@ abstract class FoldRegionsTree { protected abstract boolean isBatchFoldingProcessing(); void rebuild() { - ArrayList topLevels = new ArrayList(myRegions.size() / 2); - ArrayList visible = new ArrayList(myRegions.size()); - ArrayList allValid = new ArrayList(myRegions.size()); + List topLevels = new ArrayList(myRegions.size() / 2); + List visible = new ArrayList(myRegions.size()); + List allValid = new ArrayList(myRegions.size()); FoldRegion[] regions = toFoldArray(myRegions); FoldRegion currentCollapsed = null; for (FoldRegion region : regions) { @@ -182,7 +182,7 @@ abstract class FoldRegionsTree { } } - boolean addRegion(FoldRegion range) { + boolean addRegion(@NotNull FoldRegion range) { // During batchProcessing elements are inserted in ascending order, // binary search find acceptable insertion place first time boolean canUseCachedValue = false; @@ -321,7 +321,7 @@ abstract class FoldRegionsTree { return toFoldArray(myRegions); } - void removeRegion(FoldRegion range) { + void removeRegion(@NotNull FoldRegion range) { myRegions.remove(range); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java index 9d2da8b2e002..c340efe73113 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java @@ -48,7 +48,7 @@ public class DirectoryStorageData extends StorageDataBase { this(new THashMap()); } - DirectoryStorageData(@NotNull Map states) { + private DirectoryStorageData(@NotNull Map states) { myStates = states; } From cdfa4af9f05de319257306ca6f42740744fc5e11 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 22 Oct 2014 19:33:12 +0400 Subject: [PATCH 172/217] IDEA-131395 --- .../editor/richcopy/TextWithMarkupProcessor.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java index 504496a27716..c153350eaf03 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/TextWithMarkupProcessor.java @@ -654,7 +654,17 @@ public class TextWithMarkupProcessor extends CopyPastePostProcessor Date: Thu, 23 Oct 2014 16:34:37 +0400 Subject: [PATCH 173/217] run tests locally --- .../plugins/groovy/compiler/GroovyDebuggerTest.groovy | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy index aa7885cf22fe..f3fe8a27c670 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy @@ -64,11 +64,8 @@ class GroovyDebuggerTest extends GroovyCompilerTestCase { @Override protected void setUp() { - edt { - super.setUp() - addGroovyLibrary(myModule); - } - + super.setUp() + addGroovyLibrary(myModule); } @Override From ffa9347899181aa8ae0741884b331ed6700c115b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 23 Oct 2014 18:35:18 +0400 Subject: [PATCH 174/217] leak --- .../openapi/editor/impl/EditorLastActionTrackerImpl.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorLastActionTrackerImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorLastActionTrackerImpl.java index e86e86247610..291becf7be43 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorLastActionTrackerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorLastActionTrackerImpl.java @@ -22,7 +22,9 @@ import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.EditorLastActionTracker; -import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.editor.event.EditorEventMulticaster; +import com.intellij.openapi.editor.event.EditorMouseEvent; +import com.intellij.openapi.editor.event.EditorMouseListener; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Key; import org.jetbrains.annotations.NotNull; @@ -129,7 +131,7 @@ public class EditorLastActionTrackerImpl extends EditorLastActionTracker impleme return; } EditorImpl editorImpl = (EditorImpl)editor; - if (editorImpl.replace(DISPOSABLE_SET, null, Boolean.TRUE)) { + if (!editorImpl.isDisposed() && editorImpl.replace(DISPOSABLE_SET, null, Boolean.TRUE)) { Disposer.register(editorImpl.getDisposable(), new Disposable() { @Override public void dispose() { From a43eb4243516f4789e35800e5edae1644fd57c57 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 24 Oct 2014 13:16:17 +0400 Subject: [PATCH 175/217] cleanup --- .../impl/smartPointers/SelfElementInfo.java | 27 ++++++++++--------- .../SmartPsiElementPointerImpl.java | 18 +++++++------ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 748a98ead7de..7ebf149d7122 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -38,13 +38,13 @@ import java.lang.ref.SoftReference; public class SelfElementInfo implements SmartPointerElementInfo { protected final VirtualFile myVirtualFile; private Reference myMarkerRef; // create marker only in case of live document - private int mySyncStartOffset; - private int mySyncEndOffset; - protected boolean mySyncMarkerIsValid; + private volatile int mySyncStartOffset; + private volatile int mySyncEndOffset; + protected volatile boolean mySyncMarkerIsValid; private final Class myType; protected final Project myProject; @SuppressWarnings({"UnusedDeclaration"}) - private RangeMarker myRangeMarker; //maintain hard reference during modification + private volatile RangeMarker myRangeMarker; //maintains hard reference during modification protected final Language myLanguage; protected SelfElementInfo(@NotNull Project project, @NotNull PsiElement anchor) { @@ -90,7 +90,9 @@ public class SelfElementInfo implements SmartPointerElementInfo { // before change @Override public void fastenBelt(int offset, @Nullable RangeMarker[] cachedRangeMarkers) { - if (!mySyncMarkerIsValid) return; + if (!mySyncMarkerIsValid) { + return; + } RangeMarker marker = getMarker(); int actualEndOffset = marker == null || !marker.isValid() ? getSyncEndOffset() : marker.getEndOffset(); if (offset > actualEndOffset) { @@ -115,13 +117,16 @@ public class SelfElementInfo implements SmartPointerElementInfo { } } } - else { + if (marker == null) { marker = document.createRangeMarker(start, end, true); } } setMarker(marker); } - else if (!marker.isValid()) { + else if (marker.isValid()) { + setRange(marker); + } + else { mySyncMarkerIsValid = false; setMarker(null); marker = null; @@ -132,7 +137,9 @@ public class SelfElementInfo implements SmartPointerElementInfo { // after change @Override public void unfastenBelt(int offset) { - if (!mySyncMarkerIsValid) return; + if (!mySyncMarkerIsValid) { + return; + } RangeMarker marker = getMarker(); if (marker != null) { if (marker.isValid()) { @@ -210,10 +217,6 @@ public class SelfElementInfo implements SmartPointerElementInfo { myMarkerRef = marker == null ? null : new SoftReference(marker); } - @Nullable - public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project) { - return restoreFileFromVirtual(virtualFile, project, null); - } @Nullable public static PsiFile restoreFileFromVirtual(final VirtualFile virtualFile, @NotNull final Project project, @Nullable final Language language) { if (virtualFile == null) return null; diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java index 9e755ad5a615..ac37bf8f7aed 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,22 +42,24 @@ class SmartPsiElementPointerImpl implements SmartPointerEx private final Class myElementClass; private byte myReferenceCount; - public SmartPsiElementPointerImpl(@NotNull Project project, @NotNull E element, @Nullable PsiFile containingFile) { + SmartPsiElementPointerImpl(@NotNull Project project, @NotNull E element, @Nullable PsiFile containingFile) { this(element, createElementInfo(project, element, containingFile), element.getClass()); } - public SmartPsiElementPointerImpl(@NotNull E element, - @NotNull SmartPointerElementInfo elementInfo, - @NotNull Class elementClass) { + SmartPsiElementPointerImpl(@NotNull E element, + @NotNull SmartPointerElementInfo elementInfo, + @NotNull Class elementClass) { ApplicationManager.getApplication().assertReadAccessAllowed(); cacheElement(element); myElementClass = elementClass; myElementInfo = elementInfo; } + @Override public boolean equals(Object obj) { return obj instanceof SmartPsiElementPointer && pointsToTheSameElementAs(this, (SmartPsiElementPointer)obj); } + @Override public int hashCode() { return myElementInfo.elementHashCode(); } @@ -125,6 +127,9 @@ class SmartPsiElementPointerImpl implements SmartPointerEx @NotNull static SmartPointerElementInfo createElementInfo(@NotNull Project project, @NotNull E element, PsiFile containingFile) { + if (element instanceof PsiDirectory) { + return new DirElementInfo((PsiDirectory)element); + } if (element instanceof PsiCompiledElement || containingFile == null || !containingFile.isPhysical() || !element.isPhysical()) { if (element instanceof StubBasedPsiElement && element instanceof PsiCompiledElement) { if (element instanceof PsiFile) { @@ -137,9 +142,6 @@ class SmartPsiElementPointerImpl implements SmartPointerEx } return new HardElementInfo(project, element); } - if (element instanceof PsiDirectory) { - return new DirElementInfo((PsiDirectory)element); - } for(SmartPointerElementInfoFactory factory: Extensions.getExtensions(SmartPointerElementInfoFactory.EP_NAME)) { final SmartPointerElementInfo result = factory.createElementInfo(element); From 3b3389171e2d8136acf64e191a5eb78281faaf14 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 24 Oct 2014 14:34:59 +0400 Subject: [PATCH 176/217] IDEA-130337 --- .../SmartPsiElementPointersTest.java | 35 ++++++ .../psi/impl/PsiDocumentManagerBase.java | 72 +++++++----- .../SmartPointerManagerImpl.java | 111 +++++++++++------- .../psi/impl/file/impl/PsiVFSListener.java | 9 +- 4 files changed, 151 insertions(+), 76 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java index 12c94d2a4299..24c55c48f618 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/smartPointers/SmartPsiElementPointersTest.java @@ -18,6 +18,7 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.JavaTestUtil; import com.intellij.codeInsight.CodeInsightTestCase; import com.intellij.ide.highlighter.JavaFileType; +import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.editor.event.DocumentEvent; @@ -25,6 +26,7 @@ import com.intellij.openapi.editor.event.DocumentListener; import com.intellij.openapi.editor.event.EditorEventMulticaster; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.StdFileTypes; +import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; @@ -37,12 +39,14 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtilBase; import com.intellij.testFramework.IdeaTestUtil; import com.intellij.testFramework.PlatformTestCase; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.PsiTestUtil; import com.intellij.util.FileContentUtil; import gnu.trove.THashSet; import org.junit.Assert; import java.io.IOException; +import java.lang.ref.SoftReference; import java.util.Collections; import java.util.Set; @@ -434,4 +438,35 @@ public class SmartPsiElementPointersTest extends CodeInsightTestCase { } } } + + public void testSmartPointersSurvivePsiFileUnload() throws IOException { + final VirtualFile vfile = myRoot.createChildData(this, "X.txt"); + String xxx = "xxx"; + String text = xxx + " " + xxx + " " + xxx; + VfsUtil.saveText(vfile, text); + PsiFile psiFile = PsiManager.getInstance(getProject()).findFile(vfile); + assertTrue(String.valueOf(psiFile), psiFile instanceof PsiPlainTextFile); + SmartPointerManagerImpl manager = (SmartPointerManagerImpl)SmartPointerManager.getInstance(myProject); + TextRange range1 = TextRange.from(text.indexOf(xxx), xxx.length()); + SmartPsiFileRange pointer1 = manager.createSmartPsiFileRangePointer(psiFile, range1); + TextRange range2 = TextRange.from(text.lastIndexOf(xxx), xxx.length()); + SmartPsiFileRange pointer2 = manager.createSmartPsiFileRangePointer(psiFile, range2); + assertNotNull(FileDocumentManager.getInstance().getCachedDocument(vfile)); + + SoftReference ref = new SoftReference(psiFile); + psiFile = null; + while (ref.get() != null) { + PlatformTestUtil.tryGcSoftlyReachableObjects(); + } + assertNull(FileDocumentManager.getInstance().getCachedDocument(vfile)); + assertEquals(pointer1.getRange(), range1); + WriteCommandAction.runWriteCommandAction(getProject(), new Runnable() { + @Override + public void run() { + FileDocumentManager.getInstance().getDocument(vfile).insertString(0, " "); + } + }); + assertEquals(range1.shiftRight(1), pointer1.getRange()); + assertEquals(range2.shiftRight(1), pointer2.getRange()); + } } diff --git a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java index 66d40a98f532..9935bc4f45bd 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java +++ b/platform/core-impl/src/com/intellij/psi/impl/PsiDocumentManagerBase.java @@ -136,9 +136,19 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen @Nullable public FileViewProvider getCachedViewProvider(@NotNull Document document) { + final VirtualFile virtualFile = getVirtualFile(document); + if (virtualFile == null) return null; + return getCachedViewProvider(virtualFile); + } + + private FileViewProvider getCachedViewProvider(@NotNull VirtualFile virtualFile) { + return ((PsiManagerEx)myPsiManager).getFileManager().findCachedViewProvider(virtualFile); + } + + private static VirtualFile getVirtualFile(@NotNull Document document) { final VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document); if (virtualFile == null || !virtualFile.isValid()) return null; - return ((PsiManagerEx)myPsiManager).getFileManager().findCachedViewProvider(virtualFile); + return virtualFile; } @Nullable @@ -321,7 +331,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen } myLastCommittedTexts.remove(document); viewProvider.contentsSynchronized(); - } else { + } + else { handleCommitWithoutPsi(document); } } @@ -588,12 +599,19 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen myLastCommittedTexts.put(document, document.getImmutableCharSequence()); } - final FileViewProvider viewProvider = getCachedViewProvider(document); - if (viewProvider == null) return; - if (!isRelevant(viewProvider)) return; + VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document); + boolean isBulk = document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate(); - VirtualFile virtualFile = viewProvider.getVirtualFile(); - if (virtualFile.getFileType().isBinary()) return; + boolean isRelevant = virtualFile != null && isRelevant(virtualFile); + if (!isBulk && isRelevant) { + mySmartPointerManager.fastenBelts(virtualFile, event.getOffset(), null); + } + + final FileViewProvider viewProvider = getCachedViewProvider(document); + boolean inMyProject = viewProvider != null && viewProvider.getManager() == myPsiManager; + if (!isRelevant || !inMyProject) { + return; + } final List files = viewProvider.getAllFiles(); PsiFile psiCause = null; @@ -601,9 +619,6 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen if (file == null) { throw new AssertionError("View provider "+viewProvider+" ("+viewProvider.getClass()+") returned null in its files array: "+files+" for file "+viewProvider.getVirtualFile()); } - if (!(document instanceof DocumentEx) || !((DocumentEx)document).isInBulkUpdate()) { - mySmartPointerManager.fastenBelts(file, event.getOffset(), null); - } if (mySynchronizer.isInsideAtomicChange(file)) { psiCause = file; @@ -623,12 +638,21 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen @Override public void documentChanged(DocumentEvent event) { final Document document = event.getDocument(); + VirtualFile virtualFile = FileDocumentManager.getInstance().getFile(document); + boolean isBulk = document instanceof DocumentEx && ((DocumentEx)document).isInBulkUpdate(); + + boolean isRelevant = virtualFile != null && isRelevant(virtualFile); + if (!isBulk && isRelevant) { + mySmartPointerManager.unfastenBelts(virtualFile, event.getOffset()); + } + final FileViewProvider viewProvider = getCachedViewProvider(document); if (viewProvider == null) { handleCommitWithoutPsi(document); return; } - if (!isRelevant(viewProvider)) { + boolean inMyProject = viewProvider.getManager() == myPsiManager; + if (!isRelevant || !inMyProject) { myLastCommittedTexts.remove(document); return; } @@ -637,9 +661,6 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen final List files = viewProvider.getAllFiles(); boolean commitNecessary = true; for (PsiFile file : files) { - if (!(document instanceof DocumentEx) || !((DocumentEx)document).isInBulkUpdate()) { - mySmartPointerManager.unfastenBelts(file, event.getOffset()); - } if (mySynchronizer.isInsideAtomicChange(file)) { commitNecessary = false; @@ -679,24 +700,17 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen @Override public void updateStarted(@NotNull Document document) { - final FileViewProvider viewProvider = getCachedViewProvider(document); - if (viewProvider == null || !isRelevant(viewProvider)) return; + final VirtualFile virtualFile = getVirtualFile(document); + if (virtualFile == null || !isRelevant(virtualFile)) return; - final List files = viewProvider.getAllFiles(); - for (PsiFile file : files) { - mySmartPointerManager.fastenBelts(file, 0, null); - } + mySmartPointerManager.fastenBelts(virtualFile, 0, null); } @Override public void updateFinished(@NotNull Document document) { - final FileViewProvider viewProvider = getCachedViewProvider(document); - if (viewProvider == null || !isRelevant(viewProvider)) return; - - final List files = viewProvider.getAllFiles(); - for (PsiFile file : files) { - mySmartPointerManager.unfastenBelts(file, 0); - } + final VirtualFile virtualFile = getVirtualFile(document); + if (virtualFile == null || !isRelevant(virtualFile)) return; + mySmartPointerManager.unfastenBelts(virtualFile, 0); } public void handleCommitWithoutPsi(@NotNull Document document) { @@ -740,10 +754,8 @@ public abstract class PsiDocumentManagerBase extends PsiDocumentManager implemen }); } - private boolean isRelevant(@NotNull FileViewProvider viewProvider) { - VirtualFile virtualFile = viewProvider.getVirtualFile(); + private boolean isRelevant(@NotNull VirtualFile virtualFile) { return !virtualFile.getFileType().isBinary() && - viewProvider.getManager() == myPsiManager && !myPsiManager.getProject().isDisposed(); } diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java index 8476372d57e4..aad577c6ca95 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,51 +25,63 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.ProperTextRange; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; +import com.intellij.psi.impl.PsiManagerEx; import com.intellij.psi.impl.source.tree.MarkersHolderFileViewProvider; import com.intellij.reference.SoftReference; import com.intellij.util.containers.UnsafeWeakList; +import gnu.trove.THashMap; +import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import java.lang.ref.Reference; import java.util.List; +import java.util.Map; +import java.util.Set; public class SmartPointerManagerImpl extends SmartPointerManager { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.smartPointers.SmartPointerManagerImpl"); - private static final Key> SMART_POINTERS_IN_PSI_FILE_KEY = Key.create("SMART_POINTERS_IN_PSI_FILE_KEY"); - private static final Key BELTS_ARE_FASTEN_KEY = Key.create("BELTS_ARE_FASTEN_KEY"); - private final Project myProject; private final Object lock = new Object(); + private final Map> pointers = new THashMap>(); + private final Set fastenedFiles = new THashSet(); public SmartPointerManagerImpl(Project project) { myProject = project; } - public void fastenBelts(@NotNull PsiFile file, int offset, @Nullable RangeMarker[] cachedRangeMarkers) { + public void fastenBelts(@NotNull VirtualFile file, int offset, @Nullable RangeMarker[] cachedRangeMarkers) { + ApplicationManager.getApplication().assertIsDispatchThread(); synchronized (lock) { - if (areBeltsFastened(file)) return; - - file.putUserData(BELTS_ARE_FASTEN_KEY, Boolean.TRUE); - List pointers = getPointers(file); if (pointers == null) return; - PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(file.getProject()); - for (SmartPointerEx pointer : pointers) { - if (pointer != null) { - pointer.fastenBelt(offset, cachedRangeMarkers); + if (getAndFasten(file)) return; + + if (pointers.isEmpty()) { + this.pointers.remove(file); + } + else { + for (SmartPointerEx pointer : pointers) { + if (pointer != null) { + pointer.fastenBelt(offset, cachedRangeMarkers); + } } } - for (DocumentWindow injectedDoc : InjectedLanguageManager.getInstance(myProject).getCachedInjectedDocuments(file)) { - PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc); - if (injectedFile == null) continue; - RangeMarker[] cachedMarkers = getCachedRangeMarkerToInjectedFragment(injectedFile); - fastenBelts(injectedFile, 0, cachedMarkers); + PsiFile psiFile = ((PsiManagerEx)PsiManager.getInstance(myProject)).getFileManager().getCachedPsiFile(file); + if (psiFile != null) { + PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(myProject); + for (DocumentWindow injectedDoc : InjectedLanguageManager.getInstance(myProject).getCachedInjectedDocuments(psiFile)) { + PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc); + if (injectedFile == null) continue; + RangeMarker[] cachedMarkers = getCachedRangeMarkerToInjectedFragment(injectedFile); + fastenBelts(injectedFile.getViewProvider().getVirtualFile(), 0, cachedMarkers); + } } } } @@ -80,24 +92,33 @@ public class SmartPointerManagerImpl extends SmartPointerManager { return provider.getCachedMarkers(); } - public void unfastenBelts(@NotNull PsiFile file, int offset) { + public void unfastenBelts(@NotNull VirtualFile file, int offset) { + ApplicationManager.getApplication().assertIsDispatchThread(); synchronized (lock) { - PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(file.getProject()); - file.putUserData(BELTS_ARE_FASTEN_KEY, null); - List pointers = getPointers(file); if (pointers == null) return; - for (SmartPointerEx pointer : pointers) { - if (pointer != null) { - pointer.unfastenBelt(offset); + if (!getAndUnfasten(file)) return; + + if (pointers.isEmpty()) { + this.pointers.remove(file); + } + else { + for (SmartPointerEx pointer : pointers) { + if (pointer != null) { + pointer.unfastenBelt(offset); + } } } - for (DocumentWindow injectedDoc : InjectedLanguageManager.getInstance(myProject).getCachedInjectedDocuments(file)) { - PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc); - if (injectedFile == null) continue; - unfastenBelts(injectedFile, 0); + PsiFile psiFile = ((PsiManagerEx)PsiManager.getInstance(myProject)).getFileManager().getCachedPsiFile(file); + if (psiFile != null) { + PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(myProject); + for (DocumentWindow injectedDoc : InjectedLanguageManager.getInstance(myProject).getCachedInjectedDocuments(psiFile)) { + PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc); + if (injectedFile == null) continue; + unfastenBelts(injectedFile.getViewProvider().getVirtualFile(), 0); + } } } } @@ -119,13 +140,15 @@ public class SmartPointerManagerImpl extends SmartPointerManager { SmartPointerEx pointer = getCachedPointer(element); if (pointer != null) { containingFile = containingFile == null ? element.getContainingFile() : containingFile; - if (containingFile != null && areBeltsFastened(containingFile)) { + if (containingFile != null && areBeltsFastened(containingFile.getViewProvider().getVirtualFile())) { pointer.fastenBelt(0, null); } } else { pointer = new SmartPsiElementPointerImpl(myProject, element, containingFile); - initPointer(pointer, containingFile); + if (containingFile != null) { + initPointer(pointer, containingFile.getViewProvider().getVirtualFile()); + } element.putUserData(CACHED_SMART_POINTER_KEY, new SoftReference(pointer)); } if (pointer instanceof SmartPsiElementPointerImpl) { @@ -156,18 +179,17 @@ public class SmartPointerManagerImpl extends SmartPointerManager { LOG.error("Invalid element:" + file); } SmartPsiFileRangePointerImpl pointer = new SmartPsiFileRangePointerImpl(file, ProperTextRange.create(range)); - initPointer(pointer, file); + initPointer(pointer, file.getViewProvider().getVirtualFile()); return pointer; } - private void initPointer(@NotNull SmartPointerEx pointer, PsiFile containingFile) { - if (containingFile == null) return; + private void initPointer(@NotNull SmartPointerEx pointer, @NotNull VirtualFile containingFile) { synchronized (lock) { List pointers = getPointers(containingFile); if (pointers == null) { pointers = new UnsafeWeakList(); // we synchronise access anyway - containingFile.putUserData(SMART_POINTERS_IN_PSI_FILE_KEY, pointers); + this.pointers.put(containingFile, pointers); } pointers.add(pointer); @@ -189,7 +211,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { } PsiFile containingFile = pointer.getContainingFile(); if (containingFile == null) return false; - List pointers = getPointers(containingFile); + List pointers = getPointers(containingFile.getViewProvider().getVirtualFile()); if (pointers == null) return false; SmartPointerElementInfo info = ((SmartPsiElementPointerImpl)pointer).getElementInfo(); info.cleanup(); @@ -200,22 +222,27 @@ public class SmartPointerManagerImpl extends SmartPointerManager { return false; } - private static List getPointers(@NotNull PsiFile containingFile) { - return containingFile.getUserData(SMART_POINTERS_IN_PSI_FILE_KEY); + private List getPointers(@NotNull VirtualFile containingFile) { + return pointers.get(containingFile); } @TestOnly public int getPointersNumber(@NotNull PsiFile containingFile) { synchronized (lock) { - List pointers = getPointers(containingFile); + List pointers = getPointers(containingFile.getViewProvider().getVirtualFile()); return pointers == null ? 0 : ((UnsafeWeakList)pointers).toStrongList().size(); } } - private static boolean areBeltsFastened(@NotNull PsiFile file) { - return file.getUserData(BELTS_ARE_FASTEN_KEY) == Boolean.TRUE; + private boolean getAndFasten(@NotNull VirtualFile file) { + return !fastenedFiles.add(file); + } + private boolean getAndUnfasten(@NotNull VirtualFile file) { + return fastenedFiles.remove(file); + } + private boolean areBeltsFastened(VirtualFile file) { + return fastenedFiles.contains(file); } - @Override public boolean pointToTheSameElement(@NotNull SmartPsiElementPointer pointer1, @NotNull SmartPsiElementPointer pointer2) { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java index 8b629875209b..b39c052ffb4b 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/file/impl/PsiVFSListener.java @@ -29,7 +29,10 @@ import com.intellij.openapi.fileTypes.FileTypeListener; import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.*; +import com.intellij.openapi.roots.ModuleRootEvent; +import com.intellij.openapi.roots.ModuleRootListener; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.impl.PushedFilePropertiesUpdater; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.io.FileUtilRt; @@ -333,9 +336,7 @@ public class PsiVFSListener extends VirtualFileAdapter { if (!fire) return; // do not fire event if parent directory was never accessed via PSI } - if (oldPsiFile != null && oldPsiFile.isPhysical()) { - ((SmartPointerManagerImpl)SmartPointerManager.getInstance(myManager.getProject())).fastenBelts(oldPsiFile, 0, null); - } + ((SmartPointerManagerImpl)SmartPointerManager.getInstance(myManager.getProject())).fastenBelts(vFile, 0, null); ApplicationManager.getApplication().runWriteAction( new ExternalChangeAction() { @Override From 952093c1449a85258aa40c8b4c9078117c9674a5 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 24 Oct 2014 12:50:10 +0400 Subject: [PATCH 177/217] 1px block scope indicator: deepness=0 --- .../codeInsight/highlighting/BraceHighlightingHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java index 5daaac4bfe16..5064592b6c8b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java @@ -560,7 +560,7 @@ public class BraceHighlightingHandler { } private static class MyLineMarkerRenderer implements LineMarkerRenderer { - private static final int DEEPNESS = 2; + private static final int DEEPNESS = 0; private static final int THICKNESS = 1; private final Color myColor; From 9a26b660ea515015226998fd3203be99657def51 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 24 Oct 2014 14:44:34 +0400 Subject: [PATCH 178/217] scope indicator: better handling for dark schemas --- .../codeInsight/highlighting/BraceHighlightingHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java index 5064592b6c8b..3cb63404963b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java @@ -440,7 +440,7 @@ public class BraceHighlightingHandler { if (myProject.isDisposed() || myEditor.isDisposed()) return; Color color = attributes.getBackgroundColor(); if (color == null) return; - color = ColorUtil.isDark(EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground()) ? ColorUtil.shift(color, 1.1d) : color.darker(); + color = ColorUtil.isDark(EditorColorsManager.getInstance().getGlobalScheme().getDefaultBackground()) ? ColorUtil.shift(color, 1.5d) : color.darker(); lineMarkFragment(startLine, endLine, color); } }; From 6986c9f33cc05f3c25247d01209228950a40f9e6 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 24 Oct 2014 14:51:31 +0400 Subject: [PATCH 179/217] version control gutter stripes: paint without borders --- colorSchemes/src/colorSchemes/Darcula.xml | 4 +-- .../src/DefaultColorSchemesManager.xml | 6 ++-- .../vcs/ex/LineStatusTrackerDrawing.java | 35 ++++--------------- 3 files changed, 12 insertions(+), 33 deletions(-) diff --git a/colorSchemes/src/colorSchemes/Darcula.xml b/colorSchemes/src/colorSchemes/Darcula.xml index d04e32a17f22..bf0d584c0771 100644 --- a/colorSchemes/src/colorSchemes/Darcula.xml +++ b/colorSchemes/src/colorSchemes/Darcula.xml @@ -12,7 +12,7 @@ + + \pL\pM\pZ\pS\pN\pP\pC\PL\PM\PZ\PS\PN\PP\PC + OK + + + \pA + ERR + + + \pl + ERR + a\p ERR From 80bb2de00e90bf3bb7a485288fc3ecd70d754e7e Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 15:10:01 +0400 Subject: [PATCH 181/217] fixed wording --- .../plugins/coursecreator/actions/CCCreateCourseArchive.java | 2 +- .../src/com/jetbrains/python/edu/editor/StudyEditor.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateCourseArchive.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateCourseArchive.java index 28cd7f40ba89..c201e4ddaee4 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateCourseArchive.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCCreateCourseArchive.java @@ -44,7 +44,7 @@ public class CCCreateCourseArchive extends DumbAwareAction { } public CCCreateCourseArchive() { - super("Generate course archive", "Generate course archive", AllIcons.FileTypes.Archive); + super("Generate Course Archive", "Generate Course Archive", AllIcons.FileTypes.Archive); } @Override diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java index 1a06e7ade6ab..1ce2194a8e03 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/editor/StudyEditor.java @@ -193,7 +193,7 @@ public class StudyEditor implements TextEditor { private void initializeButtons(@NotNull final JPanel taskActionsPanel, @NotNull final TaskFile taskFile) { myCheckButton = addButton(taskActionsPanel, "Check task", StudyIcons.Resolve); - myPrevTaskButton = addButton(taskActionsPanel, "Prev Task", StudyIcons.Prev); + myPrevTaskButton = addButton(taskActionsPanel, "Previous Task", StudyIcons.Prev); myNextTaskButton = addButton(taskActionsPanel, "Next Task", AllIcons.Actions.Forward); myRefreshButton = addButton(taskActionsPanel, "Start task again", AllIcons.Actions.Refresh); if (!taskFile.getTask().getUserTests().isEmpty()) { From eb3f8b19800d58d24d4aa13b8a1b56f06f157893 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 15:24:26 +0400 Subject: [PATCH 182/217] updated course archive --- .../resources/courses/introduction_course.zip | Bin 95411 -> 95307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/python/edu/learn-python/resources/courses/introduction_course.zip b/python/edu/learn-python/resources/courses/introduction_course.zip index d6578cafb773cf03b68b3be96d1a86d7f731257a..b945e3372b0d5816f122725b01471cd958890421 100644 GIT binary patch delta 15635 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 From 1c5bad945fda7079ee67ccecf7c50c84458f4b5f Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Fri, 24 Oct 2014 15:35:40 +0400 Subject: [PATCH 183/217] javadoc --- platform/core-api/src/com/intellij/psi/ResolvingHint.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platform/core-api/src/com/intellij/psi/ResolvingHint.java b/platform/core-api/src/com/intellij/psi/ResolvingHint.java index 4eb98d3c6bc3..49b2fe3aca94 100644 --- a/platform/core-api/src/com/intellij/psi/ResolvingHint.java +++ b/platform/core-api/src/com/intellij/psi/ResolvingHint.java @@ -17,6 +17,9 @@ package com.intellij.psi; /** + * CAUTION: this is a workaround to fix java method searcher performance. + * This can be removed in future if the searcher is fixed to obey {@link com.intellij.psi.PsiReference#isReferenceTo(PsiElement)} contract. + * * Can be implemented by {@link com.intellij.psi.PsiReference} * @author Dmitry Avdeev */ From e48f0dccafe2d3fd7b728b069eee6bb0d4c63948 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Fri, 24 Oct 2014 14:33:05 +0400 Subject: [PATCH 184/217] IDEA-131495 Add implementation of PsiTreeChangePreprocessor for JSON Without it all modifications of JSON PSI were considered as "inside code block" and thus were not refelected in structure view. --- .../psi/impl/JsonTreeChangePreprocessor.java | 82 +++++++++++++++++++ .../structureView/JsonStructureViewModel.java | 3 +- .../src/META-INF/JsonPlugin.xml | 1 + 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 json/src/com/intellij/json/psi/impl/JsonTreeChangePreprocessor.java diff --git a/json/src/com/intellij/json/psi/impl/JsonTreeChangePreprocessor.java b/json/src/com/intellij/json/psi/impl/JsonTreeChangePreprocessor.java new file mode 100644 index 000000000000..5f51296b37d9 --- /dev/null +++ b/json/src/com/intellij/json/psi/impl/JsonTreeChangePreprocessor.java @@ -0,0 +1,82 @@ +package com.intellij.json.psi.impl; + +import com.intellij.json.JsonLanguage; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.PsiFileSystemItem; +import com.intellij.psi.impl.PsiManagerImpl; +import com.intellij.psi.impl.PsiModificationTrackerImpl; +import com.intellij.psi.impl.PsiTreeChangeEventImpl; +import com.intellij.psi.impl.PsiTreeChangePreprocessor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author Mikhail Golubev + */ +public class JsonTreeChangePreprocessor implements PsiTreeChangePreprocessor { + /** + * @see com.intellij.psi.impl.PsiTreeChangePreprocessorBase#treeChanged(com.intellij.psi.impl.PsiTreeChangeEventImpl) + */ + @Override + public void treeChanged(@NotNull PsiTreeChangeEventImpl event) { + final PsiElement element = event.getParent(); + if (element == null || !(element.getManager() instanceof PsiManagerImpl)) { + return; + } + final PsiModificationTrackerImpl modificationTracker = (PsiModificationTrackerImpl)element.getManager().getModificationTracker(); + boolean changedInsideCodeBlock = false; + + switch (event.getCode()) { + case BEFORE_CHILDREN_CHANGE: + if (event.getParent() instanceof PsiFile) { + changedInsideCodeBlock = true; + break; + } + + case CHILDREN_CHANGED: + if (event.isGenericChange()) { + return; + } + changedInsideCodeBlock = isInsideCodeBlock(event.getParent()); + break; + + case BEFORE_CHILD_ADDITION: + case BEFORE_CHILD_REMOVAL: + case CHILD_ADDED: + case CHILD_REMOVED: + changedInsideCodeBlock = isInsideCodeBlock(event.getParent()); + break; + + case BEFORE_PROPERTY_CHANGE: + case PROPERTY_CHANGED: + changedInsideCodeBlock = false; + break; + + case BEFORE_CHILD_REPLACEMENT: + case CHILD_REPLACED: + changedInsideCodeBlock = isInsideCodeBlock(event.getParent()); + break; + + case BEFORE_CHILD_MOVEMENT: + case CHILD_MOVED: + changedInsideCodeBlock = isInsideCodeBlock(event.getOldParent()) && isInsideCodeBlock(event.getNewParent()); + break; + } + + if (!changedInsideCodeBlock) { + modificationTracker.incOutOfCodeBlockModificationCounter(); + } + } + + private boolean isInsideCodeBlock(@Nullable PsiElement element) { + if (element instanceof PsiFileSystemItem) { + return false; + } + if (element == null || element.getParent() == null) { + return true; + } + // Consider all elements of JSON PSI as externally visible, i.e. they are out of code block + return !(element.getLanguage() instanceof JsonLanguage); + } +} diff --git a/json/src/com/intellij/json/structureView/JsonStructureViewModel.java b/json/src/com/intellij/json/structureView/JsonStructureViewModel.java index 19aca25684c1..ecc577767c8f 100644 --- a/json/src/com/intellij/json/structureView/JsonStructureViewModel.java +++ b/json/src/com/intellij/json/structureView/JsonStructureViewModel.java @@ -34,8 +34,7 @@ public class JsonStructureViewModel extends StructureViewModelBase implements St @Override public boolean isAutoExpand(@NotNull StructureViewTreeElement element) { - final Object value = element.getValue(); - return value instanceof PsiFile || value instanceof JsonProperty || value instanceof JsonObject; + return true; } @Override diff --git a/platform/platform-resources/src/META-INF/JsonPlugin.xml b/platform/platform-resources/src/META-INF/JsonPlugin.xml index 62ade0b9a446..deeec3ad3fa2 100644 --- a/platform/platform-resources/src/META-INF/JsonPlugin.xml +++ b/platform/platform-resources/src/META-INF/JsonPlugin.xml @@ -18,6 +18,7 @@ + From 18f44e47fcd2e097d9103e3e5b901573b2664ed1 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Oct 2014 10:43:41 +0200 Subject: [PATCH 185/217] cleanup --- .../openapi/util/registry/RegistryState.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/util/registry/RegistryState.java b/platform/platform-api/src/com/intellij/openapi/util/registry/RegistryState.java index cf10656a24ed..73743f86d796 100644 --- a/platform/platform-api/src/com/intellij/openapi/util/registry/RegistryState.java +++ b/platform/platform-api/src/com/intellij/openapi/util/registry/RegistryState.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -25,21 +25,18 @@ import java.util.SortedMap; import java.util.TreeMap; @State( - name = "Registry", - storages = { - @Storage( - file = StoragePathMacros.APP_CONFIG + "/other.xml")} + name = "Registry", + storages = @Storage(file = StoragePathMacros.APP_CONFIG + "/other.xml") ) public class RegistryState implements BaseComponent, PersistentStateComponent { private static final Logger LOG = Logger.getInstance(RegistryState.class); - public RegistryState() { - } - + @Override public Element getState() { return Registry.getInstance().getState(); } + @Override public void loadState(Element state) { Registry.getInstance().loadState(state); SortedMap userProperties = new TreeMap(Registry.getInstance().getUserProperties()); @@ -52,14 +49,17 @@ public class RegistryState implements BaseComponent, PersistentStateComponent Date: Fri, 24 Oct 2014 12:12:17 +0200 Subject: [PATCH 186/217] js debug: run should allow run any browser --- .../browsers/actions/OpenFileInDefaultBrowserAction.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java index 1ead1b6faeb4..482e22aa896f 100644 --- a/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java +++ b/xml/impl/src/com/intellij/ide/browsers/actions/OpenFileInDefaultBrowserAction.java @@ -24,11 +24,12 @@ import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.xml.util.HtmlUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class OpenFileInDefaultBrowserAction extends DumbAwareAction { @Override - public void update(AnActionEvent e) { + public void update(@NotNull AnActionEvent e) { Presentation presentation = e.getPresentation(); Pair result = BaseOpenInBrowserAction.doUpdate(e); @@ -63,7 +64,7 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction { } @Nullable - private static WebBrowser findUsingBrowser() { + public static WebBrowser findUsingBrowser() { WebBrowserManager browserManager = WebBrowserManager.getInstance(); DefaultBrowserPolicy defaultBrowserPolicy = browserManager.getDefaultBrowserPolicy(); if (defaultBrowserPolicy == DefaultBrowserPolicy.FIRST || (defaultBrowserPolicy == DefaultBrowserPolicy.SYSTEM && !BrowserLauncherAppless.canUseSystemDefaultBrowserPolicy())) { @@ -86,7 +87,7 @@ public class OpenFileInDefaultBrowserAction extends DumbAwareAction { } @Override - public void actionPerformed(AnActionEvent e) { + public void actionPerformed(@NotNull AnActionEvent e) { BaseOpenInBrowserAction.open(e, findUsingBrowser()); } } From 067ad070b5f233be3ce4c2b9f5f0ddc12d96311b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Oct 2014 13:11:53 +0200 Subject: [PATCH 187/217] cleanup --- .../ChooseComponentsToExportDialog.java | 18 +++++++----------- .../ide/actions/ImportSettingsAction.java | 17 +++++++++-------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java b/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java index 4e2d2c8a7a3f..d9e7b50403ea 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ChooseComponentsToExportDialog.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.FieldPanel; import com.intellij.util.Consumer; import com.intellij.util.containers.MultiMap; +import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -63,7 +64,6 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { myDescription = description; myShowFilePath = showFilePath; Map componentToContainingListElement = new LinkedHashMap(); - for (ExportableComponent component : fileToComponents.values()) { if (!addToExistingListElement(component, componentToContainingListElement, fileToComponents)) { ComponentElementProperties componentElementProperties = new ComponentElementProperties(); @@ -72,10 +72,9 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { componentToContainingListElement.put(component, componentElementProperties); } } - final Set componentElementProperties = new LinkedHashSet(componentToContainingListElement.values()); myChooser = new ElementsChooser(true); myChooser.setColorUnmarkedElements(false); - for (final ComponentElementProperties componentElementProperty : componentElementProperties) { + for (ComponentElementProperties componentElementProperty : new LinkedHashSet(componentToContainingListElement.values())) { myChooser.addElement(componentElementProperty, true, componentElementProperty); } myChooser.sort(new Comparator() { @@ -149,7 +148,7 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { } private static boolean addToExistingListElement(@NotNull ExportableComponent component, - Map componentToContainingListElement, + @NotNull Map componentToContainingListElement, @NotNull MultiMap fileToComponents) { File file = null; for (File exportFile : component.getExportFiles()) { @@ -236,9 +235,8 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { } Set getExportableComponents() { - final List markedElements = myChooser.getMarkedElements(); - final Set components = new HashSet(); - for (ComponentElementProperties elementProperties : markedElements) { + Set components = new THashSet(); + for (ComponentElementProperties elementProperties : myChooser.getMarkedElements()) { components.addAll(elementProperties.myComponents); } return components; @@ -265,11 +263,9 @@ public class ChooseComponentsToExportDialog extends DialogWrapper { public String toString() { Set names = new LinkedHashSet(); - - for (final ExportableComponent component : myComponents) { + for (ExportableComponent component : myComponents) { names.add(component.getPresentableName()); } - return StringUtil.join(names.toArray(new String[names.size()]), ", "); } } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java index fa57b995cd9c..3945fe2b522e 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ImportSettingsAction.java @@ -35,6 +35,7 @@ import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.updateSettings.impl.UpdateSettings; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.util.Consumer; import com.intellij.util.containers.MultiMap; import com.intellij.util.io.ZipUtil; @@ -80,10 +81,10 @@ public class ImportSettingsAction extends AnAction implements DumbAware { return; } - MultiMap filesToComponents = ExportSettingsAction.getExportableComponentsMap(false); - List components = getComponentsStored(saveFile, filesToComponents.values()); - filesToComponents.values().retainAll(components); - final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(filesToComponents, false, + MultiMap fileToComponents = ExportSettingsAction.getExportableComponentsMap(false, true); + List components = getComponentsStored(saveFile, fileToComponents.values()); + fileToComponents.values().retainAll(components); + final ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(fileToComponents, false, IdeBundle.message("title.select.components.to.import"), IdeBundle.message("prompt.check.components.to.import")); if (!dialog.showAndGet()) { @@ -150,13 +151,13 @@ public class ImportSettingsAction extends AnAction implements DumbAware { @NotNull private static List getComponentsStored(@NotNull File zipFile, @NotNull Collection registeredComponents) throws IOException { - final File configPath = new File(PathManager.getConfigPath()); - final ArrayList components = new ArrayList(); + File configPath = new File(PathManager.getConfigPath()); + List components = new ArrayList(); for (ExportableComponent component : registeredComponents) { for (File exportFile : component.getExportFiles()) { - final String rPath = FileUtil.getRelativePath(configPath, exportFile); + String rPath = FileUtilRt.getRelativePath(configPath, exportFile); assert rPath != null; - String relativePath = FileUtil.toSystemIndependentName(rPath); + String relativePath = FileUtilRt.toSystemIndependentName(rPath); if (exportFile.isDirectory()) { relativePath += '/'; } From 8c75f34907f61c9dbc179aa24d3ca13c173ab2c5 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Oct 2014 13:15:05 +0200 Subject: [PATCH 188/217] =?UTF-8?q?don't=20compute=20presentable=20name=20?= =?UTF-8?q?if=20not=20needed,=20add=20additional=20name=20as=20as=20key=20?= =?UTF-8?q?to=20map=20also=20settings=20repository=20=E2=80=94=20correctly?= =?UTF-8?q?=20get=20roaming=20type=20=E2=80=94=20item=20is=20not=20compone?= =?UTF-8?q?nt,=20it=20is=20just=20wrapper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ide/actions/ExportSettingsAction.java | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java index a0d35ea70d2b..e5267bfc74c0 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ExportSettingsAction.java @@ -63,7 +63,7 @@ public class ExportSettingsAction extends AnAction implements DumbAware { public void actionPerformed(@Nullable AnActionEvent e) { ApplicationManager.getApplication().saveSettings(); - ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(getExportableComponentsMap(true), true, + ChooseComponentsToExportDialog dialog = new ChooseComponentsToExportDialog(getExportableComponentsMap(true, true), true, IdeBundle.message("title.select.components.to.export"), IdeBundle.message( "prompt.please.check.all.components.to.export")); @@ -77,7 +77,7 @@ public class ExportSettingsAction extends AnAction implements DumbAware { } Set exportFiles = new THashSet(FileUtil.FILE_HASHING_STRATEGY); - for (final ExportableComponent markedComponent : markedComponents) { + for (ExportableComponent markedComponent : markedComponents) { ContainerUtil.addAll(exportFiles, markedComponent.getExportFiles()); } @@ -136,7 +136,7 @@ public class ExportSettingsAction extends AnAction implements DumbAware { } @NotNull - public static MultiMap getExportableComponentsMap(final boolean onlyExisting) { + public static MultiMap getExportableComponentsMap(final boolean onlyExisting, final boolean computePresentableNames) { ExportableApplicationComponent[] components1 = ApplicationManager.getApplication().getComponents(ExportableApplicationComponent.class); List components2 = ServiceBean.loadServicesFromBeans(ExportableComponent.EXTENSION_POINT, ExportableComponent.class); final MultiMap result = MultiMap.createLinkedSet(); @@ -204,7 +204,15 @@ public class ExportSettingsAction extends AnAction implements DumbAware { else { files = fileExists ? new File[]{file, additionalExportFile} : new File[]{additionalExportFile}; } - result.putValue(file, new MyExportableComponent(files, getExportableComponentPresentableName(stateAnnotation, aClass, pluginDescriptor))); + ExportableComponentItem item = new ExportableComponentItem(files, + computePresentableNames + ? getComponentPresentableName(stateAnnotation, aClass, pluginDescriptor) + : "", + storage.roamingType()); + result.putValue(file, item); + if (additionalExportFile != null) { + result.putValue(additionalExportFile, item); + } } } } @@ -215,7 +223,7 @@ public class ExportSettingsAction extends AnAction implements DumbAware { } @NotNull - private static String getExportableComponentPresentableName(@NotNull State state, @NotNull Class aClass, @Nullable PluginDescriptor pluginDescriptor) { + private static String getComponentPresentableName(@NotNull State state, @NotNull Class aClass, @Nullable PluginDescriptor pluginDescriptor) { if (state.presentableName() != State.NameGetter.class) { try { return ReflectionUtil.newInstance(state.presentableName()).get(); @@ -249,13 +257,15 @@ public class ExportSettingsAction extends AnAction implements DumbAware { return defaultName; } - private static final class MyExportableComponent implements ExportableComponent { + public static final class ExportableComponentItem implements ExportableComponent { private final File[] files; private final String name; + private final RoamingType roamingType; - public MyExportableComponent(@NotNull File[] files, @NotNull String name) { + public ExportableComponentItem(@NotNull File[] files, @NotNull String name, @NotNull RoamingType roamingType) { this.files = files; this.name = name; + this.roamingType = roamingType; } @NotNull @@ -269,6 +279,11 @@ public class ExportSettingsAction extends AnAction implements DumbAware { public String getPresentableName() { return name; } + + @NotNull + public RoamingType getRoamingType() { + return roamingType; + } } } From b412f2e296a76ccd7db7ffa7226dac95180583e3 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Fri, 24 Oct 2014 13:39:21 +0200 Subject: [PATCH 189/217] CR-IC-6500#c33030 add missed nullability annotations --- .../intellij/ide/plugins/RepositoryHelper.java | 2 +- .../updateSettings/impl/PluginDownloader.java | 18 +++++++++--------- .../updateSettings/impl/UpdateChecker.java | 2 +- .../intellij/util/io/UrlConnectionUtil.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java b/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java index 09132fb032ac..64bb3e8c88e4 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/RepositoryHelper.java @@ -164,7 +164,7 @@ public class RepositoryHelper { } private synchronized static List readPluginsStream(@NotNull URLConnection connection, - ProgressIndicator indicator, + @Nullable ProgressIndicator indicator, @NotNull String file) throws Exception { File localFile; InputStream input = getConnectionInputStream(connection); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java index 2d1069e26eb1..f5f9429b8cf5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/PluginDownloader.java @@ -98,7 +98,7 @@ public class PluginDownloader { return prepareToInstall(pi, myBuildNumber); } - public boolean prepareToInstall(@Nullable ProgressIndicator pi, @Nullable BuildNumber forBuildNumber) throws IOException { + public boolean prepareToInstall(@Nullable ProgressIndicator progressIndicator, @Nullable BuildNumber forBuildNumber) throws IOException { if (myFile != null) { return true; } @@ -118,7 +118,7 @@ public class PluginDownloader { // download plugin String errorMessage = IdeBundle.message("unknown.error"); try { - myFile = downloadPlugin(pi); + myFile = downloadPlugin(progressIndicator); } catch (IOException ex) { myFile = null; @@ -236,15 +236,15 @@ public class PluginDownloader { } } - private File downloadPlugin(@Nullable final ProgressIndicator pi) throws IOException { + private File downloadPlugin(@Nullable final ProgressIndicator progressIndicator) throws IOException { final File pluginsTemp = new File(PathManager.getPluginTempPath()); if (!pluginsTemp.exists() && !pluginsTemp.mkdirs()) { throw new IOException(IdeBundle.message("error.cannot.create.temp.dir", pluginsTemp)); } final File file = FileUtil.createTempFile(pluginsTemp, "plugin_", "_download", true, false); - if (pi != null) { - pi.setText(IdeBundle.message("progress.connecting")); + if (progressIndicator != null) { + progressIndicator.setText(IdeBundle.message("progress.connecting")); } URLConnection connection = null; @@ -252,19 +252,19 @@ public class PluginDownloader { connection = openConnection(myPluginUrl); final InputStream is = (ApplicationManager.getApplication() != null) - ? UrlConnectionUtil.getConnectionInputStream(connection, pi) + ? UrlConnectionUtil.getConnectionInputStream(connection, progressIndicator) : connection.getInputStream(); if (is == null) { throw new IOException("Failed to open connection"); } - if (ApplicationManager.getApplication() != null && pi != null) { - pi.setText(IdeBundle.message("progress.downloading.plugin", getPluginName())); + if (progressIndicator != null && ApplicationManager.getApplication() != null) { + progressIndicator.setText(IdeBundle.message("progress.downloading.plugin", getPluginName())); } try { final OutputStream fos = new BufferedOutputStream(new FileOutputStream(file, false)); try { - NetUtils.copyStreamContent(pi, is, fos, connection.getContentLength()); + NetUtils.copyStreamContent(progressIndicator, is, fos, connection.getContentLength()); } finally { fos.close(); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java index f72fed2b53fc..6e879427859a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java @@ -273,7 +273,7 @@ public final class UpdateChecker { Map downloaded, Collection incompatiblePlugins, boolean collectToUpdate, - ProgressIndicator indicator) throws IOException { + @Nullable ProgressIndicator indicator) throws IOException { final String pluginId = downloader.getPluginId(); final String pluginVersion = downloader.getPluginVersion(); if (collectToUpdate && PluginManagerCore.getDisabledPlugins().contains(pluginId)) return; diff --git a/platform/platform-impl/src/com/intellij/util/io/UrlConnectionUtil.java b/platform/platform-impl/src/com/intellij/util/io/UrlConnectionUtil.java index 198ead74eeec..3b1e7049942d 100644 --- a/platform/platform-impl/src/com/intellij/util/io/UrlConnectionUtil.java +++ b/platform/platform-impl/src/com/intellij/util/io/UrlConnectionUtil.java @@ -38,7 +38,7 @@ public class UrlConnectionUtil { public static @Nullable - InputStream getConnectionInputStream(URLConnection connection, ProgressIndicator pi) { + InputStream getConnectionInputStream(URLConnection connection, @Nullable ProgressIndicator pi) { try { return getConnectionInputStreamWithException(connection, pi); } From a7a38b79ef65c866617bac3d6fac5eac31cac17c Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 15:56:10 +0400 Subject: [PATCH 190/217] updated course archive --- .../resources/courses/introduction_course.zip | Bin 95307 -> 95357 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/python/edu/learn-python/resources/courses/introduction_course.zip b/python/edu/learn-python/resources/courses/introduction_course.zip index b945e3372b0d5816f122725b01471cd958890421..eeec61f492b7091ed876586ab623b1618ff1cc29 100644 GIT binary patch delta 20174 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 From d77655240e8449668e71edc66fec78cff820618e Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 15:58:46 +0400 Subject: [PATCH 191/217] typo --- .../src/com/jetbrains/python/edu/StudyInstructionPainter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java index 4fa323172bcc..b78111b442c8 100644 --- a/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java +++ b/python/edu/learn-python/src/com/jetbrains/python/edu/StudyInstructionPainter.java @@ -33,7 +33,7 @@ public class StudyInstructionPainter extends EditorEmptyTextPainter { painter.appendLine("Reset current task file with Ctrl + Shift + X").smaller().withBullet(); painter.appendLine("Check task with Alt + Ctrl + Enter").smaller().withBullet(); painter.appendLine("Get hint for the task window using Ctrl + 7").smaller().withBullet(); - painter.appendLine("To see your progress open the 'Course Description' panel").smaller().withBullet(); + painter.appendLine("To see your progress, open the 'Course Description' panel").smaller().withBullet(); painter.draw(g, new PairFunction>() { @Override public Couple fun(Integer width, Integer height) { From d301dbeed59326fbe4aeedc84b859c9c31a22e51 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 16:04:00 +0400 Subject: [PATCH 192/217] removed ipython notebook plugin from edu edition gant --- python/edu/build/plugin-list.txt | 3 +-- python/edu/build/pycharm_edu_build.gant | 3 --- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/python/edu/build/plugin-list.txt b/python/edu/build/plugin-list.txt index d5735f0ccdfb..821bdc6aca4b 100644 --- a/python/edu/build/plugin-list.txt +++ b/python/edu/build/plugin-list.txt @@ -6,5 +6,4 @@ IntelliLang IntelliLang-python learn-python course-creator -hg4idea -ipnb \ No newline at end of file +hg4idea \ No newline at end of file diff --git a/python/edu/build/pycharm_edu_build.gant b/python/edu/build/pycharm_edu_build.gant index f3ccc666a68e..356df8c7d4c7 100644 --- a/python/edu/build/pycharm_edu_build.gant +++ b/python/edu/build/pycharm_edu_build.gant @@ -217,9 +217,6 @@ private layoutPlugins(layouts) { } } layouts.layoutPlugin("course-creator") - layouts.layoutPlugin("ipnb") { - fileset(dir: "$pythonCommunityHome/ipnb/lib") - } } layouts.layoutCommunityPlugins(ch) From 9ff8f95f791314656b5646ac573a9c075db16b93 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 16:10:09 +0400 Subject: [PATCH 193/217] fix compilation --- .../jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java | 1 - 1 file changed, 1 deletion(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java index a54fee7a8ec9..e66569592f1f 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java @@ -65,7 +65,6 @@ public class CCAddTaskWindow extends DumbAwareAction { taskFile.addTaskWindow(taskWindow, index); taskWindow.drawHighlighter(editor, false); taskWindow.createGuardedBlocks(editor); - DaemonCodeAnalyzerImpl.getInstance(project).restart(file); } @Override From 0b00c3cee683b1b118ba66d702be052d86a6c82e Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 16:11:04 +0400 Subject: [PATCH 194/217] updated splash for pycharm edu (EDU-251 ) --- .../actions/CCAddTaskWindow.java | 1 - python/edu/resources/pycharm_edu_about.png | Bin 86973 -> 82352 bytes python/edu/resources/pycharm_edu_about@2x.png | Bin 193243 -> 195460 bytes python/edu/resources/pycharm_edu_logo.png | Bin 102281 -> 92152 bytes python/edu/resources/pycharm_edu_logo@2x.png | Bin 223425 -> 221940 bytes 5 files changed, 1 deletion(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java index e66569592f1f..6c2635fc2273 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCAddTaskWindow.java @@ -1,6 +1,5 @@ package org.jetbrains.plugins.coursecreator.actions; -import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.Presentation; diff --git a/python/edu/resources/pycharm_edu_about.png b/python/edu/resources/pycharm_edu_about.png index f3312ac6b3c85ec92db6b5cfc0f91f867f78acfb..3f4bb8ce13ec4044f4170ff4886c080d8c83f653 100644 GIT binary patch literal 82352 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
    >2(1f)+QxZyO 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%0Atw+9u$>% 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�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 z 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�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�_-1!*eYC>j`PcMccmE)S1e{3DZ0kk49I z*?O8kJhh9}EF@=2ejH(%E5r$SnFE)yZ8;9GWTrd{#R$ z*+!?kX4;bFAX);`4p*ZN-+#LE?_Voz6(j#Ge}X-&m&v83pL=@Kk(t*JbfaUKh3QkZ zuP$O6m$OBrTpdi3>tAE7W}3~&R=L7fS@AT?b}{eh5C$=kbBMyUxF==JRzi(>$L(qA z1m5*Rwg{OdCng3Tvy>)5GfHuZ`$D<>6WV#;0ky-#`bK*r-IjPt`$=5hQoqY4;TNx@ zlIF+DUW<#je|LV`dBAuD_{~|F8grBv*SbMYT9ODGr;NB!*P7 zB_&%?4izw8(Evc^g6U>r3?>Ie`tiJJG^rNR0ON+V+ zB;N{IfdT*C?sCMCUsAVi*L7y~Ee1{P8&ZDv%GOqj_EI`B1%hpQ!fUep^q(4_AxaW; zgV?h|!A`c>(sxzw(p!LPQ+}M+%-v&1{_%u(DoI#Lw?sEY4j>6>oez3N{$S5RFi17r zQkdsK!lbW)SN4?!r^CQbSl~?86R{dHMy2Ll5H8`MX&exsNHEhqP3+XK3KHD87b7o< z#Vxtgh$E)h{iXF1K2o)rBiB^eJ`1L|_;9iRWh&BkfoaG(=9W|s(I3c}11Y0IS0L7? zVW{y{W&Aw}5=J2!*^!gA1J%z*%^o3gP$PNI=2T{$Vn0Z`PD>6Vl3APm%#Ca$ATP#7PeaT zTM@#u3~1awa8}kp6}4z)7bkG78_ePQJ<)c@nxAEb^XRdb_Ou3SD%U^I0&9|x7s|6% z39b%TQQYRjVzqIQ_=8J$B%l;v@Hx&><=5}89eyW?71C9S90(Sjh?o{P) zm{p*q|HP#2_9hp)g*;0}V`f7EdRxXHtVG+LtXF)3e@i?|u4Ae6`^Bu9#!$G8E;>NS zmL^5_gA7)xp1WM06Vjs6g;!OMMBj0X*7$j37p>|WCrP+er>uA z22{BtEdzdrbRF5PmwvAX*P{Mt4Oy%eDg}DWU1qBiizw@i4Ov3;2M)4hY4}Vm89#-n zLj5Y0{J<+s7(vuHvfK}aCB^Zo#sR0-^vOR(smcjTW}uNPw9}D;i^u-fWh->z$98g~ z6!S1lTq&vTu4iMkqcU`J4BS$)ku;%>=*rfLe{;gcxXkzm)d4DeGoTvzLvs)2vt{_e zvwhA7>$pk6d6@-rTd^gHzm7o|nR=-OU!j|hpd0#xhh1+~3qHn7-M8hpv0@b90PbC+Y8#l2UVuI)gU!WxMn+7|$HLGOBL$X}&1+`dk%WiNt)} zlHo7dc9f9N-Sr>4Sq|_5P<~`%+C2&&k|F;(s8j+(Pp@b^-RY|)r6t2l5DMZLhQtHR zg-G9-{naAHSSFKfV(&-OIh~}DVwwKmQ4FtU%OA#&@Hl8e#A@d7moRHUc;-tPsDkC? zA0oKXCRrI!D$5s;Z#umfECepi8scp$cMVswnM$0V$Vw8)VqcOuDj{nEa!Ij|5>e8` zo#r6oXYDSKaD{8&VI_hpabu2=>iwD*Guj&AULo6$D6jGd`j5sdv--0@t2-)5d<2z~ zU_$Hd(-5qEEQw-t@dDmjo%hI?+DB~|10{HyUTMteKY=1_K`vfly0ZuP$K?`si2&(4 zmKMDDTsAYdX7X%l4y1|xVd#f_3^pIuUKJkED}(yZxI*fcO^2L}-Dtdq;1P|pTs^tU zrj*;Pw2>y5F0(dS$CK&nMSD)WNh7p%0HFR4C_GuW&Tu0Cdl6Ax`kaOZR2I}%X#Tfo zzFiCAA7pyi{X;lZK|#`ncB{{Qj#eW9NKh0v!7W}D%8<~!7ByjLu+;iZ$vss*<#1ia z!9s3~>j&eCg#!OGJ7_+g&>uy&AD&#j4t=U4woc3~3{%>!FOvIm>+<7`PS^=5XIllr zAtFus(zHo_4&An1#-;Vwjo=s~U{RrOM*=D2BwU!T$Hd6hsOljR&J8J6r0zxy^v9f8 zn=S}S)7PD?4v`GZWCE^I`T~yJfdYxBmEP$d?6y~1M9?tDOz5|U zD5G)Zq>%wZ03|M!dG)BP$_#QaK$-vvQOYvary7vDa~_rLrJsOzmV%~&IYz*$VMe`J zD%YTjXGF^>n7E{d@`Bui*k3yS=VMp3%6-X$#R%4PP9oEi-$+`qK0}1(z53boG8cg~ zL@hj1tpsb&tSb3IxIA(wI$Kt7i(?^UDhJhmzytaEG5(2w07M!Ck2G;(u0e6>74gat zwskVrvLSf>dsisoPUv5x)zW%+d84cbJHwz-^OQ;a14fdPp@4&q>@OY)@-DH1Bu`)1)^y8J@VHdhsQniCnceP4`^M3QI-0v>}F^W~ci(DyMHoZUEJ_uRDw!(^4a`}oC9Yi1e1Y|9cinr+ z0gzWx_>x=(7%Ty5SORCG_32dznkI$I&5Vj_5@XnK5KXaVWtoT<+3~Y?QpxkaeKXmB zf*SG=V&f^(h34_*I{|A`!~6jXRIq0S+z@Zms0q4hTDEPPR%?*H*d~4Hqy-{@LnS9N zks5;*TET8H!7F-XU5>uZHgPJsO} zD1}D*9t`Yvg9vhyw(ZYGjgIc4o-j3;~5{ykVLs`dx1`#v@IXzrI zNV@mTnn+cWeBnYh&}GlPt>R7(UTYyorowi zfPXQZsJ8=WzLm!>{DNG#0@w8dK&Q&L02XdIUKd(?D=DPcpPKP2G z5feaF8t=osmJUukGDWIW&KKcfc&OEMsVqwhI^+-nm+N*5Sz5|~+Ia#_AcK&78uXW5 zZLe??`rxl8-=u(w%1X*;LfM)S)pDw_m9k`fL`$Sr0fhK_Gk&}2_D}z~GWVzfZe!^h z&opCU$P$Dmf~ZKc_iRA{av`6JPxmjrMcBIx33x1)S-yCX-e()M7Fnxgn8I+rWRbJw z(9KXO5SNjfW}=1k^a#v(f738wLJg=jeS8Gl5IvzPEpz`3wGc>$x)QOPC4U+#j@3L` zoB2zUzSK}vHNY`uwW%w!HHS`+Xs?fRf8?tzBbGf0O;ed_wN#!M!#kOVl+xoOzS6f! z3J&bpDKFDHcRSr)n#N5EDvz6?hKWpn=}#W5wezH#Y6G(25Vc@>v6i{nw^@!0n(~Z? zIp9n-gOJt~U+*G=Dv6wzGk3XO7$lX%2xqj4f_Qp8i(KZRnpBRJ!C!Phd7K_*57Rc= zO3J;8uv8cMe34BkJ9?PYFLg@{e|D|Il37dEaK zXmpdEm)HhF#_`sBbP4xnw#)X@TmJFnAo0YXL_QP>K4Y!Q3}&YNfCeIc=Th zv#wnb@g@$%!ZnzV+$Gc-xUN+C%a%<&rB?>=M!StT}0zDOYz@Qv?!258gPE50D z$n1MM!@}$K%oZpdt#!4rKzNYy0kcJUW>}ekXKxF6Kan+l)ZEed&@=*{Duc&UDyB=( zv`TFHX2_70BY}TJ_LDMXaHq)0=6qf1u!aB)9}6%A(!b*9>X4}{bD_hr8(Ou9aLnw; zhx!aW+22>4pJ@LHhR@V@C}}hyUU7O1 z7{dJCb>8s@%icgw*u?%JM~{G++~K3ek;Ok(i{35TM$J%|3aaRUnKt{RMhb3TVez(s zBUi3YqSl*`d!k^o;DAxbVOdi|b5S!5=u#WZWqZ-TG`J%R9I~tfr2b`XycDHx>TzNna)~vbHjX@t)FsdN74y;vg66_Z_N2Atkt`hHvKf<1}c~xj!D`t5J*R(vgV2Em{Xml`Ud|Kwvigoy8v+~u} zS!7Rw{u`|-HAYx(5FIjvGl=1NB6 zYT<0EtL&js9^;oD{`(Tg#{6ownfy?Kt4~$F{3xTU7|#orR#$WZ&wT%}uVIYkS*<@(jH(A2lm2kx+gMg~NCxFF zZ9~*UOP4!~Mx7+xtXVvP_&|QI|W85Pc&`s8<_k%#Q-R0i$#me?%&Gx0s_C$g$DX`$G%*{y6P_9#&skFxA zsh%OQ$P^JPwUZnvit7;@3|+(o6g?Dd*9RMS{^~(k@v2*I1<1V5E5a0dQm~W zfc5i&*yujVlAk_vZEg<9*?>%(fU;FAaCF{GOWz6Nplx9T%H0@S3SviIJOUC)7D~8v zK^1|wjrrq0M8F2Ea+R5W6~u6GcKIX{07hxrmLA#2Y=A^f;@h0tWS~P)JD>E&bsOJS2!WYRSH#T`Z%KcStsm=;|CF+Y5Vv3+HbcF>ce?&Z`(-sqRJmM zRxb_cS8e|?W90f3)^RL^WDugsc@4$H3YnTm(Sn7oQnbGj+<9Ja&WkQgV#r zZce(tskM9Erf|jBJ}wYlYf3ei1rUS!*Ox+Y0jwster1A*DJ8m>D?WU!fcFP{%N9eV z75Kb#4-G>ty_Q9jW$Te}(q*>vbQa0P6yoA}B#4q*>%xbY`cGfJ(~xofe=U^twI88^ zybRPL2b2vLkJ7SyUzslo4K89>_~aWZp2rxE58~&?ar=)J8GpM6DOM~#;^sdjnrUBp zHFZ9yJq~gl(E_q|0cL#|v%P4t-9ikuo#Ra>RNziEN#4X;o>?Z4mX@y-Q)#{LuWNnp zuSR-a2Ms;v`!2nhI67dj3n><{{}nNH-JV_dKnZ>Bdt+Y*Pi}c$pcn7C8Lfl|uEv}R zcV^C|l|8ye#o=bdT5P10p*7`s4rd(qN<>_=X^FyEw zRYbJf{&0PVcrAF^1}{+q*wg^stBs^yvb>FeaoP*y;p+u;#0CFM7bi}sqpy;1cPj?v z4>1{NX>QhD&c65JndT6744M-bc0AhJk((XEsgRsbUVJZV3r)mS+TSn@aet_Feo4k4 z)G6L^JV(0TrJHz*?axP%pFhuJmC@hof%Iva?n_f0=cvki%R>i{w(`mN(JB3B#4UN5!B^f7>LP3Y#=RT6e>G27vRpC+oW3 zo(+24Z{nCh<7CK6WKwR8f;C)!xF!ZIho3w8xP=f08#=iMz3>OLjJ7CaR z|9I&0ntSO!S@FAt@r5*tGja?>Cs063W(tp4uO>cO0hj2vR%wWeLWVog%pSeX8g(F| za;=FeOaMxhmkA;~iU0#TwdN6I1Nn31*RtHDTJAyB$3I9<$cgr!ZpV%?d*9S zDY)w#+0kO8;#72*s7Rcs9Ehh8T>>OClVF-yHj}8RHx@n>5v@Q%CcvI=^7VhE-CQHK zNUf*ZXh`c_Z|}msMUp=xz^QEX+_GM1^s|l1WA_sgG?51G0wC2tmJD)TN}i*g@F@+; zdOzq#KgGW6ZgVO8aW@?ET%~z7q@L~ur6t;3sll^H6We``-DY+gPRz_Qlmans_fLZ|DxD(0p3 zpUO@dceq=oK-IY_L8d23R1mtBnCu(21tg))NI;RkDv5dhH07eo+%NOMza6fT%@-`N zSHqXuml;+{&8QSG7wPgI9>gnAoeYhdtu!^jjy?TV>kJJ$iehl$QZ$JUdjB8Vb;6$! z8pDcR1D}ph!&~PVxBWeJfCi*;(Z)Nw?}f9KZ-@=w24tCaG0Gt~D@9~W zAMWqH6LU-w6M z-8F;HagSh<7DhyD!$rMF1uYIfZ7ava6{y&SIPzbY$F~&45HB~vr9tSh2VG=luaKo? zhGe3xCv-7mSC(-IxAnD*`0xzIAVtZ3$90lmSf9_t6t_1IcqiIGbHHb}fIRmwb_uxp z_C_VYJ8SrWp-tBC1Z%?gs1(|;D>uGOsCbw0MlY|D=qk&bE=!5njj_}I0NBmX`n(xx zEHt~vEmf}6F3hbA_xY|jQR=!AgGA)%HE{9`w$Ct?hzaZrD=Gzbr49FRHcc>9kF!@8 zFG)V=)zdV>_Y2j%%6;>lb%IAU&Pr+kiLaQn*f})ZAVGsI!6I)G8$n1Ap2m;<%|Bu= z3){GnEOzN@9#mke-N|^&#vY|S31#*m1ek>!%-X=psDT4!bhR~(>;a(!!{skek#4-E z?2By9klc_!oYZT>h;Fo&U#FAU0fAZSwQIlXhZTRWvbIgMGBT<9f?~Dp=lnJ8e1^=a zz>dXZb9k2SDH~Le8xSv16>tpBaS7wdmPe)Y;Yyax(pSf$MCbi{d z7M0=H)oH{PhJERyK80U=4wCfVKiBen6J3uEZ<@;-LS9Z}*8rcL9wp9!rd7@j zJ`kIO#)ph`zW;hiz7u*LXYAg=L^aMkDbbWAj5l49MV;a?yLbXzD1=9c*U?gr2qLY? z-300LSFUc}urpk%ytZ^Agqm1~*d4k{pYW3Y1Ur2?6M+@0UzqSfiKDM@={Q}7Y`@(F zjSc?g7f=tO-aDfWnYh8NeWuIj7p`WyK)h4N2d0S<>iiQ*Y-`xGgI=}~%-=dW9Zbz? z!)x)A6&_Jt!T^Q9)c(c8FH-Y89h)QTxKXt-F2gMLy-AKCyL4e4rdK+Vq7cow5*Q)+ z9NSf;c=kfJ&c+w6WD_&M)in<$yj#l<3&_hn#7=?N9~+6kxH+p*Le}3D3w7D?U`o|~ zlX$+oTUD-!5;mk7!^cI{lBzSqLQd0sz4p3MUs4p2HsFD!QV*|CETU-kC|LF9n%{jx zNbNeSyXAExA(DR2-|=FjDX!}P9Ga=#Z1DEs?YaT@myp#C6^72Mx+`j*N0dr&UmP0`l^L7z(SA>|2(LW{6Wfoyr!N%aMkob#1C2mr;*@lYVK3GCyg?(ApAU<20rp~*)`q_ka>vGjwI;3)lFXU6 z+;BaE_q20tO9q09D?DYUHfp(T(PhR?jx5TWy6k5McF2u*mI=EvC|c*`_ZoNRf}Qi% z!e8J)4N$oGCiRwUIN`4Yo$Zm-fwQKn=>jZ5xQy;^*}WRtc^i&7VdLYl4#@jl_CAdvQhec}{A_#~3#Q zxvi@ZEvgkq0$3xUVe6Y4mqy!TO#GAB8|TRSH|_6et~W~!*&(<|nuXh>>GK{inUW>z z1AS*J@^iA_QS2f-?<2%#p=vGTW9}-eyJvABIs@bl&&gB&fDi<82G*JC-&*^hQO>{s z2{G^yN>80(oA~_-HHE_uAjMwnO&--Q<${W?MUajEsB%9lfjPjV1ZXzuX;WXnPYug{rI>zpBKp%(D!-ls~2@@;?rL&)mPHwhg^97+_(jiGAuJz z0sc6TOkup;J>j;g>M?Oh7hk1u;YEIWMfCO4%hJ81O+dvSHr?e60gBX5kR(uRCRy*^ zmz#GZSuTI;pmP{%-~>@Xb%-8W;!Ar*Zpr_*Ary0$2uIn9Y+NKmf#VZagYr9%p_W?x z#+_4YOx4BZeWEdktYWJ{QLFuUXA+`*iVEGJzwTG>Is+9GeZM4C_#@=m#fEfNI;;?{ zXJQ=1uth5@PlJ9v@20r|URQuU;pK0I1djrP*G(D(Yvnq-c}BSye1@dm(IZG~piN#8 zoJR9nns|Pcn)Q#)&wbk<48*=*yOqgyUxDU~At<_j1V$;jcBFH|@_xuX z9|D$v!skq=WmJ8KZ~aCYPvF)1uSR#KBFdAJgO<(=)^AK~>uJPso2;p1U&`$I&B;8- zLXqZFPvt5RjuqgR*~!@AWk;)Ly=q>K{(mIhS}C-CPqdC?6FgR`HYg=1iBsMcJk zL7T8Y+<)s0E~y4F719zbcpSN?=wFG^gH~5JsjN*Y6hvK+gwh8lH&rV2pEr=~KV?A5O01xR9O1I`aNE(Y`pv>Wv3#5_(?i-_G59Kn{_VkPe;4$ZNVNQU`?8c0+^~ zUX-Wh_I-Tp-L>g@%t^~y+eh79?B1vmd%XG}V(R+Tf~nWeH3UTEb$)}kl4eN0_t}dc z5ZSVRQce%^W%CcU)WdSB{2Nkbhh5^Lz>UqERwRbD@_;QEBvItBMpa?N&v}mKqa}#< zl_xD1C1<(E+90+YW?rir@vV^QCAew?mFd|L=2t@;#AmD((+d~`TdEOmdX6z^!LYl) zlyg7*T;O@WMrusw`j3rC8V&1G?5Tk-BZhS~k;TzYvB8`3vWBnz5yVWy!K*BLd2&zs zd!<3GVn#dLDCY(}ZI+II&5Norkc0Na3T1p`fAlju(u6a&l^k&!xK_j}U>6&7NRQ{h zTdS8KdKD^VNXF}d2CyvEEqE{KXSgQFX=@Bwsl4JK!t;ve)k3akfwl3YhI$lI>Ek1zM88y9Kr9eo|&8;W7G( z6T6pEtqwegUE7-VW zF|BqU)ug_hpZM1eW}L1{gaWCikT-@tEJ>9#(<8^VJe?#%hQpf%#i9B_Wse1VWO^Sn z-Rh4ZIl;02uFY{Zu$IDUJ6EHRk#_jMlZw{JicUp7Z{k})> zJ95fP{ftk(Q462)^1frRhwE?Lpml!uEy=|jahUf{?rWDo@53gs+0WFIGMRmWm%;1U z50seZ_pp@b{vyst$qA7&V5#hn1bhpS^M3raar54)>J^n+QC*9MtfifOaj$Nl^rr~N zht8^3c`0G0LDv#anJ@UF$lBizcDLcaPRCL7SE&lW=)e}SAS^LgV;v0rrlp*yT$Pkz zNn`NO*P4enuJp*pjvqSVy(CJcWopap$U|c{?EG5L=qmA( zU(eYfr$w&m=I#!L<($Ut$M=GXu_dH!^uf#pH+OQ66*+SksU|%u<)AkQDUelcw4*~I zPIoYLx;wF~)(q9Ro9e17m&Ax!HxB31ac7^d+pW`BGjCh6N{Yg>Y?NKWV^EgG@bgf) z4ZEV-JBKWrV};@HjpqJ4{cANVJ_OF3mE=u7D5@~Yve)Wo-@IZGiTuR>x&J#cHkq1>+HhUf^ zI%+f4BG+>_4lpPX+_(HuJz2nNxr-yDw+o<;sK!hxUd1Mk90d?$*|a8_CC1oX#ebKc`Gvu zXsi?}NyuH=D7HW$v=wfUHtB|-w(6-J+9lg+p_4q#2~5`ft;dv*;?*fhAq$dZPOMc# zlFYZ80uTjM{EOpvRN9SLre6)MU-~V`zP}00YjCo~c`*7p^D_2>q_f7Uo1SJWUSqx?jU0~)KbAt1A0&X>1OCpH0y&CezEzAV#L!`Qxh%_eSJhP*;{rh>9 zxiuLEn&$p-q&qWw);72t*u3myjHi;;8y@WvPnh{z3_z(R@FTeYqmMQ|UZhiUi@U`Fa`ma6l*yq0TWvfw? z+NfZWWqc;bRd5@ z%@*6^4P%Jawb|8&<&#DW z0E^2EU~z&|??PUOV8fa_YPKAHU0cx6M{q6K3_ym?8U?4Z#X6o8qo-k&sqb4V{G?M} z*2%+oZGfuTlTwbM6Y$3Cc|Xv1qK3q;=3r*bqT#rQY1SAlU@JrY-qq8@yfW)e{+3j8 z%X~-v?hIulk011Fsz`)|&p!w~9H6emDl1+I7WCBkTxuH<6{@9S2_YkIekxmka>d2H z+FoC8C>>gG(YG~h0159{J@n`!pMCI4-}cJaG_|2QU^;xHsp`!ISTeG5;})ICOq)u4t{pZY zGZ0T&$d+uj$Jcs}=C9GlIX$zJUi1;7Nl_dWROHltnygI7hxQcEZ65vo8@GCORR1s*?-9FWo2b{l^|^6`-FCT62X2`=uDHR z%xZuI9n^A}?@>wQiPsbGNc)KhevFOkm{4CC0$Wv5P9^cMznBFYzt!~BW}1e&+@w4p z`L&1#DatWX7hM*KAt=x90a}?Q3Up2+YDON0ih|b!jS}Qx|Ij$4BVJ`8-{;wDB$?h7F4vV8m76j z1Xyr1`pS56SIEDd!4i(V;*gI4(-w{6gd}G=p5!`nxVs9f(F)yIW%jNs)+G;pC6P@H zU&^M=CKr7sCJWe~qKtS6GrAM{oQ-O$ff8{uHQD3V2yz3ANNyMMhn`8ty4&GXvz z(#79jed5vIeb+mle&(6bQ!c>=Zu-LruOEnMVkx1N@zYmq&HeUQy(Wnx>xBh8sLgJ~ z$y2A#pF4Bm+M#|bcI2J=v%mbnx4z;vwdS&by$AWI6r2!S{&HbqVzQ0VL{U0|+8o7E zYZuzd)=JW+jo|0bi=1!Ci_3CIg7iAGDUzH>}6f2n|>!&S6%2D0*Q3D|#eR zz0LCgNx80BV=Rdx^#TRJVqhX_!bJsAkyl#q9QRcmgf_aW*Q;!?r`53#piuY+lh!|| zvG`%aS7$7Z)g|8{qqD4?c~y~Cl~O00Ca^Wy&=xXE4!$m93IeFt2A(YLj9ee6o}Lsr z!A2CZS&L}m%@$4x7d#tX+6O|tE=uC0(lyJrpX`bOu+SD@VFU3GAG4EpZQYBbo0m`2 z{2CYDf#oG^@1htingKN`0hbUxzROy>Z>$&q)~;l2RGXuXnqcVL1a)CD!DAf_QRkr^>`0#JQ$~i$zfOV{N5$Al*e&@y;eho%v z3o~JrRoZVlpa0>X|Jg@B|7oN0sGm`Leg#-{JDa(0(^r(ws2AOOn-5=t*9N@n=5q>Q zwJt*cLtVc5+~>dY<=4OB)mUY){}rBVQC4yg8L(sq7udK1YwdrX!#!!eHuk2q+s)WE z#6ZrivBlLkcbcp$K0X_Xa@wBZ$M1S3qtDc|jVO`BldkO$!LISd2Ug`qY{L^JP!r#? zGNe$PKB)pX8%@^c-J(ViA*L)#-c~@unj_=l)7;#iI~gptxGO14*|-wOBqn>gZ~+M7 zr0I=mwm7-5Y0u4i2hX!9)GTA2z;qOd0zoGA*SMEX@gO^WmX}j3rw0oeMT=H2&1O1| z+Qk|RCPs@|V@U znbOK1LfDypJxtl;m67AE;HAo%yb@v1+e_u4Cw!jSBjLECiH^z_mW>T=eMfbQSJ}yx zvz6FA+~p;V`hml$N-Tuo5ruu3v5e|Pgpg%<-kbMr2ebh6_zL?0835oiT^4l|Sgp5t zId|0-m2bJL!$*rx{ygq{F$F)U!fx)WaWZZ6)nf3 z#1ho?Jl0=+@~__TvX>Nl4`G$J<+gY(WBy+{xs!WvR8>ovT?*4ER`W>eTMZUxLFSin zd`pk3Vv*0t!PkY#0eIFHo)$G^YgxK+PRkfUK+|Gz*q5BiX~;*no;I`Cg>s9;n<{OD z9TiIqpCBrv)hq-!y}-BU)^{ax?Tl`f&Ki+&7IaKj$HS`XLY)6s(LJD;o+_sh<+asF zwM{n(Yuc~aZI+=)1baD3Z=GHi{V-dckN~RzAAQnmOAr52Wfmfnf zwW4a;fxp;)ybNy1G}n$j&1!`^>Kpm&3BAgzfQR>x&WwB3j+EMS zS<|@-;SqLtyEgQxs>ihU+^;oDx?Ol0G?%pj6owWxo_WqN0)xC9*0qHM6F~x2J;W^> z1vPi#mQ3W`JAJA+yxMAV+e{x(%uCaNL@v%$-vb@^#L1C$~Wn2aG5vI`Q8xy+pzut8v6 zrv87zFzALzIo6`i!>kD4GOx7Q=F}1RBpE4+t~eyq$2o$O>xQ^g6o?p*(K)u_--Hy`zw^duTs-n1LhSbvEl2|84)ovf#wkK0TM8<0Ht{=m7HdKfGh>l6;a ziZ@nXu3%XPZ~-#1hKA>0sPR_`X<9TU!4Y>xX{7lCSYtn_Q_i^zPAK8>%EzXRZ%MlG z;vfN5)h)pCDBM>PV3oEuRAed%YVD?XH{q@7grQau9imbGNG_chht8Ug#ksK8~sb?sj1VS5xIg3xZQI9(wB) zc5T>hg|Zd4_1@F5!^s6rscL24_{BGzPa9lK1scvq zw?VYc0hbx+sWMH?c#CFpF>_HP8H)bY?HTp< z*|HE#I&)VO<7%*u5LG->)Bh?H;*e3ghZCV*oIuUIQ69N=3UZO{NpZM?a;s=)Fl4ZnCUkKq59%pn@`ljE8)35FG=23j-U%u~8Km0*&Jvbmo ze2^PJUjcD5TGe2PO~I)C)fXQ4{7?PpkJL&UW$_2T5S3@IKKJA^m!fn_T`#6ZJwLasMOMC6EMemUyn-djV*M zi_0>voA7@K>tgdR9+-)!3WGpvJ7JyHDGI`t{&oAmT4bf)a#aKdyIW~w|C+?GTkC&y zzG{{)PERJS47VN$d44Et@j8@}4IiGvof9NL?40fG))fnCC%YnhfB~$aj!%H{5LJ_4 zGs2*1wwIuFK-8Cv#%$D`@J%>Wqt>7^1t-cj8|A0qeaJ=Ah@`D>*=8C`Cud1T@?`{1%D!j9^Mrv9n#w@xMu&y|V8hk4=z9UjZVB52B?pd;#GINyQG=pCt*(HR9a zs5c8!xAt+%UGWr?&z2wgX)4oPH9Z5JOBe0HDA+-|Vg0TC*hBY0VRA?MeQ$%!7l|oq z7@sPoP8c3c4}awyZ+qbDU+Y?GVX&+7h&kMGpzoAO9tk>8V*Blb5e7HV<=T(zfN^n5z>sv2IhUtPR(6cq^=t|~f;8r++WSea@WO0Rk zSQh0x&lihq8sb3=c~Ni>MqoT*`w?tyY;29kqT*sbsv*EeFT=@?X4s3#8*f5-licaK zr$#+vT|7wr3!^YXeTPP~re`%@6lpW-8-X3$HbN3tlR&eqaGW z%BorvBeZZy*W93;>1gDK6S^rvy*XZdH+;f$G1dqBFGl5D*%*8Qd|RWi8+b}wNQCaULAlMGhV*$i#WFWECprDkxIIbEvNkcXB? z+d!STkcf{WEkvPGRe}(fn_qRzbM&0s&o6x+I(Q|gX$(h-hfMXT6zk29d{v<;+5t*@Cs|WIl^Tb za>qqTJxl~=Tmnuu*H5HyxpEPrzn!{)!*hn@N;jz~#z19T^*ggvQuH9^+5YIlIwNRy z|EB7c_7?Pd@w}aUpmyX0P}^S7EUI;IH|UbwJ{1rHSU7btgK$cOUAt%K#6rD*7%c3T zzbwhCaYXvc$zHA3!*xS?J=_&Jc%=Nue}U7dTurzqPkm0fdiaB@!3y) z{Ql1qSWWsjTg>+k4!2L-L?&l>wjr*P$)G_V?OK6s&?c_sI=PczPWHbt)Cx}7Fp;9dg z7PB$F^vG8qdi0UUE63(zvyLmoqxso^C!19 z6<4=$2iv(r1_XU0w!KA_8}?+#%z#9m04f7k2~EZ^joAvrFiKA|yv_*>JCer8@&qzvwm4$Y*J#i?cFq!snDN+O|Gjp*#q5czW{@~x403r1&n(c-3_ zdyg87J2y?9%qc-AMEBJDiXu|l7$J!JvYcBCaf_hA9!otg+QKG1y3m6r zo5WW^;0HYeoR0lg6vZ|*k8T0hrn@zfw17c*_TB^KhyHWj71dk~x?4m$xGT#gY)=O4 zdm=ky`_{eb_x}-$Z^pJ_iP622B>Af^eD-(W_4ceN`#Wq<9*o`$Sl5NZ&=~q;0DUDH zV77Gp`nx{#kAM6pUU}y!Btgl8`>4ccn+a!4?)%(*@A>ctqbQ`SI6K)FD_UJHPHk_$ zgkxUu#k$gqVnb1ulmp@E5EH{r;JA4&-vW0ZQ2sAB3`T|0Vn)T>2*=2vRl1D=w+A9g zrkY4H&_@du{O7;=e{y7&XQiHrg8@N$C>B$#U^Uv4ZTH}S{dwr|CqMX^FF?HUl9zqu zJ6`qLZ#yq2nwl2k=f#`Ic6TK~M9E+QDja}ya(DKZO0p`EL6DjecqGf`x;;?`5M#`F zFL7S6XVgXH70ymflJQP3mDsK(tN8zBd2t47K2J`=@}QE1aUf7NgSf(7L>>^x^8B+8 ze(B?1`0T?^KGtE{K@m(a2}r^0;L`F-gmo(EtGl~@wY&FMU;GmL^p*F%`1{`Y!>@hK zt7RI0Wnnv_OWH(2w8%g}bk?!T8z?&v*nTfkXEh=5(klxbgYsfY=g8rc_UPhiRDCP-}Yi-?Q@-TWNu^Ie~+Lgl*>c|5G0TZST))8ngkQw}Cp1SQ6v;yfybQtKL zuy1Xi=|ct%!Y#QpP0%IPyp1tJl7xZ7TInXSnG`GDw$7Xvd7!EgDxY%m+eE@EHSfT* zrrEpODlmm;lc=idt+FkNW7iuk-SLFZwB67Tu!NhK7>U;FojoRny{WTz)Uj8B2Vms{ z&0U8#zRr564F_vvwCin{k|08!OQj%M@>~Kgb4Jzm!?6&V1s>$!ww9JvTW(N=0h>-L z>_G)yfCZ#K(F0g)&I^RW>e=JqhGlU##*OC60V6+-j=(hT>e?5|5C4SF5xZOqAx9#j zdaQ;O+*sQ$;pl2~)-*VbR5b7S;Gh5LhyFtt0A5%6gy-)7rcv_<>J+d9aOXO45_O_D-M{WjV5>b{?P&b0vD(Hc$6O>^j{4 zSS=td36|c4MbuYG#h(p^4jz8|(T5-V+Mfo~@Bj91`@!${_E@G)U|q0rdp%!BPTBHL z>td;D#S>maUfej2Ld|9!@e+-wzaam3m+~?qL#Y+fQa@R8lHu%)IGJ;DsCADDc86wV zF^bcM&*Rejcp}Lwu`mY=!La{ki}@da{9_;e+Ry@s_dm$9A&#qCU%1M<;9!M40$WmeLaze6I~B)OB89Jts#)Rc6+~@^n!u=^!4ipbLN}ur zgh78BtjCYKaf6mYb$}AfWS+=%@K`M`<;i;GL>HlVQ0MK`w}f*^k_d6qzr(9Z_mnk8b9FcoKw+m$H!pEVd}{$eNA$ zd`^QsFh&T4-CI*filv*$3OPuW0;@^IiMWv@&0~x3gcwi0PFq))ZL&kOT#?Nx z+SFjit(V!3O!4s~N#{i-l}QbS#g18#kK?q7Q7Ph6!A1i0!Ioo&s6O}?@4xShpBpk_ z^So#~k;AN5EvP&&s!pv+f;KOM_~py)ezB(i^kZJGrV?+GXjTx}xQ$1&NgbP@sYLm? zMxBP(U@XFYuPArZ)2~}H7kH+tPp6m^o0mj)W0YjSt8?v+x1YNwEiyRC#D`v_1d~G!@>EYp^Iu`XwkWxw*rZ+Y<1M;aaI^PkJ=NcMQa=Q3#5Q=Mx0fVa3xwsm!f|!? z+ONI!w}0#he)Nal_@>$e$58+SI-un@ho-O&fXWx|#87JSP*iA%Y5}RGB^4@r8%J{O>>Tp8bP^@rYR&OOioTSpw3}r-!v0 z$kWX)zvsoE`GdU67bV!S&r8HCkt&MnC^`dH`$G^@p;A)jAL7wW9q@B1?k;D2MaK|4 zz>U_5G5tCywd#YL(cc)W#S+rF-w;qH7)Hl=em%_>mbS0igOV^-u)~FYk_{5b%zc)a z(@a4>#Pq8`#n5K2yhPfnQuLWJppt3dB8HvblyG&$vpGQ`5**LMZ>jrDle<4*JgGX? z^k5l3XQ9BzC7%Jjkk{m&Iw}czs-vvTV>vh-{6NZJv-I4)TGs?xHumGiTGDTZzEmNu zEhPmed?rjEFF*7T^tz|kdkmq|q~u~n^l(@1T(^dX&3k#1r;Tn(zxOS$ajOeeRf@tq z|JAqt*5enS4ue1=_=%op^5|goMgU-gv-NcA8(#gbAN%}g4rhnn#S2$h5;}8_d5y{$CV%U7d~y!&%B&fai!(`kofnD0w5e_2&$B z0z}04*5-sgLc}dOD9hqtHqG+f`_xA1Ii!E`!S_z*GX}HdzMfSTFO%1l2-8XsFpG5~ zNmV*{lu2g{pL@>W52Z$gk#s}Vf)%|ThIU0{Ef}ZiJkP)Yn7p$VWijUdQz2lgD%o#~ zJbTA`-}Si%?w1z{f?!EuV@_)3ONN4PaBPgnx8Hg@%8HPEH4unTJEGnp*6{*GRf+<% zrl19ZjVqpIyV0&TtG!XgwX=gY&?xXe%_2Vc4uxxeE zv#u#EV+RndXsw==*VGEsL}4&skL&D>l2YR3sp?ucoor&qx0-##st`|lYq$6o#TJ3c zAQ*3qVHgJe%QP2$Afiu;X3f5S&)5rr!RmR!8z{i)P_}|)dxB<{Y}gF<+IDYqgAm@!sX)N5B+ z+cT$5|DEss!851M+;r;n?PqRERomKgvMjss>@$x({p16WeD&eSAEVf5IKKbmA3nLg z{e9p5Mz)zxvqb~*g2opp{$`EjI3AnCa<&sHQ>hm07N?GI&B#(;f3%s5I9~-)hasZ` zMPiF0--r{%UUuQ!P*a&XQ}WNs|O4IMR9qU~Oz8U{F8AyN$3Sf1aD1m_ zwXwgz**GBo_#gcAFTdrt5GgtC13J+EiLDbv1%&b#I;*gnRK!b}R9EQd(hgPhl`5&C zDrAXW1xF%fd7W!bCawZ&vIcq_6OygT=C{1!)v_%-HapafQ?X~K$vty|Il~6 z>FVya_ka8&AN|~?P*Wx9$J^ik?tAWd(QW5$;r_v<3S#Ztk{!00j!2VVfYdye7DSkF z^%c4=Hq}yRLCe6kK~xevZ6t}Pm4;1vfB7F-09Zucar^bji%1z`Ezf`bD7|uJ}yr#z7!ru8?yK(q||!7Oi_)Fhih3Sz2j7jc))m;g~Km2dzGA zXVO7%h#r#zYv%+PEj7pkS|m8)W&oJ1nl5$k!$AGBqo7sbv$)veHjd&TfT66F_77Uo zX}$m_xJkBs9H))&+32Vm7gbnEcMRxRLL`F~Mo??Bz(z_)v^}~_AW^?EP{ER>Zwi`d zy1)tn^kom|RAO<3pX05P+0468M8kPnt`;=1^HaMv03L1AMxMVO+tTQ0=+Bk_C5qnF zSLFrqb2?o`cU}k#R(A%h8$^|$1LK<61Fj@X{J;9d&*Rn4^+5sXqp!;Akm&b+F?s#} z9^U-jUBBJgyY?^s?XN#`^-33keB|SK7Ffg~ZoAg=Vpkm@4r z0XNcAzjMIV|NM5DP{S~E^2Eib{>>l!&de-Kxm10{Ec>3Q(*EOR_q@bIE&BVgTZSc$ ziouAsOp|!L`d1_AdIL>~*LJ_bkwCpAH-Erk%C*bbUjfpdZ~jrYV>@du0G2%xv=CbF z6^PRSPc!PqScmkS>VH%Z1z{volXZO88f(U}x0nHGFQo@Y@HD(^Fnh0~!yx-mcS*t! zI=mD1**dJN|H&CF7j%j#cAeW_)!`Ni2M}XHPi6#qJQNn2gjM%6T&h3o;@|;-W7y{O zl<0MQld7GEzE5hi)2%M2ouge@KU2S2`yI_=f<)hY>Mz@(qV_Xv+AoPO?K<@zwEmFZ zKj`_>evAg*;vWS{W~L!#W)MH{OV!hV?zX&nHgM=GE3&LaV)j2FW?jNoO5uG6+BNla z!k7Km;k`f8H8>8Y(_en;Z`a(FH3U8HcL@kHA6~1&cpP}wKao0Tav@ZjpLytk$1h#H z`_8+5;UE6DC$>)&73F`Z^GAG6ae20ScZ^vlpV~e#N=NdH1@{l~F+@dGU#h;q!_4YH zKfSuPJx99!5UFs-Rv}Z*Dbzh^Dhd>(m{Cv1+$84J`cf`T3AZ@c4v z`njKf>G`{f(>Bf>UU>SxFMolwS>M#25Qri>+oN#+P0X#P41+qyo~mKo?B6PXX&rB+ zCcmCIuYnJ;KoR?4BDX!FZ}0s6!ubeKUB37mfB5?@7Zn8H>2B@O^A7roZ2+&TC>_sFx{vV#9sxcuYy292N}Hv5(LByV99^~|LnbY zm>k!2CwgzC&J!?$832O}A`_VzBqdUmNKq0+OI8lnO0u;2ZB z*IL<@W!aWYB}yxil0{m~LCgUJKqBWH2f(DB&K2&vq3*3)v8!i5in3X1fj!;T6>i<| zJHKIMi3#6v&fsTd0ME)a?EngFN@ zKq4RmCtn96FNS6)o>s8E!RmJ7S60)MsH;?@m+w1%(ps~@U?Mvv6*P8V__Lgzp}PMd zd?n%}7D2-@;N$2@qe1tq@KgY{Nq3F>enTjt4Iyyj6x|R^Zzu;~P}?~?(A_9*i~JTv zYcvGL3m=Sp!js8pM2!atZ$zwU;T1f%$;m@vt!5FfRE18BoR?$zZtF{J4lAZ&eKtoC5+H5r4fTzfxtAjTg>;5F}S1r^0%kO{d z)bKeaSx&mmqlv8rtB|S!Z(N22&6vvE*?`D3j7EwHl@IXDWjRio zM4@aZ^Sht?{D1xCUyV+T2f9SF)qH8|t7})R=DkCNjgmTsC87iYp%BKB1V$M)!q*Vl zI4=bCkF4v=1tAxquBtF5E|SAzVJUeMMIx$(79bKeJ~;=#p58Q52%R{BCuYh;UaeIs z77y_R5?3J+f37Oif+eP$rybh#6bBEI(DdSIf!sfXQ8^dVBln*+ zL~)rYn5q{J$3iGZj)u)yp%DQKbB!CmE^DvJC=O51U%U676K79J1IBlHCtWE)2gO$J zVJ2?ENSG%0(&8PiGzG>z{Jx`yUfaFn>MPgfvf1DL#OGe#vF+Z6eqL`hV!&boeob|~ zE0-+gA%m!Cnhqt!k%(}ofiaY4ip%0^ACYA`wx{$X0vw>L(Gd6%Lp2EcqG}lL!ONt& zOfBLQO|{kN%I4$d4f(HZCi|&7@BZ5#eMjE2*=*qn`uLesqvK;UdV1aZEnJx!A6cd2 z39;BQS}qW{DzRL{owI1jueD91?}JtD-B2?CTrmKb6b7i%H`wznCdq#?Ye`pvNKB zPJ!Avw@n9c3i@sRA!FiOIYKm0Sqv|P)Q~{HCz3=wIBbc95o6Bt8T(QnWM8oBQHaR@ zV!3asqJ)PMcP>ZAmB6Tva6c?JsQ0Eg=nWUzZsQ$7Wd-V3yrEhUyH< z01Nqx^_rID7E=#-LLf-IESHRMhztja%}7wyh%Dex-aYb7?pD=(rYZ_+pMX5l-u&!UXY1QJT zKYQxY7hm6s5K7a;FrFg}1XJRbW5bH&c(~#v5-)+RR)wyWZq+3&r{QD^rHH3%P9*h6 zB3P`@dNN8gDgX<*43_Rs<&vf>Qs2X-{}N#>JO!H!V37;6NL^v>53khBg6gPIF^JUM zkS7|rX3@Mwvt}MUbDD~gY9`*8K$K%2JhJ!tjaO3>#b9@V`&(Bw$BS5akcicd5tD4o zY(c9|iky&Awahri&s)nFy%2T*qnnux{+MGowpU)nikWQPB=iGB7FER}KDFnzZP~eh zuM?FS63g2mXWg=;ci#M-E{qoy4Y?S|tKO5(7y>E?BMPrZOXn|MHh=M5x4iG@>61e< z2R+ck5mq!|hDahDaQt84rf?eKd*n26dqL(bWrYL?b3kAOSIa_PRJ>&BN(QMX!RWbY zMW9wt8Nmk-{Ob&iaxx-j2`JFDv)N_3WRk82YPzDhN!^=SBJf^#Ij|`13^GXc41_a_ zl$?l(<*l2oiFzH1z;Pedgy*%E+PXvq+Pg?)$;j%okbxCPIJ=BygiT<^Eg7a|8=4yRjpZ4QQF9#b__TVP z#4|ykvZStQZ7(r404oXBHQb_#T7gW$odT?&iffbtdpm{qv^~cw107}o(qCrn4{I&-%< zv?}U`c|EztDYJeF6<4G@16leoZ)AKQ*C7FM>Suw z3&_fn$|S^kX4y%E+a>}?P~n3(bTgAjfi(fDXUO}m#k#7olsXKpP~#$~p5&=(1Uih> zNg>|AvLOQq$O1>m2v)9J+*x z=_fSUG`D!}d>LGEN15kv@nL=32>78m{&}u?7F15KgWyR6HXQ}u7h?P<0ia5LE-McJ z-3&D70y*T#yYh%PcUJc3EqAWvYZZ)#R){P9iQ+ObR01m=r6`a=D?z{DKeJvfZCUo+ z4`BkC4D!d4rdFVb5X_-SwMqET6{toBKEsIP;3l1H)S8y1@=(E`vIcIZ)?|-PUF}wd zEWKI*#;Bm+*-t!WX;ea$rli0KH45lag1+@tm>@1^#g2^JRBm3n1M=ECA#oXbl@Cue zLX$F(voHTx)^PWGz>rV`Vf~B61v);FTMr4eEK^gJpdZ&UQFAns&vWNU02>wp{yHwC z0=k+N1`?kDJT4M!AyKj#SyfLq}&R&EKQ{;?{Z;e)XSj=5Jyk2QSceS@r`3Pv7!^^Vepm0KdRuvQrBJ~+tBQVnsN=u=VkgUzu1$pD-&mIR{UKg^0=;5RHW`ygnT9>6v^Jc zLX6BG>cvRKsRkr>51X|QtpuVth^dcKFO;JDWGtlmIb5#N{m3tDVUo)cZ%_iaJS)X@ znTrlard%x)-q698pz)@4qTz0+dc$hPb?AmcWvp}x@6yZwL%b9WDzwH$Wrf)+hJv9iCL{tU(dG0Q%EiE; zB;g?nfACeES%xip%O4V#z z{)@Pip1E-ToA>=tP0W?B9pqDQk1g&ez9)8cLSX`8t2oG#x;1J?UeRbuG9OtE3OgA? z$%EdN+VSx4r%ygItAFPD6{}^($efu2pZ>syKlZ*4>^Xe!js1J~9X&8UF(FpI>F7hybCkM!ETEbAes$jf z9-o{fkwHwFK~;P61+g@^j(Ef)ZLnQ9z6)42K=j`skEv8hfgs}fQfT=XY!^34X%KNW ztx-7kI_Oyq^)4u;6WLb?Vcsx^92bU8j(TxyY}=mQlp?AVo?r3Rf@C(ge1}UHEc%1b zeJP_GPII(kIgZN~ArX3oNK%!`=qqW&2thBmQVjwkrk^jA{2{6FR+xi;KR(hku1yEJ zbtj?bD2~~(&t1B3u5!^d&8((pGufVEX|R7_u&>YiH59!9BA#3-rhU%ID}buM%9X)` ztRUx+ut73DIWbl)PgW}!L)59-MJ8jYs)o-#qo+4tEaHLhAeVXJBo<-7s2`Kfquver zgJXkuE`YcEL3mzWFNXju#dQ~2*6DNSE{t5P*6XEwzQ3z?$-D)9y}gmszUkNv(`?np z9lHkAjG}i1NHfXlhf#YrXBR6IXHQ+YNLm1#!M!w}&32c%=FghbQ|gj&jYBouA%X$3 zghse~6kWa1I5m9k(%9%kwTd58E|cjlmgdYH9O&=oRr{dFk0N9`QVn$=RZv36({T4^ z=fJd3#`dq#?j)~7R$7ciBb1&dabOm7Jf$-ztapWw7^v22W_7~@Z60P}0=5B$}pw8;AH-qIQh*2UC2&8}rrg5ky==*W{ z5y?(|PaT)MaagZ)_IwqU539h_$cC^3UDpGLPg+NbJd&m zuibl(WtoW=HWhBg=JQ%C7EvHxsTrjcpA+gP1}cf-=_ETE#3c_VT|HhP|Ng#v|MM5V zvS{9dAY#+Bbt_ikmt$LvTJ^}OlNZNEhDR=qPK-60&03?;vK^=@StFCnW_wEA1AYBN z1G5(l4b3ntvwEJ)cg=CsyH>(esG*EFj>~$usmC<*KAX+AY2y4`Fk_?t;o0P6H-S}d z)kd7k88?)Q4UyU@!eDnT%4&K?PmPqrF;yEGAU6O?3q1CcCw<{Hv+1-7=J}jT6E$+P zKz2ZkB7A2J%f|2pgW$r9g^ls?!10@{7DGF>V`CJ8!5jo$+!C9`h@^$nfaAN6-K1y? z5&xH71erdd7vy1_Ep-DU12GhYk3Q0p{R@_@mPgi9xvxMO|gIc zh37rp6>}0~di`+O=Rz9n>;FGL^QDZD!9SU7wp?^2NGy(>OZjX-FI^sTJoKI;8<8<1 zJH28iBgCq^=VrTq7v_t?%vP<6zs3M!+n$|UckeiK>?kdaNJvRpznkdCE?;&1`c3oa z%oWYfp&^jOco0THq=Jwy+20@Z1Yx7mICAR5;giQtoIQQ^;xNWl$-T?8EIdr`Si5rh ziUo7$t1Ji~(L_$mL@>4nl(4oBpE`cx%xQTlra2rwPU}6_ZPs{oUIJz4V?TB7%nMsz z-LY?v$>%y<*YQ2RZ}YoY9Vg;(t<@iY@mYu1hK@xaE;(Lv6kvFvWk{SK02^1Y8JaZ* z`WZE=(R}WW*I(VW?ab-J_#u#(Xn(=rnZ142u33Ncrfd4Tdl;b}fF_c}C@5E}uk3t% z>)xG5PoI>9d&TbfA#PfE<;|O}#n4UeOQe#fSH8}zp2SeIuNbqeSeh1KMH4(}YVQP) zYev`W@v6LJNouuN(J(cTzpWLJnrC8H1n_AQb|MCGl8oDhVd>SRjrSlhsir6d#Vt3b0uYPX|Mx6h|A`u^d$5M|zalzZ=ia zZq9KS^NPIqK`M4dCshq7&cr_bz&Aib$`NXVlY~1jC3nSc+NMltLN&wsf=_4qug4Gy z0-uO8q_o_3AGjY|NQvC3%NKSEvS>g6Y8wKna$V3sFAuIVVPO{OF5?Cg@t!#-IpMEm znqU3iw|@V#UtCHBoWhLJB(`E9oHc*Jz`O;kg;j-6UN?%FtiT51fA#Tws8yz6OAsj; z*B3~x#5R$Fdz3?$6(SpsyEhFFFfv8tPiB<`v7#j*Sp8tdz~j6DdmVEIFejAS89e6Q z{hK48q8I~nK(J5(g8q`8fpEWUCR3|BG(MerEmg!THMAh7MJzOjfE}cklGt+p!2? zrsZY-Ad;ZxS3dsPY?eGwyxvqzlRZVp2e6Q)s9BvV^3$k-u#OZXha5f>VL(D%BHLm{ zGz7xkgWo7Rv%hTwU)Z+gk!PPSPnIPoHgWFA{+(uP^yyb#z^@fcmfdyR9eurho?4I) z6NIj?J_T67D-X{3&uXKNVcZ-0_h4vcw-ce2yEO(kr_Z0oujgNTxu>i9#;dQpVdFKV zOeX>pjhZ}&f_^OS0o;4^&?C=0>Cp%Z$YpYY4us)jcd_JVaUcwSnm>Qy;jKI0K>l!D zd@&{|che|0TwU3*%J@UiJ>fem9)K;HXrda-gFK_BXWr}~0j+BF+Ow~`_`>!r7Hedq z6xjyYHv7eMPd)zfbGKc)`OcefRf6dO?&UXIjh{a8^mE%^ZAFR(^I?pE>@!7uZFCn?oN$8Xq zIa&DSb{p^4vabw(OLxE%oUPab^yB5-cH=T6LkXMzvehsM^v*ARm`wQJ8P6|G&je zxNHtD2K?l!FK%JwY~yd-cBbCiHU-@&ed@sgj?|kPUn4yw_f~HRA{ZcRnx^a=6naDWFOO%MQr~thLcJUGbb;Dg z&=_X3LB<+Ys>eWaNla@;t3_km8e=RkE#5z+B46Dk(8TLX%Y+btkQ9+=MGOagWZa&8 zS!Hn6%D$f7k@2zcKCf43SN#YfdV`T7iXWWeYk(P(OYr(`` zXjL%6+rEE4zA%uT894Zj8?M5?$YC=YD%*DNBGwvSI5DnrAwZ3|AUSa*2VmWP!_5n3 z53y%gY1HXcX6VXIRbUUdl*!3;kOIN9UOWcRvlTH|$QM)qY#M(U`v+HCv5cVsraJ>!x&sUr9>$;2o*7FqvaQyr6PFyl=#%Hq{q4Q~lwd7Gg=gM4u%dpVwnI|_)e#)-1W>9k9C7u<=bw2J&|9u@$BOs%ugp`U)x7C#!Fo$A$Qq|iZ%DG)abC;YW>Z<_dM~^^Wn*aWxm)BTTUIe;gN5Wh;>0Zt%V;A%J z4J)oBX_rvdRq!fdHAs3BWv#f8-8@xP9pIvLOM#yIRu^M?=I|KiqH6c+8z zUyOmI4muI zX6_q)Jt}>hr-~k;JP*M-FyI@4^+tnrkuw+0fAyYk2GJD^>PZMWb;I>GO1I<$aU=#n ztQglDyLSG=eLpDIDuJ`dm@VFR{LHDZ-t+h4lVye97k)kR+|&PvkCu$Cq7GcG*Z%t6 zf7*3uKjP@rle=g429QXWgq}yt)0{K+GMXIvu8PT2_-mcp_ z{%hxE0YODgbb0Q`V$tyd^J2kosI%S`J-1rc*MIVZNRB~Vp5q74#*e;NYt;RZ9tx(y#aMJ*HEHQngnS6gU3W>K75x`@>17RC%Es|DJY6)E z(F`dYrE^y-;l})Sc5XIdvsjWHK4$sw6dE?88@+`hj2296zfF|Ojb=0G9nj#s{vIB- z0dLrFRfK%JS*|x5yN(>C%IgEr=%F=9K)5sLH<+9=8(^b z3>kv5Hx2{}TD2$C!^7yrxif$9-M_D-raeMObRK;4=R0@2s5CDr%@L(Jrq~q)Ie1vP zw1=o110Y735sQ{%1KT7or%kzQQZn4VQ_Fqvg!rdldhY&*AAl~dQlt_z{M>c}nq{Rm zuGtkLf?!eTOiDOMtYtMSRn=^^zW&2|NLZK~s#qt#!Y{K<{`5SXUOk$OVfa>4vYRD6 zAQJUhtxRMUulZ6T9U;pK!P3Mo=#qzwzhjf^c%(wE8(X>+Qs7vlI6k6=@=KnsKd zleF-ljS+A6dsWlNV}*3y1>X?4r~7S8RF-_5vH}*2m~`UeBir}^QOHo|(N}b8;KrjH z+s=4c`me4i&cSbfg`@YfA_J! zIr-@i{>Fxts{siyUg{pLR$5de9&z5lGdA6V zfTHJk>V`*89Yg*)JQ*XSwyJXnJf9t2u-7eL_4>ZuzI!$+_zi8WET-bs~vG8&u+5T+@j&O8eC-We;;BVY`wYd3XCr`MwN7!R9N}$O@^35u4E(K=9 z#lP#S>lo$Nvdy~HvKd+F5RwwOx>HD3HTRN4f}Gskf$(;oHNbuLk_c3s;0O%52uCKy z|N351-e)RlDEP_=!$-L9A3yMud0+n0jP7pYkD-2SBU=Kf1c{QZCKl1vOP2DmY3b3L zWwP$FtuQyNO(+2i2Cz(zBgAd4xR~bEH@3~_?s?x$xA4S5dJ_EXTH`d7muknLkJp_8NGUZLfL2b3imW-}R5F3D=plo2Ga z$Ivu21%sAz=Z6^Npd@7@`;v* zMn7V09^*7*#Ty79V<;97@GK$&JOwo3h3ggCBJs0I?6QF$LEgwTELVltFLwo2k! zBeKqjzFo*I7zpa+jaH|*$wE^e^0!SwW|Ig3orSo9klP2yapCw`v!Ebs)KP=>Uk8Kb zT=rwOTlY~|$-?8Y%(A`z8)?{4mLynr2y11(IfM=dQ^YOE$lELb7-nWf?soXpiN{`k zJ|6rb=S{dg8<7gi)6~9lC?6(3MnYX@YZ|24_+JAc+3fn5%sIL>Wd$DJj$oHt%u6@`Dj zY{8$MX{Ui;@KdsbvUyt3bOhdDMt=oS+le zv+SM)&odbf=5(m5aCqe6-`)RX%eJT02>AF`<*{d<+PZt^15Z66PUM^FFuuXh2&Frb zW1krwe&*$;VXF)sORjmXDbmV?k6Ak@P+&~nbqiFF6ID68&L$5#5{B7LwRw>cKhraj zv$|d|vf5PZB(n0@7^vx~g02v$jbTp8t?C4<4pJ_n0j4MLq=Y?-ejlXAX(v!V?c=dR z08sXfM$qSSa1jDtII;g%uG*C}b)}qLP|U{cNI9+vLFp47R|4gFS3<+^(BJFUM4-$! z4YP2Wsuqp1!mlQcwL+4oIqb!46N4ok-{0Ea{}KYTtITQ|kneCcxc z96s=;-}u_M?!Wi^@NjoF+nvh-PpQdWLM?h45opC?t*C#H3bi9!thm@vQ}`^dQq>7J z@&g;qx&egZXyo-og&T;+-=s%Y74mY!XsGB~t~4N_uuEM32KjCjML(&)Bv#C1W_5M< z6-s$Mqwp&d$VU3DJClrzjUG69IHMc+Tt1h{x-tQjnpwGUp>!{3)#5AqdwRVyTMe-e zy>{?4W3_Fn{f%FmqG%*Yhln#9noa|xT!=-iaZY4y+p|-GO0--tJ^W1@uaSYvp_3?@nS(d>~RA&nH6NiR2M{XP&`8Q<2)&y%X_oZd_pFDr^QeDmUshJ*?M6oD@ zJ*pgmz^1)PVJ?$3OIM`jmVJ1f^AivXaa+g(%)RRZ=>A6@gtVZL=F~K6LZuagRZ^x< zRrQ>b=~6RAR|ri=-fO`m`C6m#@QW|8CZ`@w6{;Di6`)=uk66n=YAv`yN>*J#mZG>P z%4RZz3NdneCYQbdHk2_d%f=wgsDp}abZa(?KQx0*P;#R|8FprxHX1cUYH)|p! zXgX|eAv0pyW1~`$1JQu37(gZ028}NAQnTU-s?b4=3m}H_K#}6_Q7auD(m5kj$Yk*# zQXq_s!wyVRR7Fq2Gbe#oss>Xyj>utJWn@d?$_ja=j)I?KmUb%5y=|ujon}I2y3etX zBJT9pIE#=@)@l@zO&IH)d7XlPLPhs#2qRxH$nC@Mn6Ei&cu@%!99(qgZx4SdHS`zNjheNc5((Hd*F(@4!~( zlKBg-U%zSn^3|D);jN$m$O1?}cKmrk>~1p`jclwtj#uC&lj^~wjkdhkmwC&0xb zEpVQPB3TnL3js_X45D-mp7*kbo+UvlMXNE(*Viv$zZQt%aR-@D6K z8jSKZhOS?`X1(~#w5&_xV;Ep*_}X<1h&tAW3hKk|gkp^YgT!VnnYVxq6GPPoOFix* z*P1jWpZ3!3KG{v|hfA^svQXCMO@QPIU|wRos%RLS`tPtpYm370Bh%=XIQKxGjb0xo z8pN*2l?B;8w(f4*cj%fm*SYu6xP~4?X{Ml3O{OD-{YX9dBZC za-uTHJcGm^#KDoD@ z6r%}3iG+KP9y)gN1c5DC3WF3qG`AxXoJXB&MFaF|O_1$n-{O_NmMs9lHT~;691|ae z=wMAZ#z6xuO)=fPXF|hvQA8E?-d1=_n*&;9D$fR!9li!=wwh?~p@TPGdkcUWjZLqXSP1nar6cbNscY_mm@sU`Wd< zQQ=))9n!>O0lxxlU}lsjCB9Fnf?=rWU^qf6Zi<Q0r^@sCxofOVbBo<96#t6rL_N?5=OFS1K?IWs z<2$G~qDkG3ETZrN+AR`{>FOuNMp{bWK^bF7GXpt|hSz_MN2+HHl=DTvJhSEHT?h9^ z4!B#czKTOp2k`i#8`fR*FTZ@!tfQi_W!J%d)q1Uv%TqMn4^4w}nkR$Vb~`GQ3YhlYlh+>p!U<5Z-2tp-DJ z7QVlpeD#H^7x&U=9NOhFeIVQKoApJ>NJ2bh!}ova#4%!o=Lh4ZA~CY*p|#9O=^jXY zVUAaF5k?L*m=0Yf!yp?H_Z+`|44afFWQ@Bm23{nTs=%`meC~?=@_`dKUY|k! zurpeK!XUXX)sys2A+Re54G0;Q;6)p~$mk2uaNY!i7ZZ$k>u21KMy{^SvLC zBHZJAm{3${-X?V2@G^k7m?5$Q!Cn_eF2&w81RFE(abwt!TqtX{Hg%kDR@b+KW^>KoQywR)&avnE|ljgXF%u4yY4 zEy1r_uigChAAKiT)0k~Xjvp8uy>>=-H^HG=UZ5)w;89X=BJD;;9$1s^1HoWRp?pS% zl@9=wcEe4vaL$l{8lxkpcO2Y*^8C5zT}f=UXqsXqy22C7`eiGZ%v(^%<*H*R_Z~U4 z=jdS)4n?RwrOmRX7Y?30)@U^FB_aRf<)R0zNRkrRKtnA6jp(|BZRa9vyy50z_|Iv* zMe{F7STWmUSv5oEy)bhbmFI|aVeSUNySkmJ_;0b7jZ|{=HI1sukeTwX?x?q zzSj@zy{sG$YRma0Q+aLc559T4)Ra#+qq}F-l4a{wT)BAO0;Z5A2}`oKLf*&%_47RE z&Ho<;vvF;2S9rNJUKC zKoj@jK<*(FrB2&Ce5)4tXmul{Rrt9Wk?Af1IiLo? z#NK0vZdkvG6`myh2)Bbd8GtnFSFAR4{rxxIGBBf`+*0E_v>~4)Q5=0Sf7YD;^qDXI z>EHdYX!}kEnr3z9p@X+veGM&vJ~IHTa+%EZNF;eBHh{%{fo%3O?rcqajO*8J{Pdl7 z69Uf#Lmo+n;vnO4LyFFI!!1kf@AU%dNcG%ArninSluJbvu#nZNz< zk1kc4zR1Fe+t#sB;W!S)SR`uD6&Zz`G^OwH5h%c-hAh43yE;@rT{fkJD4L$xITUIK7feFZw(j9nZo7kL0mOR^5HXKa_V7;@!z<=bb zqH^5``|$VPe%G$)tN$>XeQ}&0KJwtdou`=3=JMIBuImN~Ax9|y7K((h_>mWK`9i+X zT`Ua^&K??^HM4gH3v5STfgGRR!D6t4PJ2K^GB7~Vn;QM*Gm+6$hJw3d`eByeG%i;v zFYVa+%$AoYDwALHAoI-cD8`W(%Rt*x&mRH*nkqb zOj04g6emn=dW5#cLv#P=bH5d#LJq*DRci+O`v2@7zush8|8~pA--OvC61oJqGZ;aw z1ehOOL`VQ|)#|nQCB;p;q3Uffd1zqPHETA!wDpBHil1f;FamY0U8fZ1ee=E_`obTGV3Omu z8PNg={%YgOD}V2kpZCR9QwQjxIYa;Xx4!tN-}=W|auz0s%O}pAS+{Hzj1239sz)Fo zdzzDrpM8CMuLpwqQq*X-Z1CnVe4M(gM~hfm+QeE#=oElReJtP|Ej$}WL}j@~9ExP2 z;$pLWeFh~0W(cBDYFdT{%2GDm;6&)sc4u^VN<@p&DuT1ao|XRml6-L4lNexsHK1Drh6+=P|wt`O@&|koT?2N-_=SU;j6g@;JV&87Ma!ZeD{q z3LTRE-5RGMv4s%9Cwl`?kPeh{jUW`a4Sko6LY6y>iXV|XF_gn`iuwHS|JHxV6-p7k zfMUwIgR?*MuJ_#k#KW{dw0sOiXuC8%+A>W;*S%R?%|p8ua9%@UWCbW@A8F< z+W{Mmpk^KR+!kQ#ezPm}NE!1c2I(i-`CUom5+W}WwfhzQiV9<9BXh!-(5G|{J)=lC9w(I_@uKJ zhoM+9C8}6t5r!kLV9NQVU89Gh|GX??5Lcfd{>&UJAg|GAz5NClR>|H^`!+-Oli_v-NYeG5}IeE=(_+ec3! z7e+_^=H7b%&D%8$BWq+-RmJa3%c@pJ>!U~A{jxJiym0(>)m-^U$sFZufz3!1M@rvd2S$=AKzTLWJzy#?-WK83C3z%V&x`5 z{VXl%IHfqb%Py~*_4MuTy5sJy{wtDyaNBh^J@ow3^+v;&oDa3g5ivS3K5OOx6oL6F zUf>l^petx*Ly#ga3ip{7t&N?6X&^{_cyz=;jslJ8H`apLLx1@BFLmV%U{gtV*PlxT zZ5)==i{O+V(5K%2AtkXAA2uqs?Ujshe|%wJ=a1ZayI)6MeoSN(zkAbFKYMX&Dre87mPEJ^bn#N-%;*(`bDir};oZPP^d#l!Xpdf^a^0Qcks%!+;b;i>Ue zu`Coy@k!!wlsUJ$vH%WnmDm8J!zhc9OL4{YAB>FO)j&Ftv|zIu#P zLsudf42ZvE#N~2UKu!~rc`6Te0g)%@svZHK6KJ~7D%ETlv^%Z3Hy(L5IAc-L$SR9KFA9tNuFg??XFwj_nvDv1HlwJ4rBn!Q2;_vk|-z@iffmz-2U1Lp2tt2 z7*s6V+_rb;&6}b4KU(DgM}tk|;q4bKDX>QqN;H6ajN+K_K-u)pjYO*pMf zUV9iKz+rH?N`$ImMBzsu9iYB+Clm*Br16yQ1Q2#I^Ez(PwT}x&3-pZ5Doi*pPANmLpS&$#1%OCJS0;xC#^%7pYecMx>WsI+%y0Ko_ zvHe|}u1_Ah_z>Gg{-FC9h^=4B=hrP?9p)&qDPpC`mg%e3o9-mgyaco^Pu7x`4I=iU z@nw1yvBm<4aHhR%*5F`}gfU zbnxIMt5Tod#K@O(e4OqnR~*3yX-!~o@X4F6@0L!;ET1_DE@f126HlK(@yBXh4pbPtc6|>ru z`a^VkPT!zS$6!gwu~QyPzLqeL1!8IrMnz?Dt0F4LFf^C8<+M6(BRLfvN}^pN2#f9D zIwMa0GwPgvilc8=m>)M@kgl)BqkEvqF?s!+lD90`7c8X(o3x$mqs=2lXNQ+V7R%sgqBs<`<|UPxW!fKVIWI(l^u zY8`X{u-@6)jbMpN#{X|kIKwZ!?dYrJUyl6Tw5*3;_~ozfbJ)1@%8$JF{n*00oc0Vt z@vsmDV$}oOmE=m425>}XKAO(#a(TA;S&511f3weqAd$52!41x%`*bs=2-)p<2<>AEr3T?3X zimojl{?9QM;+0W++kxXpe){AiM^2p}n&3_+^CG<`0cD!s8F%kc*izhKO6@y*rS)syC=wp=GMs-kni29WX! zEsn0(knRCS@0+5}_p4ma)7I6yYz$Te0*v9Yq!>qTe*+M+r#Gd@*@baYS#fNZe?Cgj zX|-=72*ZE-^txEbL06-Ff%gWh=ncE<8;IAh}8+5YbgWAE3B#{w)*=;3!H}(yc_n zD1g^P7v1t_4V8n7r4U*Hvf@k|YjMLDADH{JY;$9N@OqW0u2M6d36{lmB1p1{~` z_4x-~)#gP*bB6{7NCKei7xI4I*VCKcB0V-{t?XCa=iayg^lqSJkwU^*$|jsNkuyHV z1kp;FTvs;laX%j0%v(`^B?cUrxQ4 z`9BGsH{eB;Jd(Z~SYhENUNkA5({h!!<}3u+S%8OlBjAPCioK=0P89PzqC>*n@|qEw z5{rQ4xM?y9ygyY{Nh0Lxy1|uOC2iM~sp3C%tOkdm_P8UQQBz;XT zt77sKVdDqFqLED)!hWw;)PYe1(HO;Vg>xAdZ~dZ|4N*H%6rm_SED#+Y>qL2n!HR9$ zwo{&S_VKqJeYNB>qTW_u0e@z)Gg{-cl{5+JKBUOt>{whB~a~!&woDOj14@I0U`A@Of zwQl9wZM$E0FU_1}&P{w72ag?Dv3P0ZE#Pb0d0?Mp!Z(?I{pNLR0VJhrkyHv$0$6Fc z!>7)yoVx*1cM>^D^(5$821($&f*?lG&|&qyky{9f>4*j=agMHhd{rn&3%+TCigtR# zOHgpkL_KRU-?hApf?#A~{A=I;)|m^#(;$!&1K#C%OjM3bzggZ-`Ue&WbVZBVlaknq ztk*?^sa#7MB9}wG>{FR^Yns0i(&R`YNx%t%y31OGBYdx-m<%bB*lvKJ_Ozvge4$6b zx)nu&wobY>oSsOS7M`YjRS08vtWNd}TG)Ph_Mlc)9GeAzG+BpbDPYnHk!+u$#8g5k z&w+xvBeg9}``k0r*R_hfhLjOk!S1v8yMt0ieBTn_SQ@a>!H|Z?+pUk4)$Y1m4kuA!rqx+Htk@O9s zp(+i_#Q&PMWjmz0Ba0eQp`tY%%>o$+bY%*x)n(wTVf7@ep7lIC#Vg|Y1SfGx!K)Dl zB7Icj0Lg5fSwRyun(=OXxtMGn^M)*nsB-4YG*E9Ea?=?_%rV11H(vMNZM(L+`!~m_ zmyopM%R9EOV3EZEl_CUoAKFhmO5)VbF@h>}{hC!P5w*fy00&%cYy3%fsjE~dOqLsI ztg6@d@A=TXZzDy1%qj^MbLzyCq7|vYroy81p(jGj3N}J9JCS#a&!C2gXDK0RCWZds zktqT6umi!jVMJw0Ftjbe!pn?f3f5<2eC)q}>u<-(%p-}9(?YycsV*WU{Tcam^&&6CCqmJ-{6{d}{~ZP^x{Ja{ zT3DJZoUzyCnvro^mMpYM6lmJz6oE>-oq$h~$33V2s!C=KFwHQJ^5iSes}L$mup^Sy zO^7^Qj?M5>+%4Ndq2k24qO@Hb)-PN6sSkamm@kYsY7!Vif!0IbTwT^LzT7(fbnfB{ z$eav|2jmpcqk3yTo`Zp&|s_tvWDC=UK6I`6$YRrZQ;QDpW<4cEMvU zo;z>H-jOuzfAZX!bC)j6?i~WwVRzEU0IQGzgb+cBf*k0^fkR&LK~(vM@-z-zNt%$O z5PD1VR5`3LYL8gSh*Sq(dhtA_m)hV5sgixY(fErW{==ACVknLtFvAK@0Y0ofg`noV z5`k73=)F^Gkc@7y7O1%Biu}>EE!Ax0Sak=pOgn{_?;GJd@*HZHW2(gMZ#7&f;}u^| zAmk+35u)l|y-X_}YWEFne_`lXU(?od?1rQO5}%|Cfvp0E>%ZW+RMCMy=rN<|n!Jil zfjx}_SR564?352(pfKAM&0~SY>_XY7lJ}RRxYDs%KJqHs(10m;mvnuOCl9*IfiwIf zYDY03(MFw&N|XW^hl!7-1N8YH4ZDI>sEkgG?>M+uiOLffLHqdD92PtR&{Vjq%e1i` za?ScppSa^L6FHNu*v_p{l-85YSQlP1j{n3u`LK$(L9BywW(S;)Q@>zO98$WLdR&zk zR^_`gc6s$ybF5maTPyl+SA+FkY+TS60_&tJFpsGUKAO)+{w_sZxaLt)RxX2b?`CpgpM`wmG#vWoyAX^6wVbfV~52)qU zX8z%$4__F)6h6F<6~jlCoYA>#cG1wh+5H1Ex_f#`U7Dum(fD_N{^LtyV+l(l)C>5+ zAZvx@IM9j^>S>4i<=qv%_shC6g>c9;6eY>@Si-+7n~22zO|@HyazGM>SgAj?u

    ` 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[g2n+AIZh2>e;Ur)dA+!wy_mE8K-qIr%v`IYy* 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

    8k!QG4$E;`os;Ic*p5XYm9?qz=) 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 literal 102281 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

    n z*m52QeTA*P3Xj}*mgf_;|IOxdF&i=6#OzK?&xGlD8cVtN_A}s>YK7C(njXVUbnl>m zE2WyHVeGNu44(P$MrO$iL_Xok1yLnf1xxBbxgUf;a3TlRlp|Qhb65Mrd6p7`(*}+^ z)B)$cFvfPUjT@I?eI%09Gt5c^(=Qwcc7JTD3d_JUi1#*??zNzy2Fq^DYDQHwM73c{ zi&?EuXVY=jjDQ+st0Sq#JEuQNSGeH35tP-e&$D8kT#6iKFIU^o^X=#SotOOiE8gt1 zhXs!aiC|1%LZhaE*|K#>;CQ^353l2cBi`!mZ1r|NzQY58N)1KFy*_M!iyXTmS7lLZ z4kZ~MHmD-6QdSBuwM>Z~Y}@J9=fR0uRp&2V#NR8I;NQ*dt?6WYbFx#A(UF(RpC1H% z97kCOUs+%T+e8Hgx%_k`;^DAgmDM6iO@J&!WcM~!*KfZ5hC6RMa@V0DVpg<afTWG(>BNYe1%8l`1zDy4_fR#DW|6XF5buFyg2HSlwnDGr}`N% zQt%tm@y{c@#lz3)VCX2~l-6U1EnWdriuJD-;Sg4QkOMY7#l1)@FKuju7wZ61K&-$0 z0ZXu^4;zd$wpZ|W#uGN$;JpoGUS-l}a~6!uPUcm~`r2U@jq%lL!Dpvgb&-V|JQ{m2 z(t}&0eACY^aDb9hfddg|C;Fzf)d%%(R4|#93x{ zbFj-93%9`{T0}SlE{e;Ki&KB8zC2jr>-X|~uV;H-=da#9jABzMqE1QVb?!tT)8Zl< zqU38=wzgh8`SP(-Cr+L{{mQwsMNx?6Ky)t_@@n}c9JMTJyIEmNCjo>zFRHVbFTwA( zo_u0F8s2}~ZEtzw+tydtFuopyyb6>Y0K+;Iar3>g*BkZ8*|{=Si^r5dCYVzJMQtF=NO-{_yCR9h|d5f7`B;+ z*1EJ=`cajP@^h@;V{7+Q6=k^}Y%nmo(@Xf<+h^816}*o4%I&75H0GjWVXtjjc3q)q zxXPn7cy(azbn0P#CGb$J+hd0kYj?ghvwYkW30tuz8!^0qh?6wwYS|Fccv!dB2Aw?_QI1dJp0T`FJ9T+>P8nmhRe2h;5va3YU@2{ zHea~=m-}WnpCZk(Z#@3QR~~)rEw6jid*Aww*bjLS!JL<6oWNAAG*?y<7q?=MYLGzm zl-t=Xvj4c$+nM69ZbVpi9_CfyVzVCO;Z3mXVo*HZBm9BRE2vnf?}}SuV&izPCnWuD zKhwOm!|N4bm2*){0IE1Ptgh9k9PGRKNhjk~899R2P0pHKR210^}Y}H00Yxb1n9l+I@Ijj{DD!)iq-O$?4x`3=mi&LL1kAJ*8 z_YJCG?{uxPueuYhI-YFE?prVMwY$Q*|G9VILDj5VUat0^dAf9~{O^1*|IRZ{KJwHP z&mTWlH3RCM4OL{=q8rMKqAZGXNrJ%AL?_0bekihI;FrJo_3u9Oh zq3AKyZ>f}5Uby{rMV;OxEM=|^c-LMn?M1P$R5b1jw;j1)cMOlBZgb~Fwtk$NDWPTV1ZtpK+ls)5 z0V>)}vqks5FEPqZ=#44@VlfO0Bgyd`D+xH&DHFQrg>`pgQ@WRTC3^<86#J@}*(fk;O`DH`gU7?s1VSb4k$+YcL>tc5*jg(Crvc1;wznPo012jEJoAs=K{f*XVXf zucwf>2B*9JQ@f3p8H4&Yi^4itHHP1^M%FWD-Q2>0IIX4UmODU_t?I(pi)VhPIRAAf zn(Yon!~E?+s|M{7?YFm#L10kft-l!G^UtvAtIQ+OojB-UO$0f=w7L1^Z$JEv?|geE z>z%h?>ib2TCd7$d9m2aN;CkfM#2(3Y7F6}|uY7$g_22Q}TV>KYie@X-d|46#tKFn+ z%~z(I6{#);EK9-8V%|n`5*uj89?KOvp&d_@u+y;70fc4akE5y^=XAA9E+o1vV1CV` z$b}o6W>(^`4Wo5&-TF(pOTHQBO?Ry8!s1f2edTeyBCr|bb?#F$t}0=dzTN4oa!toB zXBKZ|-{|#6XX#l0XX5OP+eVKg58KAl_<(@@!&svgYlKlg!|X)6e+FBY8D77%+|^U7 zn#8X6hc$JVPI;M5V$~41cN>Fs6sXZxxdXXavzQcb6D!NiG@Y;Hlk%_X{6qPZ|E{|H zSlfK-geul_pgL*EjV5MRh|qb}U%zMYx?gAO_sa67I>D4vaYZ>;cy=$HI`O%0eC6?H zpRU~MGL3((PKB;<%`N#E_Ip42z#H$r^^VbC2nOj3Cyssfk#7Q-Qc0&(qtpcc{P`FD zs@Lm3_?p*agBq+8T9KGkI&W$}k>e?{<~$`;uk-8*OE0i!LpbJ~nPVkSF5@zYR)no* z;qHCo5g#38ljqsa^K5)uT8ayk8Otv2Us;nGFrB+g(|tz@vc?%Y&&VD*W!heQ(q-c= z!rGd)3aw{4_D|P}YHV&gs`7SV9IGc+Z1o-1-O`e3^RR6UTCl|$^<3u);hHwpCzk>*?ao>95(RaM*Eg${#pMCear!Z)k7mi;5b1(3d zKlYiwxNiS}n-1TA1sF(*U&*R$PS^F?8ZcG$RUyXy!F=-abn`3|>pU2=?IN;<3f4cc zCgp*=>2$A0t9Jmy^Vt^l(a@Et#kKJ!>u=to%-jmt;WO!FKE8$9j`J$zRpLa}y+Dej zn%|dixkM~Lj#U1qeYeif1r&5-9 zV@u$rj|(rEFcHX$qI5A&dEA$`W)ECPf(25x@X9IrY6oK4#$Xe+?0{ZlC$tmyjgMY9 zO~yOG4r1zr-$6hF%UP^qMxpF4l{vtRk^7f+y2GxWSAIcoSV2C#fY9G+Y4c^Y>p^sy>! z!|o%kERRs=g?--h7E6Mk+itw+zkKIww{mZeCyXNE_5P5HBC2+N>FxJ>B75Z7=VZ>R zt)r1T5wRYQb70hs1znC=#%z5=cqSmDldeCSH5uL zbXWv!+fY~=Wht4Ig-O2V*^!5O8o;cn6~V(4=v#iF|G>XyUcV@^+IK`}g$Y&x+uGjx z^cVl?@#mkBp$!wsbQ8Blw+CwZYNPTmPL`4^N)cd%aNt=%TuuZPdNvc2`0FMr|v?|iSoWL~BG zts$UJs}jQ5W(_mi$ND>Lan7F|_tO}O27E7^1@`_cSv26|n~emq*#)WL&-Qz$a+to< zu#(;0u3d!|?6R~M|E8`XVH!W}eWS+2TLC@<&~{jsK)8U^q?f5j;Tozd>O~f^-XXR) z%`Sfnb>!%hU*M6wgKTlen$Fm39_2;J#r(qGTq;Lv{kYEyUTm|~`$!Of9oydG+t2iZ zJ(HyJSRTQ!3=eYv9Xm`105l6&at@JBGPS|=YNm3FFacJs+yS44D*R{<=3~JQnqI-+ zcQ0Iym^{ZLl)NHO%qQ472)j&*hQE+6r?v_~$~l|7gcAm) zD6Jms@{6Ivb#+|4L3**vNX7x&lNokAgPUGfO?A0tB-&2*mWZJ))Xuoo-piV5swm%b zW6+VaI8Kc^71+t67M{n7;v4>4}N|6<1CQYd=n9K1v z=&kzE+JJla-*w-&9)HYpvM>I5TP&+W5mX{Av{Uz z&k{1T)w@`cvV<>>i9pZ>UdXh=N-fdFr>w zst_e2yFESdMGGo{fV##P^E zUE%;t{+B0dwk(ckgc z@7BFt?YoSp_TtIofApzOymJ056IWFyEPvGXOz4xfNNBZaimfmSxmc(tdp=chfJ-PV z;~l&4x+8eA#y1PGErKi#qIs6U@NU9d2}km--FW!OHy?l0CRt^M-Dk{&mSy>chadXc zcfSw)R{$Bk>o_5HGd2fvYtM$IH8eeVs5Rl}D2rmzv`D)A9Wqglx#4#614|dSgq=-S zYt=2%aemfc)k(e@;Dz?rN=vIXJdD3qpb70_pe?%jc5NZ7-`{fNa9~nN-e*zH#;^i= zjypv6#c+xuuiV+bh0fc2YbJmecqP}-@bK6DA$>(SnLclR` z+IHx0;^?Szdc6Z+%Pm!skY|9Kq)Sfallhd8x5vVWHIQ_0*fOJOn z%e0nI)W1cn>}O1@umM{g#$cBl%a#rsQ9v!4Lpy((J^HWmlb>otOobJZ?P?^^5MebX zs}AH@$_Bvy?SicZI2``|HxA$M+kSte?nG@?n_%;F@rloW=AlQwX^^Zzp?1?*U4tJc z^i^Z5q^Nd3GAXM870QZy>`bScgNBLF@27XMNuE$r?L+?6}m@GjcRn6Z|p!*(#KiWyizmTFgqRtXey=bcbD zzZL<5Z6tQ6J*CmDiZM}d7|%4|GgZK?FDhiQP%Ikb$u4lb6-dgK79-MXI>PTbS# z9N*>es=MkeSv#a*6b**O8YPcehr8Xf6Kf^516y2swJkoyZ8y82U0li(JWp5-E9q~q zrY~n-`>(6*7nhM0(J4ykgeubyq^ozJ{TSe3r(mO_@1MNtfARg;uXIzddhGeh(0nss+XOk=QDc9`v z(8{_j^f=GbE7bn>pnRs|#FA;UFa<&xC6JDyc%?tE3o)DVyfmG_Rjdz3gD_6=42C76 z;>B{k0^Y&pjC=h~%mPeYq-k0dSZ;yW`9HlN9L0TI#Z-6A+7-N-8#=c;+v;&i%zx1^)eg5IECPom@=umiV zQLNpM^0lYEsKjn;!7NCiPxMUS@r?3IpL+f|*jHtFHjk>=0A*O~4|Y;44-E5o9QU7i z?&)@>PW$KCV=vry$35H%z-lF(V2wl_HyfSV(?GZ#>O?nk0VO%Nvnjhgd9o@$l^B9W zJ5STS<8kA{<;};!vt>o45XCZ=7O*wm#R%ZN7pL1MdS#0Nskw{e_dU0>Wom?aIHVpC zAM9^>q1f6pS{dn1HUKmVt#l1b!GxugtW#ysPU5_2#bGJ!>f&Tu7GI_@$JkrvJ5=Y;xR2eb9)gsQyF>xf&V$W^+Rw| zGs>YUs+{VU;aTlWC%^mAKR$l?1QS+3)Dq9O7?lHNdek}`c@1&0tf(V>{M~qko<8b{ ztU{%-V-53kh+=!X^W|@T{hbfK1q}g|v{ybWMv+&RK2Welws`)9XU<$W*9nE(UGguT zI>E7#YK74~YLueuKuW1!C37})FCR=Z7&MQ_du=GkD9*!^1rVBtT zs)Y?-3Ty)VA(eTWr}I1;fn_ZU`b-?`QQVs{!1_Tyie>i-fz4m@OBmd!HfK}pCqk#U z-XCoAdvNBbw=Tmodxzsu+;drMg}FF#?&GKy+*RUUnohCG72~5`ZzUecDzexRAj`HF zGr-?VlkEfJv2H0SCy#nOPqEBd><25oK^z2f$Z{$V57?R&)hwNj@qA=HkX*~6ANa7z z!KDFV^mQLrpf)>{q_LAM_KgUzWTqsXbCzTMDlfPSP#NV5PUnhqn;uy5QdM+c``0y? z&C-P|iWi6B0L$TcEvLIFfv$ysw&vYd%m^z?%$W^a%)%}UxfoOF!Jg}>(i#R2OXu+X zd%u}I{oCDPK6@Big5$bDqOK3!QbIRcuG% zPogjkLchU@eA-5V67oWp#O9y+!e1TSxBuXEM=+K(JK^EC@l{v}Nwqb}KKsxYJ*<0G z+2$L7U>L`KS%ub+&yrcS^&~G6USwX8ijtbp@JQ@?Gafa6g>64wi&pyA@r_qm5@$|* z8*>haEzVGGT5ZkYH~Nu)w+wFp>;U4BQ+NTE*~VbRrpHkU#W8TW1`{-A7ZX$!30IWF z${D--2&aPPu``6hH-pgyk-ik1+!zp{4`c_ zkmtL42Uc!?(d!MsNOUuGIIM7BA7G1N1FItIhg3y&@)BGxu8bPvuP$W%ts7X2jf+~k9h-KC7A>80ji##VB~S@?6>#!yjlUe_w^*jOvLOI zOzC}n;M=vp6u@SW;O7%m7XSo}dmhFaHZWFz8noHT6Bv8403j%Ze-z65UqZmSgm*rJVuW(sRg361tOeO>G72$qn%ipV1<^4#k=pW)# z#R!a3ptSI5F`1>jLx-h_m1*iMm}4HgZgmY$wmX_xnKrKXopId=R5Z*7q6YMnKK5_& z7yj^CZ79J;9$)6wo>n5Mnxss0r7_F;OxeBvmK}PFR6E(Y24C>)r(gK}PkpK=3g26* zn?hVb+T&rx7p(VMF(KHsWjTv$vm0SM#nS$reGyQSPCscbc`59c|My4!@Lg|s@YS!n zmjw#L^SpfOg)YNao8^Tc;%d`^e-)QB(<16Pk z&tYI56JP9_DEJ*4J-!~N`0D%=Tfc9TfcY(84A%!Et4y@aT;ZcoY-cQ6T%^?h=G{hm zk~wVc8%@lm3RU3hM*_ODc1# z1iT~LQC2k;S^RFokFsFY$2#{`pV+!}H|qy1O>-*6x6j!s++a?}NTQs|%-6aw%wn;_ zqN3j$`l`{86UpRmg>|-E_eB|2T(pYi%8uPOa#`C$jadyKtf=fQ^1eW4cmN{oJjX_v zDZxC9dXog3#U%wQ1h}hl;3Rf&5K@ms;5E|yIBPbv7mY}!&q`#A9cku_S(G!*8Tr3Xip7g-sKa9 z302f;Cg16e)_I2?kEtG!&OEG_p-w!gh+eAs!dWXAD(Zq(oOw+}gL%bDx5;$wVB}i? z4LELg0yA%@CTd9WlnUc5R<9FH0|Q-lw4vlZ5$cCd--HH^+>OEG!tX*qfouN;@3UB&-yTF&kl}BWi))u54o`KR4X%tq0tc zh3J5-dTZfzy))*t{*tBGEd>Ln5I_Cf>9fDzxneuICtFoG3rbpMU8P`}!cj}KWk27) z?_Y$s{JdCP6hhMzKN8Viv6z4CFF*On(@&}n8p~u*X^Qp;r-H>{V6S|Sf^H5F=X=~j{JhA0ERBXyGuUi{z>iRFsy$g% zl_g1z$%%M$jGkrksfEMLm^?=X3&S(>8aZZi*5aW zl@1LX&DK+tcY;#^@f7TWY%B2BE$OITDh_+Ksjr)zV9{N!5Q8tR09oZc-L7lDMCezxsf%@<6;b>8UStaH((Svt>>w8%@{#Du#-D9)UsGpbql@CLqm)YA4iY>OM< z!a(n^TDzOgcHp%A5NzPH4lkP?mtH5y;sx_cVaXZgr}#a8^$s@H9eO4&VK$;U#laC? z64tM*a^JV%490Mti?rf-kyYiU!aVdpPK*45tfz;w#DWbI};z|)<`>P2rNP9Ep&E#9+fO5IpXm=s54jtV6TG*4R5AgkfA zIZP+lo9-#nSuf4D)OA&3B&&twO^DDHuSRlp2r(1ETMZr3hkqz?q=K**x@Ra|JI9C z)P;zhthDTkESaM38)qA@VWxNke8}3XR3lg|DWnWI&YUzr*#JIfsv|b-nzPfg8caio z&|O$9y-1xT^{0hvfLW6I;Qxx5N6B5rgJYEdHc|~Po1UKDx_oK6y~r?t9RI(py$7@< z$9W!DRh@2pdEU%>lM`kz00tNYf&c-EIf1qkDNz)uunM-8mV

    M@PGB@3DNmk{o1N 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 diff --git a/python/edu/resources/pycharm_edu_logo@2x.png b/python/edu/resources/pycharm_edu_logo@2x.png index 6c186ad89e6d2492a28a1f8303872873e3384295..4abda66a9210ad546b704638f9294a1c7227ccb0 100644 GIT binary patch literal 221940 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�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

    it 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 literal 223425 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

    Y^y-RPgy?yok>mDc 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 +IfJ&?JJ^*6G8zRP@Ij&_IO4)ZsqfZ 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 Date: Fri, 24 Oct 2014 16:15:45 +0400 Subject: [PATCH 195/217] IDEA-131653 The "Value Auto Tooltip" option in the Debugger Settings menu does not work properly --- .../xdebugger/impl/evaluate/quick/XValueHint.java | 6 ++++-- .../evaluate/quick/common/ValueLookupManager.java | 15 +++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java index 9a185336087a..230392c1dd3b 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/XValueHint.java @@ -181,8 +181,10 @@ public class XValueHint extends AbstractValueHint { } showHint(component); } - else if (getType() == ValueHintType.MOUSE_CLICK_HINT && !myShown) { - showTree(result); + else if (getType() == ValueHintType.MOUSE_CLICK_HINT) { + if (!myShown) { + showTree(result); + } } else { if (getType() == ValueHintType.MOUSE_OVER_HINT) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java index 19861b7fad8e..faf3de854304 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/evaluate/quick/common/ValueLookupManager.java @@ -28,6 +28,7 @@ import com.intellij.openapi.editor.event.EditorMouseEventArea; import com.intellij.openapi.editor.event.EditorMouseMotionListener; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.registry.Registry; import com.intellij.util.Alarm; import com.intellij.xdebugger.impl.DebuggerSupport; import org.jetbrains.annotations.NotNull; @@ -95,12 +96,14 @@ public class ValueLookupManager implements EditorMouseMotionListener { private void requestHint(final QuickEvaluateHandler handler, final Editor editor, final Point point, final ValueHintType type) { myAlarm.cancelAllRequests(); if (type == ValueHintType.MOUSE_OVER_HINT) { - myAlarm.addRequest(new Runnable() { - @Override - public void run() { - showHint(handler, editor, point, type); - } - }, handler.getValueLookupDelay(myProject)); + if (Registry.is("debugger.valueTooltipAutoShow")) { + myAlarm.addRequest(new Runnable() { + @Override + public void run() { + showHint(handler, editor, point, type); + } + }, handler.getValueLookupDelay(myProject)); + } } else { showHint(handler, editor, point, type); From b9dce998fedefd9e7710c68ced7feea7b3661a48 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 24 Oct 2014 15:35:12 +0400 Subject: [PATCH 196/217] [git] Provide more correct equals/hashcode for GitStandardRemoteBranch It should consider not only name, but the remote as well. --- .../src/git4idea/GitStandardRemoteBranch.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/plugins/git4idea/src/git4idea/GitStandardRemoteBranch.java b/plugins/git4idea/src/git4idea/GitStandardRemoteBranch.java index 1e3467dbaf3e..a769a213c0d1 100644 --- a/plugins/git4idea/src/git4idea/GitStandardRemoteBranch.java +++ b/plugins/git4idea/src/git4idea/GitStandardRemoteBranch.java @@ -20,9 +20,6 @@ import git4idea.branch.GitBranchUtil; import git4idea.repo.GitRemote; import org.jetbrains.annotations.NotNull; -/** - * @author Kirill Likhodedov - */ public class GitStandardRemoteBranch extends GitRemoteBranch { @NotNull private final GitRemote myRemote; @@ -52,12 +49,24 @@ public class GitStandardRemoteBranch extends GitRemoteBranch { @Override public boolean equals(Object o) { - return super.equals(o); + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + + GitStandardRemoteBranch branch = (GitStandardRemoteBranch)o; + + if (!myNameAtRemote.equals(branch.myNameAtRemote)) return false; + if (!myRemote.equals(branch.myRemote)) return false; + + return true; } @Override public int hashCode() { - return super.hashCode(); + int result = super.hashCode(); + result = 31 * result + myRemote.hashCode(); + result = 31 * result + myNameAtRemote.hashCode(); + return result; } @Override From 557baff4a600092f4ba1a18914305260eea2e480 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 24 Oct 2014 16:17:33 +0400 Subject: [PATCH 197/217] [git] IDEA-98693 Remember target remote & remote branch in push dialog But only if it was changed from default one. --- plugins/git4idea/src/git4idea/GitUtil.java | 29 +++++-- .../src/git4idea/config/GitVcsSettings.java | 82 ++++++++++++++++++- .../src/git4idea/push/GitPushSupport.java | 16 +++- .../src/git4idea/push/GitPushTarget.java | 15 +--- .../git4idea/src/git4idea/push/GitPusher.java | 17 +++- 5 files changed, 131 insertions(+), 28 deletions(-) diff --git a/plugins/git4idea/src/git4idea/GitUtil.java b/plugins/git4idea/src/git4idea/GitUtil.java index e846e6045e02..ffa394211faf 100644 --- a/plugins/git4idea/src/git4idea/GitUtil.java +++ b/plugins/git4idea/src/git4idea/GitUtil.java @@ -25,6 +25,7 @@ import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.ui.ex.MultiLineLabel; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -686,16 +687,26 @@ public class GitUtil { @Nullable - public static GitRemote findRemoteByName(@NotNull GitRepository repository, @Nullable String name) { - if (name == null) { - return null; - } - for (GitRemote remote : repository.getRemotes()) { - if (remote.getName().equals(name)) { - return remote; + public static GitRemote findRemoteByName(@NotNull GitRepository repository, @Nullable final String name) { + return ContainerUtil.find(repository.getRemotes(), new Condition() { + @Override + public boolean value(GitRemote remote) { + return remote.getName().equals(name); } - } - return null; + }); + } + + @Nullable + public static GitRemoteBranch findRemoteBranch(@NotNull GitRepository repository, + @NotNull final GitRemote remote, + @NotNull final String nameAtRemote) { + return ContainerUtil.find(repository.getBranches().getRemoteBranches(), new Condition() { + @Override + public boolean value(GitRemoteBranch remoteBranch) { + return remoteBranch.getRemote().equals(remote) && + remoteBranch.getNameForRemoteOperations().equals(GitBranchUtil.stripRefsPrefix(nameAtRemote)); + } + }); } /** diff --git a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java index c3f9b6d90a94..faf29b0e15a0 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java +++ b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java @@ -23,15 +23,23 @@ import com.intellij.openapi.components.Storage; import com.intellij.openapi.components.StoragePathMacros; import com.intellij.openapi.project.Project; import com.intellij.util.ArrayUtil; +import com.intellij.util.ObjectUtils; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.xmlb.annotations.*; +import com.intellij.util.xmlb.annotations.AbstractCollection; +import git4idea.GitBranch; +import git4idea.GitRemoteBranch; +import git4idea.GitStandardRemoteBranch; +import git4idea.GitUtil; import git4idea.push.GitPushTagMode; +import git4idea.repo.GitRemote; +import git4idea.repo.GitRepository; import git4idea.reset.GitResetMode; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * Git VCS settings @@ -70,6 +78,10 @@ public class GitVcsSettings implements PersistentStateComponent PUSH_TARGETS = ContainerUtil.newArrayList(); } public GitVcsSettings(GitVcsApplicationSettings appSettings) { @@ -232,4 +244,66 @@ public class GitVcsSettings implements PersistentStateComponent iterator = myState.PUSH_TARGETS.iterator(); + PushTargetInfo targetInfo = find(iterator, repository, sourceBranch); + if (targetInfo == null) { + return null; + } + GitRemote remote = GitUtil.findRemoteByName(repository, targetInfo.targetRemoteName); + if (remote == null) { + return null; + } + GitRemoteBranch remoteBranch = GitUtil.findRemoteBranch(repository, remote, targetInfo.targetBranchName); + return ObjectUtils.notNull(remoteBranch, new GitStandardRemoteBranch(remote, targetInfo.targetBranchName, GitBranch.DUMMY_HASH)); + } + + public void setPushTarget(@NotNull GitRepository repository, @NotNull String sourceBranch, + @NotNull String targetRemote, @NotNull String targetBranch) { + String repositoryPath = repository.getRoot().getPath(); + List targets = new ArrayList(myState.PUSH_TARGETS); + Iterator iterator = targets.iterator(); + PushTargetInfo existingInfo = find(iterator, repository, sourceBranch); + if (existingInfo != null) { + iterator.remove(); + } + PushTargetInfo newInfo = new PushTargetInfo(repositoryPath, sourceBranch, targetRemote, targetBranch); + targets.add(newInfo); + myState.PUSH_TARGETS = targets; + } + + @Nullable + @Contract(pure = false) + private static PushTargetInfo find(@NotNull Iterator iterator, + @NotNull GitRepository repository, + @NotNull String sourceBranch) { + while (iterator.hasNext()) { + PushTargetInfo targetInfo = iterator.next(); + if (targetInfo.repoPath.equals(repository.getRoot().getPath()) && targetInfo.sourceName.equals(sourceBranch)) { + return targetInfo; + } + } + return null; + } + + @Tag("push-target-info") + private static class PushTargetInfo { + @Attribute(value = "repo") public String repoPath; + @Attribute(value = "source") public String sourceName; + @Attribute(value = "target-remote") public String targetRemoteName; + @Attribute(value = "target-branch") public String targetBranchName; + + @SuppressWarnings("unused") + public PushTargetInfo() { + this("", "", "", ""); + } + + PushTargetInfo(@NotNull String repositoryPath, @NotNull String source, @NotNull String targetRemote, @NotNull String targetBranch) { + repoPath = repositoryPath; + sourceName = source; + targetRemoteName = targetRemote; + targetBranchName = targetBranch; + } + } } diff --git a/plugins/git4idea/src/git4idea/push/GitPushSupport.java b/plugins/git4idea/src/git4idea/push/GitPushSupport.java index b8c55280c47b..11a7f045921b 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushSupport.java +++ b/plugins/git4idea/src/git4idea/push/GitPushSupport.java @@ -55,7 +55,7 @@ public class GitPushSupport extends PushSupport remotes = repository.getRemotes(); if (remotes.isEmpty()) { @@ -116,7 +128,7 @@ public class GitPushSupport extends PushSupport() { - @Override - public boolean value(GitRemoteBranch remoteBranch) { - return remoteBranch.getRemote().equals(remote) && - remoteBranch.getNameForRemoteOperations().equals(GitBranchUtil.stripRefsPrefix(nameAtRemote)); - } - }); - } + } diff --git a/plugins/git4idea/src/git4idea/push/GitPusher.java b/plugins/git4idea/src/git4idea/push/GitPusher.java index ec64c42ac94f..3a78dffe618c 100644 --- a/plugins/git4idea/src/git4idea/push/GitPusher.java +++ b/plugins/git4idea/src/git4idea/push/GitPusher.java @@ -32,11 +32,13 @@ class GitPusher extends Pusher { @NotNull private final Project myProject; @NotNull private final GitVcsSettings mySettings; + @NotNull private final GitPushSupport myPushSupport; @NotNull private final GitRepositoryManager myRepositoryManager; - GitPusher(@NotNull Project project, @NotNull GitVcsSettings settings) { + GitPusher(@NotNull Project project, @NotNull GitVcsSettings settings, @NotNull GitPushSupport pushSupport) { myProject = project; mySettings = settings; + myPushSupport = pushSupport; myRepositoryManager = GitUtil.getRepositoryManager(project); } @@ -48,6 +50,19 @@ class GitPusher extends Pusher { GitPushResultNotification notification = GitPushResultNotification.create(myProject, result, myRepositoryManager.moreThanOneRoot()); notification.notify(myProject); mySettings.setPushTagMode(pushTagMode); + rememberTargets(pushSpecs); } + private void rememberTargets(@NotNull Map> pushSpecs) { + for (Map.Entry> entry : pushSpecs.entrySet()) { + GitRepository repository = entry.getKey(); + GitPushSource source = entry.getValue().getSource(); + GitPushTarget target = entry.getValue().getTarget(); + GitPushTarget defaultTarget = myPushSupport.getDefaultTarget(repository); + if (defaultTarget == null || !target.getBranch().equals(defaultTarget.getBranch())) { + mySettings.setPushTarget(repository, source.getBranch().getName(), + target.getBranch().getRemote().getName(), target.getBranch().getNameForRemoteOperations()); + } + } + } } From c8e2ed8d46c9c8ae0a62e9a8b1d2ba58dfe4bb32 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 16:28:48 +0400 Subject: [PATCH 198/217] updated course archive --- .../resources/courses/introduction_course.zip | Bin 95357 -> 95611 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/python/edu/learn-python/resources/courses/introduction_course.zip b/python/edu/learn-python/resources/courses/introduction_course.zip index eeec61f492b7091ed876586ab623b1618ff1cc29..07ad882088c1aa378ce7a8069cb3fd4390d0cfc2 100644 GIT binary patch delta 6700 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�g?Qa zr-)k$DL#G1BVH~AAHuCX!ZQqfEEz*w2!lCRYU3)%1+8psxeTf@f59Wyw~67C6zSJK zN{V2)5&+-Y=cp-Y;NzldNTK&819$_s~Q#!n_uDs&*Jf(jn78I%#8auN(y7e z7`TAKxWojU9|MX%Ttb+%{wRw1V}X3u%N<54^@`wC6uIIvMQY-wv5;mR14!0q8SEPe z*7JRg^_Ua5_@IGnS9>;NZm% l8jxx~#BlT~I7dsd8Ylq^;%BSST!Q~6CGZnkIY|8*=YP6($@c&N delta 6253 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 From cf8bd1d630571e3bb9f75768553992f355ede568 Mon Sep 17 00:00:00 2001 From: Valentin Fondaratov Date: Fri, 24 Oct 2014 16:12:01 +0400 Subject: [PATCH 199/217] revert changes to ConsoleHistoryController, ruby console made multiline, browse history added --- .../console/ConsoleHistoryController.java | 51 +++++-------------- .../execution/console/DuplexConsoleView.java | 5 +- 2 files changed, 17 insertions(+), 39 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java index efb56f449d26..8f22c0243e74 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java @@ -56,7 +56,6 @@ import org.jetbrains.annotations.Nullable; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; -import javax.swing.*; import java.awt.event.KeyEvent; import java.io.*; import java.util.List; @@ -76,7 +75,6 @@ public class ConsoleHistoryController { private final AnAction myHistoryPrev = new MyAction(false); private final AnAction myBrowseHistory = new MyBrowseAction(); private boolean myMultiline; - private boolean isStandardUpDownUsed = false; private final ModelHelper myHelper; private long myLastSaveStamp; @@ -117,7 +115,6 @@ public class ConsoleHistoryController { loadHistory(myHelper.getId()); } configureActions(); - isStandardUpDownUsed = checkIfStandardUpDownUsed(); myLastSaveStamp = getCurrentTimeStamp(); } @@ -125,18 +122,21 @@ public class ConsoleHistoryController { return getModel().getModificationCount() + myConsole.getEditorDocument().getModificationStamp(); } - private boolean checkIfStandardUpDownUsed() { - return isShortcutSetsIntersect(myHistoryNext.getShortcutSet(), getShortcutUpDown(true)) - || isShortcutSetsIntersect(myHistoryPrev.getShortcutSet(), getShortcutUpDown(false)); - } - - protected void configureActions() { + private void configureActions() { EmptyAction.setupAction(myHistoryNext, "Console.History.Next", null); EmptyAction.setupAction(myHistoryPrev, "Console.History.Previous", null); EmptyAction.setupAction(myBrowseHistory, "Console.History.Browse", null); if (!myMultiline) { - myHistoryNext.registerCustomShortcutSet(getShortcutUpDown(true), null); - myHistoryPrev.registerCustomShortcutSet(getShortcutUpDown(false), null); + AnAction up = ActionManager.getInstance().getActionOrStub(IdeActions.ACTION_EDITOR_MOVE_CARET_UP); + AnAction down = ActionManager.getInstance().getActionOrStub(IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN); + if (up != null && down != null) { + myHistoryNext.registerCustomShortcutSet(up.getShortcutSet(), null); + myHistoryPrev.registerCustomShortcutSet(down.getShortcutSet(), null); + } + else { + myHistoryNext.registerCustomShortcutSet(KeyEvent.VK_UP, 0, null); + myHistoryPrev.registerCustomShortcutSet(KeyEvent.VK_DOWN, 0, null); + } } myHistoryNext.registerCustomShortcutSet(myHistoryNext.getShortcutSet(), myConsole.getCurrentEditor().getComponent()); myHistoryPrev.registerCustomShortcutSet(myHistoryPrev.getShortcutSet(), myConsole.getCurrentEditor().getComponent()); @@ -263,7 +263,7 @@ public class ConsoleHistoryController { @Override public void update(final AnActionEvent e) { super.update(e); - e.getPresentation().setEnabled(!isStandardUpDownUsed || canMoveInEditor(myNext)); + e.getPresentation().setEnabled(myMultiline || canMoveInEditor(myNext)); } } @@ -344,7 +344,7 @@ public class ConsoleHistoryController { chooser.setSplitterOrientation(false); chooser.setSelectedIndex(Math.max(getModel().getHistoryCursor(), 0)); chooser.show(); - if (chooser.isOK()) { + if (chooser.isOK() && myConsole.getCurrentEditor().getComponent().isShowing()) { setConsoleText(chooser.getSelectedText(), false, true); } } @@ -505,29 +505,4 @@ public class ConsoleHistoryController { out.endTag(null, tag); } } - - private static ShortcutSet getShortcutUpDown(boolean isUp) { - AnAction action = ActionManager.getInstance().getActionOrStub(isUp ? - IdeActions.ACTION_EDITOR_MOVE_CARET_UP : - IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN); - if (action != null) { - return action.getShortcutSet(); - } - return new CustomShortcutSet(KeyStroke.getKeyStroke(isUp ? KeyEvent.VK_UP : KeyEvent.VK_DOWN, 0)); - } - - private static boolean isShortcutSetsIntersect(ShortcutSet set1, ShortcutSet set2) { - final Shortcut[] shortcuts1 = set1.getShortcuts(); - final Shortcut[] shortcuts2 = set2.getShortcuts(); - - for (Shortcut s1 : shortcuts1) { - for (Shortcut s2 : shortcuts2) { - if (s1.equals(s2)) { - return true; - } - } - } - return false; - } - } diff --git a/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java b/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java index 87e1323fe607..3c7ab3eedeff 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java +++ b/platform/lang-impl/src/com/intellij/execution/console/DuplexConsoleView.java @@ -198,12 +198,15 @@ public class DuplexConsoleView ext public AnAction[] createConsoleActions() { List actions = Lists.newArrayList(); actions.addAll(Arrays.asList(myPrimaryConsoleView.createConsoleActions())); - actions.add(mySwitchConsoleAction); + addExtraActions(actions); return ArrayUtil.toObjectArray(actions, AnAction.class); } + protected void addExtraActions(List actions) { + } + @Override public void allowHeavyFilters() { myPrimaryConsoleView.allowHeavyFilters(); From e5b3065d1fb816f47aa9a1ba6d5879b17e51d783 Mon Sep 17 00:00:00 2001 From: Valentin Fondaratov Date: Fri, 24 Oct 2014 16:23:28 +0400 Subject: [PATCH 200/217] Allow custom history scrolling shortcuts in ConsoleHistoryController --- .../console/ConsoleHistoryController.java | 70 +++++++++++++++---- 1 file changed, 56 insertions(+), 14 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java index 8f22c0243e74..8a9ac7fd548f 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java @@ -56,8 +56,12 @@ import org.jetbrains.annotations.Nullable; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; +import javax.swing.*; +import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io.*; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.ListIterator; @@ -71,8 +75,8 @@ public class ConsoleHistoryController { private static final Logger LOG = Logger.getInstance("com.intellij.execution.console.ConsoleHistoryController"); private final LanguageConsoleImpl myConsole; - private final AnAction myHistoryNext = new MyAction(true); - private final AnAction myHistoryPrev = new MyAction(false); + private final AnAction myHistoryNext = new MyAction(true, getKeystrokesUpDown(true)); + private final AnAction myHistoryPrev = new MyAction(false, getKeystrokesUpDown(false)); private final AnAction myBrowseHistory = new MyBrowseAction(); private boolean myMultiline; private final ModelHelper myHelper; @@ -127,16 +131,8 @@ public class ConsoleHistoryController { EmptyAction.setupAction(myHistoryPrev, "Console.History.Previous", null); EmptyAction.setupAction(myBrowseHistory, "Console.History.Browse", null); if (!myMultiline) { - AnAction up = ActionManager.getInstance().getActionOrStub(IdeActions.ACTION_EDITOR_MOVE_CARET_UP); - AnAction down = ActionManager.getInstance().getActionOrStub(IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN); - if (up != null && down != null) { - myHistoryNext.registerCustomShortcutSet(up.getShortcutSet(), null); - myHistoryPrev.registerCustomShortcutSet(down.getShortcutSet(), null); - } - else { - myHistoryNext.registerCustomShortcutSet(KeyEvent.VK_UP, 0, null); - myHistoryPrev.registerCustomShortcutSet(KeyEvent.VK_DOWN, 0, null); - } + addShortcuts(myHistoryNext, getShortcutUpDown(true)); + addShortcuts(myHistoryPrev, getShortcutUpDown(false)); } myHistoryNext.registerCustomShortcutSet(myHistoryNext.getShortcutSet(), myConsole.getCurrentEditor().getComponent()); myHistoryPrev.registerCustomShortcutSet(myHistoryPrev.getShortcutSet(), myConsole.getCurrentEditor().getComponent()); @@ -241,8 +237,12 @@ public class ConsoleHistoryController { private class MyAction extends AnAction { private final boolean myNext; - public MyAction(final boolean next) { + @NotNull + private final Collection myUpDownKeystrokes; + + public MyAction(final boolean next, @NotNull Collection upDownKeystrokes) { myNext = next; + myUpDownKeystrokes = upDownKeystrokes; getTemplatePresentation().setVisible(false); } @@ -263,7 +263,16 @@ public class ConsoleHistoryController { @Override public void update(final AnActionEvent e) { super.update(e); - e.getPresentation().setEnabled(myMultiline || canMoveInEditor(myNext)); + e.getPresentation().setEnabled(myMultiline || !isUpDownKey(e) || canMoveInEditor(myNext)); + } + + private boolean isUpDownKey(AnActionEvent e) { + final InputEvent event = e.getInputEvent(); + if (!(event instanceof KeyEvent)) { + return false; + } + final KeyStroke keyStroke = KeyStroke.getKeyStrokeForEvent((KeyEvent)event); + return myUpDownKeystrokes.contains(keyStroke); } } @@ -505,4 +514,37 @@ public class ConsoleHistoryController { out.endTag(null, tag); } } + + private static ShortcutSet getShortcutUpDown(boolean isUp) { + AnAction action = ActionManager.getInstance().getActionOrStub(isUp ? + IdeActions.ACTION_EDITOR_MOVE_CARET_UP : + IdeActions.ACTION_EDITOR_MOVE_CARET_DOWN); + if (action != null) { + return action.getShortcutSet(); + } + return new CustomShortcutSet(KeyStroke.getKeyStroke(isUp ? KeyEvent.VK_UP : KeyEvent.VK_DOWN, 0)); + } + + private static void addShortcuts(@NotNull AnAction action, @NotNull ShortcutSet newShortcuts) { + if (action.getShortcutSet().getShortcuts().length == 0) { + action.registerCustomShortcutSet(newShortcuts, null); + } + else { + action.registerCustomShortcutSet(new CompositeShortcutSet(action.getShortcutSet(), newShortcuts), null); + } + } + + private static Collection getKeystrokesUpDown(boolean isUp) { + Collection result = new ArrayList(); + + final ShortcutSet shortcutSet = getShortcutUpDown(isUp); + for (Shortcut shortcut : shortcutSet.getShortcuts()) { + if (shortcut.isKeyboard() && ((KeyboardShortcut)shortcut).getSecondKeyStroke() == null) { + result.add(((KeyboardShortcut)shortcut).getFirstKeyStroke()); + } + } + + return result; + } + } From f9d5fe553846d9a9550066f8033d8f12377e52e3 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 24 Oct 2014 14:53:36 +0400 Subject: [PATCH 201/217] version control gutter stripes: paint without borders --- .../codeInsight/highlighting/BraceHighlightingHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java index 3cb63404963b..69f29fedd836 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java @@ -458,6 +458,9 @@ public class BraceHighlightingHandler { } } + + + if (!scopeHighlighting) { showScopeHint(lBrace.getStartOffset(), lBrace.getEndOffset()); } From b8a04975b3169836c18ee267ec39b11c7047122b Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 24 Oct 2014 16:31:19 +0400 Subject: [PATCH 202/217] IDEA-130363 Recently Edited Files list should survive restart --- .../openapi/fileEditor/impl/IdeDocumentHistoryImpl.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java index 88d83ffb63c1..765efe35e7a8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/IdeDocumentHistoryImpl.java @@ -33,7 +33,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.*; import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.util.xmlb.annotations.Transient; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -145,11 +144,7 @@ public class IdeDocumentHistoryImpl extends IdeDocumentHistory implements Projec } public static class RecentlyChangedFilesState { - @Transient private final List CHANGED_PATHS = new ArrayList(); - - public List getChangedFiles() { - return CHANGED_PATHS; - } + public List CHANGED_PATHS = new ArrayList(); public void register(VirtualFile file) { final String path = file.getPath(); @@ -296,7 +291,7 @@ public class IdeDocumentHistoryImpl extends IdeDocumentHistory implements Projec List files = new ArrayList(); final LocalFileSystem lfs = LocalFileSystem.getInstance(); - final List paths = myRecentlyChangedFiles.getChangedFiles(); + final List paths = myRecentlyChangedFiles.CHANGED_PATHS; for (String path : paths) { final VirtualFile file = lfs.findFileByPath(path); if (file != null) { From 9947aebe42a01d53abb36982fde376165877b469 Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Fri, 24 Oct 2014 17:10:36 +0400 Subject: [PATCH 203/217] IDEA-130321 Completion popup in VCS log for authors is under text area --- .../com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java index 5dce04d9668c..ea50d33a7509 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/filter/MultilinePopupBuilder.java @@ -76,7 +76,7 @@ class MultilinePopupBuilder { ComponentPopupBuilder builder = JBPopupFactory.getInstance().createComponentPopupBuilder(panel, myTextField) .setCancelOnClickOutside(true) .setAdText(KeymapUtil.getShortcutsText(CommonShortcuts.CTRL_ENTER.getShortcuts()) + " to finish") - .setMovable(true) + .setMayBeParent(true) .setRequestFocus(true) .setResizable(true) .setMayBeParent(true); From 8990e32321dc8aff393eb1af256be776fdd656a2 Mon Sep 17 00:00:00 2001 From: Anton Makeev Date: Fri, 24 Oct 2014 15:26:15 +0200 Subject: [PATCH 204/217] IDEA-131869 Project View: Manual sort, Sort by Type and Folder on Top should be available in dumb mode --- .../com/intellij/ide/projectView/impl/ProjectViewImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java index fedc619dddb4..aa18eb08c52b 100644 --- a/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/ProjectViewImpl.java @@ -1810,7 +1810,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo pane.installComparator(); } - private class ManualOrderAction extends ToggleAction { + private class ManualOrderAction extends ToggleAction implements DumbAware { private ManualOrderAction() { super(IdeBundle.message("action.manual.order"), IdeBundle.message("action.manual.order"), AllIcons.ObjectBrowser.Sorted); } @@ -1834,7 +1834,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo } } - private class SortByTypeAction extends ToggleAction { + private class SortByTypeAction extends ToggleAction implements DumbAware { private SortByTypeAction() { super(IdeBundle.message("action.sort.by.type"), IdeBundle.message("action.sort.by.type"), AllIcons.ObjectBrowser.SortByType); } @@ -1857,7 +1857,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo } } - private class FoldersAlwaysOnTopAction extends ToggleAction { + private class FoldersAlwaysOnTopAction extends ToggleAction implements DumbAware { private FoldersAlwaysOnTopAction() { super("Folders Always on Top"); } From 7aa1673cdb272483cc5ef36c19679dc5bfcc4f3c Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Fri, 24 Oct 2014 17:40:11 +0400 Subject: [PATCH 205/217] =?UTF-8?q?IDEA-131441=20Settings:=20Updates=20?= =?UTF-8?q?=E2=80=94=20"Check=20Now"=20button=20is=20half-hidden=20under?= =?UTF-8?q?=20the=20right=20border?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/UpdateSettingsConfigurable.java | 3 +- .../impl/UpdatesSettingsPanel.form | 184 ++++++++---------- .../src/messages/IdeBundle.properties | 2 +- 3 files changed, 81 insertions(+), 108 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettingsConfigurable.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettingsConfigurable.java index d7a386a5fd3b..87a6f52eeb80 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettingsConfigurable.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettingsConfigurable.java @@ -21,6 +21,7 @@ import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.application.ApplicationInfo; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.BaseConfigurable; +import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; @@ -36,7 +37,7 @@ import java.awt.event.ActionListener; /** * @author pti */ -public class UpdateSettingsConfigurable extends BaseConfigurable implements SearchableConfigurable { +public class UpdateSettingsConfigurable extends BaseConfigurable implements SearchableConfigurable, Configurable.NoScroll { private UpdatesSettingsPanel myUpdatesSettingsPanel; private boolean myCheckNowEnabled = true; diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesSettingsPanel.form b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesSettingsPanel.form index fbdf7d099cb8..35f47c9eb6de 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesSettingsPanel.form +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdatesSettingsPanel.form @@ -1,6 +1,6 @@ - + @@ -8,133 +8,105 @@ - + - - - - - + - - + + + + + + - - - - - - - + - + - + - + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/platform/platform-resources-en/src/messages/IdeBundle.properties b/platform/platform-resources-en/src/messages/IdeBundle.properties index a06676140b95..8dbf428793f1 100644 --- a/platform/platform-resources-en/src/messages/IdeBundle.properties +++ b/platform/platform-resources-en/src/messages/IdeBundle.properties @@ -928,7 +928,7 @@ updates.settings.caption.1=$FULLNAME$ can automatically check for new and updates.settings.check.now.button=&Check Now updates.settings.checkbox=Check for updates in channel updates.settings.build.number= Build number: -updates.settings.current.version=Current $FULLNAME$ version\: +updates.settings.current.version=Current version\: updates.settings.last.check=Last checked for updates: hierarchy.method.next.occurence.name=Go to next method From 50b087323799204fdb4d8e0a51e52526d5572bd5 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Fri, 24 Oct 2014 17:46:27 +0400 Subject: [PATCH 206/217] refactoring (following CR-IC-6668) --- .../com/intellij/openapi/editor/impl/EditorImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index 5cb16670e19b..861287d8558b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -2562,7 +2562,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi } - private VisualPosition getSelectionStartPosition() { + private VisualPosition getSelectionStartPositionForPaint() { if (mySelectionStartPosition == null) { // We cache the value to avoid repeated invocations of Editor.logicalPositionToOffset which is currently slow for long lines mySelectionStartPosition = getSelectionModel().getSelectionStartPosition(); @@ -2570,7 +2570,7 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi return mySelectionStartPosition; } - private VisualPosition getSelectionEndPosition() { + private VisualPosition getSelectionEndPositionForPaint() { if (mySelectionEndPosition == null) { // We cache the value to avoid repeated invocations of Editor.logicalPositionToOffset which is currently slow for long lines mySelectionEndPosition = getSelectionModel().getSelectionEndPosition(); @@ -2599,8 +2599,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @JdkConstants.FontStyle int fontType) { // There is a possible case that the user performed selection at soft wrap virtual space. We need to paint corresponding background // there then. - VisualPosition selectionStartPosition = getSelectionStartPosition(); - VisualPosition selectionEndPosition = getSelectionEndPosition(); + VisualPosition selectionStartPosition = getSelectionStartPositionForPaint(); + VisualPosition selectionEndPosition = getSelectionEndPositionForPaint(); if (selectionStartPosition.equals(selectionEndPosition)) { return; } @@ -2660,8 +2660,8 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi @NotNull SoftWrap softWrap) { // There is a possible case that the user performed selection at soft wrap virtual space. We need to paint corresponding background // there then. - VisualPosition selectionStartPosition = getSelectionStartPosition(); - VisualPosition selectionEndPosition = getSelectionEndPosition(); + VisualPosition selectionStartPosition = getSelectionStartPositionForPaint(); + VisualPosition selectionEndPosition = getSelectionEndPositionForPaint(); if (selectionStartPosition.equals(selectionEndPosition)) { return; } From 6f950bd6e294b8d4f3e7096b86d5db895ea822dd Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 24 Oct 2014 17:57:28 +0400 Subject: [PATCH 207/217] [git] IDEA-130660 Don't allow empty or spaces branch names --- .../src/git4idea/validators/GitRefNameValidator.java | 3 ++- .../tests/git4idea/validators/GitRefNameValidatorTest.java | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/git4idea/src/git4idea/validators/GitRefNameValidator.java b/plugins/git4idea/src/git4idea/validators/GitRefNameValidator.java index 5f2331028046..2e641c3390fa 100644 --- a/plugins/git4idea/src/git4idea/validators/GitRefNameValidator.java +++ b/plugins/git4idea/src/git4idea/validators/GitRefNameValidator.java @@ -16,6 +16,7 @@ package git4idea.validators; import com.intellij.openapi.ui.InputValidator; +import com.intellij.openapi.util.text.StringUtil; import java.util.regex.Pattern; @@ -58,7 +59,7 @@ public final class GitRefNameValidator implements InputValidator { @Override public boolean checkInput(String inputString) { - return !ILLEGAL.matcher(inputString).find(); + return !StringUtil.isEmptyOrSpaces(inputString) && !ILLEGAL.matcher(inputString).find(); } @Override diff --git a/plugins/git4idea/tests/git4idea/validators/GitRefNameValidatorTest.java b/plugins/git4idea/tests/git4idea/validators/GitRefNameValidatorTest.java index c7da36abec88..a441b17b2904 100644 --- a/plugins/git4idea/tests/git4idea/validators/GitRefNameValidatorTest.java +++ b/plugins/git4idea/tests/git4idea/validators/GitRefNameValidatorTest.java @@ -57,7 +57,8 @@ public class GitRefNameValidatorTest { { "HIERARCHY", "user/branch" }, { "HIERARCHY_2", "user/branch/sub_branch" }, { "BEGINS_WITH_SLASH", "/branch" }, // actual branch name will be with trimmed slash - { "NON_CONS_DOTS", "complex.branch.name" } + { "NON_CONS_DOTS", "complex.branch.name" }, + { "GERRIT_PATTERN", "refs/for/master%topic=my-cool-feature,r=some-reviewer"} }; } @@ -70,7 +71,9 @@ public class GitRefNameValidatorTest { { "ENDS_WITH_LOCK", "branch.lock" }, { "TWO_DOTS_1", "branch..name" }, { "TWO_DOTS_2", "..name" }, - { "TWO_DOTS_3", "..branch" } + { "TWO_DOTS_3", "..branch" }, + { "EMPTY", ""}, + { "SPACES", " "} }; } From 7c20ee93d3c1cc06c6086427ea03bef388cf0dbd Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Fri, 24 Oct 2014 17:12:06 +0400 Subject: [PATCH 208/217] push dialog: commit node renderer improved; tree border added --- .../dvcs-impl/src/com/intellij/dvcs/push/ui/CommitNode.java | 5 ++--- .../dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/CommitNode.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/CommitNode.java index 4e2701ad6ac0..df2850399e6f 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/CommitNode.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/CommitNode.java @@ -42,9 +42,8 @@ public class CommitNode extends DefaultMutableTreeNode implements CustomRendered @Override public void render(@NotNull ColoredTreeCellRenderer renderer) { - new IssueLinkRenderer(myProject, renderer).appendTextWithLinks(getUserObject().getSubject(), - new SimpleTextAttributes(SimpleTextAttributes.STYLE_SMALLER, - renderer.getForeground())); + renderer.append(" "); + new IssueLinkRenderer(myProject, renderer).appendTextWithLinks(getUserObject().getSubject(), SimpleTextAttributes.REGULAR_ATTRIBUTES); } public String getTooltip() { diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java index a833365a118f..c1f64621383f 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java @@ -39,6 +39,7 @@ import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import javax.swing.border.EmptyBorder; import javax.swing.event.CellEditorListener; import javax.swing.event.ChangeEvent; import javax.swing.event.TreeSelectionEvent; @@ -116,6 +117,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider { } } }; + myTree.setBorder(new EmptyBorder(2, 0, 0, 0)); //additional vertical indent myTree.setEditable(true); myTree.setShowsRootHandles(root.getChildCount() > 1); MyTreeCellEditor treeCellEditor = new MyTreeCellEditor(); From 04b8861e9fea747dc0a53d8dfd8b4262476810ce Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Fri, 24 Oct 2014 17:23:00 +0400 Subject: [PATCH 209/217] push dialog: horizontal auto scrolling fixed --- platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java index c1f64621383f..6cb7e3792388 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/push/ui/PushLog.java @@ -119,6 +119,7 @@ public class PushLog extends JPanel implements TypeSafeDataProvider { }; myTree.setBorder(new EmptyBorder(2, 0, 0, 0)); //additional vertical indent myTree.setEditable(true); + myTree.setHorizontalAutoScrollingEnabled(false); myTree.setShowsRootHandles(root.getChildCount() > 1); MyTreeCellEditor treeCellEditor = new MyTreeCellEditor(); myTree.setCellEditor(treeCellEditor); From 6acb184adad05c0f8db875fd7d0f6c6ecddbcb20 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 18:25:26 +0400 Subject: [PATCH 210/217] fixed EDU-247 Move Run File and Run Tests for File under one gutter icon --- python/edu/course-creator/course-creator.iml | 4 +- .../resources/META-INF/plugin.xml | 7 +- .../CCRefactoringElementListenerProvider.java | 3 +- .../plugins/coursecreator/CCRunTests.java | 303 +--------------- .../coursecreator/CCRunTestsLineMarker.java | 109 ------ .../actions/CCRunTestsAction.java | 326 ++++++++++++++++++ python/edu/src/META-INF/PyCharmEduPlugin.xml | 3 + .../edu/PyExecuteFileExtensionPoint.java | 29 ++ .../edu/PyExecuteFileLineMarkerProvider.java | 78 +++-- 9 files changed, 427 insertions(+), 435 deletions(-) delete mode 100644 python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTestsLineMarker.java create mode 100644 python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCRunTestsAction.java create mode 100644 python/edu/src/com/jetbrains/python/edu/PyExecuteFileExtensionPoint.java diff --git a/python/edu/course-creator/course-creator.iml b/python/edu/course-creator/course-creator.iml index 3667e3d0e606..18baaf4ed068 100644 --- a/python/edu/course-creator/course-creator.iml +++ b/python/edu/course-creator/course-creator.iml @@ -14,6 +14,6 @@ + - - + \ No newline at end of file diff --git a/python/edu/course-creator/resources/META-INF/plugin.xml b/python/edu/course-creator/resources/META-INF/plugin.xml index 2ef84014fe49..7173f9d1c15b 100644 --- a/python/edu/course-creator/resources/META-INF/plugin.xml +++ b/python/edu/course-creator/resources/META-INF/plugin.xml @@ -24,12 +24,15 @@ - + + + + @@ -74,7 +77,7 @@ - + \ No newline at end of file diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java index 448cec94e2c4..9ff6aa77fd44 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRefactoringElementListenerProvider.java @@ -24,6 +24,7 @@ import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.RefactoringElementListenerProvider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction; import org.jetbrains.plugins.coursecreator.format.Course; import org.jetbrains.plugins.coursecreator.format.Lesson; import org.jetbrains.plugins.coursecreator.format.Task; @@ -85,7 +86,7 @@ public class CCRefactoringElementListenerProvider implements RefactoringElementL ApplicationManager.getApplication().runWriteAction(new Runnable() { @Override public void run() { - CCRunTests.clearTestEnvironment(taskDir.getVirtualFile(), taskDir.getProject()); + CCRunTestsAction.clearTestEnvironment(taskDir.getVirtualFile(), taskDir.getProject()); } }); Map taskFiles = task.getTaskFiles(); diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTests.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTests.java index 41cf74563063..cf1f7e48ea3d 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTests.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTests.java @@ -15,307 +15,16 @@ */ package org.jetbrains.plugins.coursecreator; -import com.intellij.execution.*; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.configurations.ConfigurationFactory; -import com.intellij.execution.executors.DefaultRunExecutor; -import com.intellij.icons.AllIcons; -import com.intellij.ide.projectView.ProjectView; import com.intellij.openapi.actionSystem.AnAction; -import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.Presentation; -import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.psi.PsiDirectory; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.util.PathUtil; -import com.intellij.util.containers.HashMap; -import com.jetbrains.python.run.PythonConfigurationType; -import com.jetbrains.python.run.PythonRunConfiguration; +import com.jetbrains.python.edu.PyExecuteFileExtensionPoint; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.coursecreator.actions.CCCreateCourseArchive; -import org.jetbrains.plugins.coursecreator.format.*; +import org.jetbrains.plugins.coursecreator.actions.CCRunTestsAction; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Map; +public class CCRunTests implements PyExecuteFileExtensionPoint { -public class CCRunTests extends AnAction { - private static final Logger LOG = Logger.getInstance(CCRunTests.class.getName()); - - public CCRunTests() { - getTemplatePresentation().setIcon(AllIcons.Actions.Lightning); + @NotNull + public AnAction getRunAction() { + return new CCRunTestsAction(); } - @Override - public void update(@NotNull AnActionEvent e) { - Presentation presentation = e.getPresentation(); - final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext()); - Location location = context.getLocation(); - if (location == null) { - return; - } - PsiElement psiElement = location.getPsiElement(); - PsiFile psiFile = psiElement.getContainingFile(); - Project project = e.getProject(); - if (project == null || psiFile == null) { - presentation.setVisible(false); - presentation.setEnabled(false); - return; - } - final CCProjectService service = CCProjectService.getInstance(project); - final Course course = service.getCourse(); - final PsiDirectory taskDir = psiFile.getContainingDirectory(); - final PsiDirectory lessonDir = taskDir.getParent(); - if (lessonDir == null) return; - final Lesson lesson = course.getLesson(lessonDir.getName()); - final Task task = lesson.getTask(taskDir.getName()); - if (task == null) { - presentation.setVisible(false); - presentation.setEnabled(false); - return; - } - TaskFile taskFile = task.getTaskFile(psiFile.getName()); - if (taskFile == null) { - LOG.info("could not find task file"); - presentation.setVisible(false); - presentation.setEnabled(false); - return; - } - if (psiFile.getName().contains(".answer")) { - presentation.setEnabled(true); - presentation.setVisible(true); - presentation.setText("Run tests from '" + psiFile.getName() + "'"); - } - else { - presentation.setEnabled(false); - presentation.setVisible(false); - } - } - - public void actionPerformed(@NotNull AnActionEvent e) { - final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext()); - run(context); - } - - public static void run(final @NotNull ConfigurationContext context) { - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - final Project project = context.getProject(); - PsiElement location = context.getPsiLocation(); - final Course course = CCProjectService.getInstance(project).getCourse(); - if (course == null || location == null) { - return; - } - PsiFile psiFile = location.getContainingFile(); - final VirtualFile virtualFile = psiFile.getVirtualFile(); - final VirtualFile taskDir = virtualFile.getParent(); - if (taskDir == null) { - return; - } - final Task task = getTask(course, taskDir); - if (task == null) { - return; - } - clearTestEnvironment(taskDir, project); - for (final Map.Entry entry : task.getTaskFiles().entrySet()) { - final String name = entry.getKey(); - createTestEnvironment(taskDir, name, entry.getValue(), project); - VirtualFile testFile = taskDir.findChild("tests.py"); - if (testFile == null) { - return; - } - executeTests(project, virtualFile, taskDir, testFile); - } - } - }); - } - - private static void createTestEnvironment(@NotNull final VirtualFile taskDir, final String fileName, @NotNull final TaskFile taskFile, - @NotNull final Project project) { - try { - String answerFileName = FileUtil.getNameWithoutExtension(fileName) + ".answer"; - final VirtualFile answerFile = taskDir.findChild(answerFileName); - if (answerFile == null) { - LOG.debug("could not find answer file " + answerFileName); - return; - } - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - final FileDocumentManager documentManager = FileDocumentManager.getInstance(); - documentManager.saveAllDocuments(); - } - }); - answerFile.copy(project, taskDir, fileName); - flushWindows(taskFile, answerFile); - createResourceFiles(answerFile, project); - } - catch (IOException e) { - LOG.error(e); - } - } - - public static void clearTestEnvironment(@NotNull final VirtualFile taskDir, @NotNull final Project project) { - try { - VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); - if (ideaDir == null) { - LOG.debug("idea directory doesn't exist"); - return; - } - VirtualFile courseResourceDir = ideaDir.findChild("course"); - if (courseResourceDir != null) { - courseResourceDir.delete(project); - } - VirtualFile[] taskDirChildren = taskDir.getChildren(); - for (VirtualFile file : taskDirChildren) { - if (file.getName().contains("_windows")) { - file.delete(project); - } - if (CCProjectService.getInstance(project).isTaskFile(file)) { - file.delete(project); - } - } - } - catch (IOException e) { - LOG.error(e); - } - } - - private static void executeTests(@NotNull final Project project, - @NotNull final VirtualFile virtualFile, - @NotNull final VirtualFile taskDir, - @NotNull final VirtualFile testFile) { - final ConfigurationFactory factory = PythonConfigurationType.getInstance().getConfigurationFactories()[0]; - final RunnerAndConfigurationSettings settings = - RunManager.getInstance(project).createRunConfiguration("test", factory); - - final PythonRunConfiguration configuration = (PythonRunConfiguration)settings.getConfiguration(); - configuration.setScriptName(testFile.getPath()); - VirtualFile userFile = taskDir.findChild(virtualFile.getNameWithoutExtension() + ".py"); - if (userFile == null) { - return; - } - VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); - if (ideaDir == null) { - return; - } - VirtualFileManager.getInstance().refreshWithoutFileWatcher(true); - ProjectView.getInstance(project).refresh(); - VirtualFile courseDir = ideaDir.findChild("course"); - if (courseDir == null) { - return; - } - configuration.setScriptParameters(PathUtil.toSystemDependentName(courseDir.getPath()) + " " + PathUtil.toSystemDependentName(userFile.getPath())); - Executor executor = DefaultRunExecutor.getRunExecutorInstance(); - ProgramRunnerUtil.executeConfiguration(project, settings, executor); - } - - @Nullable - private static Task getTask(@NotNull final Course course, @NotNull final VirtualFile taskDir) { - if (!taskDir.getName().contains("task")) { - return null; - } - VirtualFile lessonDir = taskDir.getParent(); - if (lessonDir == null || !lessonDir.getName().contains("lesson")) { - return null; - } - Lesson lesson = course.getLesson(lessonDir.getName()); - if (lesson == null) { - return null; - } - return lesson.getTask(taskDir.getName()); - } - - - //some tests could compare task files after user modifications with initial task files - private static void createResourceFiles(@NotNull final VirtualFile file, @NotNull final Project project) { - VirtualFile taskDir = file.getParent(); - int index = CCProjectService.getIndex(taskDir.getName(), "task"); - VirtualFile lessonDir = taskDir.getParent(); - int lessonIndex = CCProjectService.getIndex(lessonDir.getName(), "lesson"); - Course course = CCProjectService.getInstance(project).getCourse(); - if (course == null) { - return; - } - VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); - assert ideaDir != null; - try { - VirtualFile courseResourceDir = findOrCreateDir(project, ideaDir, "course"); - VirtualFile lessonResourceDir = findOrCreateDir(project, courseResourceDir, lessonDir.getName()); - VirtualFile taskResourceDir = findOrCreateDir(project, lessonResourceDir, taskDir.getName()); - if (CCProjectService.indexIsValid(lessonIndex, course.getLessons())) { - Lesson lesson = course.getLessons().get(lessonIndex); - if (CCProjectService.indexIsValid(index, lesson.getTaskList())) { - Task task = lesson.getTaskList().get(index); - HashMap taskFilesCopy = new HashMap(); - for (Map.Entry entry : task.getTaskFiles().entrySet()) { - CCCreateCourseArchive.createUserFile(project, taskFilesCopy, taskResourceDir, taskDir, entry); - CCCreateCourseArchive.resetTaskFiles(taskFilesCopy); - } - } - } - } - catch (IOException e) { - LOG.error(e); - } - } - - private static VirtualFile findOrCreateDir(@NotNull final Project project, @NotNull final VirtualFile dir, String name) throws IOException { - VirtualFile targetDir = dir.findChild(name); - if (targetDir == null) { - targetDir = dir.createChildDirectory(project, name); - } - return targetDir; - } - - @SuppressWarnings("IOResourceOpenedButNotSafelyClosed") - public static VirtualFile flushWindows(TaskFile taskFile, VirtualFile file) { - VirtualFile taskDir = file.getParent(); - VirtualFile fileWindows = null; - final Document document = FileDocumentManager.getInstance().getDocument(file); - if (document == null) { - LOG.debug("Couldn't flush windows"); - return null; - } - if (taskDir != null) { - String name = file.getNameWithoutExtension() + "_windows"; - PrintWriter printWriter = null; - try { - fileWindows = taskDir.createChildData(taskFile, name); - printWriter = new PrintWriter(new FileOutputStream(fileWindows.getPath())); - for (TaskWindow taskWindow : taskFile.getTaskWindows()) { - int start = taskWindow.getRealStartOffset(document); - String windowDescription = document.getText(new TextRange(start, start + taskWindow.getReplacementLength())); - printWriter.println("#educational_plugin_window = " + windowDescription); - } - ApplicationManager.getApplication().runWriteAction(new Runnable() { - @Override - public void run() { - FileDocumentManager.getInstance().saveDocument(document); - } - }); - } - catch (IOException e) { - LOG.error(e); - } - finally { - if (printWriter != null) { - printWriter.close(); - } - } - } - return fileWindows; - } } diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTestsLineMarker.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTestsLineMarker.java deleted file mode 100644 index a7730219cfed..000000000000 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/CCRunTestsLineMarker.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright 2000-2014 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.coursecreator; - -import com.intellij.codeHighlighting.Pass; -import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; -import com.intellij.codeInsight.daemon.LineMarkerInfo; -import com.intellij.codeInsight.daemon.LineMarkerProvider; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.icons.AllIcons; -import com.intellij.ide.DataManager; -import com.intellij.openapi.editor.Editor; -import com.intellij.openapi.editor.markup.GutterIconRenderer; -import com.intellij.psi.PsiComment; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.util.PsiUtilBase; -import com.intellij.util.Function; -import com.jetbrains.python.psi.PyFile; -import com.jetbrains.python.psi.PyImportStatement; -import com.jetbrains.python.psi.PyStatement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.awt.event.MouseEvent; -import java.util.Collection; -import java.util.List; - -public class CCRunTestsLineMarker implements LineMarkerProvider { - @Nullable - @Override - public LineMarkerInfo getLineMarkerInfo(@NotNull PsiElement element) { - return null; - } - - @Override - public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { - for (PsiElement element : elements) { - if (isFirstCodeLine(element)) { - PsiFile psiFile = element.getContainingFile(); - if (psiFile == null || !psiFile.getName().contains(".answer")) { - continue; - } - result.add(new LineMarkerInfo( - element, element.getTextRange(), AllIcons.Actions.Lightning, Pass.UPDATE_OVERRIDEN_MARKERS, - new Function() { - @Override - public String fun(PsiElement e) { - return "Run tests from file '" + e.getContainingFile().getName() + "'"; - } - }, - new GutterIconNavigationHandler() { - @Override - public void navigate(MouseEvent e, PsiElement elt) { - executeCurrentScript(elt); - } - }, - GutterIconRenderer.Alignment.RIGHT)); - } - } - } - - private static void executeCurrentScript(PsiElement elt) { - Editor editor = PsiUtilBase.findEditor(elt); - assert editor != null; - - final ConfigurationContext context = - ConfigurationContext.getFromContext(DataManager.getInstance().getDataContext(editor.getComponent())); - CCRunTests.run(context); - } - - private static boolean isFirstCodeLine(PsiElement element) { - return element instanceof PyStatement && - element.getParent() instanceof PyFile && - !isNothing(element) && - nothingBefore(element); - } - - private static boolean nothingBefore(PsiElement element) { - element = element.getPrevSibling(); - while (element != null) { - if (!isNothing(element)) { - return false; - } - element = element.getPrevSibling(); - } - - return true; - } - - private static boolean isNothing(PsiElement element) { - return (element instanceof PsiComment) || (element instanceof PyImportStatement) || (element instanceof PsiWhiteSpace); - } -} - diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCRunTestsAction.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCRunTestsAction.java new file mode 100644 index 000000000000..462678c477ad --- /dev/null +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCRunTestsAction.java @@ -0,0 +1,326 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.coursecreator.actions; + +import com.intellij.execution.*; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.executors.DefaultRunExecutor; +import com.intellij.icons.AllIcons; +import com.intellij.ide.projectView.ProjectView; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.Presentation; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.util.PathUtil; +import com.intellij.util.containers.HashMap; +import com.jetbrains.python.run.PythonConfigurationType; +import com.jetbrains.python.run.PythonRunConfiguration; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.coursecreator.CCProjectService; +import org.jetbrains.plugins.coursecreator.format.*; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class CCRunTestsAction extends AnAction { + private static final Logger LOG = Logger.getInstance(CCRunTestsAction.class.getName()); + + public CCRunTestsAction() { + getTemplatePresentation().setIcon(AllIcons.Actions.Lightning); + } + + @Override + public void update(@NotNull AnActionEvent e) { + Presentation presentation = e.getPresentation(); + presentation.setText(""); + presentation.setVisible(false); + presentation.setEnabled(false); + + final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext()); + Location location = context.getLocation(); + if (location == null) { + return; + } + PsiElement psiElement = location.getPsiElement(); + PsiFile psiFile = psiElement.getContainingFile(); + Project project = e.getProject(); + if (project == null || psiFile == null) { + presentation.setVisible(false); + presentation.setEnabled(false); + return; + } + final CCProjectService service = CCProjectService.getInstance(project); + final Course course = service.getCourse(); + final PsiDirectory taskDir = psiFile.getContainingDirectory(); + final PsiDirectory lessonDir = taskDir.getParent(); + if (lessonDir == null) return; + if (course == null) return; + final Lesson lesson = course.getLesson(lessonDir.getName()); + final Task task = lesson.getTask(taskDir.getName()); + if (task == null) { + presentation.setVisible(false); + presentation.setEnabled(false); + return; + } + TaskFile taskFile = task.getTaskFile(psiFile.getName()); + if (taskFile == null) { + LOG.info("could not find task file"); + presentation.setVisible(false); + presentation.setEnabled(false); + return; + } + if (psiFile.getName().contains(".answer")) { + presentation.setEnabled(true); + presentation.setVisible(true); + presentation.setText("Run tests from '" + psiFile.getName() + "'"); + } + else { + presentation.setEnabled(false); + presentation.setVisible(false); + } + } + + public void actionPerformed(@NotNull AnActionEvent e) { + final ConfigurationContext context = ConfigurationContext.getFromContext(e.getDataContext()); + run(context); + } + + public static void run(final @NotNull ConfigurationContext context) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final Project project = context.getProject(); + PsiElement location = context.getPsiLocation(); + final Course course = CCProjectService.getInstance(project).getCourse(); + if (course == null || location == null) { + return; + } + PsiFile psiFile = location.getContainingFile(); + final VirtualFile virtualFile = psiFile.getVirtualFile(); + final VirtualFile taskDir = virtualFile.getParent(); + if (taskDir == null) { + return; + } + final Task task = getTask(course, taskDir); + if (task == null) { + return; + } + clearTestEnvironment(taskDir, project); + for (final Map.Entry entry : task.getTaskFiles().entrySet()) { + final String name = entry.getKey(); + createTestEnvironment(taskDir, name, entry.getValue(), project); + VirtualFile testFile = taskDir.findChild("tests.py"); + if (testFile == null) { + return; + } + executeTests(project, virtualFile, taskDir, testFile); + } + } + }); + } + + private static void createTestEnvironment(@NotNull final VirtualFile taskDir, final String fileName, @NotNull final TaskFile taskFile, + @NotNull final Project project) { + try { + String answerFileName = FileUtil.getNameWithoutExtension(fileName) + ".answer"; + final VirtualFile answerFile = taskDir.findChild(answerFileName); + if (answerFile == null) { + LOG.debug("could not find answer file " + answerFileName); + return; + } + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final FileDocumentManager documentManager = FileDocumentManager.getInstance(); + documentManager.saveAllDocuments(); + } + }); + answerFile.copy(project, taskDir, fileName); + flushWindows(taskFile, answerFile); + createResourceFiles(answerFile, project); + } + catch (IOException e) { + LOG.error(e); + } + } + + public static void clearTestEnvironment(@NotNull final VirtualFile taskDir, @NotNull final Project project) { + try { + VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); + if (ideaDir == null) { + LOG.debug("idea directory doesn't exist"); + return; + } + VirtualFile courseResourceDir = ideaDir.findChild("course"); + if (courseResourceDir != null) { + courseResourceDir.delete(project); + } + VirtualFile[] taskDirChildren = taskDir.getChildren(); + for (VirtualFile file : taskDirChildren) { + if (file.getName().contains("_windows")) { + file.delete(project); + } + if (CCProjectService.getInstance(project).isTaskFile(file)) { + file.delete(project); + } + } + } + catch (IOException e) { + LOG.error(e); + } + } + + private static void executeTests(@NotNull final Project project, + @NotNull final VirtualFile virtualFile, + @NotNull final VirtualFile taskDir, + @NotNull final VirtualFile testFile) { + final ConfigurationFactory factory = PythonConfigurationType.getInstance().getConfigurationFactories()[0]; + final RunnerAndConfigurationSettings settings = + RunManager.getInstance(project).createRunConfiguration("test", factory); + + final PythonRunConfiguration configuration = (PythonRunConfiguration)settings.getConfiguration(); + configuration.setScriptName(testFile.getPath()); + VirtualFile userFile = taskDir.findChild(virtualFile.getNameWithoutExtension() + ".py"); + if (userFile == null) { + return; + } + VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); + if (ideaDir == null) { + return; + } + VirtualFileManager.getInstance().refreshWithoutFileWatcher(true); + ProjectView.getInstance(project).refresh(); + VirtualFile courseDir = ideaDir.findChild("course"); + if (courseDir == null) { + return; + } + configuration.setScriptParameters(PathUtil.toSystemDependentName(courseDir.getPath()) + " " + PathUtil.toSystemDependentName(userFile.getPath())); + Executor executor = DefaultRunExecutor.getRunExecutorInstance(); + ProgramRunnerUtil.executeConfiguration(project, settings, executor); + } + + @Nullable + private static Task getTask(@NotNull final Course course, @NotNull final VirtualFile taskDir) { + if (!taskDir.getName().contains("task")) { + return null; + } + VirtualFile lessonDir = taskDir.getParent(); + if (lessonDir == null || !lessonDir.getName().contains("lesson")) { + return null; + } + Lesson lesson = course.getLesson(lessonDir.getName()); + if (lesson == null) { + return null; + } + return lesson.getTask(taskDir.getName()); + } + + + //some tests could compare task files after user modifications with initial task files + private static void createResourceFiles(@NotNull final VirtualFile file, @NotNull final Project project) { + VirtualFile taskDir = file.getParent(); + int index = CCProjectService.getIndex(taskDir.getName(), "task"); + VirtualFile lessonDir = taskDir.getParent(); + int lessonIndex = CCProjectService.getIndex(lessonDir.getName(), "lesson"); + Course course = CCProjectService.getInstance(project).getCourse(); + if (course == null) { + return; + } + VirtualFile ideaDir = project.getBaseDir().findChild(".idea"); + assert ideaDir != null; + try { + VirtualFile courseResourceDir = findOrCreateDir(project, ideaDir, "course"); + VirtualFile lessonResourceDir = findOrCreateDir(project, courseResourceDir, lessonDir.getName()); + VirtualFile taskResourceDir = findOrCreateDir(project, lessonResourceDir, taskDir.getName()); + if (CCProjectService.indexIsValid(lessonIndex, course.getLessons())) { + Lesson lesson = course.getLessons().get(lessonIndex); + if (CCProjectService.indexIsValid(index, lesson.getTaskList())) { + Task task = lesson.getTaskList().get(index); + HashMap taskFilesCopy = new HashMap(); + for (Map.Entry entry : task.getTaskFiles().entrySet()) { + CCCreateCourseArchive.createUserFile(project, taskFilesCopy, taskResourceDir, taskDir, entry); + CCCreateCourseArchive.resetTaskFiles(taskFilesCopy); + } + } + } + } + catch (IOException e) { + LOG.error(e); + } + } + + private static VirtualFile findOrCreateDir(@NotNull final Project project, @NotNull final VirtualFile dir, String name) throws IOException { + VirtualFile targetDir = dir.findChild(name); + if (targetDir == null) { + targetDir = dir.createChildDirectory(project, name); + } + return targetDir; + } + + @SuppressWarnings("IOResourceOpenedButNotSafelyClosed") + public static VirtualFile flushWindows(TaskFile taskFile, VirtualFile file) { + VirtualFile taskDir = file.getParent(); + VirtualFile fileWindows = null; + final Document document = FileDocumentManager.getInstance().getDocument(file); + if (document == null) { + LOG.debug("Couldn't flush windows"); + return null; + } + if (taskDir != null) { + String name = file.getNameWithoutExtension() + "_windows"; + PrintWriter printWriter = null; + try { + fileWindows = taskDir.createChildData(taskFile, name); + printWriter = new PrintWriter(new FileOutputStream(fileWindows.getPath())); + for (TaskWindow taskWindow : taskFile.getTaskWindows()) { + int start = taskWindow.getRealStartOffset(document); + String windowDescription = document.getText(new TextRange(start, start + taskWindow.getReplacementLength())); + printWriter.println("#educational_plugin_window = " + windowDescription); + } + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + FileDocumentManager.getInstance().saveDocument(document); + } + }); + } + catch (IOException e) { + LOG.error(e); + } + finally { + if (printWriter != null) { + printWriter.close(); + } + } + } + return fileWindows; + } +} diff --git a/python/edu/src/META-INF/PyCharmEduPlugin.xml b/python/edu/src/META-INF/PyCharmEduPlugin.xml index 93ae00b757e7..778b7116a6a3 100644 --- a/python/edu/src/META-INF/PyCharmEduPlugin.xml +++ b/python/edu/src/META-INF/PyCharmEduPlugin.xml @@ -23,6 +23,9 @@ + + + diff --git a/python/edu/src/com/jetbrains/python/edu/PyExecuteFileExtensionPoint.java b/python/edu/src/com/jetbrains/python/edu/PyExecuteFileExtensionPoint.java new file mode 100644 index 000000000000..1ae39738661d --- /dev/null +++ b/python/edu/src/com/jetbrains/python/edu/PyExecuteFileExtensionPoint.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jetbrains.python.edu; + +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.extensions.ExtensionPointName; +import org.jetbrains.annotations.NotNull; + +public interface PyExecuteFileExtensionPoint { + + ExtensionPointName EP_NAME = ExtensionPointName.create("PythonidEdu.executeFile"); + + @NotNull + AnAction getRunAction(); + +} diff --git a/python/edu/src/com/jetbrains/python/edu/PyExecuteFileLineMarkerProvider.java b/python/edu/src/com/jetbrains/python/edu/PyExecuteFileLineMarkerProvider.java index 03522bb8cf8a..19acded8f238 100644 --- a/python/edu/src/com/jetbrains/python/edu/PyExecuteFileLineMarkerProvider.java +++ b/python/edu/src/com/jetbrains/python/edu/PyExecuteFileLineMarkerProvider.java @@ -1,18 +1,20 @@ package com.jetbrains.python.edu; import com.intellij.codeHighlighting.Pass; -import com.intellij.codeInsight.daemon.GutterIconNavigationHandler; import com.intellij.codeInsight.daemon.LineMarkerInfo; import com.intellij.codeInsight.daemon.LineMarkerProvider; -import com.intellij.execution.actions.ConfigurationContext; import com.intellij.icons.AllIcons; -import com.intellij.ide.DataManager; -import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.actionSystem.ActionGroup; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.markup.GutterIconRenderer; +import com.intellij.openapi.ui.popup.ListPopup; import com.intellij.psi.PsiComment; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; -import com.intellij.psi.util.PsiUtilBase; +import com.intellij.ui.popup.PopupFactoryImpl; import com.intellij.util.Function; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyImportStatement; @@ -20,7 +22,6 @@ import com.jetbrains.python.psi.PyStatement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.awt.event.MouseEvent; import java.util.Collection; import java.util.List; @@ -38,34 +39,63 @@ public class PyExecuteFileLineMarkerProvider implements LineMarkerProvider { public void collectSlowLineMarkers(@NotNull List elements, @NotNull Collection result) { for (PsiElement element : elements) { if (isFirstCodeLine(element)) { - result.add(new LineMarkerInfo( + final LineMarkerInfo markerInfo = new LineMarkerInfo( element, element.getTextRange(), AllIcons.Actions.Execute, Pass.UPDATE_OVERRIDEN_MARKERS, new Function() { @Override public String fun(PsiElement e) { return "Execute '" + e.getContainingFile().getName() + "'"; } - }, - new GutterIconNavigationHandler() { - @Override - public void navigate(MouseEvent e, PsiElement elt) { - executeCurrentScript(elt); - } - }, - GutterIconRenderer.Alignment.RIGHT)); + }, null, + GutterIconRenderer.Alignment.RIGHT) { + @Nullable + @Override + public GutterIconRenderer createGutterRenderer() { + return new LineMarkerGutterIconRenderer(this){ + @Override + public AnAction getClickAction() { + final DefaultActionGroup group = new DefaultActionGroup(); + group.add(new PyRunCurrentFileAction()); + final PyExecuteFileExtensionPoint[] extensions = + ApplicationManager.getApplication().getExtensions(PyExecuteFileExtensionPoint.EP_NAME); + for (PyExecuteFileExtensionPoint extension : extensions) { + final AnAction action = extension.getRunAction(); + group.add(action); + } + if (group.getChildrenCount() == 1) { + return new PyRunCurrentFileAction(); + } + return new AnAction() { + @Override + public void actionPerformed(@NotNull AnActionEvent e) { + final ListPopup popup = + new PopupFactoryImpl().createActionGroupPopup(null, group, e.getDataContext(), false, false, false, null, 5); + popup.showInBestPositionFor(e.getDataContext()); + } + }; + } + + @Nullable + @Override + public ActionGroup getPopupMenuActions() { + final DefaultActionGroup group = new DefaultActionGroup(); + group.add(new PyRunCurrentFileAction()); + final PyExecuteFileExtensionPoint[] extensions = + ApplicationManager.getApplication().getExtensions(PyExecuteFileExtensionPoint.EP_NAME); + for (PyExecuteFileExtensionPoint extension : extensions) { + final AnAction action = extension.getRunAction(); + group.add(action); + } + return group; + } + }; + } + }; + result.add(markerInfo); } } } - private static void executeCurrentScript(PsiElement elt) { - Editor editor = PsiUtilBase.findEditor(elt); - assert editor != null; - - final ConfigurationContext context = - ConfigurationContext.getFromContext(DataManager.getInstance().getDataContext(editor.getComponent())); - PyRunCurrentFileAction.run(context); - } - private static boolean isFirstCodeLine(PsiElement element) { return element instanceof PyStatement && element.getParent() instanceof PyFile && From 8be90ffb9e1f7156d51f9b404cdbfc7591691f82 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Fri, 24 Oct 2014 18:20:05 +0400 Subject: [PATCH 211/217] IDEA-131521 Provide unified capitalization --- .../src/messages/ActionsBundle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index 81e770d767b3..017049bf762d 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -950,11 +950,11 @@ action.XDebugger.RemoveWatch.text=Remove Watch action.XDebugger.RemoveAllWatches.text=Remove All Watches action.XDebugger.NewWatch.text=New Watch... action.XDebugger.EditWatch.text=Edit... -action.XDebugger.AutoTooltip.text=Value Auto Tooltip +action.XDebugger.AutoTooltip.text=Value auto tooltip action.XDebugger.AutoTooltip.description=Toggles if value tooltip is shown automatically on mouse over -action.XDebugger.Inline.text=Show Values In Editor +action.XDebugger.Inline.text=Show values in editor action.XDebugger.Inline.description=Show available debugger session values inside editor -action.XDebugger.AutoTooltipOnSelection.text=Show Value On Selection Change +action.XDebugger.AutoTooltipOnSelection.text=Show value on selection change action.XDebugger.AutoTooltipOnSelection.description=Toggles if value tooltip is shown automatically on selection change in editor action.XDebugger.ToggleSortValues.text=Sort values alphabetically action.XDebugger.ToggleSortValues.description=Sort values alphabetically in debugger views From 32a1e0293f77a2b74c71f316572b3cccdcf656ea Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Fri, 24 Oct 2014 17:24:24 +0400 Subject: [PATCH 212/217] PY-13686 Take set literals/comprehensions into account in PyStringFormatInspection --- .../python/inspections/PyStringFormatInspection.java | 6 +++--- .../inspections/PyStringFormatInspection/expected.xml | 10 ++++++++++ .../PyStringFormatInspection/src/string-format.py | 5 +++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java index d59ee7f38536..9e61faabdc65 100644 --- a/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyStringFormatInspection.java @@ -99,7 +99,6 @@ public class PyStringFormatInspection extends PyInspection { final Class[] SIMPLE_RHS_EXPRESSIONS = { PyLiteralExpression.class, PySubscriptionExpression.class, PyBinaryExpression.class, PyConditionalExpression.class }; - final Class[] LIST_LIKE_EXPRESSIONS = {PyListLiteralExpression.class, PyListCompExpression.class}; final PyBuiltinCache builtinCache = PyBuiltinCache.getInstance(problemTarget); final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext); @@ -193,7 +192,7 @@ public class PyStringFormatInspection extends PyInspection { else if (rightExpression instanceof PyDictLiteralExpression) { return inspectDict(rightExpression, problemTarget, false); } - else if (PyUtil.instanceOf(rightExpression, LIST_LIKE_EXPRESSIONS)) { + else if (PyUtil.instanceOf(rightExpression, PySequenceExpression.class, PyComprehensionElement.class)) { if (s != null) { checkTypeCompatible(problemTarget, builtinCache.getStrType(), PyTypeParser.getTypeByName(problemTarget, s)); @@ -267,7 +266,8 @@ public class PyStringFormatInspection extends PyInspection { if (addSubscriptions) { additionalExpressions = addSubscriptions(rightExpression.getContainingFile(), rightExpression.getText()); - pyElement = ((PyReferenceExpression)rightExpression).followAssignmentsChain(PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext)).getElement(); + pyElement = ((PyReferenceExpression)rightExpression).followAssignmentsChain( + PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext)).getElement(); } else { additionalExpressions = new HashMap(); diff --git a/python/testData/inspections/PyStringFormatInspection/expected.xml b/python/testData/inspections/PyStringFormatInspection/expected.xml index 25e70285bd8d..c9e8b5f55532 100644 --- a/python/testData/inspections/PyStringFormatInspection/expected.xml +++ b/python/testData/inspections/PyStringFormatInspection/expected.xml @@ -175,5 +175,15 @@ 105 Too many arguments for format string + + string-format.py + 124 + Too few arguments for format string + + + string-format.py + 126 + Too few arguments for format string + diff --git a/python/testData/inspections/PyStringFormatInspection/src/string-format.py b/python/testData/inspections/PyStringFormatInspection/src/string-format.py index 972aaed6423a..16bfe73814a1 100644 --- a/python/testData/inspections/PyStringFormatInspection/src/string-format.py +++ b/python/testData/inspections/PyStringFormatInspection/src/string-format.py @@ -119,3 +119,8 @@ class MyDict(collections.Mapping): return 1 print '%(foo)s' % MyDict() + +foo = {1, 2, 3} +print('%s %s %s' % foo) + +'%s %s %s' % (x for x in range(10)) From 9891dc6c4012eac153ff0723023758e8f22d2f2d Mon Sep 17 00:00:00 2001 From: "Vladimir.Orlov" Date: Fri, 24 Oct 2014 18:32:49 +0400 Subject: [PATCH 213/217] fixed mac launcher - show update dialog few times. --- build/conf/mac/Contents/MacOS/idea | Bin 107644 -> 107644 bytes native/MacLauncher/Launcher.m | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/build/conf/mac/Contents/MacOS/idea b/build/conf/mac/Contents/MacOS/idea index 837f29c3094796d595e9762acff2dc8aa6125c9f..dde4ca2a5bc7d806081cdb9c1d8581f5cdca9f6e 100755 GIT binary patch delta 4233 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 Dg$9|j diff --git a/native/MacLauncher/Launcher.m b/native/MacLauncher/Launcher.m index 9de15de97ada..e5083a4cf98a 100644 --- a/native/MacLauncher/Launcher.m +++ b/native/MacLauncher/Launcher.m @@ -208,7 +208,9 @@ NSString *requiredJvmVersion() { } BOOL satisfies(NSString *vmVersion, NSString *requiredVersion) { - javaUpdateRequired = isJavaUpdateRequired(vmVersion, requiredVersion); + if (!javaUpdateRequired){ + javaUpdateRequired = isJavaUpdateRequired(vmVersion, requiredVersion); + } if (javaUpdateRequired){ return !javaUpdateRequired; } From 1065536d43311b002924afbcec80d014a175fcaf Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 18:36:07 +0400 Subject: [PATCH 214/217] fixed EDU-220 Show line numbers by default --- .../com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java index 0f13419dadce..4a6dabaa035b 100644 --- a/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java +++ b/python/edu/src/com/jetbrains/python/edu/PyCharmEduInitialConfigurator.java @@ -101,6 +101,7 @@ public class PyCharmEduInitialConfigurator { GeneralSettings.getInstance().setShowTipsOnStartup(false); EditorSettingsExternalizable.getInstance().setVirtualSpace(false); + EditorSettingsExternalizable.getInstance().getOptions().ARE_LINE_NUMBERS_SHOWN = true; final CodeStyleSettings settings = CodeStyleSettingsManager.getInstance().getCurrentSettings(); settings.ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; settings.getCommonSettings(PythonLanguage.getInstance()).ALIGN_MULTILINE_PARAMETERS_IN_CALLS = true; From 56cbc8fdf66c675360ec9af918d462f799da2fef Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 24 Oct 2014 18:48:22 +0400 Subject: [PATCH 215/217] renamed task window --- .../plugins/coursecreator/actions/CCDeleteTaskWindow.java | 2 +- .../plugins/coursecreator/actions/CCShowTaskWindowDetails.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java index bec4dfcbcb4d..cae8393c8a37 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCDeleteTaskWindow.java @@ -18,7 +18,7 @@ public class CCDeleteTaskWindow extends CCTaskWindowAction { private static final Logger LOG = Logger.getInstance(CCDeleteTaskWindow.class); public CCDeleteTaskWindow() { - super("Delete task window","Delete task window", null); + super("Delete problem","Delete problem", null); } @Override diff --git a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java index f4ccd076b6e0..d865902a8025 100644 --- a/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java +++ b/python/edu/course-creator/src/org/jetbrains/plugins/coursecreator/actions/CCShowTaskWindowDetails.java @@ -14,7 +14,7 @@ import org.jetbrains.plugins.coursecreator.ui.CreateTaskWindowDialog; public class CCShowTaskWindowDetails extends CCTaskWindowAction { public CCShowTaskWindowDetails() { - super("Show task window details", "Show task windows details", null); + super("Show problem details", "Show problem details", null); } @Override From 82b625a88a3eed0f69ab0513504b3d44e5fe00f6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 24 Oct 2014 14:28:43 +0200 Subject: [PATCH 216/217] use ArrayList instead of LinkedList --- .../org/intellij/lang/regexp/_RegExLexer.java | 17 +++++++++-------- .../org/intellij/lang/regexp/regexp-lexer.flex | 14 ++++++++------ 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index b751ab59ba48..c8d3b4c482cf 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,20 +1,21 @@ -/* The following code was generated by JFlex 1.4.3 on 10/24/14 12:41 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/24/14 2:25 PM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; import com.intellij.lexer.FlexLexer; -import com.intellij.psi.tree.IElementType; -import java.util.LinkedList; -import java.util.EnumSet; import com.intellij.psi.StringEscapesTokenTypes; +import com.intellij.psi.tree.IElementType; + +import java.util.ArrayList; +import java.util.EnumSet; @SuppressWarnings("ALL") /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/24/14 12:41 PM from the specification file + * on 10/24/14 2:25 PM from the specification file * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -404,7 +405,7 @@ class _RegExLexer implements FlexLexer { /* user code: */ // This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well. - private final LinkedList states = new LinkedList(); + private final ArrayList states = new ArrayList(); // This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax) // as well, but is currently unfinished as it requires to tweak more places than just the lexer. @@ -433,11 +434,11 @@ class _RegExLexer implements FlexLexer { } private void yypushstate(int state) { - states.addFirst(yystate()); + states.add(yystate()); yybegin(state); } private void yypopstate() { - final int state = states.removeFirst(); + final int state = states.remove(states.size() - 1); yybegin(state); } diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index a40cd5a6291d..e6547a56a939 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -2,10 +2,11 @@ package org.intellij.lang.regexp; import com.intellij.lexer.FlexLexer; -import com.intellij.psi.tree.IElementType; -import java.util.LinkedList; -import java.util.EnumSet; import com.intellij.psi.StringEscapesTokenTypes; +import com.intellij.psi.tree.IElementType; + +import java.util.ArrayList; +import java.util.EnumSet; @SuppressWarnings("ALL") %% @@ -20,7 +21,7 @@ import com.intellij.psi.StringEscapesTokenTypes; %{ // This adds support for nested states. I'm no JFlex pro, so maybe this is overkill, but it works quite well. - private final LinkedList states = new LinkedList(); + private final ArrayList states = new ArrayList(); // This was an idea to use the regex implementation for XML schema regexes (which use a slightly different syntax) // as well, but is currently unfinished as it requires to tweak more places than just the lexer. @@ -49,11 +50,12 @@ import com.intellij.psi.StringEscapesTokenTypes; } private void yypushstate(int state) { - states.addFirst(yystate()); + states.add(yystate()); yybegin(state); } + private void yypopstate() { - final int state = states.removeFirst(); + final int state = states.remove(states.size() - 1); yybegin(state); } From fb488021e879019c11ab973776df081315f823d3 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 24 Oct 2014 16:42:39 +0200 Subject: [PATCH 217/217] IDEA-27062 (Incorrect "Unresolved Backreference" error in regex String literal) --- .../org/intellij/lang/regexp/_RegExLexer.java | 160 ++++++++++-------- .../intellij/lang/regexp/regexp-lexer.flex | 19 ++- RegExpSupport/testData/RETest.xml | 8 + 3 files changed, 106 insertions(+), 81 deletions(-) diff --git a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java index c8d3b4c482cf..531087761da2 100644 --- a/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java +++ b/RegExpSupport/gen/org/intellij/lang/regexp/_RegExLexer.java @@ -1,4 +1,4 @@ -/* The following code was generated by JFlex 1.4.3 on 10/24/14 2:25 PM */ +/* The following code was generated by JFlex 1.4.3 on 10/24/14 4:28 PM */ /* It's an automatically generated code. Do not modify it. */ package org.intellij.lang.regexp; @@ -15,7 +15,7 @@ import java.util.EnumSet; /** * This class is a scanner generated by * JFlex 1.4.3 - * on 10/24/14 2:25 PM from the specification file + * on 10/24/14 4:28 PM from the specification file * /Users/bas/Projects/IntelliJ IDEA Ultimate/tools/lexer/../../community/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex */ class _RegExLexer implements FlexLexer { @@ -411,6 +411,7 @@ class _RegExLexer implements FlexLexer { // as well, but is currently unfinished as it requires to tweak more places than just the lexer. private boolean xmlSchemaMode; + private int capturingGroupCount = 0; private boolean allowDanglingMetacharacters; private boolean allowNestedCharacterClasses; @@ -437,6 +438,7 @@ class _RegExLexer implements FlexLexer { states.add(yystate()); yybegin(state); } + private void yypopstate() { final int state = states.remove(states.size() - 1); yybegin(state); @@ -748,94 +750,85 @@ class _RegExLexer implements FlexLexer { { yybegin(YYINITIAL); return RegExpTT.GROUP_END; } case 88: break; - case 5: - { return RegExpTT.GROUP_BEGIN; - } - case 89: break; case 37: { yybegin(YYINITIAL); return RegExpTT.COLON; } - case 90: break; + case 89: break; case 6: { return RegExpTT.GROUP_END; } - case 91: break; + case 90: break; case 25: { assert false : yytext(); } - case 92: break; + case 91: break; case 18: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CHARACTER; } - case 93: break; + case 92: break; case 46: { return commentMode ? RegExpTT.CHARACTER : RegExpTT.REDUNDANT_ESCAPE; } - case 94: break; + case 93: break; case 23: { return RegExpTT.NAME; } - case 95: break; - case 74: - { if (allowOctalNoLeadingZero) return RegExpTT.OCT_CHAR; - return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER; - } - case 96: break; + case 94: break; case 29: { yypopstate(); return RegExpTT.CLASS_END; } - case 97: break; + case 95: break; case 34: { yybegin(YYINITIAL); return RegExpTT.BAD_CHARACTER; } - case 98: break; + case 96: break; case 52: { yypushstate(QUOTED); return RegExpTT.QUOTE_BEGIN; } - case 99: break; + case 97: break; case 21: { return RegExpTT.NUMBER; } - case 100: break; + case 98: break; case 4: { return RegExpTT.DOT; } - case 101: break; + case 99: break; case 72: { return RegExpTT.NEG_LOOKBEHIND; } - case 102: break; + case 100: break; case 33: { yypopstate(); if (allowCategoryShorthand) return RegExpTT.CATEGORY_SHORT_HAND; else yypushback(1); } - case 103: break; + case 101: break; case 44: { return (allowOctalNoLeadingZero ? RegExpTT.OCT_CHAR : RegExpTT.BAD_OCT_VALUE); } - case 104: break; + case 102: break; case 41: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; { yypushstate(CLASS1); return RegExpTT.CLASS_BEGIN; } - case 105: break; + case 103: break; case 63: { return RegExpTT.NEG_LOOKAHEAD; } - case 106: break; + case 104: break; case 10: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.CTRL_CHARACTER; } - case 107: break; + case 105: break; case 61: { return RegExpTT.NON_CAPT_GROUP; } - case 108: break; + case 106: break; case 65: { yybegin(QUOTED_NAMED_GROUP); return RegExpTT.RUBY_QUOTED_NAMED_GROUP; } - case 109: break; + case 107: break; case 66: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; @@ -847,7 +840,7 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.CLASS_BEGIN; } - case 110: break; + case 108: break; case 28: { if (allowNestedCharacterClasses) { yypushstate(CLASS2); @@ -855,72 +848,80 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.CHARACTER; } - case 111: break; + case 109: break; case 19: { if (commentMode) { yypushstate(COMMENT); return RegExpTT.COMMENT; } else return RegExpTT.CHARACTER; } - case 112: break; + case 110: break; case 51: { yypushstate(PROP); return RegExpTT.PROPERTY; } - case 113: break; + case 111: break; case 8: { yypushstate(CLASS2); return RegExpTT.CLASS_BEGIN; } - case 114: break; + case 112: break; case 71: { return RegExpTT.POS_LOOKBEHIND; } - case 115: break; - case 43: - { return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER; - } - case 116: break; + case 113: break; case 73: { return RegExpTT.HEX_CHAR; } - case 117: break; + case 114: break; case 1: { handleOptions(); return RegExpTT.OPTIONS_ON; } - case 118: break; + case 115: break; + case 43: + { if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER; + while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) { + yypushback(1); + } + return RegExpTT.BACKREF; + } + case 116: break; case 59: { return allowNestedCharacterClasses ? RegExpTT.ANDAND : RegExpTT.CHARACTER; } - case 119: break; + case 117: break; case 2: { yypopstate(); return RegExpTT.COMMENT; } - case 120: break; + case 118: break; case 17: { return RegExpTT.MINUS; } - case 121: break; + case 119: break; case 47: { return RegExpTT.ESC_CTRL_CHARACTER; } - case 122: break; + case 120: break; case 32: { yypopstate(); yypushstate(EMBRACED); return RegExpTT.LBRACE; } - case 123: break; + case 121: break; case 13: { return RegExpTT.QUEST; } - case 124: break; + case 122: break; + case 5: + { capturingGroupCount++; return RegExpTT.GROUP_BEGIN; + } + case 123: break; case 15: { return RegExpTT.PLUS; } - case 125: break; + case 124: break; case 67: { return RegExpTT.OCT_CHAR; } - case 126: break; + case 125: break; case 39: { yybegin(YYINITIAL); return RegExpTT.QUOTE; } - case 127: break; + case 126: break; case 20: { if (allowDanglingMetacharacters) { yypopstate(); yypushback(1); @@ -928,15 +929,15 @@ class _RegExLexer implements FlexLexer { return RegExpTT.BAD_CHARACTER; } } - case 128: break; + case 127: break; case 31: { yypopstate(); yypushback(1); } - case 129: break; + case 128: break; case 27: { yybegin(CLASS1); return RegExpTT.CARET; } - case 130: break; + case 129: break; case 57: // lookahead expression with fixed base length zzMarkedPos = zzStartRead + 1; @@ -946,91 +947,100 @@ class _RegExLexer implements FlexLexer { } return RegExpTT.CHARACTER; } - case 131: break; + case 130: break; case 58: { if (!allowNestedCharacterClasses) return RegExpTT.CHARACTER; return RegExpTT.REDUNDANT_ESCAPE; } - case 132: break; + case 131: break; case 38: { yybegin(YYINITIAL); return RegExpTT.GT; } - case 133: break; + case 132: break; case 69: { yybegin(PY_NAMED_GROUP_REF); return RegExpTT.PYTHON_NAMED_GROUP_REF; } - case 134: break; + case 133: break; case 16: { return RegExpTT.UNION; } - case 135: break; + case 134: break; case 3: { return RegExpTT.CHARACTER; } - case 136: break; + case 135: break; case 64: { yybegin(NAMED_GROUP); return RegExpTT.RUBY_NAMED_GROUP; } - case 137: break; + case 136: break; case 40: { yybegin(OPTIONS); return RegExpTT.SET_OPTIONS; } - case 138: break; + case 137: break; case 26: { yybegin(CLASS2); return RegExpTT.CHARACTER; } - case 139: break; + case 138: break; case 68: { if (xmlSchemaMode) { yypushback(1); return RegExpTT.CHAR_CLASS; } else return RegExpTT.CTRL; } - case 140: break; + case 139: break; case 30: { return commentMode ? com.intellij.psi.TokenType.WHITE_SPACE : RegExpTT.ESC_CHARACTER; } - case 141: break; + case 140: break; case 12: { return RegExpTT.DOLLAR; } - case 142: break; + case 141: break; case 50: { if (xmlSchemaMode) return RegExpTT.CHAR_CLASS; else return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } - case 143: break; + case 142: break; case 42: { return RegExpTT.REDUNDANT_ESCAPE; } - case 144: break; + case 143: break; case 55: { return (allowHexDigitClass || allowHorizontalWhitespaceClass ? RegExpTT.CHAR_CLASS : StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN); } - case 145: break; + case 144: break; case 48: { return yystate() != CLASS2 ? RegExpTT.BOUNDARY : RegExpTT.ESC_CHARACTER; } - case 146: break; + case 145: break; case 22: { yypopstate(); return RegExpTT.RBRACE; } - case 147: break; + case 146: break; case 54: { return StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN; } - case 148: break; + case 147: break; case 53: { return RegExpTT.BAD_HEX_VALUE; } - case 149: break; + case 148: break; case 9: { return StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN; } - case 150: break; + case 149: break; case 11: { return RegExpTT.CARET; } - case 151: break; + case 150: break; case 45: { return RegExpTT.ESC_CHARACTER; } + case 151: break; + case 74: + { if (allowOctalNoLeadingZero) return RegExpTT.OCT_CHAR; + if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER; + while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) { + yypushback(1); + } + return RegExpTT.BACKREF; + } case 152: break; default: if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { diff --git a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex index e6547a56a939..d429bd24c6ac 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex +++ b/RegExpSupport/src/org/intellij/lang/regexp/regexp-lexer.flex @@ -27,6 +27,7 @@ import java.util.EnumSet; // as well, but is currently unfinished as it requires to tweak more places than just the lexer. private boolean xmlSchemaMode; + private int capturingGroupCount = 0; private boolean allowDanglingMetacharacters; private boolean allowNestedCharacterClasses; @@ -146,15 +147,21 @@ HEX_CHAR=[0-9a-fA-F] subexpressions exist at that point in the regular expression, otherwise the parser will drop digits until the number is smaller or equal to the existing number of groups or it is one digit." - - So, for 100% compatibility, backrefs > 9 should be resolved by the parser, but - I'm not sure if it's worth the effort - at least not atm. */ {ESCAPE} [0-7]{3} { if (allowOctalNoLeadingZero) return RegExpTT.OCT_CHAR; - return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER; + if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER; + while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) { + yypushback(1); + } + return RegExpTT.BACKREF; } -{ESCAPE} {DIGITS} { return yystate() != CLASS2 ? RegExpTT.BACKREF : RegExpTT.ESC_CHARACTER; } +{ESCAPE} {DIGITS} { if (yystate() == CLASS2) return RegExpTT.ESC_CHARACTER; + while (yylength() > 2 && Integer.parseInt(yytext().toString().substring(1)) > capturingGroupCount) { + yypushback(1); + } + return RegExpTT.BACKREF; + } {ESCAPE} "-" { return RegExpTT.ESC_CHARACTER; } {ESCAPE} {META} { return RegExpTT.ESC_CHARACTER; } @@ -258,7 +265,7 @@ HEX_CHAR=[0-9a-fA-F] { - {LPAREN} { return RegExpTT.GROUP_BEGIN; } + {LPAREN} { capturingGroupCount++; return RegExpTT.GROUP_BEGIN; } {RPAREN} { return RegExpTT.GROUP_END; } "|" { return RegExpTT.UNION; } diff --git a/RegExpSupport/testData/RETest.xml b/RegExpSupport/testData/RETest.xml index 88ace1f83294..f42b9af45c51 100644 --- a/RegExpSupport/testData/RETest.xml +++ b/RegExpSupport/testData/RETest.xml @@ -730,6 +730,14 @@ ([ab]+)=\1 OK + + (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)\105 + OK + + + (.)\11 + OK + ([ab]+)=\2 ERR

    06ue^)J4m=rvh!|8=#quWVf1+8w!^E~)-Bi5-+ zaZj27ANyZF_osf~zxn3d$A?GHTsr?pU-*>ogRfquJRtJD=IM*4Cr5{y-A1)i+cvcY z%+O%f*t2zuWf)}(;ZB$4FP%Jpw&AvgAo*j@{rD^2{)gGA>36>Ae#6k8dF7?gef_VG zoqFv{I}VHu@2g^&Fd_D~R4(L{;6a6&lLUIoSWz-PX_=?l-atNA zsTaArQd!$+~TlS_QLkx@-3G*07<@x@T zFFyB^qc10i4%X|x_p#rA-+%bblUEkz-h9X1_uutq@ewy3Jo2Ys{=7ga5~ZVxYO>S8 zLy1#yUo;^K`;~8g9qi68z5hd7r>Egv6ZOG_ee7NLy){`3NA@3_Utavt^UvOW+nx1F z_2D-?u(8pYUs}5F_PfETjf%#}w4DWi`_i}mZoS#~tq*@3JR|t`jRy~JpWgB(U-{x+ z{o~*N+WS95gq{M}Yv23bkNyfw<8I)Oj*fou>tB81xo6(@;5*=@v7wP)`{2Kc`=Cjs zT!vR)Jod_6H{PoB{85rYZN}jNrCAl zW7q9DK#}78mg&0o*WdXz@hzkPV!ZLwZxg>o{l=l)dv?ywe*c*#CWi;#bJr~;?41bl zu%Lx}Ebf}7RTehdUw!nOV6A@Z!@n#<25&xmJ=};Nzwq>R`}Q9>cpdKw3eI0R{r(3Z zzWe$cD<*mCjfej53!guJ=GeLO$G1&QbFa$aOgmVkz^P-*^pucX;;*ASpG}Kn>JuqL zG<9l45jY@ipHkZy)D62J280U?J)+n1K>PRzurs=$^{Z9VzEwg+a4@L^iYLHqwY<~4VE|JSr^R%8vCCwKEzKa;C>FMeM7Jvg3ER=a#u}2$l`4fNkZMNIe4!R1 zo6(`6!?3jCXG>hq6%Km-)t7C{zUP)ZlRVP)En9ZYZik&eE1I5CWy3y41)K^;UORdI z%>3fQt=HeUZDvL=Z3bb$vGr-5$@l#$%Ztrs!!|9?_Zp4H@ZeBNJd)&rSY|n_tgjtA zee%GL-MeSECD(Ff|Dnmzu~$zX2VV^9p8PEDyX6ki9svKkX72&``^v(60uC3YO8B(p zwbf<|hj(FliPC}wUz!<9{Moa8$JFR}a#}N!Q}E|Tvw8f?>7BFNwr|-AH?d;DZb;s8 z(=A{7-ghzOYz^aGumWB=DPvw=frH{ln>D0zM}tzLnn`t&u<)7ZpN#zO{kPpEtd($Z zAH3_HmyW&k^s6r&Ie0xb$XI1Nr1#u>w;)KRe)Hx-*B-yTaAl>reYPSJ5+pOGIV2%i z&y7xqt$)O@hzR&mj*vH0_#wqvm-YT17k`s$dZd0P$M{6 z?C01<#)deQibNvBhF(|3SS5pk^92tro1lr%H$m8e>;}-}DS(Blnsm)$VSsjOz@`w8 z8vV6u!9sO7XF$osR@K1GXYJwB-~rdNviEm<-(_JF-0djznO0)ZjHOtTdxM7g=u?e4LZgC!do1L1G6)Hx-&9S-gI^xvU*Z%Ii-+t-% zF)-rQa@pn0cP^6Wyg%D9y6dVv}Jwj^hV@ zJg3;>&prEtAO8rfm18?-sgo9u0z4zl0dHnvJD|| zXkbN>iS)m2!7XOG)w2)VQeXxq09Y%tN-gWk@(P%(nUT7B7UJ3$SC-|InpvrsR5&{j zsrk)nxdKmy5MAgtk!(4vIDdgAX`>s_5RnQ-X7Xq@b`(M+3%hB&Q>IyH%o;`DYEipt z=vq(tFBcuqT(E#DZJNG`siHlwhF%vbp>0S5Mi_Tg%9Y}yl&b78DtC2E_nH8>GH1_J zbbQ82F(v;EkD8H*;5G@#P-=*$#X1q|M5))46J8DcG$0lDZFs;k)B{*QEQt!c*^m&7 z(VEL@I{IHCt7Dlcf2%eLu}#^K2P_J{6`W6F`jL&1yD<<9e5SWaca3-r3O;`g;v+qQ zS;GF%iS$+&Y27QVvW+DLJfRsOFhPn2B+HfB2(k;n)*{*(R4<041Zk8d$fVee!-;h~ zw;ZlvjVZ=k@`4Pdi5@tiN#}zyO9)k{DbUtr=m8|!($qB?r$E7Ai8>ZIL7({ipF(8( z(f7Xp;O>2oWKvH&WL_w5 zOlkXGIg9IIdAPaa3a3exIQWGbg5r#@?M1u`&y15HIJ$z8r2wL>Mqg?_Nlq|F91=8O z9RylQSSy;#r^C0y_Ab;OH6ugl$Dvg;a=iddDCscaq+GL)(2 zZ%9a9Wd@3+*mn4{<9oX9XsKpI+DNEUu%^lvS$r1Du>;a=Emj>4hz7y;(~o(fo%dVBpwUbCQM!`zk+ZC{0dh_m#k(` zIDu|ZaE6f}_75`-AozDaSiRE0@{!+X9S?^N?zd5)Ww^BqsQ%VIL#lgH^Q~#?KJ2?S z<~OOo&a6S%j>)r5b=$E6^!B1!9byf5^j2!%4z71vBh^}V@ld*Pg3on9ccsztq|gmc zem1%thplN4r^E$s!!!r$b?{bvKLGzg+B!nk8XHvUi3k4$o{`yobdhMM+ZDN6IBa%u z8s2#N)GJ4J%`kg}L-~=$#5T<5kG-4<=?&?vp7zR^@q8GbrBV028-Q&$_c4zqqKmOs=_#~VI0})!5o3qH!K6i%rx+@G@Gg5Od=Rh zFVcu8$!k$#8vxU*T_ zBZa^ZJIHkdCJ^k*WhA1v6LhSK<3z1LR8>n-R2c)5At`3*QH*4nMSJuCb41F>7pxVt z{53A~aj=2rGllh%`cifp?Js6kpc6)xu@KTOgFfPGb=*GGg_Cg|tJm&L0i_ zy{(Y7!eV>c4%u4B*7=|CAe?z-U7x7l{VDLPRUH5<);VJo;sSp|;|fcHZ^T8B7F{b( zVXets26sT?8FI@srUyrcE47NHm2|yom&R*@6SX0lr-$R6yjZ$rx#SC8Ty;AcJU|8x z(1Cr-8dCgeQJ0C@!uBU`W$eg-Yh2HTh)Gg!GII39@k?{aU+4#+xSOzGR@T?RaER2w z^2*8!M_<7bQ5&_|ui3M2usZOQ*+a0M zfb&<@X*q1b%s+bKb%@=p(nzU1ob)y;QsGYefCT(}EQP6+Vcd#%(J%54$ZlP!qe!Ua*1-pw8&}bfr zAjlQ)mylQnF%0UVFeeZFdc@@DzeasNIoQ@QZ{_KOr8_^Pl_w)E;Uy*M;e=o}(-4HI z(PiRouyRf8vMw4>lj&wunPig#CQ%78@dh(#uv8XoO_`x)3@ie& z$Mr+yQVKh!+$w?=^_s6Adv0lIP77Q0+6bc9gZ7R4_uYQ;{rBB|&&#hL``+WQE6b>I~$`Rm_*6igLm(GQ>c zZb(e9;8Ay(`3^Da+qcX<^}@4X{`;>T+PU@SJ=+fM*oA2nl4d(U`0#r^@fV-@lfVAU zdv3gSdTiqK+1H+Y?ups02jBO=+v8@jm~*+iKtkA{bd)lT_hT*Ug2{XB^vTbE?SJf> zoj!Sa@%8f;VSL^01_|9%f5Ba09n^y*%og-bNI`+kz|o^W{Py!N{s@p=-h6I(h!g+REiUTW43AP3)$CJMA?&Pm2fcCgmQ}&e?4z zPQU)yzx~?S*vvccdl=iTQ#;EhMn-?`!FPP|>tFmYpZo0HH{Yup##1jocmDE)hwi>- z*UW4#a1rHWH7CPZivMPc2NPGtLX=n2^j<0zu$7WRPc%;PPcU%u=zioYWkd&q^vI1u zN7v25L{y%8Pu0F-Z0chwbCe)C8pFAY(eo4#OT(s|JG{@*24nlzG7l}s1uSLh*Jf0)lKA?48n|9 z2RLQ$Mw>%P4XzsE$4*m(v>Viodv3BtNmAw^9=ufQ=_N3EwAhMqW)KWoW;wX|lltg& ze8sRfx)n*~i@Q{sUZrjH`!QBRU_hg_P9v9E1DaLQnXiRisu_+`tCz}>vZ_0eu0&ZD zq`?Dkbla4q63pT^9XCc>@w!=a%csttUSGN}F*>$??~$>g;cbK3 z#pR6`j=#3NwtU|;+ipF$f3+QM-L|`G!nWI;oZJpB$>q88a|`p^X7_BJo@p$f+Hkc4 zyY`L`R=}o|>r=N}b6pSwM^B%4@%3Y{!@v2u!ykP2hh%>rAtKBY_YDgi4LflM5YWsKW8XFk090$gy*=n6Ucjn^U z*d=dN5F863Rvz%_9_ zsMY9rt8I7h_8o9=CLI^K7HofJjmGgcj1sR%8tR%gID1#>_n?hNA&R;cV%L{_vu~rm?jh8S`>4td+s1p!BwolU~tP(=>mmCEnvB39+nvRrd z6|NQEbY+wa?n>37YcA^sd4pwXWVl3IK68CCY~)X-A9dnQgkHx?`o)z&yIUBKuc@W;t3P96#Kf9`(auskK2m^VrM*9~gB>XA#fb zcHoTW7Ej>TY>#lNsdZA>0+R%-u)B=Pul2pi2DNsS)b|C{T5N65&?VhPiVZQ02le_G z2d~q{X>8wt&xbeqOPW}f@w`TJL4$=?LM%J& zF2Lm*CY*3ulGU)gbOIQmVYygC z@X^}3St>aLc?c*A7!089gyvw!>oO(VjPLZN-XUWKQ4vInFa;xu_H3>*ni55(wU;d`NmM14H5bA4 zMU+!g>d8_05%WWty)t@Y&jg|czm&C1u!JC(J~TLt^b@Qt=#_d* z04n{)f(N|F3_BXNk-&)8gS{{^O_M}+WSE?QRF5j-QFqDl7qwDdI($@PREr^1_-Wu| zc|nk?It37c<{fON3H~V#T8Rh>F*>B{>UL7+g)gO1)Nng>B9$FP9fm}aERF>(Gi=7x z8GsbH#9MB+Hkjuj@=&u9l}|V~aTLTAE|;~YL6`7vgx#y|l+dQMFR(;nOS9vz6astV zdqWmBNDI}5ks3VKp;16JN~sM#p}L(Y{jCs1QeH-o02aaNTw{KT&SdJ*=BCWBw?9sSE5m-E<(XQ zCxQq}vtnv9+JkDqkJTeBjGOwBG!i%~NyU@Wyac?0!%E488KtSs$~WA_b12rgFF;4- z1w@%TtV%*&DcGjOVnY142quu}xyiwx7+G~$Z(A~pkqW&h=f+>?=F(2WjiUc5^m;+H zQy$9WE+@5smh;Kjh*Kn*7(N6PVH*#xvv$@tTq0d+sq-J*$#R=y7HP zi=UGS6+_(0yk$}I<6Q2DQZt*;$z7Dj(6@3)*dj))N2nq_KUf7(5aecP$PE^y#mEMu zFe59X43;p)Nrx!u-HD5TRHoi@i1Dlt5Y2TU_XrGhXEZ~afyC}ViS!Iwu*o%rOJKIaF%ZRkXiW03by zH=-zVQL_h@H`d5CLl1r5v7Br79k}VpP4)VO9$Z28(Q1uhJf}wjqbB?-$x78z2F{Bv z#Xea=Yt45C%R;{1j?B=a$guFLHe7E|4`T)o7-E;{4w@kdRQ)xgx>y0KDEiiggv0TDUoSfLKV%?W}23>Mma4T z<=^Up&neo-5>bZNFx|JCybsh)F`4mFr6dmpRwa%E2ix4=14DLD1jj9`j4r(Ncu~M@avdEBxXq&d?UYU^Rjvf8X-+cqTiL@(CWuf8zY$TPwGy7@B?f&?s=bwK0h1;&Z z;T?D1YDX*7osY^hk*32g#;CGY@aUZ@DbQRsFjGi@c@Q+QCMCYYtl+J3ChM(B9X0|1 z4kt}Urv*Nz6`9pw!El!$wq)Hk61ZSixaL8XxT~yj26pLrHkPz`~u%dr5Y)-2Way= z1se@JP|(p}(b_|j#ZVM%Wlv@nUBW9WT9lFJ<1$^U9&Msus_ZKoI?tq#euGn5Q!w|) z|D{j^YBX*P&1Rql^_G?b+Qi(Wg?$4!={cMo9>|kLiPA2_lk`64r`9qCi)2{ymB6sV zDRA4E+v-7%raFVVuBbQ087FkIw1n-sC?q6`Xk6-Nao?Pg3__F}s7z}@f%F4YU6KqR zDJj%ePTek5&i-E?jTP83N6TWe)G#m}CWHIJL6Er;Q_H}1-pG$PdEeTeUoF?h6ILi# z$&dcz)qi;6sT5_WwzKd*HC+#x1eEvLJlK;j{^aP{)Bo(A{Isp4Tp3J z(*7!-JDE_TuI;5p&9b|$IJ@#R^;U_y z4DL!Ww9POF1WXc>`f;p@A~i_V%MF$@%Di>f?II}{1RA=9gRD8k?1{xRn;}13SJ{t- zaGBM1q6S)bjz$K8SA&kcNnnOJ9|`7MtU3c*24ANQXkZisc`3w7)ve$xQ+I_jo!Y~c z*X%W{JC%jK!hwc&<%AeS8CbpRn#Ku^)bz8wORBDfRJ=*=FTZ7BheOOw%^c8_ZdEi$ zktQU=vW;iLhzcfEE!B#V4eB(Z{!h0v7*!Pe3UF`GOT1km?t}nSCG_QuT8? zD=Rs{`kI-vOQ#Tpq4zgWtUpV#qZPaaHebj+Lotw$an*5)Ig zj8C~WurLy;#EBw8(5aTIFj17-Qi3TWrLl-JR#HXWy zbW+}`?v}n@4Uq3N$p}f$dn0nF#tF+&s@e)PorR&ybl4-}{Mw8YZgSJWNt2TeQ)hMz z#0Ogd*0ws30fVC>P?eG=i9Y}aNH1jo)e`h+&=Nlr&%-WL%Z$11>U^s=N(h4}D_%fZ zw7l?fGO06$Rr@f|eNQY<4cDY8#7#NWTP3BFC#Wkmdmie+<`_{3?Ui)87IL$ai~+>_ zOxIBEBoj`cb%ES#r;xMH}ds_6w&4G|m7fEg*DawSh2xAG?a%?*J@ep)l z&!A7iISNISU`OUlC>Qn6Oq!V`1@g_(6zGm*$IWGUvOPO6!XE1>O@ImGhP)U!s;>Fe z59bX~iTjm&3r=w@t2;rneiQ$W2=RFdcUJnzqNq=L(wQtL1d}6o=d?Q{DqhZ%6w~r) zx%7F=c>o{fPy{!d93=-UsOz)dSkrT8y^tC4gaPs`Q&wll?owiuWqb==3D>r+wXg;MndeK?ax0c+2}=Ejifi>6|x+)rknk+Y|8MK}d}Bn>pvU@>rkmtI50 zsS}Btff7V9flL9mhQT?6`5oWWm|^tT^jM5a(2{^%t87WB)u=-(Tjk>xvaZ6>BDyR@ zh7{aFvkzYtPvXaIr^)%~Nd$^Qc?KFiF=&O!Y_7B#DF%zi9*;)*R|#V+@wBcNARlIs zF(~3vP*j+yBmr7NGmx#m5@bujMYx#wm zs+d{V%QLNAA8GIV_4fQ@rTKrd7ayl#E3v*2=7EayUtz?&fEooKOXU{Xc;jkjC1#?GC9e0LI7`u`MrgMfDr-rPd|S8 z?(43rlpH4Xn<#6#9nmnMu)yMvPx+goeC$b1fQ1me_7Y_Xu=VkWm1++{$Mc$ zVJTHf4RWR>uQ8ym0dT}DMURV;e62oTZrj{cZ7S1CGt5&&X>rSkR9wDBo=LQEy78@t z{D?GtmK{l~epa*Ic)(aYD3B*GP$4xlI9|xyFz+;ii{%*o1p5%gBVf`QC;`O=j6N2D z@Kz9f%g_f-GD=cZ5y{ANB%Y3H3c0LPq^B~G>F0Z*)hw4YC%Iy20p_dcH04+4j2dIC zxJsBS4#Ej~VE_-B$;nGMN#OL81igSDbNT}%(S=JZ>iC|bi_05RT(>t-BjA*3PzdWf zWT}u}a&TG0p>Jga!-g-zw-SFfv1su2nkf2ec6aK2c+kkxS6;MMo;8-AGd7OWV546y z9}JnGIkz?H5mT@4)JG0mV>cVqcWaK6R0w4*M&^z#UOe|tKm6XQi|4&Q2n&Xa^P#>u z-c(HYFe=m!F~O6Juz}+7S57>5_nRq)$v3;*E^J>MAVs5eQs|U}hH3E(&decYlGIA2 zw(lxfObO4VYMXygiK!E$AbX8oH3U=@%HqfoqC!&20v`KLae6gV)z4aGF;CfQ9i=(c zb>e)|cvq%*qu+a`xCX$e38@j1Xd_#?ZlsM?IOW-k;Q9fd}BnD=-E2QIbofTi6Dv zMt*3vkh05Xnf-*n2HU0|1_B0#5)WZE^oqX)frTtpQWa2~c7*;^?~mYCcO!{Q(D<%p z#pRB+Qs}d@{xL_-8^Q1m-Ju)EE>0`jo!7gUjm~AwT_ygy7PQcJ)oo^!nO=#^T3DJg zs@rP=+ZfHYPG?}WXU?5@{Mjd8J98?7r+DLp%J~wCq(Uu(0$SiaYviTZU%B_TJK>gf zJQqfl=kIWiL<${W)hYEt`e>ZQVnx0RSANG#mY^+HFil`v!a?pW<$g8Df1X28zneSCq>a^}JIBj>_6W zBK4fsS@uJ`9rgD>(=uJxOOg)oHm*ZMqA*lJH=3ct%NrYwfvQQufS4mR zo`PCuKGJNhJTY9Z;X3QCA=@&p^?*hkeU4OwIw?5jY>+`|KaSa>oOcm#-f^3s3)H{9YD8G!)!7y|8m& z`LidEJT!fN|KKI@(jUKe+lcLcV8`>~V*l~tp^KgJ$M!yx=GkSIx}cXNalv4x^wlXx z`-u@|tw|J67Fb%Z4@q)2Lm^XBv06QT8?4xpX=l|UGTs;Ex?XLs zo07l9mW#$6(2VBzM=`+UE?dI$mvN{)MpgqdWaQutnPfccsU?dOw`r1kXTrJS8a0t^ zfS;kVrX@v8zFTwC63|8jagw^Bhe3$Vy0HB_V-(^+;YOo-2HP&xBX_t`vjm_) zXr`jQSSH>IE$^WE22;q3l?^{YYgL}5T!^$7waoUg!!C3O_vv#olg+G?&Fb5x z=Xz(wts~2O29{x`bN#4hb?atl#PZI!2KEo3!MfBQZ3kLADEX0PX}BMpXx0u7u8|B` zvuwM};#)Ju#NhA_9~(3Jm@1BVpt_SWY8pz^Xqt8Pyd3RY7|}2wWvn+~q&={PnCF{O zrAv^bLof_9^*oL;1!ct_21i!xQpa+ftC8zwdsRFTSi87+vmYOuAiod%NSqkWY zUQD0RkL?|0(zS$AhciBNJuL|ZU=hhOO9*6&z>i?5f$yv@z4GGgXHKqetS_ytwsV-z zO*2wGhBxz7iM0=dKnDjZikOlM$h|4#ga^se)pT8WiXvr0(k@({aSFSRRjSjDq4lJu zawM~qW@=^Vi!CCiJdqTpv^KbPWAU}bJrR*6F8-iJ&6-+%3K$l?6~ogdR?Vg!?QQZ+ zqIGVpd$TjH?;Bh@qZcul%g6Pk=qA^wXO~~U((Pq_DaWOQF7Dg~} zPJXJ42?6-i4fU7SM(&!FM@&~%;O#r=D*-D%voi9wS^3@pt2XSTaPjn6r3TzyjknHU(%3{c$8Gl?areRZR_cK+rr(Qyfv$=Up zR?c73NUyEntpQ-6Aj+#)4m@O1JkN%pM&m3oMitwE2ZtI`HI1H7%D`R>5kcK4TRa_B z3`tNFDg1~n`3zjGZqzrC9dXkJA>>9Nd-W3t6^q$XLJ_XU|BMY8e~7;$FlSUG-Qcl* z|Dk%dwy?4siCp6w{b7A-as{p|d@)Tkl*Qix7wsaY0hSCjjV9q?xl&C^J#df9mNjZc zBeg-ps$g)JEIis%uA?gbW9-ZL>%<;aPqt!LbgM$aJf#bmQF~A{Ehp2ko5KTf!g$T7 z*b1zOs`LQ-0n7qUFm|3 zzbABwyG;2bJ&VW#gC#!;t}AHbBl6`*WS&W-I%HBGh7>|wKf>gZXwl2vOT@uw9DfU5 z0Ml7mA*@Q7h)T*v*e~A?KfCJ7+&>x?FPv-Dc2}D)g31ua?<(!&DtLHg7ov+(!K z6FuF_GDw72pls<>A~=%%T*~1KTJO?iy{b7q>lQ-It`PpCf(0X%s^_qjUOJk2F1l4A zq-Hz9013k+%NtC}YUQM^Ox+wV3;AL^+eaRL@5IFP-+t#Gqdx2r-5?*(Ay2>7Hv!5> z<}EtRZ(Z|)kX{Yy5TUvOg*XB!t_UqT&cw)QGPII#!0Rw$6t~NuMeN~TI|csi^g#SP zm;-&C3=Ye?^4u(&*i}5O#sUX*6Y7+yRf`KRjJm6u=c5Z5c{E}W z@CfQmVrW$pf)BkNjKY06zg{`ITEBm0zD8Jyg$4=dTf%D8pI)iHee0#>F4abjan-*tH`IV0tce2Hr7qK6S-|fC%JQs{J51nki)coH!D2mgE2Dx#slq&yw_}B7OIR+A7B5~kSnLT5 z7~53gIl!g+hP@q@aRHgsPn9o3v6C4oT>TN>>P3lKi^x4U-L_+9_AkEi)w!ib^8fn} z4^giQ%aSd3gna}{tsA|uI`=Q|OuBIkZlECR?)rSZQ+Zs7 zf^yHzxn*c+Z*5V`-f^de!kuOt!oc}XdBDaveazmNbgGZe&3K`8sa?Kn_);D}6S)j4 z#XMC7z_oKi5t;fFm-KQRp zqUa4Iu`>CVzM_={FBM>|vtuPAg4?gVG1VdxW;SfeO%hw=T?`*Iqklyv6E1QTf7R0-JO^o?aZd+!#LBsO+sZEuDv@5##J*TB7(g=y)^rRftS^2ctaU-L=Na z)tYUD@J3trwpQVbW?o&LZio8r`clR$M?7B+!wVamXedK-U}kzP%xcDPgJr>;Bgx_F z@vWp8FDVZf5oIGz3L?lb;%W%~j57F`^sCiSc*~lT>MlcB6-(Es>?8p zcfaMq-}~6Fqh`U?et4fV{FvfFdzKOHj}pvFaAwQ*;+HKGQ-}BLPqT{RHuxhKoOfZ=xtYKT)6|f!1K+l=vI3>B#B}uc~cp53n)2oH^BAh0_V8N!s zc;hjyI#GDglGbIxlA7NYjD*e)aZ=X}Uo0EpiS^+=a3OZ@Fy!{BbHaU+L@w@^hzvBim(U$Up7Wj^HKiDzJupc$n{M?s2tpN!Lvr zt|V0K=M#}cyRcZSYcot%KYAHO43V)uUKmp@oRL`Ynx?eT5l7Zek5B&k2R`!p*;8Np z&Oe^Na;e{$gi+WFYoME)HoeM$G;0li?xAAn}^4 z0HSbyD@U+G+%6#@ zygXb0adFD1D)ZdwX;KsxQ7dre6q8h3rJ^cUDIg+48tGaPL_yFEW19&cNTu-%VumD|egx!t+>|3)(Ey$g^^>h(TXf$93E-^czLpHhr8-? z;(NmoQ~b%9!UrsM?X%4ho`8>RBO2irYNE6pu`LU(Iayj2Ji0q7jhEI2Aofh}jNp;x zIXc7}7rWk=a|oEoG=xm>BO(n@s8gc#pQJR-)rj1Rk?exJuwC#TO%H>BhM}e_6^IPI zs_HOjY4Won9@!+NMF{DK8tuatLyJQ;mX|LSp^iY_vI2s?f1TyZSK?BnM4v2L9)%WD zj>NWv({J+O#}JY1-@fbjKK|=39((oMKl=XJOBde=%%Sf~G(+=nwdx}d(oetjq206F zL&>X{#<(nK)3B4!AQH{#i7$JQzd|ON^lS8E z^h6P6)B{M7A}J9AfB?FuF}+k}=3OGf5B(fp!qK+I*Q?WUy%DgugUyh&UJKy)O z7sEt)D)&ictg_Z;r$p^iHt9(X;5)>0+$x*OB=o|o<{?6NP{jo>6S{-2l%q0KgpMPZjW8(SwH(y`=yC45E z2DsdQV~*T!cgCmt#i+s`4IsA=70R#zx$v3yPcFO6g4N67zgVpyS9B;tMG!${bg|>waqX)p^#I~O z|MXA))(`(oSkEO|Rlob$AN}UrpMs4JLHtK=zWkrxd?|Xe|Nql({~y}#Z}TnHEwR+E z-TlS?`jfv%p9=rS-}?QBqq7nJ%kTUn9cX!H&csXLgA4!RkN-fy57*}O0S=VVa|C!IcIvgRelBW?Oe{3458)eSyps`s! z$!GV_3JDRPE@xx7I;Bp-u<3Dp+7Z6NeBs*}>sEEC4~iv2-3%WSC(DTgxz}`9(Ak28 z09`9Az;FBqKlbT+B3pb zd`kU;|N8I!ouB-=wv|D|1^tFxZ0;TqqFt`;$h+xZi+cSgTO!QTJ)c27q^{4!!M@8k zFsADA=bnbxy2pGtyXrXqw11!?W4$>rG9v2WTXC6I)Z4q<52B1lXDhmt%?)-CCl=a~ zwS0aV0w+8XkTtwv`ZYN?a#ZS+B(%|~b34-YxKcI-Tq-K%II;$!BY7Feqh}N6)@ZN_ zFWL^o^NgiJT{XYi2UTM2+n1RIz_u|SjPIu^C_X5oe5T|Jjdx}NIctTJ64-YG^moat zD6-%quyG_Vig`#^YWeiUj{r@9M(N62J4SjVG5*Mc0(7K+ z1F5TJw$k%>b=@t6=VIPr(znZayE_~Q)m5u|Hq~wR{COM?LQLzqZDvS>!b6PvbzI(D zXbhkRE3ueZF34lp!1m>HMB25s5<-~3rS@+w(+g&ffA6>d)BoZpfAe;`{mcLNU;L{- z{=lI&H8bqs`Xv<#qY3~)8DvLAbg;R(XZqOq4JX|@nx*U4InZIT zO$8fR_z8iD`s{!U6;JC#qdJ)=n+?Q-0bQvVA01@9!55O|lYG`$?u-?}Cr9XcC1_Y) zKwV^T5c9^mbc014bdaO|a%c>ne|iLU3^9jovt`OYCg9DpPTGdXX3vh=9+#v>tSUGX zTSSzWwNev{HmN|@e1cgd&U03-;g`;!cHE2R`;wPw^$R{xniQ+4QwFhH^s zK|Fb=Zxa!0nO{F&FJd?h3%B3WAm9uP^LV}b^e5yxp>LijUS{SRg0Tsm#?&E+{(1al z)-i#gu0_CDDHcWkqsB$e#Zhh=cOHP!uv*^@gVhl*AMN`7C;#DZ{LXLu8vMP#Z;aQ! z{n_V#{`1zNA@y*xYy#MxgyMFulG|lt#g<5mX0I~A(QfV>+WyWlt=EE?2{QB)j zZ{Ga&kALlVf9pT{^y44cVZrXTK7S$Zj%L9)0WABR#>2Y%)nv~5dpLhlmK{@hmS`K8 zSnToNkesjdq7LIb$Kf4{)JQ5muBDl@%sz&9|5~U%PFE$X*ti$wY9zsOg7^US|FBEK zxbSfLB?2*!+Rc?7gQOgQQ9Kv2EcZVWR%&ASh;cpaRXzS8Q-)7mr;nS{65LthLs=$Y z+wgGyoSaH#6EbfdA(7*T#52{|j3y zHWB@B=m(L2;|VO=AJk#)&Bx4~Ki#fGIv}I|ME;y}gh-S@fAM?&+ud*=&dk8qk~Y6S z-mYe*2c=%A#rENXqF|K01+`=BV8wmYi`g3I>3oaX$I&`Fua0*Xi4&6W9wLw9JU`wp zM3P4b3A*Q-X9Dls-kUxB<6rvtul@2Tq{zfpfTRb^mL>^xP21RP&eNw5H;c|UarpvG zv}LxUG4A8n#s=cyli9wBd7ADO%6ItmQyhLU3H8xKtg7T0|wz_92JsprM zD=v1^to;8zTBFn^h^B^s{qY}k^S~xkv1HDBMjjwzN)@Fzt$J%9UkBqPOv)TlZY2yHu)C1j?CX)4if2+yK)&GY zL0j5ti!j_FWG8o-s?1=eExTALXp5MlJH5eqyz!{PG4wN6viP<;`uLt1c%QDbNK z&&~g1e6fR66Sw!7?V(twLC2CHekD)Daiy8SPvOF%h@p7q50JQ*F-Vi=UN+|)$Icg8 z1E)ATZfOvy^rEdQuzPIWEp2OAmfsu9in@Ng7})+TbPNSX1-B>n{OU-UBV+-LWgt5o zK84#isK25uqwYli206s$F!^@Z4|w_^UcbW2&(Iu(HvxxFg`SZqUy}DRd+GQoc^~Qk z7Cx>XQkZ+k*`jDVjj1vpGeH@JOGokWW6|9~e0CNpzT}a)nw>dtyPI(_QAc`k!ud)T z>ue6&@qLt%d7Y5Om=Nzyl3Ul!%!DJ%UYW#jJig|>A2*sLvDJ+f?NWNCqa+;#vrpVU z309WM8PoouQZBSfeaqBHj!92;#6czQTrZLAms8m+Efe{|BZY)Kxd*VJkxNq2`jaz?O6IjR5jmi5d0iY%#Xk>SiHDNfEpV$zu`d$i3U zcDfg;(a!offy%T*0?R7iVW$Bcpb;~v%XJ1%oEjzk8KlTseMb$ba%fjo}ZEfkUXPbcSh&#hvIU!0~onw56;yw_GoyM zdqAo7!|OX^5EmW@6G4+>*`I>BG0xq`WHd$6DM`rk2gYZ|>+Hzof|}I4@r?R6C1o$w zJ!|C`=EFKt_UCX4&`FkF@Ed~Dn8Kga5ZWlrLDqG$J5(XrKq@#LFR$J_A9%ju*1rXNDjz%9z5mt!+LUdcfoIPf6j@(&0T5w+|zd*#S@55K) zGn|q{g1HE_=5#6WOU^`zvifM zW{TO9RbS?SN}DyX!QvFgXbl#6`a=skH)iNaRIO^7rz@h8w}ZJd%YH7l+jOSAx#!+r!=VF7b(dHS8JAJFR_54s@28Ql4%e$Xx@`%ri5x?9!_qKR zv+g0L1KT&{xXg8lXDdgboIK+EK2wsEjw8x$UXRQy>XT#QkyGh!?;b*((fr?UpPvqW z|LSnGm?`tL-=3e*#h7N|ujW_g1LhKs*UM$RaqkBW4xaJ#>8>XNEd9;pnRxzCP&AEb zY~m}n=HHy3-k$F0oUmQMSCiDD+!)KDV=Nk-OmdgI`Gd-Ao zb9yif!we~^9R1M>t#BG2Sd7d0dWD5~D|y3HKXeg%d_l>%|C{J{V37d!OiTO-F>-sUK~>w*+qMPT@Pn9H)Jr-uvy+l?53qWZ#;J=9MrvFz zvstBWvGZrkaF(UB&fHK0V6^9Fo0>t3C}mD&4&WR!6+Oz3c{K0;O{~jd6Lro{jl4Z~F1+{+si&`PfHyuSBja;`{C9 z`TgZ=M(owmmE_D`HUF6#1$zVpxFZWip(Q6U-kqO}5jpgh&x0KL2V+3H-sTOAkMr*Q zY}{d{W(Uz|brGp>R@GXWVKFx{hQ{38hKv^)z)QAP(Vu)D-9MPIGN#!)PecEPfPv;B z=9MjTy!r0=b~Ov;^-%`-Qfmi|g|Y){UfGPvWxBn}0-rjFG){#8MiSEe|CZn;0wxQ9 zBx9QB!`2x31Lr@c-MLHWE^a`k?0yy4YI=8Ls$4BCRo#Nj`zxcMMnB*y-b#q*bnpN!;ZeBIqx85@~qG{=yFrZV|+h;qC{Pb!tQR`z>$!(qBmEO|F9kbPs($XdCA zhzSY18zB`+tr}?f49t@acsCp+2muvx2T3 znY`Rur8KSe9>JzffffJC|Hx+FZM+{MunNq5H$P^#`rDlJs(dKK-Mw%%J)$fT>B;du z#)y{SaXde9V0h_HcQLLqP>HrX50_J}sxpN6djf-u;*K>4X&t-PSDe?JFuL5^S(sh-cz>y!HH05OD$LW1eq<5Ea@lrFzVvd0yYZ-(Q<;KNja9QK_&n@ zbwkRPOmj2^bx&VqkB3FB_2tyoYUtG|c@h?nBen|wi->34ON!jkC1!-A2A!yzwfKnu zU9AcVRSAIjwhIEal1_^k?MkH4?i~YBRnl>PkzNbRtZN?_V!$cwF;!3lj_$x+Aym`u zrGj1+f!R1KFs&#S2MeO{0!;A5jXRfnOZe?&(4(fhH7f}_T4fxgNk=)^GNwTbeom)a zrdDwIy=9)Gs$u7ITz0}V1b56gv<6f4e7#<$o88#p=@X)E8v!LmJUK}*;ysCy!Q2Qb zt=1j{1@Uar0+q2z#%F#SryB!vxY$QaEhDyr;y8||MyO02;B~2D38qY}!Kguo3x_Pw zY^+YopaV!*@-zTOt!e-O)ffjSxP4OteJ*`DVt5^8;NA;3=jj$2&W<{G)R1A%U0W9g z4Wr`@9Nxrpw`h#pa7kZz4iBO`mEoxShQ1O$fR>i_3qf((OW{I>mu^Nv{5{(Ouqf3S zt#q5MbYg8?BxU8nVyTeIAR1iIUCp|qdrr33iVLUIA57qg9)hZOHm|g6*cQmXYO1z9 ztfbYsC;?^9S;_Nd$*fc!S45gS%P&hq|Mb%V#cjfICIsGalfCqJx-rqU^0oQP7YlKc z@D#6>3z0}H?+9@djm2^&Qk40c8l`U3E(phuV|H`C^3UMuYw#SCgl`%?PL6yBtUS{L zjQ`eSOL^Jf0OmWP-irQJ1W)q6e)?l-NkM#^h#dW)69*Ib-~X!l@Oiu%r*c6?JpKuD zAFE^xNlq55B(XeeA{V|&!cWNqEp8&fLpcdjUNsy0{x_0@se9&&xP1fqOQtgs-(Cq& z_O_ROcM$58dCjlS=X}J>!g~Ix$a?V2*mfW18ms037*WNp(;d1#q10nCumApYH~kZP z853h5jz6fFFthhAKev78^uwta!w)KF52Ti^S{xu(_EOaE;`2c!KPR0u-AH&bT&RB_ zkVjbg5fh1pP_?kw+}A-FMM;*Zs|F&Dr4vzP-6~9!PCe>yDx4t4e&Jbq=7`}lcwHzx z3JilrF4jiQA>~5>Qv=8{Q;${-&P!p23Z$atW#fifvEi$X1@|ejS2S^pCcG>pEMwJn zstmG<#){8|9`5SjuZEO~uoc`cFYXk6JJYIpy3KC}2m~;Y)dDb8Y(-DXL#LdvWna=x zIDA&f*fCLoZ67RX39Yl<0kMU+zDe(|YpU1sN6eXX{xi5dF}NdeW?0f};*%B6PvZ0| zojl$Mi4g)cd-~BQuQMK`II-M~In1Gdvvg#77sxa1MHbmM`0-G5wv6G9HMg86R@{*! z2o1%dg>d;2&R-MInZW?mb|U1fUi6an8pw`+qw%#+uOm%%3rtS8uKB_E4%90lvb2-- zX&I!hkF-<7x_)B1m=Vi87Xo%7h^j8BMWds#jVs=WgoLTt{|aO)eH`>Am;GqY9w_Js zEKs&Ql!mv=;|d-sFtdomg=j;^cQk1In>cL(IR+#@=_gyUa>)m%t3DHs|6--684=dI zwqb5phUrEqKTs8GW!nbb(~j0BO8jE;t?p<+f~chP>#0E^bfhO(WVdr2hhQz6MW&fK zx6Hi=AR3ZZs0dav@s7MnHPna0jzz*Uvcq6O-H_p$K9_9KY6eSJ!iR-)Gb`^dtp?Ug(I&!z zH?4BhpyZY7dPiRYAOfcG2E?@x9>HnN(E+ZhCaY5rQyPexNs&x5FnAq#()XssRzE-ATw{N0qS32nl6MA-#lD4B-?^+|{j` z43|H)g##rOK;dB(JOcKA4+?J@%!a&Z95nRO*31xcl~s&ZHb$@!A7C5r+U(W)UxgY= zoUw^;Gl$YS-247;Vuch6)}HAtq3_L6al4MAd3sW^xqQw(IUE%^Dep$=ya&>YHcpuZ zG;s?Xs9uTFFr07H#?(uNmv7C)9TaWmL*L)V+w)8eN@hmSk3a8+SGQ?70F1@Fjrcec z$B5$+u__-SzutivpLY|UZa39SJ&l(eotnLwSMsOGYn3Z(p#wK%I1cL?bwES&$A?`t`inVH@(ahe%canI%pQLWzZyIvRo$J>?B2Cw9(2y43JkB)Etn!eqxGZo|qaXpxk0B5|YDUW*z->?Yt)p#e@iwO`9 zof$D1MRQalbm$XO>$7zO^Vl4s9)C&puU`{T^Zb1M2IePYs^0XjH5YDQi{lTZw;GkU zFQ$7M^pgqSBVE`8Zu)RM83SY%iCF-~HktwK=C7YUNiIR(d*g#n?pxE->HZUnWXvni zla=x%vn3P9<<;S2wmk*f1dFGXzsHn?In7xC%m{Q&lDeSBY87oNb+KZ_n&mW;!$^I_ zzV!!cR?nC!(zv$uWiI>^>S9i*(w%!XIYX)Ln%Dw}c)XIEYPaT@gvUhuNS;(*K9}(u zH08+Yq%@~gSI1r;ci^M-tt6CW+P>Nwr_2lMNEJgmuDEXC(q@qEblZSEJNn5YHQ!Z& zzJ{r)^q1K-US7v08Xs9TFDqS_MZxPh+QsA;X0QV8fIPNC9$C0M+?lP;>V7;laTY8& z`i&h^&U=>!I-Q>Wm`?zY9T>k&4HoT$Hv`}3(2K)eu`U_r)3Lal3Fr<^-K$f!`prhAuxNS*bHq8Ue+h|2F31^3IIL z>%mfVcR_IJPI-Yz>VuU6lk@HMiABIzLCemad7IY*DR-;mFG(WA`Ixovb!b|<}9ge$>257hvV1S!rQCCFIjawkuu$*U+H9b z?}tWv6DJcG^gE(iiyT9 zc)n?3Tp*Gh+eR=Y6>Y0%p;Ye?a4sPk%Z^yg2PLgk16$CR10dEN?pSnoSz1+y8fi9x zmTj*x^#yBYnu`QyY&G6~K{{H7@{ZabJN5p}2u6bpeTS78%+fU43?1ZCE2}92Xy93c zf9+G30byvj4%0Sd#gsS}p@xjBtvVka-Y>3tK+yOtobC_>^mc-clcG@Em30CJNhN$yp_5H|TSsNkRFwH*rme^()^(Jo09!iESMc0cU&n{v+mv zlI|zBuVP$PRJenDNlZ_PA~f;DpDek%yO9;GspEb?Kr2O&FU~y7N`pJ7n5Nu?vG>y4 z-V_uXfeQF0V|QiIanz zlqX5}*GYZjq_cAZCXr|xf=e_&6Zy8d z>uxvlZ*1PTyH7@gNJL+i3lfUuR;`Rg#~kKW`1zK+5s6&NJl=^F;_N$X=68oYcS0l( z)B8oYjTi zPEF5jFhbkfW5`4gvTFkU0ulmsrv?Zs%@!?{3Yt6;a_YY_FE72)OTxce3FstX!K|t$ z%Y$rHNZGaF+z@CGP1qz+Igx91a|P=z(vL{-sb5xC3; zhDpM#+hdOsr=n3+G?NMgoX4yA!F8Ih(^by5)=JKIawOz_&X@^0L@?u?-S8KwoR=^GMKYM0HzKteYn+QY8 zYN&BJ+5DQ2&=IM_IKS{SKy6f`cagPNE9t9BO|@JML>#v#47^>n zs9$*yN(n_@bpoiYksC5Z1mJphG?n$!7{rDaK%3O zMD77>afeu|Z&Zk|HTXnaEBeC#v}Fu}=sB^rzgwQ1oV8=aHQI8iS~e<8fdx;h@C4Ml zv)uL$_7K;s8Q&=4fsN>|I{OwNCKkvz1jcIfa|&07wKr-q&7`hH)rnuVQ|)nR43=a5 zv#+BPgXJ?yYi(90%IzYBpXvfKUe$3Jj$*Kg7~8tbX$d-}WF~D={5cN&0XrENUtN<* z3}2wTJ#+-!6&EZ}1s#`aY?!LXMu1KKDhWppovRCHFJbYfWrmFm6BJ7tMLCk>jL+cnOI@hHY~}*uoRruqT2T2T zX$9C)Hx`cieccL+yI*m>r>z&*$R&{mZLDB@%RqM!=R1=Z*0mEl_F#i~?uvds9ie+0 zp1-kHODd5M`R6~$@E^YA`YBiqXw}(k=)UUgEKec3WV;6m(s*%_@x|ol&VMY}6Wn~? zkpeS=q=oIzpsIq5l5X)+m?-HI(aCVC{`Pe$8fdfEvzTKEgG^@y+PNyRQ31p~vEw$f zC)u~x!Q(j?tc74^Ev+tg zgB4&kip)keAMc8PL47d7@u_D%3vR`d4!I0z*hNiJNe~BH=7o$A#_?cs4_j+;rxC1L zs|JF!*=HneTi6Euf&(2Tx`bK~#UV80+|N%rO(Yanxf>D3i`-NOuvr)6Rp)^2f+XF?&$-N^j$0&Evp&mEw| zp+pqBumqr#47w{EAjrK%QIWxe*oA?ZSM8X1F=Sl6rjG77$u)kHj53)XS6m;p9;f9| zj@;Jg(ogE7=L`2INd@yDG*lPP^xQVGyz!BwMv)wQ>hP%4EYz`tK!N zpiU)QH~G63H0;uk*!1Ait{%2oI!(H7u>#o-S;Euu*D}Js1j6E=9W5IThTs`jsuV?* zo=+`{(x!FJf$3*t;wZEIB=P(e`q}!5<9lj_HPOfX996r-OmZL(BJ|C|Vew?m^#I}g z=QzC81bv^)){T65bhSL7H}NyBxq%dnfRtj6L z>D&jQ>9!0h{GI;(uFSd{YP}FoCE*W=Z(Bt_c?5xrzNc-ntv_FQObjweW;{fyt3EJzXx3Hx2i_@9c8qP~ttj5)nBs|J3JSgm`28Cmi+p z%l9Kb^w6h=A`EXX^Jo$@r1QzhVl|H>yXK=I)sOloJlsS zxuBk0S74gUt2~~4hO}?FIL*wKA04bGFAgOAd0XLDA+=3XhK>o24`Z})Ey*oH_5-@& zEnuzO2&!qYVATsW?#$71gqL2gJK;cinr*^g88c^0&y3wM5?I|68bYe&Yd>?<#DdUC zI4Ro%cV_~Sah^J}taTD$*(E<~k_8WwAP=9uUiiG>`F1g%ygPixJnk}uRv0X{?9O+)aze)|Ne`so=+;b z!sce9HveI7oA_)$V+bawieHR}x|{UHKDo1TX#xeHp66>XQV>ZJ%RcuTS~u69N90yv z8~E*Fw#VU9(iyIps#?39@pF$4SAD_xW+LlTR~(^;*PC^Y={^GpQA9dsI!=eXnkfk{W7+z-%1sxvR72l6`t`#@|(e6Y+R(%qT z9e;4@t<=bQtz^aIp~6??E3o`62CtiFS{K)+{ogxtz)3V%r#m)=*rncgmG7&b1QR@9 zZs~#N2xr9viEPk|rASXJ_mn}Z&(rNSRVh-U-f~w-n7Mx#-)bgVy)hW95`SII--FeL z^w#$>X>-7wdg)z)2n$Z2h$YcT%xDq^1BQ*Wm=c*Y+cOkj6a)SpXj!|LGGOSmi) zD>;U&D3i4Hog61~PH}%1>yk%#XKG;q-__;Lt6~)gSxu+7TUs)DDYF?KIbgYhml3Bk zT(axuDKwL^4fTrjk?4?&_g!yn|NSSSqcBJu*<;@W|?5in9Z<)1KBeb$hsrN1s>o$=g9m+Ra zW8$$=u3N4F=3$#8rrVXA%#6quYz1niltb5>U~2SQo{5w~Ekbk=+3}Y}l--!G=Ys`{ zmd`M}72<7p@p&9oH+P2vT+XvRbh&n}sJ9Fflk%O_=M3zy2WMmebd zDi2eC9J**ouY@)_sP5@@p#nnxI?#l3|MN{uQ&9mF6z?8C9Zq-W^V2jO2G!^7;8c%$ z5J7sYx>wBm-u+5u#)5>SB#w9K%uV+i`q!;fYW4&J%4wPNiX1*#ygPZwr_dOJ<1bYs z{m~rBhqpd}=tLyvli!>YTSW!X={YAoY?d=0GQWO(f%>-ySqoq2s?hv-Bl^Z$u8GzL z+2($K=4*k5$dDC@s%hGta4UWhSSzzurW+Cnd-Ga8+Nf@N?rd$ED(^;-##!JvsG^!# z1$tKzF!2*tEKe2^!X99!SXcB*O6fE|U{C1|~eq z35v4tZv}?9YzK|k$s8547kP3Cu8z`?L#c2Xtn+0WE#tVelZsN4kc~^4v3bt|sP@Ob z`TTH*DmJ5~th2u*Aw|6qC0c$lS5>$!ZO>-(7MZeiF^nuCoraT=*ke+0Blr249DMsj ztCV4uB1>>5oFBwsqdI`qjS!>SHtbXqg<7Tu^j@cxvv#!8H32QV;O)n%_X=0*;wIKq z`y-ZV0oQsgOFj$Dt^=vhmXFNlWRIIWow&km-6c z5pK*A>m>iC=`!6izG$<%AN85aDG*A)2y5*k5aiUEYg7wSSKJX5we;2yF*!BWaCG_B zmUP%yd{U&9P_4x?&o5a5$8epFB-@nn*!OFVKP~#2c8Fph43p9#M|U$?K2=dD+Aq7b z2{{5Q2iL+n&VkS-9X&I2aZ3p@TaLhl<7yFj=PG}+3$zskf>`}8e@+OpbXC!Y#cD^t zv(B=tvP(rGcilcym9b6LKNnLa)$8MCOHb2o^hLJySzkcPJY~#~7^JG#%2;$MV*iwPaaJPZ$sJ#-wjq5w?1~ zSJ|ye>Yc1rG{CqVJoZOsa44M<-V4Bd%UY}I=$^+BM5RM8LinaVHeQeo0OBwRlD32l z?h8rfF@4k2T2)e}=5|)CI%%Mf?m)Cwvo7B)Jg@OClj=}Q+jVa?#aSz`p16-(Sw==r zPD(auHrj%VN5n6P)pKvsI(Fs4^y`Wj0ye($59aJA@=~;hH88kKEBNXSp@NKbVLSTM zIppx&_zSuEn_R)X6F5S2*EKdi2h znL^4k(l}V}CgH~7N-1JlqAh?Sl^8aJiY2|gb}=co_|9q};i{=(-bFoWo#&^NsvZDk z{N)x5BubynqGUv*5_^~{&~ETn+=u%dZ&gs|IpJ+s0w*rOj7?Q z6s?GQbbK@cn2^t5Mo7elN>Kx02fN|%dS;!DC>e>fxPD16PT^8xGo{`ZU3JC&PLEI2 zBR0G(@`T<`nIEb9&x$PZnJUyU!C`TBSQP#@ z&@1VAbTr`8IJ>NBcXEWw^T-tsX9dzIgh+BgUk}U^avQmdM^O7g$-$90X0tbb%W{*4 zYFp2wnMjj>_z3E7>|>)h1s)6&MscW2sCY{06#gD-2wC}>1u(Sik8 z(tU3OAW@-G1~;`w(3Nr$H3tzK?^ zUB_Ets)PrlOE2-@nTYMrQ+X~gRL&O^c{fk_s*s^)GUdHc^J&Z8TlKRLgq3t#oe(=s zm2aIk?tPb6qq9-~tfIMOJq1&-a!@)wE5aqqvex{ZDk@M)%CO=pgAe4{Uym0(QKvNh z^9E)?52seuoTwk=Jq)J^*~$HSa)#+!arykve|+ZDf@R2E+(&@8reh<)P+A@5+4wcG z45ERh0LS-YctgE@xu^JQ#^)f}ZGFt;Wp7V(de0Y74I^88^FBv<|4UBO*BVzHlyx%gf zrArxF`^-S+K+XxyeSZXVpQRYe z6l+qRkca#>W_$?1<#SjOY7A{BqxJFgknHNv71`@M)(}1yEiFgfiSKHL7_4OOMpv_m zg&;AmBQCsR71lx@EDY9$sY-I{P-TH=mvt*`BT1xNZMx6%(dZ^)#Z-Y$K-i4N?6;^b z*>W07Rsz)~R}rNA)sWlNlt3NhFgDg~?(ao^CoW$O<5yRBdz&U-Xv-b!k@Bw;73y&j zEa4XM1ya1A3aI<qq-IyL zEOslJTSRJlNp6!QCpxmW1WoGmOLa%Gcii!t=AJOm7Uww#ez^I@U3h~wSAgnn;=Mel zPlkzgY>^^@A6bsvmDpnE#9AfFU5{FM_}IW3!cfagrZl-wL04dX*Vbmp_E8hrysXA* zCO9xQ6it9nrZ91{AT;z;8S84iqp?K7=L&lbE-qCn%{cCTnpaDavdAgb@@wlUn!S~0)Er*D5 zzOW8ukpzmizWL0Fs$(`;DRk{fakQ~nl)}qa6i~l6IT5`@OI9W30P59JB)tq0ALiKe z7P}`cU?_-~*KDH*2(8n-YFHc%L!($k*~X(7pSiOl?g3mAcg@IOi&Ahf*!1MmRXDuA?VxVcYskmXPXH17itN4WqSW&*7I zOyM6{g;a>p4`7p4QU*Lqbd_!?>}>WO!g{Q=%D&wGVz&)yDg$_c%{$d=D;g^qkGlAG zCD)3GqQ~QGqwdzlRT-a>J93==n45^>hI?ZnS!Bvusq6H$@4=8}sz>U`9h5S1!1lvh!KO$0- zAxh;)>PJ}O%6!qxL0m8PoDz!Zkp;UtXl&EqTiSF9saM4Lov^x$^Ef^-nR1_}%gB!c ztVRvCP1>T1&3oZ96wGRFX?I72yq-{LFY-Knz>pydcniZ;q$n)#i_nGrRV-jT(UpjYEE(xfBEoLR2dp}-1 zHBrxrUa6GeHBz}u>IkDFzA6SfCdIkzkfYF}6Ez8$#k~$9tyV8DU39)8Az4J{5=fMm zen$R(bE>k*_{SL{RVb+j%HKzr00_i8ZEFRE%%~`&5g?JBZS7fKV)E)j_3h%QkimgE zp+(>iWltN{FX~8$w&y;O4)OkSt)B$^h|pDUl;i*3E&j>0|>(!o({Sd+kH ztVUkH%Uxnv`c7o5`XMsS1~NSp(Oa_;wN3e>UGGQ;HI#|ZJ{s#rx9;qZ2#jjXI_2q3 z*&1(fio&Lkv-l2VxT|i2j6Gj7dDdU0?st&2+yhn}{Ft0Fxw?qtTcfq&)IDTfbFoU8LL+K)X*$_;={`9 zh2n-`!WE~xmqTkLU}3uZyN=5I=4e%=gpUubx}4?E{gOHvi!&K&Xx-rWaMAGs9wIoP zxXgOOb1xyI%{JRuvi^7@MY_mCvXm@!>I_SfpFv9&>{_#(9Y`HDjW1Q33NB946v<)Pvb-OykQ)rAX{rM94blP_Pbh zl=4KbGu5Mmv49XYw z+@d)m!k@`==CvDZFpK0Hu6I==D(9n%DUq;xyo_sjUT$+tjp^-o`yl@I)e_!q(D~F z=w@Y)wsZ&${jO?+)xQczqTcuyx9iP3_Hc~1BsbjRNy&zIdR%~Dc1YD-XXA0supHWy z-8|GKW(kUV8HHGw!exBYuQarr`oVTSv)^MzZo0@L+^)&z$OpN`UpME(ndHhtYXRJ5 z0TIyx<}r06A6S&eI+}txa!ZYG#}1P*_ezx|7`}ugY{dL1@E|B+Hph;fqxYS40GQ2W z8C<&$44v}+PG^oBkSACTV4&GrSS?@+EsqswxC4S&OKh`9C^DIm z#aLLCiV&LkT)4=MQ7WxGql5TJCo=EhEm0dhM4i}}>oq0uW>L>Er=E5hutvMGsHvlP zB&r3GCSUYzZS}%^JL$e^s@M}pYS&C{wL8rsZ{G!aOg}MEFlgMResPPUnK3`VjJL~p z?Nq1O;WulVcv@5^L6)1~*bnCOmZ#X-CTcg=v$>A#BUMV(%jmRQa?c!^%QHrYEyHN; z{yg5EZ*0+8!~PA!+54NmINFaGf@cdd1iJ@n*qOqtS&^8Q z)0^7iY7Q4F5EgUbWCY3(Ig(N(J4gYs*{~Zp wf(-(8P7#D{Ww55D0`{Brwl2liL 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 M07*qoM6N<$g7y#v`v3p{ diff --git a/python/edu/resources/pycharm_edu_about@2x.png b/python/edu/resources/pycharm_edu_about@2x.png index 2803e04cec0974fcc034c9c53dc76170778206eb..770c8a908d11c3bfee02693cc9c4d9082c707ff5 100644 GIT binary patch literal 195460 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