From b44820d16bab125ab4b28e5e80d4881cfd380c63 Mon Sep 17 00:00:00 2001 From: Alexey Utkin Date: Fri, 16 Jun 2017 12:09:52 +0300 Subject: [PATCH 01/93] CPP-4423 Show gutter icons for tests (Catch Framework reference implementation) --- .../TestRunLineMarkerProvider.java | 23 ------------------- .../lineMarker/RunLineMarkerContributor.java | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/java/java-impl/src/com/intellij/testIntegration/TestRunLineMarkerProvider.java b/java/java-impl/src/com/intellij/testIntegration/TestRunLineMarkerProvider.java index 81968ea62ab5..06d160c09092 100644 --- a/java/java-impl/src/com/intellij/testIntegration/TestRunLineMarkerProvider.java +++ b/java/java-impl/src/com/intellij/testIntegration/TestRunLineMarkerProvider.java @@ -16,12 +16,8 @@ package com.intellij.testIntegration; import com.intellij.codeInsight.TestFrameworks; -import com.intellij.execution.TestStateStorage; import com.intellij.execution.lineMarker.ExecutorAction; import com.intellij.execution.lineMarker.RunLineMarkerContributor; -import com.intellij.execution.testframework.TestIconMapper; -import com.intellij.execution.testframework.sm.runner.states.TestStateInfo; -import com.intellij.icons.AllIcons; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -73,23 +69,4 @@ public class TestRunLineMarkerProvider extends RunLineMarkerContributor { protected boolean isIdentifier(PsiElement e) { return e instanceof PsiIdentifier; } - - private static Icon getTestStateIcon(String url, Project project, boolean isClass) { - TestStateStorage.Record state = TestStateStorage.getInstance(project).getState(url); - if (state != null) { - TestStateInfo.Magnitude magnitude = TestIconMapper.getMagnitude(state.magnitude); - if (magnitude != null) { - switch (magnitude) { - case ERROR_INDEX: - case FAILED_INDEX: - return AllIcons.RunConfigurations.TestState.Red2; - case PASSED_INDEX: - case COMPLETE_INDEX: - return AllIcons.RunConfigurations.TestState.Green2; - default: - } - } - } - return isClass ? AllIcons.RunConfigurations.TestState.Run_run : AllIcons.RunConfigurations.TestState.Run; - } } diff --git a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerContributor.java b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerContributor.java index c85a98b1ec94..ba804cfbe6bd 100644 --- a/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerContributor.java +++ b/platform/lang-impl/src/com/intellij/execution/lineMarker/RunLineMarkerContributor.java @@ -15,10 +15,15 @@ */ package com.intellij.execution.lineMarker; +import com.intellij.execution.TestStateStorage; +import com.intellij.execution.testframework.TestIconMapper; +import com.intellij.execution.testframework.sm.runner.states.TestStateInfo; +import com.intellij.icons.AllIcons; import com.intellij.ide.DataManager; import com.intellij.lang.LanguageExtension; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.impl.SimpleDataContext; +import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -74,4 +79,22 @@ public abstract class RunLineMarkerContributor { return presentation.isEnabled() && presentation.isVisible() ? presentation.getText() : null; } + protected static Icon getTestStateIcon(String url, Project project, boolean isClass) { + TestStateStorage.Record state = TestStateStorage.getInstance(project).getState(url); + if (state != null) { + TestStateInfo.Magnitude magnitude = TestIconMapper.getMagnitude(state.magnitude); + if (magnitude != null) { + switch (magnitude) { + case ERROR_INDEX: + case FAILED_INDEX: + return AllIcons.RunConfigurations.TestState.Red2; + case PASSED_INDEX: + case COMPLETE_INDEX: + return AllIcons.RunConfigurations.TestState.Green2; + default: + } + } + } + return isClass ? AllIcons.RunConfigurations.TestState.Run_run : AllIcons.RunConfigurations.TestState.Run; + } } From 7cbd85a442703c6ad1fb4f1e1e47e876e9577373 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 28 Jun 2017 19:45:10 +0200 Subject: [PATCH 02/93] EA-97682 - IOE: PsiElementFactoryImpl.createPackageStatement --- .../WrongPackageStatementInspectionBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/wrongPackageStatement/WrongPackageStatementInspectionBase.java b/java/java-analysis-impl/src/com/intellij/codeInspection/wrongPackageStatement/WrongPackageStatementInspectionBase.java index 33a38f8bf6d2..ec0a9bd8ba4b 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/wrongPackageStatement/WrongPackageStatementInspectionBase.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/wrongPackageStatement/WrongPackageStatementInspectionBase.java @@ -57,7 +57,7 @@ public class WrongPackageStatementInspectionBase extends BaseJavaBatchLocalInspe String description = JavaErrorMessages.message("missing.package.statement", packageName); return new ProblemDescriptor[]{manager.createProblemDescriptor(classes[0].getNameIdentifier(), description, - new AdjustPackageNameFix(packageName), + isValidPackageName(packageName, file.getProject()) ? new AdjustPackageNameFix(packageName) : null, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly)}; } if (packageStatement != null) { From 04a211a8224ad6c8b32a4e317d376f93a0c6b27c Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 28 Jun 2017 20:38:52 +0200 Subject: [PATCH 03/93] EA-101007 - IAE: UsageInfo. reproduced on class with no-arg constructor with inheritor annotated with lombok.NoArgsConstructor, so the constructor reference is located inside generated code --- .../psi/impl/search/ConstructorReferencesSearchHelper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/ConstructorReferencesSearchHelper.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/ConstructorReferencesSearchHelper.java index a1c32a4793f7..30d6a624d5fb 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/ConstructorReferencesSearchHelper.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/ConstructorReferencesSearchHelper.java @@ -18,6 +18,7 @@ package com.intellij.psi.impl.search; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.UnfairTextRange; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightMemberReference; @@ -258,6 +259,9 @@ class ConstructorReferencesSearchHelper { if (startOffsetInParent >= 0) { // -1 for light elements generated e.g. by lombok return TextRange.from(startOffsetInParent, identifier.getTextLength()); } + else { + return new UnfairTextRange(-1, -1); + } } } return super.getRangeInElement(); From 1a6de10ed8808f7a0d5f62153faae3877ccf9e0b Mon Sep 17 00:00:00 2001 From: Pavel Fatin Date: Thu, 29 Jun 2017 10:47:20 +0200 Subject: [PATCH 04/93] Move "annotation-internal" dependency from "util" to "core-api" Although "util" module already contains two existing internal annotations, we cannot put the new, Java 8 annotations there (because of the Java version mismatch). Also, we cannot add "annotation-internal" dependency to the "util" module (because neither core module could depend on non-core module, nor a module can depend on another module with a higher Java version). Let's then add a dependency on the Java 8 annotations not to "util", but to "core-api" module (which also contains a related PathUtil), but still place the classes not in "openapi.jar", but in "util.jar" (because these annotations are "internal"). --- platform/core-api/core-api.iml | 1 + platform/util/util.iml | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/core-api/core-api.iml b/platform/core-api/core-api.iml index fedaceca9ba6..5f094ec347c8 100644 --- a/platform/core-api/core-api.iml +++ b/platform/core-api/core-api.iml @@ -7,6 +7,7 @@ + diff --git a/platform/util/util.iml b/platform/util/util.iml index 4dc58a08b7fa..2bdfa029d932 100644 --- a/platform/util/util.iml +++ b/platform/util/util.iml @@ -17,7 +17,6 @@ - From 6ddd0ebc6dc4e55e242d1db351e876dff15200e3 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 29 Jun 2017 11:59:13 +0300 Subject: [PATCH 05/93] extend UserDataHolder --- .../debugger/ui/tree/render/LazyToStringRenderer.kt | 2 +- .../com/intellij/debugger/ui/tree/NodeDescriptor.java | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt index 588146149a9b..a4c8682f415d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt @@ -61,7 +61,7 @@ class LazyToStringRenderer : ToStringRenderer(), FullValueEvaluatorProvider { } fun isCalculated(descriptor: ValueDescriptor): Boolean { - return java.lang.Boolean.TRUE == descriptor.getUserData(LAZY_CALCULATED) + return LAZY_CALCULATED.get(descriptor, false) } override fun getName(): String { diff --git a/java/debugger/openapi/src/com/intellij/debugger/ui/tree/NodeDescriptor.java b/java/debugger/openapi/src/com/intellij/debugger/ui/tree/NodeDescriptor.java index 4ed6de6d6f9e..9dadd8082e69 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/ui/tree/NodeDescriptor.java +++ b/java/debugger/openapi/src/com/intellij/debugger/ui/tree/NodeDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2017 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,16 +15,13 @@ */ package com.intellij.debugger.ui.tree; -import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.UserDataHolder; -public interface NodeDescriptor { +public interface NodeDescriptor extends UserDataHolder { String getName(); String getLabel(); - T getUserData(Key key); - void putUserData(Key key, T value); - void displayAs(NodeDescriptor descriptor); void setAncestor(NodeDescriptor oldDescriptor); From 237301a207909afe10599b7b3dee4c1dbb553382 Mon Sep 17 00:00:00 2001 From: Pavel Fatin Date: Thu, 29 Jun 2017 11:24:32 +0200 Subject: [PATCH 06/93] Revert "Enable @SystemIndependent assertion only on Windows" This reverts commit e64fe2409a57c6a94cdbb18b73dc53ffea374d5a. --- .../instrumentation/internal/AssertionMethodImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java index ac8ca5eab391..4b8a7c46419b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java @@ -16,14 +16,13 @@ package org.jetbrains.jps.incremental.instrumentation.internal; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.util.SystemInfo; /* A template for the synthetic method embedded by the bytecode instrumentation. */ class AssertionMethodImpl { private static void assertArgumentIsSystemIndependent(String className, String methodName, String parameterName, String argument) { - if (SystemInfo.isWindows && argument != null && argument.contains("\\")) { + if (argument != null && argument.contains("\\")) { String message = String.format("Argument for @SystemIndependent parameter '%s' of %s.%s must be system-independent: %s", parameterName, className, methodName, argument); From 334148bdaea0a67447dc1c91e66b16777744422d Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 29 Jun 2017 12:27:11 +0300 Subject: [PATCH 07/93] vcs: cleanup - reuse util method to remove empty changelists after commit --- .../openapi/vcs/changes/ui/CommitHelper.java | 71 ++++++------------- 1 file changed, 23 insertions(+), 48 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitHelper.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitHelper.java index 9954ce9f0e96..7862563ddf41 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitHelper.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/CommitHelper.java @@ -54,17 +54,13 @@ import static com.intellij.openapi.progress.ProgressManager.progress; import static com.intellij.openapi.ui.Messages.getQuestionIcon; import static com.intellij.openapi.vcs.VcsBundle.message; import static com.intellij.openapi.vcs.VcsShowConfirmationOption.Value.DO_ACTION_SILENTLY; -import static com.intellij.openapi.vcs.VcsShowConfirmationOption.Value.SHOW_CONFIRMATION; -import static com.intellij.openapi.vcs.changes.ChangeListManagerImpl.showRemoveEmptyChangeListsProposal; import static com.intellij.openapi.vcs.changes.ChangesUtil.processChangesByVcs; -import static com.intellij.openapi.vcs.changes.ui.CommitHelper.ChangeListsModificationAfterCommit.*; import static com.intellij.util.ArrayUtil.toObjectArray; import static com.intellij.util.ObjectUtils.notNull; import static com.intellij.util.WaitForProgressToShow.runOrInvokeLaterAboveProgress; import static com.intellij.util.containers.ContainerUtil.*; import static com.intellij.util.ui.ConfirmationDialog.requestForConfirmation; import static java.util.Collections.emptyList; -import static java.util.Collections.singleton; import static java.util.stream.Collectors.toList; public class CommitHelper { @@ -292,41 +288,13 @@ public class CommitHelper { } } - enum ChangeListsModificationAfterCommit { - DELETE_LIST, - MOVE_OTHERS, - NOTHING, - ASK_BEFORE_DELETE - } - - public static ChangeListsModificationAfterCommit getRemoveStrategy(VcsShowConfirmationOption.Value removeEmptyInactive) { - if (removeEmptyInactive == DO_ACTION_SILENTLY) return DELETE_LIST; - if (removeEmptyInactive == SHOW_CONFIRMATION) return ASK_BEFORE_DELETE; - return NOTHING; - } - private class CommitProcessor extends GeneralCommitProcessor { @NotNull private LocalHistoryAction myAction = LocalHistoryAction.NULL; - private ChangeListsModificationAfterCommit myPostRefreshModification; private boolean myCommitSuccess; @Nullable private final AbstractVcs myVcs; private CommitProcessor(@Nullable AbstractVcs vcs) { myVcs = vcs; - myPostRefreshModification = NOTHING; - if (myChangeList instanceof LocalChangeList) { - LocalChangeList localList = (LocalChangeList)myChangeList; - boolean containsAll = newHashSet(myIncludedChanges).containsAll(myChangeList.getChanges()); - if (containsAll && !localList.isDefault() && !localList.isReadOnly()) { - myPostRefreshModification = getRemoveStrategy(myConfiguration.REMOVE_EMPTY_INACTIVE_CHANGELISTS); - } - else if (myConfiguration.OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT && - !containsAll && - localList.isDefault() && - myAllOfDefaultChangeListChangesIncluded) { - myPostRefreshModification = MOVE_OTHERS; - } - } } @Override @@ -382,18 +350,9 @@ public class CommitHelper { clManager.invokeAfterUpdate( () -> { if (myCommitSuccess) { - // do delete/ move of change list if needed - if (myPostRefreshModification == DELETE_LIST || shouldDeleteWithConfirmation()) { - clManager.removeChangeList(myChangeList.getName()); - } - else if (myPostRefreshModification == MOVE_OTHERS) { - ChangelistMoveOfferDialog dialog = new ChangelistMoveOfferDialog(myConfiguration); - if (dialog.showAndGet()) { - Collection changes = clManager.getDefaultChangeList().getChanges(); - MoveChangesToAnotherListAction.askAndMove(myProject, changes, emptyList()); - } - } + updateChangelistAfterRefresh(); } + CommittedChangesCache cache = CommittedChangesCache.getInstance(myProject); // in background since commit must have authorized cache.refreshAllCachesAsync(false, true); @@ -405,11 +364,27 @@ public class CommitHelper { } } - boolean shouldDeleteWithConfirmation() { - // check that changelist exists before asking - return myPostRefreshModification == ASK_BEFORE_DELETE && - ChangeListManager.getInstance(myProject).findChangeList(myChangeList.getName()) != null && - showRemoveEmptyChangeListsProposal(myProject, myConfiguration, singleton(myChangeList)); + private void updateChangelistAfterRefresh() { + if (!(myChangeList instanceof LocalChangeList)) return; + + ChangeListManager clManager = ChangeListManager.getInstance(myProject); + LocalChangeList localList = clManager.findChangeList(myChangeList.getName()); + if (localList == null) return; + + if (!localList.isDefault()) { + clManager.scheduleAutomaticEmptyChangeListDeletion(localList); + } + else { + Collection changes = localList.getChanges(); + if (myConfiguration.OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT && + !changes.isEmpty() && + myAllOfDefaultChangeListChangesIncluded) { + ChangelistMoveOfferDialog dialog = new ChangelistMoveOfferDialog(myConfiguration); + if (dialog.showAndGet()) { + MoveChangesToAnotherListAction.askAndMove(myProject, changes, emptyList()); + } + } + } } } From 76d1299a0b6d0bde2dbb216c9605e83d39712508 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 29 Jun 2017 12:37:30 +0300 Subject: [PATCH 08/93] clear lazy requested flag on every step --- .../debugger/ui/impl/watch/NodeDescriptorImpl.java | 8 +++++++- .../debugger/ui/tree/render/LazyToStringRenderer.kt | 3 ++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java index c05eff6c8fe2..6a57152614ae 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -22,6 +22,7 @@ import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.ui.tree.NodeDescriptor; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; +import com.intellij.debugger.ui.tree.render.LazyToStringRenderer; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.util.containers.HashMap; @@ -115,6 +116,11 @@ public abstract class NodeDescriptorImpl implements NodeDescriptor { myIsSelected = that.myIsSelected; myIsVisible = that.myIsVisible; myUserData = that.myUserData != null ? new HashMap<>(that.myUserData) : null; + + // TODO introduce unified way to handle this + if (myUserData != null) { + myUserData.remove(LazyToStringRenderer.LAZY_CALCULATED); // lazy flag should not be inherited + } } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt index a4c8682f415d..00298030d235 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt @@ -73,6 +73,7 @@ class LazyToStringRenderer : ToStringRenderer(), FullValueEvaluatorProvider { } companion object { - private val LAZY_CALCULATED = Key.create("LAZY_CALCULATED") + @JvmField + val LAZY_CALCULATED = Key.create("LAZY_CALCULATED") } } From a30bc9faf5161a7e1431f7a2f3ec37fc652c6b3f Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Thu, 29 Jun 2017 12:48:00 +0300 Subject: [PATCH 09/93] javac ast indices: use javax.tools.FileObject.toUri() instead of getName() to get file path (in case of IBM jdk 6) IDEA-174259 (normalize pathes for win) --- .../jps/javac/ast/JavacReferenceCollectorListener.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jps/jps-builders-6/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java b/jps/jps-builders-6/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java index 5388f718a37e..4bf7a9ca4b11 100644 --- a/jps/jps-builders-6/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java +++ b/jps/jps-builders-6/src/org/jetbrains/jps/javac/ast/JavacReferenceCollectorListener.java @@ -34,6 +34,7 @@ import javax.lang.model.type.TypeMirror; import javax.lang.model.util.Elements; import javax.lang.model.util.Types; import javax.tools.*; +import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -116,7 +117,7 @@ final class JavacReferenceCollectorListener implements TaskListener { if (e.getKind() == TaskEvent.Kind.ANALYZE) { // javac creates an event on each processed top level declared class not file final CompilationUnitTree unit = e.getCompilationUnit(); - final String fileName = e.getSourceFile().toUri().getPath(); + final String fileName = new File(e.getSourceFile().toUri().getPath()).getPath(); Tree declarationToProcess = myTreeUtility.getTree(e.getTypeElement()); From a476b0d0385f2915e2cddcc7553ee25d12d35fc8 Mon Sep 17 00:00:00 2001 From: Matthew Gharrity Date: Thu, 29 Jun 2017 11:28:57 +0200 Subject: [PATCH 10/93] Fix hierarchy export to file indentation If a hierarchy node had a null descriptor, indentation was still appended to the string builder, leading to malformed indentation later on. --- .../intellij/ide/hierarchy/ExporterToTextFileHierarchy.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/hierarchy/ExporterToTextFileHierarchy.java b/platform/lang-impl/src/com/intellij/ide/hierarchy/ExporterToTextFileHierarchy.java index 85a50b10e060..5095aa645704 100644 --- a/platform/lang-impl/src/com/intellij/ide/hierarchy/ExporterToTextFileHierarchy.java +++ b/platform/lang-impl/src/com/intellij/ide/hierarchy/ExporterToTextFileHierarchy.java @@ -58,13 +58,12 @@ class ExporterToTextFileHierarchy implements ExporterToTextFile { } private void appendNode(StringBuilder buf, DefaultMutableTreeNode node, String lineSeparator, String indent) { - buf.append(indent); final String childIndent; if (node.getParent() != null) { childIndent = indent + " "; final HierarchyNodeDescriptor descriptor = myHierarchyBrowserBase.getDescriptor(node); if (descriptor != null) { - buf.append(descriptor.getHighlightedText().getText()).append(lineSeparator); + buf.append(indent).append(descriptor.getHighlightedText().getText()).append(lineSeparator); } } else { From e58205dd4607d7b6b52532b713eea97994e51109 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 29 Jun 2017 11:50:54 +0200 Subject: [PATCH 11/93] typo (IDEA-175162) --- .../ConvertToNestedIfIntention/after.java.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/IntentionPowerPak/src/intentionDescriptions/ConvertToNestedIfIntention/after.java.template b/plugins/IntentionPowerPak/src/intentionDescriptions/ConvertToNestedIfIntention/after.java.template index 87072e2c61f4..18a7be42b010 100644 --- a/plugins/IntentionPowerPak/src/intentionDescriptions/ConvertToNestedIfIntention/after.java.template +++ b/plugins/IntentionPowerPak/src/intentionDescriptions/ConvertToNestedIfIntention/after.java.template @@ -1,5 +1,5 @@ public class X { - boolean f(boolean a) { + boolean f(boolean a, boolean b) { if (a) { if (b) { return true; From c612903b6abc6e8a4355efd1f94fa648edaca5b4 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 27 Jun 2017 15:30:44 +0200 Subject: [PATCH 12/93] =?UTF-8?q?Revert=20External=20project=20storage=20?= =?UTF-8?q?=E2=80=94=20append=20postfix=20@maven=20to=20store=20maven=20mo?= =?UTF-8?q?dule=20data?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 2e4f94e68a248fda1b55179ea4f671c94d6241c3 because no easy way to fix JPS for now --- .../configurationStore/ExternalSystemStorage.kt | 10 ++-------- .../configurationStore/ExternalSystemStorageTest.kt | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorage.kt b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorage.kt index f87802fe7072..e4cb512a9f3c 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorage.kt +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorage.kt @@ -22,7 +22,6 @@ import com.intellij.configurationStore.XmlElementStorage import com.intellij.openapi.components.RoamingType import com.intellij.openapi.components.StateSplitterEx import com.intellij.openapi.components.StoragePathMacros -import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.util.JDOMUtil @@ -36,16 +35,11 @@ internal class ExternalModuleStorage(private val module: Module, storageManager: override fun createSaveSession(states: StateMap) = object : XmlElementStorageSaveSession(states, this) { override fun saveLocally(element: Element?) { // our customizeStorageSpecs on write will not return our storage for not applicable module, so, we don't need to check it here - var name = module.name - if (ExternalSystemModulePropertyManager.getInstance(module).isMavenized()) { - // to distinguish because one project can contain modules from different external systems - name += "@maven" - } if (element == null) { - manager.moduleStorage.remove(name) + manager.moduleStorage.remove(module.name) } else { - manager.moduleStorage.write(name, element) + manager.moduleStorage.write(module.name, element) } } } diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt index 4d322f3339ff..2c58d5d86f28 100644 --- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt +++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt @@ -82,7 +82,7 @@ class ExternalSystemStorageTest { """) - assertThat(cacheDir.resolve("test@maven.xml")).isEqualTo(""" + assertThat(cacheDir.resolve("test.xml")).isEqualTo(""" From 375b34adb939d4832ca3ad992bc2c76557eeaf2a Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 29 Jun 2017 13:38:21 +0300 Subject: [PATCH 13/93] logging for EA-103861 - assert: VirtualFileManagerImpl.getFileSystem --- .../com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java index e05d8fbe0f09..fa67da9afd05 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java @@ -86,7 +86,7 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx { if (protocol == null) return null; List systems = myCollector.forKey(protocol); if (systems.isEmpty()) return null; - LOG.assertTrue(systems.size() == 1); + LOG.assertTrue(systems.size() == 1, protocol + ": " + systems); return systems.get(0); } From 2dbedc7d669dfa8d00997d46b91cae972580c687 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 29 Jun 2017 13:12:08 +0200 Subject: [PATCH 14/93] [platform] updates ASM to 6.0-ALPHA-r1860 --- build/asm/4_textifier_transient_method.patch | 13 ------------- build/asm/repackage.xml | 3 +-- lib/asm-all.jar | Bin 434786 -> 440875 bytes lib/src/asm-src.zip | Bin 737955 -> 740596 bytes 4 files changed, 1 insertion(+), 15 deletions(-) delete mode 100644 build/asm/4_textifier_transient_method.patch diff --git a/build/asm/4_textifier_transient_method.patch b/build/asm/4_textifier_transient_method.patch deleted file mode 100644 index f02b3d8c92e2..000000000000 --- a/build/asm/4_textifier_transient_method.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: org/objectweb/asm/util/Textifier.java -=================================================================== ---- org/objectweb/asm/util/Textifier.java -+++ org/objectweb/asm/util/Textifier.java -@@ -425,7 +425,7 @@ - } - - buf.append(tab); -- appendAccess(access & ~Opcodes.ACC_VOLATILE); -+ appendAccess(access & ~(Opcodes.ACC_VOLATILE|Opcodes.ACC_TRANSIENT)); //[JB: IDEA-166121] - if ((access & Opcodes.ACC_NATIVE) != 0) { - buf.append("native "); - } diff --git a/build/asm/repackage.xml b/build/asm/repackage.xml index 0abbb9199442..b2ffa0cf52e4 100644 --- a/build/asm/repackage.xml +++ b/build/asm/repackage.xml @@ -15,7 +15,7 @@ --> - + @@ -42,7 +42,6 @@ - diff --git a/lib/asm-all.jar b/lib/asm-all.jar index a64a5929acec641708aed9e2e2b584c22dacce4a..6680557b43c89bb0b4d27d3bc39a0e536050b048 100644 GIT binary patch delta 171188 zcmYhhQ*M5b(0x^Ruj=ZP>Q%L> z4u)_mA8`>BWx&8;fBk~~^@~+&I{|?jnni0{y34r%ErDMT0>Lc_9w8x@9PGc%gb||u z;f&`0kc1Ax@IQ)zaDx4(ndAq;`#*Mpi2RSzpe(5}knl-@pwRzsE%rZ>fU%_2$v{HE z{r}7+ErUw^zr#QOqbZmm!vDSFBv+nuAN1ER+q8geFsdX3DA+VaIY@-Ye_)rO|7X2% z3$hgMe?lm#G{paeMXYuxl>gH;BmVnQE%)n}d+M)WEJ^!VWJ!HQD8R067y!E1GuQXU znN0~*20j5RxyS$w`98WhJhU^KJq#x_4EY~&auOKmaDQ9}F)=*|4CE!xyaM4rLVW5F zH+rj2J?`CldN(@bKiwBOWdQ2OCuRLI$J5fgvSAr13NSF?4^ss6htqJn zGI!X6YbY$afe>`m-aHU=<#V*K>M8>`=vDc9veJ4o{XCI1RA=;oGtYM}o&;jE6lZ*} zGo^c=u#81}q_B)7hTSlNO8GK?Pvt6%px@M*BK_VKZeS2;N{;R0%5oetM;hsX!tq+R zH#OCJ>!6?EK)6?SHi%W!rij34bX|%5C-kkoL!DQ3AZ&}$r2XUF^_ppPP2L{-z%{WY z0tBbhqj}&8-X~^7XAX0#GD0iLyL(cxmLoy$;1RFf39=^@gvT2*w9-zeT+igu%N*D4 z<=~z`K|@v`KRTOYU0R?oWN+>cl44zMBw-#dVbLBj1QNy^Jtf$0>3$P*KKXt$ zbo_!nATxx5@@;Z|Zpq7UbUvAW7j!;_{@t>gUX@!=h#%suDD=<8J*Kxk?r&BxeUzA( zU!X)7Z11m?pX^D!@>ULWuifW|4tK2#--th05I@g%9&bJZ-vU4W%7R6oL@19e5V`5} z>!2||VW~r<;J)JhK$_R=Kql&anTsn8^smf7po8TZrA-qh-g4ycx7OrCUZS6zpFgB~ z5=1`{KeBK?SQR%Ku(7XuwOt7TwRMI|!6Ygr@`Orb{?o?D*y>tJDmuDKywz<0Zbr;s zBYlFV1Hln0p|UjTTp*3-WK>8v3U5#6NpL06>CwM1nbO$<1Jt-$3>UhL(89>3V8i)_ zfnjmjJZ|U-2a?i8y0F2Cn#bWdNujdXgkfwr;QUAN19uOwl<4xre1$(JzxNu$Sm!3J zWztp@!7o{?tt%&KF^$;Fp4%29HPBz^nQAnb8WoM8m?d?!yB1=i>8dqVJF&C6+M3#m zns5UG%rMNFgW?TW*F`$zOo+qOQj?7nfKFx@#b~Kae+{(xi#`3gjT1-J7^xX^)phm6 zosej3u+og0w@1~~nJ&Dvt*$>W4jLjebI>cZf!gPR8;dfhFZ4B98!nn&PIA+xYBU^U zeG{;-s&4FNl?jM+Cd9N@j6-!@O`wOb(6;PuO$9~hyDJ3?8zgX;$t#9#1vZ>lz~&fi zF?ZoRW%7iLW*r;fQr(crO6kgNU65!@)umK*CVFvg`0Sc(Z30#n;F~b+wh>p9nbX@e zM2cD^rJ8!`@3ZBnHE;fI+|vs0Ur#Gled4lOYGV8~`6PD5Cwl`83-^f;%ZD;HSQ@Fa zjKwVF4En($Vk$FvlS(!WeE>;Gpa$70REE8f%I{dOnlAN2?Bp~w24l`5x2-FaYJn7S zYfCdT238BFluf*=hbci0>ru_^Dxt@FLN1YZ8a?wbshDHE>lLv8m%j54qk*@ zj928*%m2b~?i8EKQX2=6(OrhY#777}QYcPPJdiTKEB$D7OHlJ| ze%%Cm#$f&PxVhL~gkqWs7_=p*h^QkGV%hN{=|+8wsakNP8DX+0W!Q^{qt656o(KTgtdzpkK+du<+v!~KEd+N2>8vUku)%}@if&Wk4g{Fb}9Ss!?9jPOt zAS$%o>`c~lR`|4)l4x(|7&5HZ(v=#?48&H7YI^MjRYk7eTGz%*O1uO{nU%$Ih2@2W zT9Rl+RpBd>X$6nKbFZbGc9E4P(WL=Gsg8jDs~?L&$w;+S>XkY5c!VWg89CKrNjiF6 zC;Ca<=GJl~Mkea>2sGs&d>p3r*M-HnkP@99DZvy&nOMR1fvU2yDu$BG%uF&Y>KMZm zal8Nq`WPEU$MOnmWheF)bQ`i7>VCC9x(3HJkcITH6!i4K%9`?+>K~I#W3irc{*uJ) z3OScpfx&5+p8%Q>v;4wpH5F}{KPkM>xS8Ee*s;8{`A)+RGLz$?v=q%&^o%vsG*pOb z%@cL=6Ep;FHr(gr6yI!9TA}XIv1;@M+QSPCuoT+KDC4q>M6!@xZecueB8&w;N zR8RS6EYTinN$BW`QGFiy0Dk81AoMW|PGdW-$60r+d z=My;84X3Rw;XRZLD^<#wg`@kkUQ@J+5V0V6-hKYaX$HHv0A(n4ZBvS!t=7D0L;8g8YW?pdx4XABvYyPq^|SH^ zT!?(487yQ~aiR8sn0!NWh(V>$q`}sviY{9rtz?ylSYO zvqCH~2@~~$8p7%k43Ge9_Ei@Ajb@B`Wq&fDSCw)it&$x6DeS>G7s9CaV>$%O+q}p@ z72k3c*RjVn3-lAEPCLdS0`Dhq?F!S}OX^%SF|mpB&p#8@1|KDKTD|3WIq{*_R2?d5 zsU)3I;)uR-4Du5h8CWbj6XlpLC^Q^X#UMq9i7eGcWv%)#IWlpEo0tk^knXO>auspl zv&CE}ra~nzZfIJ>=Xl`mWD!%X9#`y@2AW%K>8q=&K1OWP;V4!-7~fPDPphF8g8ST! zG=tfc#Fx|thE1^?OL3`}^{NK;X(sp~hp)FHNft#TG9;+&iHTnpyYru@L(3#iC7Qpu zSp-Icn^Wc><){4KC zKRG$!glLyQxv@s77aX7FO&zz3X{SXcV!B4E60C$Y)PhGDYuQkargqw>RAy1xjagyd zMY6F@8nuzduz?4Aa8(MFg~_HOgqaEK<^yvD0!! z7Qg-x>Bqqv_1CTuju{yR6+x{DRRQ@6A>b-^c4U(;gBc7N6>M0l1)Cgl^S~4~6xqHE z+dOLDIG99y!b7e{#ZOsX!^wQk?Cs^RZbl`%*L{f`5W6Leg%*uc)_t|Ttb&q z)4KlqN^1!xB&QMC&8omD%dQyFG)jwOQ`9b3t{)#({=evb8Pyh8E@b;mvuW4JME#oX zYaHcOForp7+{1tgos5-R|FcnmUfiTft!!5h?PSa%WOl%&LyvOYqA5KOt7H{Lo4jwF z@yBlIcukj2XDM7;haQX0)`-V9x0c^(tHE&D)Q<20l+DMgt2K@?7&z@mz0rXs5p4b zFnsdNx1FITkG(}nR|@W$R!5iN+c?T*sJUg0oMZEVC$Oe;4-&RTu};mlaXsydPG?JU z{ug_npH*~KiridX-RRgQG;LFL){b|(wyLw}IxtKkQ&gwy)Nv}os z4Q<-}o?iu6u}RMp=`uT#oeG7h#M|8Q-$$CxL9*C^_(AYc+g2fMH|y$f-L%I^t^KOeDCf!mZ#nbwgtD`LHs1fjaoYq0Gg&#tU3bSO#EP_@OY zN51*nU0ZW*>q>TFkT^CL}wxM64Ip=}%PvjQvg4)+(XIE~%w6P1Z>5cszN;>#4a2OKJI7Ilo|< zU_mNyt4Y1AWgt$1C^U5xZu>_u;4FSvE4f8@=u@1NXPw{0O7E&=<=A^Zm#Ed|Nwiksbp_U%b;#p!x2C!jlfj z*TJHzIJa?PL)S)mzIWYlf`56$W))RJr+#KZ6trVQ>)^FfQbJ0*J!j@p2!cV-2(VHE zbmdhU2jD5VaYw;d4J=N^x9dKlv)aT~gN*Xom=1IhR9ERXbX9n{jcTvg{~m8T(?nNg z!^?D{&|lSQZY>oX4oS?j9~t7hJ2wVGerlocR7y>tt5%iiD)Ru;#O@YYYsDVorp38N zk|uVI7XM7mIn&A6R5K;l$86dq1IiM^yXf%QV6 zxq-c5T!jiMD%2%{n%U7)kI zG3JC8CfgtEghmxT5IsmGPrwt)=(b9qYj9{6Q8YgzTe%uiDw`cFMg^25;FQ1CfOmPp zPV`#@7c11Ml#{vUVHFUv10YzAl>8evl3r!GdxPfoPu{%stm=F_CRpl_y}5@R)|(c0 zvP5#(C;TND?D`7g2M#GXFX#4(bJ*Jy{mn{TNX&=fAO~ub(uH(?bl+`5-(PzoH-44iLouTt7>kFqqg>cDOh_16PF*n?z-_$xBAC(7Ec=lAD{?aej zwHwN4!>OTkzrI$e=t^}R!Sb4VkuwtS$AiLw3%grB7d2$g_X1)hjJA*dRX_F#;F)hvO^aA1Y7e z(I4W+kgz>)Pi&xkpoAehA8gV-%NopV-}Wv2794O86&Uuh4?%xNiXRFbc(_IVe!=a6 ztsTU>b@0U72}7#8D!nBEKoF5x_!X3tA%aSZ)U|LeQYz2$pD~kr&Q;bgwf5iUB^gmo z{u#@Qh?2XB+j&Gyjwsg^G71KN-sfIHB#G$uOg1AaG6EVP&au#+jlo`PLB;jPLe*Gm za&x8l+0M_b{W_=J=UsN(oIX;U(Ue#jCu9Cqsd7~bZ7GKRj%bNscw;ROt)YOHUxb}M z(MPu@4&!Dt>J^M=Y~cn#BIOy|0&`)lGoUgfMN=5t0@c$Sctc%ZpJ#0q$>JI5 zPriLzH+{v$FtOP!VC~WaQAp(2J6SKm+`!lP2%CdctR&7L+V+ z>+K6iD=E0CKZ(Kbi;JGaS{n_PNSC}tUBST_V}OZ=WFvmiQ?5_%)zP%NYMw<+OF)#3h- z&?}7sBxp%^#N{A~ms+KkwnRm2f2{dstY~w~%24~t$Upav-EfIxN}vRyNuPzXASE^0 zfIveRdWp-V8@M+_q0?6(p{9bei8C)B61Gm{Mk8MmBA3dxjmv0P-b0tdo{}C26}5AC z@`I0V#(|-&?RYQfPwsY-h~;45Z(# ztTjo`u$Vv(Es)QtkpUEr94*_xj;Mq&c_A$}ob@i`kYUx-(USTdTb@aa-)oi}Nx+yv z50b3ulLqdp^l1~ds_<$NOR%ij8gsa{80g(0X-$5ep?}6vT41~}{4=R_tD4+CXuCIc z#aDXjlRf5i>nJUeS+?v7reAG?Ge=ss3^$W2cYv0hI75p&mMhz4=2j78_dh->1X$T2 zGF3#E{oa9bYW*-(SO)-G0!B;DC!mw%sW2CAuBUS&mJi;?A7{^BJ_%3#O25}p(1m=< z>5J;c9mWrxW2CKu-}l3faRhWDKoCI$!vE$Kxx(JezBi%?-P4b$u<8zGj9Y;5nRUY- zTGG@#msNF&OX}y-in~Xg#r8nF8;jCi#BL=zkbA)4AjCJq&`WtUAB_>yN&&5icPTJ1 z#7zJ0XzspN71}|1Asy%u5Y0neI7#7dlN0n1%m~@h$^`Z#LRWx|4)I9}w1V6_@^h6O z9E9)QIRre%#<3!QS*A9U_3$LEzSS3aT*#Im#R=Vy65aEr9?JadX#w#L{v2EM8e4E5 z%ROBintz3TgG(vVN3;7qUJK086yPeeWO|(7blOLDQPCk7G_hAc?RF8dOgH7Ie_W4` z0c!!lxHRL6NINXj4M6KbF}qBe3(|w=UNQEVIRODiUU4|sst%AX2u+7Yf4#@mp^6=DnSy2pknSnyx`RT9S+Y9 zmSak$s?#%qf+LlDHx4Yh)RoMz9R|ghStt|{`dY(fDAlb;dcO)e)LF~16DsS899J0O<#kCq-P|7i7=48X-I4wn&{j^n0SBxq)F(jvC~g}r-ZUFpAh?RVSdmpkb46|Mfm;o zeZ=JDSiJmGvkweWm`ff3+#=!OtVJfuN z?N_jWzbbvms)WYn{+mkZmU+3>T~PO+&kb?&llA^h%D<_&i9{C9Byn;{!ta0-Js`CK zRw&{PO#qAlRe;8m{tg`zp5{#1b2f?sr*Bu~!Oec_;jw~6%_JeZSEN32`An~I#$1s~ zPNRO_v3T=Kb!hzjHK}0u7C|pKcAq3lt|h80O0Fh~k0OPZz(JZgb1zcEdW$>1V$~T^ zI-;GJo}0i&nVhdG6iIic*Q7VAFGYA+46Z6nUJcCQPvx5#M6j8#JEc0JR+7Om<;lp( zGl^{|VfASn`Y&0xEVkULmM7fR?*8^xPv*<_>bCrhk;z%Z4|_KFIg(<@P5?~2hX;ro z-yd=5<_|z5m3p>4v$!Rkubdm&Amz>DO&~1|N{p*yttJE>@Oo*xWUC+{Q7JgY+NdD$ zCIKxzTR7eQl=*FCb8yn|)GWODtHhoz4@QQPFF_3aO2UJ;`L44asnJS%eW@2=c&{mW zt`(D7Ro>m>c@D#tbri4AuEvXUE~psHNu#L)m7Y2d+M+6i?9Nktg6op8K*D z&A%PkeK$wm4Fo5ro#Y1d0*vWlrgeWGApx~W48XE+S61vHsZ5DLf1`VXezueFqFefV z$!EzSi*~AcYy>A}KXxmkOM8NXw&w>c8dI zLYhZOfaCJ5uZcXK*TU9wTvX;vW8a><%S5G}ETeXqagiz$lgdj1m6cwPB~6OM0t+PZ ze=CZ@U+TTROgKifF+xBm%8ME|n=x8z5gH(Tvb~f-8 z!OzX%A033>!7_jFtBaS&3(fsShpayc)yE@%JaavX!0&bsI0HXL&6?1PKEu?S8r;%8 zqZy1))Skd}g_b^O@1!uD0)1a$1>$pOB<@qX;%g6z0qjht7Pr4q1fT|^UbX#b3`T1Y zFW=k&s}GH@@_rn>NGdP)53eKwv4Txx-EWgq=V9YMXzeA6x(l`DC zuO68$|J%uMVA2id&xy}aYnKq)eRl&wuYvikZv(*q!5iUv3{f)wt4IS8P!n-4Zj9tp zi97H|E%roV?Cvw3{wT~01*oikS9-+#Y2`&YfOT(iL=nC__QU9K#5AV&N#rcpL$v>s z9Cw#?B=|ac&j9EJjvAy9-Em6Z6*SMoofK?}rq&RpFs(Ph6HEl1ktU4H9xdi|Hkb{5 zsy5A!rP_r(_=0Y4k1TmZ7npFtvFD4TLy^y%l6oHb+c&xLyA_ef?;n1_e3=z77o zLO}YoW$lR~y-2~oh@n$`cr`btG}c4lz-olQQ8!n2fpvKUk6o0)ql3$o0^%)HiP^HI zNzlOa&nIf;k2`ag{}LN$q_#oY9l^o3W7-u6I5TbEiTn7)cZsZ*Q${D~%zs@+^z^}d zg=|3F_w#t+ZWoIi?Af+M|2@b#gUhCqnPdMKA-@mNfc^I{$C5yw{#dZsQU(kGj`=4Y6ANtszz!2N@VF++LkHyzjHjRb&z{@5AGsDJvnHI`LEiU4oAUy z3iDGig`SJ!@O2l#Ie4u2zfIZygmj9K-N1}f{Sw-62UfZ^$;GD~TGo6j%bQ~ts&>)t zj>x)$(N`|&LOpcz^w+1BRQVRBY|c-B$)!*!T2UcOTl!nuh85h}%D@gYhE!mpLreAv zTc&WsWD$=_5f?Hli3Z9uCx_GW^CzEycW=NYSn46Ozd`B8L?9>@R%|~1Xt*_3Yorn0 zw}&{Q1JhJkCZ3!obYY@WJJ0jHuoUG&1Yv6gT* zk?^m7Ob39X*gdG%dm0JD^a<0p^RX0BvGnu{ni5XKUbYQq zGbNFPwy9_1kz!2hjNXkY1xUPL`;DT4?l7tA)bgepQGgZ^ctekZWly|v@d6Q~& zn;v9-Jqo3L)H8p&Bu5Pq$?^DKwj#B);^P6$JA^?*Jt1|84MLuXlnvTy2WHskDV|Wi z{m0SnIf8%MTS3j_NcrI5_{#NA87AcifDNT8S{$s}sd7UNbmjC}xC~L;1!k?DK0AKT z2@(_u-M_%rX~mA+9+5QYXm1KFydhKN4CDIAYp1EjjCIWI3L7v;5;Js#26b~$^4TR7 zXv>7(vUn7VcZKq8<&OL)ln{=XYKrP3a&BL2s}rkz*CcESbQBQDzKlmxjJ0`2fJq4( zkQBqF^69Vog%E$7X%dby_X9$;GtOqTNDo9xpU$Xq?l_+IUW*k_ntR}2yN_t{Uh@}FLaR~SS1*h^ zKCq=Fs=qKo>Cn8R2J*`a#ZeO;11rNw&X9)-ue{F^g2-5C(Tm#XlIrqnUJ}ryNpHw# zlK<>TDEkR>mHB8zMnW!AaI6q<2ZEBM9l3{RBf8S7A5(>*A_ZXXoNH#y9k|ouh7sHO zA6kO9{-MH$!DYpfejEv|dRaDgqFRPfO6@v-RTawBnR^k0jl_ibvWz-Uf@d(&-`qX}Wpb`R{7(x|lvty2Ctg;J)Ek@~}oiW80m3n{B0lcSZRe;EW z>}!@L98;v*ZKh_N@&o;=Vm3la(5?@-p|QyP654XpqM$ru)@C&#zyRHz@v9L*pMX2)UeQlAsWo}z(2)3ot3~qY z_EbYu+0faPZJgkIpsY$FO@i8=oWQ`Ul}4>3$2V~&j}b?54L$sEwGffqiNSnMjNxTN z{R#$2Rw~K|jv>>X(DbRzy>Y(326OPbF^AfZwK9jz4E1~@}m-og6&PY`fS~R4Y;dw)B+R$<+FyYWR z=$5O&WK#5k>lk@7@)MZuN=d)upZ zS@u->N7P3guHn>+LRzR&E($HH2w7%%`Ry4&PA zm>g7THR-dL|8x37SNVzs?h4{_{4m$pMbUhq)ag*BqZ?YWMYewdx+4w5H#Eh3pfYJD z0eAYeRI<-LlRPsn0&H|>qEstIlD!N91>JTksRhQbrOdqi2t*o+>9bxttj*4~6%Nn^7R_=>V=x5dfhPSv&9b3TcnB zJHUUy%SGKI!T!p?N8u-m@rqW_o2&Hn1u7V2kgtSqlxb-SgR0qJN>7lcl>rZ|v(D&K9}{g6hg@%GjnJb`S~p`2(W6sYcR#P= zHN|`Om$iu7`+&hQR+wzLg2?FCPrP31JV1M{pEA##h|Qjy*^1X|qli0|YG6`G`|?D> z+3!Av;UoQcn72QqcdZpz~uNB%_cg7Ypz`R9phVKQ6#~x=L z(Ey^dr|?WkfVjI%lQ^FU+)2H37I(A9w%;+?gTUm6R}?MsMAQ1Q)Q4fG*O@_2A}w0^ zc(`HgcFC#aC^3{C8I~SVMijLM-E6Y7NEy?RHIhov?kej(p z>^5TQMD_y@D;?CjB6Vjey65GC$ep;kL+={g4Pm4Ar70@ly(lhNJO>s>_Oon-W7`*( zeyhw^@$?V!;|>zU9++~@lIO{#oYymy{BQjCr;yB&$Cr9i3Ms6o*eOy95v^zFl_0u* zj3Zt-yVk*C3X4G6cnJ&|j&nxSfDCBnv&#YoT#Ic1S} zd#P%8Zuj1i5?*$y0Y@I+aU`aEr|Mj8+PK*Hp0#U&2)<~x39N3otQ~<}w@gP*r zkVmM*B?n+8kIyY|xseThg4?Kr2Hj5aFY?nIw#en(S)B1%5jL(~ORveGS;DF-RXn)c zrhm)$g^|PGKm1-uvEe3{HZqXq_j1MjE>z=q4XCQlF!BSKmZkR)*X9`G9pLDjH!Cn~ zawlH`VjjR-U~V)HMbNVnk2d5}eAT;oWzE^r9+}KGcQb(x+|hyn`*opK0{mOad>O@10T1W7`e`*06sTC#Fe3drf^EaOn| z&vu$ghs&1u8I#xZi78cfGfD?IGuq8_c+$M;?J1xHEg3EMNlVzEYiKJ($tl-$SI~S_ z{O!M6n#~+Zd3!>3@F$>e4?zRcLc7rzCO8M29C>kKzR875h+cv*S{+w-z~D!-dQJgQLx^tM>UT zIx+GmU~;bwEAgag%<1?Sekgmd7fk@Eq9)pUKJISj%h!P~X)^;o7ombDC| zLg#181)GP4OBPRI{r75AywADk?L^n7BK6Qq-;AQBag701)5o=Mp0g`co)h<`u_B-e zcScQ>RN&X<*%8a4&IZof5+rUJIb@sT#!#vvaT+fqS{2B%XcA`-4nT*Y3O;~cGe{Eg zaxn!Tkt{3Zqs@ecaVhqdhHeQ_t}n|)PniL z$W=~1S&M2n*OiV%7zYR)Apjn|O8~H1@lV(gWsIykBh`@}`j$*TBkaGyl~oaU#(ocF z#}|jia=LS!JUK)}OIq#j{O&rYMD?^-01&Z|Z2R{)tf(?$tiR(Zn9NXWzziQMa2!%>UNAJk=+y-wiz}xYnL0}Al=T1`XBtkb4R-UV( z`JJuL4|VTAUe=K{GIJrZi>+E;ci)tv-)0l!Sfb8Dia*vxow=DDRYH&aqE)$u zyv+>{5#8Lz0DVH7^@%yYt`&IY4^Ab6Io?Q-$b!tr8_3FfRX+atywvfWF31UkSQ*Hg zSe}`d$IO6RirVb`ZI%r=UEr-4WPaowIjZM<){js8cYL*CbAG@VRtmW3K5+baqg&d& z2%^&P5zNEU7xV;J`l*<(0`{fFrFgQZS3s72xu4-)?71qhQ*o#r!=hJAsit&iU#c$! zRPbod?&Q@+$3$Jw)mkVF)gj!*4_v8(k#4hiheKvCR}?PQsy3CWiv>KI2@oSGPNYt#Wqfl6lq%bkp>OwDdc@t z&#ul~MaMID%MpFsB`r!D7oB*6>l0`0#9%Ks9y(^&DtlLhW`IuoXNhNKL zxLh-M7VPi{w{6xpFzrrY3<(Tz8h}We{Vh#%*}1~TSMYoFF+Wi2Y;e`KO``}j*8$$V zVExTJ4SD@BcU13qy4>q#@e>ZO`}KJ`maw^`T>Z2@K3Xa63eD^bIY$2C$kn=|Tg--CfIz;ZUZ;2|0Zt|wKUc+L)&Y7sTF?8) z>ACPC@r`>Dsbhu>y?8MsgXXNM_Gdlo&37R`mm&CgloEBQzfL* zFAhg%>H-WeOgpHJfeY#jyxeIuyyA-kq-F)7e8dUG!oG3F3lV%z?5t3PYKN+l_T0)T zbatl@HaR0)k#?T+ZUlK{cw}{#dHHSns9ZQe&d@0hAZKKV`Zu4*CeOd=MqbNI{&$cx zzdVYsJ|Iy6llGj0j7Q1F!U%HD7O#q(l>v43ZcEQyx2}XoG^8hoyMC4L=!_^v8v(&K zf#GBpvDglL#y#d)bYO917lHFJ!JN*&;Qo7gSJfNg(MNk%Q4gVnE-1pJ&i(i;Fopb( z_l_+nhw+bn17|@11yWz@z0j+Wz!d!(bmMU$Jy1ztg!SmKst^$9mK3Iy1BiS|o^ANP z_u`QLj=>o3ZM1#^)rq~uxfg3u|4#Z#VPJ$czPd*F##5Q*Q1@}1b@gi?ZlZPl@Seb3 zvu89X^``Ok2)MR;TzVz;#_gl!*RP*s(8zi0aYgV(_M!ScDSwS)_$qL9dzRFIIo?7||C^WtS82W6QzA!_tNt#iX0+i#?H;Zw1mvG3$jI8}q@mdj;`uU!)J*pV*_F^S{SC!+13bzw z>%n79yI?*sJQ@qD!Xr|<7TuERgvw@>`EOiQvfNY%}g#RBDBjU3-ZY9eZwzI-KQY6S`eD=EBTELsMh(%m%l1 zje6;El~klLGUT%r(fhk6rI`rTZU+IYQCDPKpkt{6!v% zge!5YIdh}d3g;?KrBCe}zu&E|y}od-#e5r|6MNKrw0c#1#CjEc4kl0pE$w`7DYbYuFXO#?f=%CebSbzbUPM*ePvt@hCPlMo6!1OhTTkf%VcKGn$28 zhPowRmbOcNtTiisEbf-QxUB~th}YpxX)Bgng))bAH8@O{eupC496ifuQ{eoTEz3z$ zh~5num8BW{kFJfagsdMIMlMY|JNT6z%v5It(<+aQC*|)>=H)xfe0n$LIpwFBSm$0R z#okB{&fTr;Qi3~M`7i7qz>BXbNPc61id;j1nitNWl3dH4!qco9($9KUI)R0YqPT|GMG2kmCr}%Iff3x=xMoTtK&HTscAi2V=0&L{-Q)NQ zZTFmZp+Ym`T&Wh;NAeMVa0{D6D9{A_%@{DOPJ z`?Pti{(gGL{NaYqt=&D_Eq8diS#h{0T5)(5tld2T>eapg%Xd$H)O(kIzy^BHJk~&b zOSkoV7yp&)+MS+vUiG~5KTEw6`c&;0D$KoXguDy*g!=UY^$G+HHO@Y+m)}7?NWX+W zaKG|=gTBMN^?*w~IzN@$d4lGGMS}K%<$^|ng+vWMHAF4DbGc2u3%Rh&U+4ZyNKk$$+FM4N#LO4Y0O75 zh+kiQeqTYrK9aA&zR`E8fZ4}5Py^ymhLW!;V8*X^4VchxH{m}&lq6z59QiTddcrzi zqrr&p3QaL|&;5KHcn!-OR-l`NA%?iTxdP)b9O(7G*UjD1jx4Z8YD`u|{6F%TIzjTm zcQASC8K5cdbK)g)AA*TLkmc1>ZNK?a*FqIB1%J5!yEem-`ek1@3ew>gw^f_Xe8`l? zF-`I(rl~0VlsR(&%bU9PRJCEkaTAn1f9!r++{3-mzKG|ypvS6Eur}W@?+p6Fh@8t5 z#hbN+sJ4LRKaWhV^<2L!J7$_Zi(6sGOP7hc4s=^ zd9M-ke#!s6IsO9Mr1Hq~u@ht}RvQH*StxV@jz9MjhBUQ4)?51xZhX8uvOixdVq#Wg z%rs0o`jtamUty6Hh#%A_CF(Id`MAi^k!Q-2!fea1$dk8B5HV=QT18a zGR2B>)j@l=x!_=j7K)ee_vK^TOQ5G2dj2LTVYoUw;S+9}pGH5jn<4vePz5hL=#c~0 zVC=d+a%o_MS`_SNEGV(B{M>#TUG|`T{%k8vAbj>cS5Cj}1k|p9G;<4b-4gnqV15Fk zf7IM@Th>nwznJPNpdnt#e+1Wrv@yEoemI|z?PeaVzAe@VFIxI#e^jne+%^qke~^8W z{{ip4zDL&#mgh$SKV(-d*$=Avhr7UGLJbKbx=)V=swJl}+Mnwy@+027zN_vtl0B27{Q23%9l{@@$~y1v6Uu-2<$1?*6@<`-Ic)b@7*bOx zA|=SnCj8!iZ7U0n(0eO-e6-;37Ibd&uW#QMH`l*4rD5u0`JUB5=hzjX4D4<_>|X48 zOu7^5L<#l0QF`TzowdBt+v^_nba=m>KeXoc!L&>2L!S+c){GVFMTD-Dy9j5Zy3+pk zd%wQ1Z_~HSAd#e;XFfBDup@bk2%{2Lzp zGVt)$Q@4a~OR}|kFP`0~xn7^TnyFxsd6V%xK zMF0Yy+#pU$jw>X|kw|PyE+Rn&;T)~HW?nRiNCw`DZPYex3B?=peCt0C@@?%JY!NMg z+c1x_!`aa%5&ly3_NP|EX5Y6cm8G01P!t`hKsWL-9X8YDz#Zc1iY!BNRInKiLS zyo@S9PJ>8dj{1^gfD4n0_5%rEi2QnVQgTHhJz@|J?urV8{vyaw4xEYX7E2#9ufuYD zJL6LRF=XJHqoS9lhmO+CIZJr1$svkfV3NGJ+tz)*9Usm&2hK%Z$KthVxPLJ}%r%d1510e~f2<(5NxSRQU zHH8#EXawhJXD_p^2oTLbDc1Vm#ikV@ZIFwTR!B<$Tf0|Z{nL_ z0O0#**393Zf;1=na@YIAmut)*+OPTbI(vFt2fhh19{wWjVQor^HhW_Mv zI=WyIAJG~Ig|tm#5V~WU=j*wb5+kmZoeStjxQ$X_3f{Cu-{TgP5T*~}ev0v_(p+#) zCZfo`uZ1tB-^ejWr1ykD>H0mul%mx0k$aq@*z-#7$+E(3`$xDLw%*WDFm6Zq-~(hM zTme-VRLXIm!9W3eqjJz-^K+6{2M)ELS$sLSZV2tW1N%Vj{3P)G97dHe!^$Lm0PsCx z9?vDr-1WDofl`#*7fiGHnJk!Y3VBP!U#5yV3Is&%R6?#($FrO9-#W2!(cXOd2l~W3 zsJr%Fj<>kMhljndb;#f1SPjHj$UmK5YPY^O^Osi5KC%*Svx-ykr7z9;VsPc?s8G_I z-AN0e%>$^Pd&w3TMY~0I;Fo$H094fP?mI0O^%;97-FA4r*piK2$?Z1yojav>043|- z-?FesPvQ_on@XjfD&vM6ek|#A2z$}S-EyaK4kr70Y9-(CM_1Vz*#J6kS3nQxw6A@d3&9 z!>V@8MGnVJX35&~1)%k1DYuc-7uK3Chf8LnzViiBgpF(X)Ka6?v=MSqDL$c6AKeKK zkkTKI*KG-IkqI+JW~A2^fN|;iA~|=8t^`~m{}k7oz$E2@;N7ADe~W!djkUa8&|xU@ zrYbl5ru2Wpp->ZpQx@K=BWUI?DsPkug`&TZ8TZIfOn?0U*%>jSQr0mN2Y)FW|CPnZ zw*6SwSTy^0RBxG+F)=lZOU@j(2~HoN8+s)z8Kh%gToYr?-nI)_17w?Nw@gl%gibSf zZ`h3HFgLDSn|Z&KtowHxyBY1KWv{=Qp}!=qCu^Ir+hua{%ugL+nz`@b?PgEobycoM zzOr~f@|ofP3Gn3MU%#3R-Sp;S&w9>_eR z)bG%soTe)e9iON;CUVLy5&M*K3STjrNBEx5)bC~y<1xyk%4a$cYoGAk(+BahL=K;x z_}nMA3;0;4MC48fD>0*wyExZR3AA;4W?Y%k#e15yUs6 zGw`ieB|}diH%#dePEIE`Z0L}#rd1xlpI|x_wu|XS-(OBOJB7B(?HJXhwx*j;eoi|l z2Y5qwkM#=UtLxsM=HdT)F%(|2xT4OgGa&HJ>;^4KLzpHXG3o)-0|H6uqV{Kmw>ry^ zd=D7UuJ`c(`L~*Rh_~qCMs2x>uY8|CHtV~aq;n?x9RAs(d_jIXc!R3MH%KptUemnq zq8Eo&T$HnG$(?@{RiolcBM=L`UxWl}s7{{9^>|M6f1xsQl2*?9>G9(QdXq!41iKGz zE{_A(T?azFTjFmFT`AO?Df=`IkT6EVm%bs_9Wsxu2c*zPH7gP?XyvCP#$jz@5hku6~QboTzr z6WY5PO?dpY)_(Mp>$~Q5s}1xTk%>Xj$u_sT^WRRl9K86ylOYQ-mF_;Zbn_ zw1wA!QBdIph4$hJ-qmJenFivzt=G-G!5_N0?1sM%#81VqvzvtUB&^9%jH49!k@8Mt zy1Rlz?x}OO6s@{<(NuM?37M?uJ0vcLZfUVEUAa)(#dJ6tRPK^P;&uuetmk^86^$BI zniKDy@~qI|?dzGVdMN6jP+(iE=;=tb|;&2i(lwZ z%s;T8)9(8wkGvR`J@ClW@CF_4gj1~i0Z@;|Wvu-E%+vDuGhZ+>>_5<{>A8adwMXc- z^)I9wrrvq#NE-Mx_9ng@Y=_Gi z^=qDCpDOz|;%Crcs)ItuoLWtPj4JQ3n;*wfL_Q021Y)@AW zs^GTQ7WFDG9R7AxA3VL5^MnFoDsc_Gp+k4)bvM1LTf0R(y$%+4H`xjRf5(L!dXuDX zv_$Pry6=8V^=STz)8GpRLK-jpP4Js14Jcs}5#&2iz#T+l-DP5W>bEz)U%~W@N>n8- z=!RaGzk@7)p8zxd=+*^j_{zOQ!!o>>79vI6$DqiiNSY0-ALfccnk{UAku^h-hVUMX zH3dy`h;TG3h?+*BK{P8CU`5k-Pso}^$0#~*vg)@(AS+^vX6aB7k?$?##kbw){dV=% z?zPo!4mHKaU;9{JZs$%c=ZEiF6YXS?c7shF#4_CEAq^3u?lwJ?dK4doV-Urqz+x(k_86#WlZ7 zgy5TtI8cTif*En(0DkNSmI~!=y$I3(-}%fKbH{{p=E1>V*B7UFBHam>X)fh#vwwN< zhn)tV2x-L0@o!>uUCF4vQeOt^(mlQRm8Fcc6osl1EuSn!FVXHaE%-HCh2RFdtGJCa zJwQ4tPv%>K&rp@ zq-)P>XQChM1njr;gtvUCWj^E2RmmTs>0g!pK(;@zI&{qrGk#!q>dBURv6_C_$*Q+h zL3K-BmbO(e8L65MRY*mui2^uQE3JanRd>x)i`i9CVQO@8L#-J$z@yHp-B->1PM8lj z=Ga$4dg|GpqMH4k_nQqVarO4NWey0>w+J~gFCI?Y0p)k=9mpnb4Bo04JeM;k1JkMC zA+@j^Jua$-F-F%8RReYE`TlenM^A`i5HdB+NLEqb0d?xn*BXqpVCs3W1@uTE?8Ma9 z1+nKLpGVRgh|9tW2V!lb0>LG+h|O)n_sD`V22ak8VW*nUk?*CTQic z@8LclznP>6n_!vGJWQ-5l*yci9Awmg+XKDgJ97CVX8nP7DPf{tUEnNkh?sX@ymUFi zz%E@Glo9G_#1(q_b4K>jqs3r-JreeBN{65ffD{SFXrt}!05t{u@ZW)}HM<f9E0kRr*9>Fo;{Wh`SxTwx0zttzKw>R_H(Ni4mDsPC*T5|`q9u55ROCYcU!9%;;d3Ny zq2v_tSy1lxB6vlxULVHUc)7B7DVhv+KVfV%+CC4Ptu%J;zl^V;MmA8N-U8=yr(Y~$ z`?iF_H(*T0=(Q4fxMNJZ%Aylkj7TbD0Le$mqf!aqcz5;jUq3BD7R15nB6;b1R7X<| zVrCM!#t?Qs4Ml#h6n<<(exQgptP~&wpq=9aS@1*23ao7opdJ-}AO=Ta6+-UdLgWov z&fr338A9IRLg)q9OjJIolfcm5T7a3T;rM#6*8EL_Yq!L33}TwXaNJ7TP(w+m0S7d; zY-f_|d53KI=E2&I*Jd0zzipHq{9?F%;qraqB4+933G21B085Wv!w~9l`?s603zMzt zg%H*Jg>lt^z~pL!V}5eRHBB3L%`yaD{T*VeLypPjm~F%{3|tLLhQK>LZ3y`PbMqj9{==c; zvFQf;FLmzbBAbzc0tiS<>wl?pV5u_l|44XzPH=z($uR<9kRV~m#2|?vp#8WkgfV|f zAVR8i5@AS^^fVa+1Vq%^O`bcnWRi}yva-4kyvzE_`kmE=j?3!G&dY~dukFRf z-}}V-Kfd_iC$6g9l@)s3UaGa+d_TLpH^6@52O1Eujt<-X#$Xmec5lqF&cKKFa5s*D zf#d*$gtI;2v-F~D2cRSVfi61->}TO}j*tjLl{Xw84&KCVjiGkII}{;t1;&I3MU{A| zISZ;01g?}kM-?3DVGk-Yh4_;_kvPmdnA6~?5?)}2^~HSyRq7KstVt|TQDvK?D$6y52iQ9eaqJ1pmivY6 zG)A>?x~5^V-z?#FZbG7i+}jM1;ki9ZvDqG*m)=|;^iM;a-@Sy`INmVrICAYtj$|Nq zkM_*l_lp@( z2dj2%A*l+Dlj8`r1ZPr8{i-TDvQ5@uZnXKUh%UUS+U0Hj5!l-tv$85%S0}9qLvPhh zE1P9+u&A4sNgPymg$Hg{P7tW>O7(#eon;4hR5$qtdKuSz0XL<@UoVXByb9+5T7NIcTa0G};4$n$P(cGPf@+& zE>zNE)ngIhB9&wMLC0{Rv9E{;D`ZEy@yaGGsH5g08^!YM5(WoVdTkXGM3tfh)BVxBAR9iI}<>4Q(fPHaUASW zA*>5YQc{w*_P@-R=li_kVVSh(uuvpIY*0hj15f0h;J`w{K$*?&Hb_rZQ);iq)G>mc z0x?dE02(x8H5E--iAflg1r$)d#90Aais{OMW3}Rjx|k$Ci|~6C)#YT3lq7ZK#DxeR zAF5*1<3|jOVARM*X-5E#I_E||l(CGdqwBqkjh0#7##h&akX2#aA4K{}3LTj?V@19G zfi6$cAw#5#Ws6oK{#qz%<0Gk*!-?Z$rNDT^g@cEL2c!fLF;NLq(d5SnsPLo+pA+?D zL=LRrN_+D-O)M+>DJ@)>)nu5IYSfi}X zA%WM_pwIFB+i3ZLRnWL$oy1G)diXSUM0`dtMGP9N>tUUBq)T(_I650K9RtM~E+UST zHrMf$MF!Ts&SjvQG|(aH!B|vs_Qj3|pK*#40@l?3=$L?^-w#^a!utXktGgK@woF`= zhKJ>>>3&#{p_}*Ve~uLE4V87xIl=}>S(=Fw7fu3jOBP(Xqy1ayP@vp{HbHH{f8xz@ zdR$a)CQ4pn92}M7qE5z2=&-dC+8qWYb}={=MD#&5ey=ZJO~?w1dU0O})7nzd#&l54 z#jnmQEo=Y;p^PULy&E&MG6$R;Bp0N}==#M4%Yd;*QrVipC%LsR0lSCHl z$iRg^%7wv?l2n~`^SC9k$4HbKsgGlnv7@@pV2lAa1mMyim?ilBWN;4Rbouqgn~|xD zDti~$FH;61ejGRY;H)NB7R7{Xiujm39pac%x8`@p;wM~OB1z5=uyoZ?tJT9q4qP>1 zS#?;xrM?R>O$o#^0={Tq1C<|$R~GNY=z5qsk~14PS^j{%sJuqDC3Huzw&~a|{DK{+RupEAP#n`0Vs#l}b1cZgGb^FKKrMo1p-3G% zltOFV+8(}&T%RZYKwut6kCz7oKihE9dStn_o?Fw>_Mlu9O zWM+h?3X+P_+4_rXW$%6ki$~WCaYXB-AsM(f5c3>ziQj9|=!>=wU#yabCr%)|1=!8p z1!lj8vtfT0zKM-R8C`J~kqkABY43gu{|DoYqb?lr!|QV$c1dXPt)?+u&dJ7VE)&3| zhN+dlp4$wgK?~LXD^c25e1yn?Mya{Vsa2v#flCQpHACEg6LKJm_H-md)c=FkUyQ4J z6K1Te02sCy17;Pk+7rI-M-+`4r!P^OC0HGc2756P4EK1c3G!yZK-;^H4*~AL?oPF! zovnEc6vh{@bXx!(y73|YImI)j1PhRH%HsbGMro;wt%XdZ6AM>UzN2so2Ktx>%Ced9 zGmN%)!KL-Ep?F^f>)vA65Xq3m2G?7}Cuk8KPxAXJNW1TBW1c*v9;c{r8f!G%&MX=6 zs~vQ$m}PB4f;?jZ0TLoE+zk2kNfkY?u;m>yx%_{WK@SVE*ic#N~MXIQR^R8ru zX`Lk7RM8O!HF2E;91{@OZZN-YgcJIc!(ZCyc%_jYU20gW5Hu5@Q+t{3}+&AS-r``b#yNSNw36cmv==CA9_u0f^S3oztYu zENkps+vWmfYtfQu##*4XbTVYT$g6y%_urMpOs&mr%(u-KlNK*bOIdNCNZF2zk#b~s z_2f4~wMd-WKeW1hv;9QQP-!O5?CzJvIW5$X|HMsltE)aKv6fSLF={o@;n=X=FnAkRs=Z(tK;Ll|`~$g^n7{FmT4)fzgCM-@N&?52z6E&dX7Y{mK3TRW)_qsua53 z*E@-su!jTJa{VU#sZdwOWIy||{*Ipcp4vHMB?W`v`bhzlHnOj4w*|HM2#5i3{R8&q zHMXwnd#PfbjsW3+S!$f}CwzR50~X$AzsRRdA<$YcY|ts|lihsbPzk9z6gsaAUmyb+ zTe^3)05~=q>qs`Rn^*5?Ju;{6Y^;-mQi-oPs2+`H-sS^!2H(HBKe}f$MQynsvIiz=NS;{Y>=d&aK;C zxn*w)6I~I5z7ucF6inIC4@UmSLb z-i*#V6UC+{R&uUXb}2PUz+Wes3c|s zU@Y}Me1}1Qd{I|vn5axKe^1j>&d|?HQjh2#heM;$=xDf(^;+php&q)NnA8Agp)OFS zw<=M85-v{9zQn?3b6vF>y4%s~1U z3>^>s3g%T*V(f+)u^^Yy^jo(MgmEfp5?TZ)hKLdmO9*>e5omN2%u4!al9Ea1-sbvu zvKwy{fNp9AJC_wP1E~Fh9FLL!n7vrq>ssOUbTi{bh!_d!DdYTYX1wNI6oMV&h&*|r z?$3)_;RkB9KEADxnLUTWeL4xVyr2m8NjKcd+4Hjm?LcOXiE1)BtS2adJ-nf@CU7_J z)=*r4Iz}kzCk(Pg1WELUn7`yc8jhtFpz}X~P+G}HQ&@l>Uqe00iK@&65O&irJN-l2 zga*;kEs#2y9&$Gox>_Duz_+kU+rr6GQ=F|n;Zh5qR8Fn`?Jnh;n)`cyVRZ~?dubMH^csb-`m^1xrYJl2LS?K;@IEv zLx6^Te&TO>>~H&_ALBuQ;8!o(7Xgeh!Z4A4HVD2`pW^Lkx>;+Al!0zHvVC0(=lY8_N4R3x#%-v)OhS16P`=( zzUM+rp8HPL-RFbWK=e+-mist$>hq{MfHrn2)aYAIsh&PA-yW`BC;H%7@Lpx2`k+ah zn^i+i+7m=OERM#|;X3TZX;kYcrQaZ2%CC41yj<(ze*)NrjWOljy8=n&_wT>$+XiF& zCYk%&Nnkb$W=(e)z+rPZ!gjB_7as6ik%18k?w-6dvn4?I%CF5Nn7|c+LJQpkKjCWG zfb+Kz0uMAx52n%EIzv(}X!)1U*nu`dYA%H6mygB}y&u*e!k~B3E0ZhcC4;Q&0Xfop z1T8|?pdmmd>#%l=?GbwCcM={(#?5Vr@z=R70}Yomk#FBDK2S10q+Jj4!Mm{2lS*MO zYey*9+*VqU1s>e*s+eW$$GrE7y`hfh?<2aqcjXR)w%y!y*s$U^=1zkk`E`i;KfUtj zA@RBl6SvB*($Q@Q3DZix8+>WUi!WOsoPT^=`Yizb7v4{YWnYX$qx-H1Ew~W7V8#gd zmU`lBFI8&?2HbFekWeYm4-mGZL3m?8{=$Xa@iIj50~5a`GWg$$y7EO|_<&2jH`WE+ z26FY_Z``-X@Y93UiU_9kQ>^$2aY>L!gIylW86#y-sR}5--9QoMV?t6QO^8Y)&(Wa$ zf>i}HC$MHnFT}7e{n7d0YoY*jsEn;e`R+xp>4r$~v|x|8_Xm}!2wU=eBT;;rh8@=m zfB;ZO9{AT&tg?nrIa;7j&5^8x!cweQwT)+X!ygb+3mrR}OcVUWDbq)+I4q~dUi<)_ z=tZ|z#>Do4i9cYpkGM@!t;a)uj0vm{=9K`LGD3)8(PoFm0Z1Cm){L4KgMXHoMQ36n zbNvsoik$ex?$V*7^q#p?O}O}^7@Ur?-HP&)o3HI_>7wFL>CT-jc+IKS|= zRW)%Gmvl@r9}~F6{))P)Z+HvtYRuc)8Wae*6;)WIS$b(vXNe{8E+Xl8`7(f4OU3iAJ#YjZ9Ug^S^Aj|#o<^U`mnqoCWDw!muMYN5+8HQp# zzrSVXI$TU#h0spprPEU3)0Pglag(k1395DPc=Rx%yot6_A|?dmk3_hPp%9J4_<_VezR&v0}p>rw?aDv~a z1YK5bx5Z?e-h{f^G?rhwI)wtL;$TYa8X18U6p>HsoMmNM3U%i#a<&=V)A>1x7ehxD zK|K|v=PXPZ7ug#BR;5|hG>mS9<5?&3rW8Ka(O&UzKE7XpOtQBfSx9ygj%Q##A71-^ z^)#NYo5?r)-!eika4uP=H$u;BR0a~^T^IH($sh-mE<{T?Q;E@sMa9fy&d)homubhV z($?>}g>AzIPa;Kn<-Pr$Wk51`s@TvpVgq@cm|uk59MELS82H-IOz+G)l1$U?IovxX z3dNZOX=w0`>k>5_cj2O|$`*Z5{U9MZuK4#2lQ~%grd$W^YqO+WIU)sQcC@&q@Ymy1 zN6G-Km(=bIuF?J(7}V05>e)7k650B3f(38}3&$1ZSgik%o3_4(q!QV9>aCQ6s@{<+ ziI0B46ZrB3^b7^a=8X3W+RIg=Z)(#sYR@(?^D_^8DK)Zf>P3crNjA8pYjO|kag!=_ zZdGNQ)n=oWS2J3dZd#X$TgkIo-;2yVSv3KEopEN=8)z!t0#Le#&9GxUWafZ=N{MH|$X)g-pojZ6Zr6|k;E)Q$7WWqi$Tc2*mCM-QQoL+RT*%c>R z(Hv4#d96ZelulV-SUy%VdtIk9!&ooH=;JmudYM2rMF_Ua5rJJZS@oG4-&VTaa^Z8^W_H&8bm}; zs!Zh(ZPT9#n7Zs4F~&wLmT3rxcJ5woSiyy?Bmc_j>L|U&2Inr`V>Wr#|RoeiH+x%I>vDdX6 zk-3$(23o?j*TIaiJGH(-wkhn4H;1pU;2a^mHMYj_klpLahqtdt9pOJUwkG+|UmNX* zK(Em6308-NeahB`l||9TiI1U0;q~e84of3<9~y`4{*-%U?fT8y8o}=p=Ip(OlfTQ| zquio-zbhYLerI{4^wI!c?pKHZe52oc{}JGs?L`CZ{h-i866&Gw-8ZC>=piZ(R~D#r z(NzrP4q4rYaL9I1vW2w{ksjDO7J7)=px;J740#ubchTpd;79yDAhvm~=OExi-Hn(< zp@XBSKd_(BxDR&fdQ%!l)u$Xjus$}qk9NvXs-02bxxgV6q*Xv#exE>SmXTDVMy>5o!K}!s!YQm#3n?dr(VYOMYF3GupX$L7z z>9}HcDv8+-TcLJFs2ZX)D)HvyDl#;a%ay{&htiKEgdO3x zvHMVFu%jj^;{ScvVR&uBj|WqFD{{aU*j9tRA|8$na}WZs;~fpdf zx{u?cZqP1F&Wy%uW1ppaIBYsaxYr5vuw%Cwe>`+_!$X{94?A@q1S9=!vTKVAL$@6+ z+d35a5XFc_K0c_9i#!`PJB@Iq4I{dn zp8C=JDnK7_c)%U#@2<+O)9uWz(`du46KUD!8oug2s5S*+cNT)}y;nkBg>Vl( z^&yZRHDD&(<;3HWOc_@o6YMAj_m*tQpqUQGoP_BRkN`bAAw!{VCfLk`ZI#4XC&mdZ zr+hNNMGDVG{qE4C1e8h@>=3Q=i=Aq?PB$ImmEsZbPwWBVod8*@qzO7rQu2_b3|vie z@{lg~lTQ-8Yj-00%2S!g=V1QyYw-u?PW6)}F(H-jG4~ z7xl0vaUm9Zl{g~{(hIP0W9|gYUnNM~j^O>Z*gx7*zpF4beIj$?^TE98X z;oSmA?{BAg?!j~}{q!2$oWRmvIB5{_PGw!fy^?b-%dCR{dl~k4@JMnQ>DWi>;Cy)M zt2RxGFjWuP)859tS%+@Re&0-tGLzn$uhBp|kqLxv9jt>IAv!10KgzY1KNg?-R`}l?g(T zvqB#$k|#{T3C1xv_~e{uW0&12cJe^)Kkt4R%zv-V^X*z`Riao0qsk#iZZ7Q^W(@)0 z-beqyo%V1q0)RkR&M5ah69eu~Y?^b1z;36semo{6n~#ZUoGXY&sS-qVn=o?9 z_7o)z=i<;ksZ%RHTmB>xZo5H*5#-oQ+RNKBe{Oey1krn=vQALTP%U7%243~YPnIUo z&+Vu#W`!OR_$So2q*}wG2iPdpo?t-v#4CgPJ0jGbX4TiPQYwDozz6%yzcPiS3dFvn z)P0^|)%AnN|H*wXML81i{`02xtD~%ccbGT4(O4fBV^byIt+z=}n0DY( zw`gM3l&j&YmMK6Nj!l-wO&P8jf$@Qf*Gyj9%`S@G3_t5Aavki|Tg*OCBLMG?%Z@b< z!r9mj=gTi|owH*s{CUJ{o27NK($m;FcC=JZ-up7Nb!cIWTVQTXQiPvST>QJ4ZfqU+ zPs8!@LW=t7naP%3H-sA!J_lI|68yU_qs7{ozL8gm`Yj+N)bfyIVWgk!lM(ol#LE@H zDh!skr&l!300wVMW_+W&o#_m344!+6*9Ggdf%!U(N0;tU)Ktmr=}*PbeXkI-Zl_@ zd2tW685h8(&b^1t3bXr9DtLBz6XgwbggMu_NVf^|LX%cyZ*+OKVH4#IJ+3%yBzgu> z%hwyLSdP@l_F~-3(;Hx`OqCkE3K1y_%(sEh@v$od??n_Cz(@1~$=C2e^nFc)Jf8xy zdqEL2@mT@(u{$C{$d5CefV>_K)RH)}e1XYm7y-;A*)OR`m_A==LXjHs#MI08Ku{XC z+w{Va&IbN0h%b-z7vB;4LdNQBgX2rEBMd6#?;P#fyzqPmwj-c?`D|+IzcQik@LWe1KSGR&UDT^(*<^hLZ+GZo1pdp;7Qb#sjNj6FM zB;`aYk=&*n`=txtyoPmfz8yu2%w2evu)Zv$-hyfS^9$d2o)5gV9ne?aPAC`& zTw5}TL5pT);m9EVxCWv~eIjNN$m`WAG~ z2*`>NkP{~=EhLbY4n}U8S160-wHfmXJaVZRKF_?OONj=2aKCCXCjqPdm1 z*Vqa{?Pc}YGG$b!dsijx1o#q}Sw?H2HF)AQaAK}ci3Q`quWz8F70U+m*k(j8gG4Ta zm^_P(TeVUn@PXy;c7CQ%C7?d~qD9PAn{M4U zoBX!^bz0FqO>>4vN`uGCOKg_~Lf%2Q$1yowuJ_N;U3kpOuZ|Wh)H-k@!WlyxqM;W#5mf_F72_UZN)CXh>S{`EfX(CtTb>$Uq>7?7^=IF7d^syx} zlM9-r;znDqOan${f50|z`n^zr=>>j6tPI)>>$Q1~iJ=Pmmb`!z`W!d0ycar;;Ovkw zZ=r&_{7T7^-9-Sz6`NVTM$USq=%7c9z^F4R)~xE-!E#)_E~s*|^}JtAppWgPp^JNL zacAstbe~G1<5bF7thUU^t^n#-mfy-9W${Y|oyP>rb*Yyp6hPz!>ED&oSCLumy1{LZ zErVEcA5|3vxr7Onqz6h)$*g!;xlN8@@;v$e{EZ*RwVcF?n?Qvdy3E{7$YGPWBmOSL zW7DT$_zTd|o+Qc=UPDk8gyfZSid_lI{L(2iO0*zTl2+xTx?3O0gE@2RS&~||Rh693 zgD2&wr_yTfHUKOZIU+JK!$vzjY2;7$BX>oJb**B)b%|BJ zV3}*?F~BlhUgQ_HR~UVs&L=m`LQfFthPpzjFLd;Vds*>qaf;jsV`x9Z3+X46smx$} zub70t49{_|;qJunuEn`E@#oeSHugIDLhX@I&w46BVJ$S*n){Wv!a97(IVSU$#q=HV zLR1dF7H{~-IsAsqBKM%nVj`uv^yt&n)b<3^3!q=(N$i#Q`rB3`_~r?9i7)|=X4CO5 zF^UiWj)TJk2ZW3RWz5Nf4W4x!$-3c7EY2T7tP#8&g5xi0cKci9oW+^+%;mK3C8ZZR zmV2kqCvu~?TSSLcc{Vdht3ypf0n1UD-m}lX@f#7H#GkIWGjf7IlkYoBGCv1NqBf$Z zu{MY#i5>V@HYh)aFz!GifDw+~gd=1?Wt1`Q5(8Wm4nK)2WDrT5DeFMO-_Q6Li$Ugc zjN;shL@+as@t)79M%xx6T#Yjh^>Z_lGa#EtB3@sMD-WgXO23ShoNI*U#U9gLu8(4$ zp9u{YO7JCeONz2CV4l4hME9P_4S^TFee#mFTA$u^de6tD7TE+|E`mL^7d*&up1>YL zxnutYG3h`&*fp`z$wWBo&?6JSb=$-NuYG)P;ERenhdO~!4uI;}7Or>gUeL~=2-q}lY_E-!xhq(<|<@JPBSFs0f zIov}(kL}AXz!^jEiv^C31w+pT`pp9?w&zUqI{0hHY~3a5JtO!aZ9dDmMT*Xtq*K*S zb!0q()BOkj|N0c^GT=er{?i>dIjg++78nRf>Q}0N)h{xDu&a}kshx|MlcB9Cow1Ff zvvalbrrn|d0x$Nigu{8Xv@ldta7(zQkz*?4g>6u>m9np zoD{)5un&q+7iDT|5mE{dGj|TBxp~aj;pyrv5MG{gpucu;`}Lk2Y-*ia#xqrVG}X;P zPM|FKr)U;n#45Glq9q1%s{1P1AnkUzoP#1kVT>3Lj*SB;#DIU;l132UEHa=rPN~RB|3SnB6X#w~B$y~Db($b;hxf?y50Npc ziMy3!p2z~NczvT{QK%uX?5JsOK2kL12KqrE;W#+}M!S)bS>=%^LL|pL!O+`k@iuu0 zu2D$Lh@bAY@?m6^6}RG9H9Orvmj zSl}I?az={S=a5d6%R_AMX>O4FWS&}8ohUmM?@A8V7T^ghaFERoD5{d(dBm!`?(htm zV8^J1JZnF0zD#k1dK{|ME)Dv|Y`F)U(GSV&cqG(4MohWGfaU4u$|(po&v11Q_zGPv ztT6ROhF7PoI6K3txvb~e>VuN0&=kzBqpd))v8Y+r|G#TRAj=#0zb%z}vduvM`#_%m z2>D-^Ye<$rrv)|;5DF_05cPk1E6Y{D0Jxz&REOsq&E01?+uP%g`oI#rK?%DCrX$Tg zAdnLT2*!s=`~)a}kAo2%2|5ib6H_b`snMiRDG2w8SCptJLK28-QEOFJ1GGOI)T*nO z)U+d-rL2#0*PWf51M|mL6YSm1&CJdJ4R`a|WpsXCM<}3?1~BlielY6&YzhN_!%FZn zKIdQ#MHDWc zq-Vy+0ytGs<>P{h>Gq5>`zcX?kZLGi@RZ%3dmPPI#>+v%lY?Q3mDFJe65!Z;D7y}i zd4qcJe+>em=Qt#JQpP{h9cE1a%AOF$gO*`QEEB+4wDljzrtAf*Pf36AT}T#LG2{zF zN*y>BS>RA&iARjY7dV<=sbQ&RQ5n|d(`o#=H5g7P#}Zq1z$>LOv-zb8Am*$9#E)h* zb~8+vP@ZY9ZJ7LVvaaY?!no@iFaocN6U^0oc9qSa=$IRrXr2}XHSU zV|F-3KSn=IO(G8VPgB=O80}NWOY7~bGw@W*GkJLsIDhEs3)m{~0e3Q#n+LHebaI|} zNZstB1LMXGKmhk5aJTygR5@k&2ud1C8hRSaDefoun52mMYjTRNr6iwDWrSKCh`>Z` z3FJ}mmj;c{(~&bao*X41t!4>ON-;u7Pdu8RA{XaT#08>sOA`xH87Vj9K@My2mT2qo zmDa(0P9PZO(TbXneZac*i-8wLTwtr4>fyswTU1q*TThTw{TY4+^jFM<>_tpXlx$2D zOrZ8RFJg$SF0rzNMqE@dsPVb0x(z;;1KqIf<$xwhJh|*Cog5U^|*p48+7qpPoLu@wIgV3_e671JBHjq zh9XEs;K2$YkE=~yvO-I)nE?h(-!(}mycTF{o zS{EW3aSNl$3J%P27Y$8sn@KmkodKmvRc}?uxExD-*`tC?A&p(7d@-!>qlsW_%HZe} zIpR_u+eQbq>tgZ5`KD}OUfLld`GqLLfOXnLrFsNl0Cm8`d==HwTJ5YS)3)JCr@~zK zOyS#&D@fRBsTN%{9a(8CSF3fIwPypigJJqS9j)3QfW?)gE42&*sC-qbJ1zV+`Xe@Zafdv1L>zX~&i>%ebb(o;gy| zX~^v}K5dp4Lz9W}7meq{jCq~aE(LVgrBR3DWTZO#)a<>gZ`#ZlEPIFv0I4td3t3wIdpYaOGv?wJRy$a^9VBn@%Zmrf*ZWyj)wqm+TCNT3y`b zz|`whWkt1inAKYRaxTHx?hT7)fFM7!8>RMd#)iT7NQD9D_8ZK|EG_jk%{0Ayg$)eZ z@^WZGMg}(41-5YiMG-7({<5U%b2CP>AS$e^Q+^h>^UOUOZ2JPu?T>%x9^?Z+f6+= zSDyj<=fV3uRUGhSkM{jM5|d0o|>Q^qaPD?1Op?%4?a51 z|JAws9!is&zC0f%rsOy{?Er0tESd{gr}Gd=XWi%Vd^_b#XB-@c-f~NhmcPD6`|K*^ z`8_$v-Ckcps1n<%^OH2+y*+Iv?5iA&%TuoI7?R&Lad83Wx}U^+Ci3W~=c2~`KLCF~ zfWKznZgO#D2=@ucYsg7Z3VR+bo0`;R5LMaOSh=aHzG0I}hCZ7n_CiuuW1sHKTBU7~ z`G0dUO{(Kr-k9SgOPCHADw_yk4yCUR)~zD#qMDjlG%5ATCY0No^9=NXZFa8-2bz_D ztB}*Us#)bFId#>g!BBH!T^ag|j(5tiOVlM3MJK+Kcz=$Y+_?p>7*~bLkp>!qkvKLC zjSoZPD3NGr2vYjuOPTdqE1k`blco0>jenQtH$(Mhjsqzci|N94yv1v4>L3ZPiIwm%?C(mw?*J%5yxW;=pSCOs=d|0Z&R&CH?wMYICRVu6u#4G z?@;u9STMst$-5BB#FoASNq;A3Pbjv#u+|lE1bh{1x6J^%;cjeW@q*i94`yBv5QVgL zslIgoQ^1db$kIJ}`l&-;5$@5q>wnCWf%c2<^DKjBnI6+44ncCf^qAuggZ?1&bwJ}G z(6<|GyUE%wzV7!3k5O^bbp*^*kBFBj%0$tN{QL++QRV7ZGzJ-E*? z=zA1mjzKIkB{~D*{FY^R_kVi|`X2?)*1&d&p5E*c9br#Sg}w+D1J_E>n*kW0%?H1B zEo5t@Fjp&wa%}+wwS}-6+j{Lf*sd*x9mu;&Tc*63jTY({d*n??wkjWjf)1%jCg^_j zm!_ZxFd8}j?NXi-DzF}OqH+iF5Z4rcDu&S!;MAHJ57Z7g0t2WWcz*;2QX554fi1?1 zi`qd)U{H5}B-7Gr*Mq68fmm%V4AN>LNvnettscf`4KP_-r_>){PZ$n?Dew?N_zt4f z&QWVCs!0Kmfe|_247k12o;nDo74O~JL5MeFhHoFlD3FLt12cTxE>55z(6*o+E#T3% zf=}Cqx@?Cu?N+5j5`Rkffkhdr(k3IUO$G+vYNZXPmyR}1qMOOlIW*hz5bck3(ViKg zl*;xd9)x7CsE~=Pk3qso*Hl4t9xr&}G4T51g~RFf1-hLzlD4zZ@cisRh$D^;& zPy&stLp=s|8!(X2Q!}uR@}UjXq8UEhj1ubP>D)&~q&v+1#mKWnRA3-@14!^a1&K7Q zB0JH>20wt(5lTD)gS)LAhx-<^htb+c(Ao~P_FIssJ%-EiZJ4Az4%4+Kp;$WtOSGdH z`JGU!9S>WchJW$;sET0JKWurOvKJE#Sgh>TUAOM3w|{sDNk7h$OOveL?LOAPCh96rO6 z;R!g5QgjTihm|fadIH+IXg|SmD4DgT@}rO(o6-h-Q-5PeABAC}q8$X!PEADeBT6Km zg#fu&mS9=$l$#v-Ca2x&&~I?ynZ35K*h=xI9fi?bJCK?sQ$3PYUy5E+=h}IjU@QG-gwETrY{v3{L;t$dQlWLZF9N?@ z`SO40Yk#u*S)v_^tyF3XtTbw7TItkGwuVzP)*3;L-%6rpm^G9dA1d6Nd0E0E6RTr= z8$Duc_c3xa9u%Pc8U|{w!Cl(xuv>c@_Go{Ad$qH$Uwao?wfCSydmoNy=i!9*0X(Pu z9e$|&gXL)-vpL!YHc$H(3uvFPQteZ=P`k($bAQH`ag9}Q!K%4rtGL0|aFf+>7i;9v zteN*=n|NP#1Gm^t-jD6!9u;x-LJUTE6k3kag)evxPti%v0%2%j7+MyFs>9HlFw_`^ zHie;`7^Sx4JrHfv-~_w_N9_BBwRPPu2vL0F8<_2Yqt0H#r?|7%mf<+s1*vo*v_k*z zfqx;Ym*9bs(P7bX?n6qVq9leQT-}#8I3EHA#{`WJi^zvkosC9QbscEya4I^tDH)3L z9)wsmkGC49X~!Mz%tE(DR5cP4RYKFf!v~OEJOfOg2_8NHM)8S|#wSHwPwC;^oesyH z3!xLeVo$$Q-KPK()lQz_qrGhTQ;$KW+pJ7Ek4nlE-Po-n@Hyf!=$rJ|XBfo-=M zgE3hFo(npk1#X@PUY?Jt6hJ1Q0~7e%@J)pih1HqpEP;**<^w#1FaFG^5Uw$3*=ZnF|mw!Mi zUkX|L3owl@haz4PJ|$Bl&hFx{3B_X1Bv=pEbV4ifeyj*mVe&kvSfbLAjtc zsRgrUX-#g)GCYPA-v%C!uF_{|O@C?0!1JvghG0iV8xElklgcU8TTR_Qk8A^(*nz2D z`^C11e4~VteO`|%*?z6FB(2H3!F zgcjZcck`{Vmv4jp$aj!$R}O5z&1j+PPOFWUrmm91=+vw*Z9dF{@2X9@2!Hb6dnzsd zB0gxIRcUcHRH+n^;^F?V^Y0H|R`=u5kn^WuZOe;=@56J>GR$?Bp%vc<6hqw4)jI)` zYG16`vJWzR)^u#Vw*T-ph*&Aih-13xV*|YFu`)e1-J_4Q)8;HA%;GTu=ytr3UD)82 z95Gl1@MY6}@mY_g2aOfkfq##k?$FFd?SX$C6}$&x_`P89y%5j$K@#5&llgs+$J?NU zAB3g+5Uk?&Lowju2{-VS&2Z^C{25#{w#w0bE9`lHH+v*8-$LwZuQhJDx?_F*fW zaWcqOcphF*f!+!~P+qt28QAKi=r6(#ZNK)p3vm~K`I1*%n?eSeRm0S_bK$dQQdw2t0Kl@$-%M!OBI$44y~))iRHDP?f+T_nS~|$ zk~XpwU@5_}5DWT8-ht&fmN)SUj(b-x#Zrr93l>}_{l5PmSL+#3RR0r~X}9#!K8NMU zSl-6+H;2B<_OT(IK7WT!{-?gk`HX(fm|7dAqWsWXDf!Pu$s1~y&y0&`6<;cr$yhM% z4D`3L>XPyx7F;s}^*3kRw$NDf_HJ0=U2CiGcDdhg&A>#xUGDZdY-Z>@l}^$8V*iTQliYRQS&oeoYuZqwt(CepKPPVf-P#-`5GV6ueL65sm`l4hM_W zVxvQ|Rk_~5BK29Qau9zfe3?^a(XaOZFI32pJDFbQ(AXd4>s-n-eg8H ze@3!)qL(35n>`1bml?k0a%Q$`6_Jsnl`7};h#W0DGJkTkF%CyW}HIM9Ne{yI_Ci{(pMaX0?I5edfJK@Y~V;xV!?8VlcPAGiFpH4e?ZYRuZXM6k( zT-45X*ux`wH-vl14U5{@$}qtj2geS;aN9|Ubhg1j>MK^S@#*v-fP7XGDK15gE+%p5 z4un+8Z-2!pG|NYy_()s$RL$p8hYWp4rmV}Q(qI6*12IDbsK7EEOFm_cek-5`KIgaQ zE8wKxx>f;C`mIt0JmR;?6mZaQl`G(0zqLRCyZqKd1>CCim>Q*~kB{Qc^L&Uu{b^XV zxD&36U3wH2$44E7B}ZW?sSjm->kH{bv5y#-)qlH)K4@~38jwt9Qp5m@jwHwJS;!I2 z!Z4G41M8>x7=DJ2=P&Rn{0DqG{~6Eaukw8UD?X3^nqSLbBXWf$W{ZBJSo9ZV$h}Yu6iabL zrHB{R!Y67(qNo>xMY9+pHj1I*Mv*LT5yQkCVz}6a68DJF;v2#*+C-{&Sfqv&$#D6p?#0+VPY&lrWlqupGIZ4cw)5SbFQ-`FEMF2kMlxM{*`M$VIejvUoFNodpqPSa^;%j=e*rUgZuj~EAy?TP!t0#$l`be=~PZQtJ z$BFy&$)Z)y76c1C%*54KH>3*vKe{Uh-={omre z!NmuLEqr^XO*(MXn>ktU^)C3RzpG>u#tW#r3fV}Gu68|AW( zu}H=k6*ATc$~a@S9AK=I1C5PxkkKOJjh!;VxLbOSy>hT|zZ_ybB!?Q`mdVC(Im|dI zM;I^5k;W@B#duYYHbJJEx=b^pWQG|dGfhj5H3!LYrdLidhsufOa5>5J%gJWCoNA7j z)66V6!<;U&&6zUC%$K?59DiA0Vq}=*a*nxN7Mfe+JoC%4*xV@t=59IPyhmPZ9+IVI zhb%Xb%Z27ix!C-!Tw?xEs-Fi~1`HOrfE!+-w};q+S&j`ojOWnH^p+84G2>A*DY|Gl zHpZbfg4cmIg2(B-8%8;_y)e|F9YDSx(JM)wMw;Dw25ENhSx9$i?|OP3|_TgXJRhC^yp`MKV~eUh->#k&1T0y}Jq>4{b}`VbLC2~i6!g(u2RprR;&>Ssw}cZcVr zPakIxPxatAz6?hRgwj;+G5F%vETO*P&PZ&9`C(&*g-7?!{eK&zn9oC>H1$=$6!fJf zHIazi=JJRR1*J)&Ql$E|)U=o)8F={^MGm399~VY7z{FR76v>ky{nPr*RP z)tB|`oU8Y&r-x?^^6cf6b7K}Aq2J2LAN&3RGw}6N4;=TEOEy8A48b7T3`uf543nE6 zU2cYKxdmp+8-Jik-U!#pn_#)z3M=I{sFgQENN$HM@=Nd)c^e#%JK%`i2`A-U@SNNY zFX6s?RqlazP|kbuUO0!l^Ph4b<8nXiFZZ$pc^?}pTUm-cz*6NwHdP*CGvtG;NIt~M zWIL;n-(*$tQC2HE*n0UbcB6cZ-6|hv_aN;)d6+#cpMPYBRgX6vQ|TbfEQN+7G+rvEPTG!?4qq%#Oo$ zTQWNhH-Fla*#*dRB;#K1Ixi4%zUv_LbEIhs`i1&7#R6kWmvm*FA{2C!QQhx@oIY0fZu)n6UacPMev_-saAbE$^THa#Kz?Y9lP=gd} z#&nO^2T^H>-hk*paz%@kasZ+cnuJk#+UxLnt$*$x7Mk_gWLF zcVf#?sN6~)H6O!=9!aQB+XOkR73xP1?7G|Q%;EB?DHhs|+v^B5csodIlGhn+>(M7X zr_=37$KB^KjzLw=DaPRL!Dh5=<={&uG`u81anLrC9^t{O#g&%m!K|o*ckiUzAsKhl z>wkEo{1&3+o6tx84hG1#AyNJwhRAmyS^g15$v;7={4?&Vzraj+4)W!B+*uz$nfwrz z$qP^?{|Ou9r?5?4gk3toZk@p)U596M6W-8W@SYwG=XE!HsP~0W^jOCAer&KlfFeJAvV5JtvtR4i;m?0@3IG5I2mmoz-LrMWHv|JQS>3a* z$NmBXFzw`Vv(G;JdCrB8zPk1vfK|BW#S%Q_fdk)B@Lhie zr`-6S7c!patYf_^E=QF*vu>)wXP7 zU?GO=&3ZCzs7a$$P4sIH@`N$Co9chUjSa1JTR4^&6vCn1CX^XmyIR8AP2?ujT+_6z zu9>48(j9JYY^vj+gu&BPSF?G0O>Kim zl-5u<)GUsW3A!z~ny{O&98Y%X46_>cs|VGJgqrNGXpHRFqDD2DL*5wuX%c@*#FHBB z?bFk7Bd#YIW~8((Eu|%++Gf2!X^?_+Dq53_HECVDEFsz_?crgGC;R%1u%Si|H0yn| zRqr<@7(3L%#6DNYEUCuf_8Z`yU4VqQ*M8&i*@s}31GDEaL@6pv{W z9<$vHJ~hTm#H<`Lt27ki<}sDZ!rZhgQ)0Q95}V{HDJ`uh4${^&4;Zu1p4#PPfJ^U- zip;rm%Pdc7(jGac8Y(Z_TCzQDY)#z&#}yh2%;7@L?Ap4&o5Q;_2K-K5XaqZQ{dDH2TnBDj_Nb(mjC3 z8S?MWL2Z9L5#xUs0Bi7J6k|SI!BtNE+J_VPHkIMs*FS^5^xjnR^arPZ7f_oev}Cu@ zLj>J)A^uQQl!m5mp8vT{-2AmLV{9`sJdifDUg}>pl~M&}jQv3R}B(>|x`vv44mKEx1-r6xOX~d0z?P|Kmd@q0e_c4&a1BE;&|4$PZ(AUTk zdg|xW?@}zISG$ydOkg?Tpbf7eTxP>7376Y&1>vvR@G8QqZMc%~8XI0qxXOkfBK)uo zuOqzPhN}s0u;Gn_AF<)D6SWC7;6K#!V%}`cTf{8!CKEGtoZxS_)@$VXDpWAE;Tx8MdI~&W zn;RT~cg&F0zk&b9Oc?bvPU{g9-cG>0ej zmiy&%$PY?Iv9b}kufS6#jltVCjLKk+gUs>WLRK)xb;COfAHi(Sdha3@iaE#CdBeMtla7@R!MTbV z!Igies4v(~^1J2EQDhf1-o+?voOEz0Jmg>#6c)xz)`9}oilwX#Ygs$ivpsl}?ZsZ! zA)E`6VM{RwF)Ax=en-a54rro8In_lJce5Kkrc3O%w2#7w+m0%kn;|&|M_rT*mvD)l!`o~KH`sZ6$S&Yd>}7n)UJ-fdqZaL;OvEYD z9=ZzJv7ab6<>w7iS}wY9hH!u=1()dZGFK`7nS9;Ol;v%4X-I-fpqKLMz^6!xvh?G3 z&}r2v&is~Dpc}0VVK(I`_ZF1kFuZ@99Ko!2GNEvB5%!j?g=c3Drzh4@wT}+rg|vvb zaITDF=MdnTFU~1BdaAtm6k$akhU~cPxcip4hAeg+3)pYO5qZLcMVTWO!9c$_mOcus z!_Elb$o|R0W~{KtAvo!bjfJ9(E}?+Wh2<;6NODg3@=1vekAGn^V?G5J>?42Vu|Hrg z`xuMZA5qCZp~m@`lKf|3RtX(Ak6s?#3h~B_fg5p{C~hEqYgh)JusXjon6aurvp-2ZtFmDv|Om1Kl1p!w;8AV_i`2knS z7z)J!14R4fF%$_YuH+_a&2unF=j2%XM^NxOiUSHMC4+Bajvxb0vRZ#oy_d0 z_lL(9O~&saipckWP!InTZuT$u*uUv5`VU?FU!jPNV>#uqOrmF7l2Io)u~TxPO;Vsr zZuCkX9Fn{^CS~D-G!sutIe1Q*jk8i7E=c*fC>7wERD=(t`S?UC#%*aKK9?5bOKFM7 zPZPzvjq-4eo@0gD<}Y11PMLDy0`;iLqikfdcZa&%ETKChkCLEx9(hy!9fP#$q;>i< zwF<08{4WE@zmEBogW_2f)&;?Q2}yteDWuSph=?MhU{_EfqK~K#3rYftf(;P6*ee$7 zU7uplH*@aYyBmm)@V?(4*?Z^obEch{Ip^Xte?Pnr0D6mW41C$ZBMRsM5%4;`V&JP0 zpy6v4w7}Obn1g?B@Z(KRzQvEX`SFg4Nf9st-!TUt0uy6G70oocxX--}8KaVCY8!e~N%^_#aOE zY!UPeL&rJqSBq->#>wCL@rQ|j^82p{{2S{D5ayEZWGH5;`kA7h;|V$5nrSAiS}I9fwMdEqZ2dJHJ#!z>zm%uH0@FT#T zCvriOA(DT2kQ7Vw6ulVgO%xKT4E5o>G=|O~OpA0w^yO~)al11O(Vr+R25`whLZTSN z&|n%{l0=-vLk!`^Q0`$E_cffy9>I^1+|ekd9zY`bY<`S3L`DQ$$jvVlWB73nKQj3- zmLJ2p);NBQ=VTT`6ZkQaACveo*%DL4RDMk3j z_uK+n)YmI52;|ZQjEIGXSQG*GF%9n%Mf@n{M+r~2lpl)?QD%zr2&fYkCZ?F!%M_I+ z_B4OR5>qTS#WLbuvD_3Zm?zIS#RUqe%rz?&5d5w(#f7F=Wr~YTvDy?Dn_`VAE>WPl zJ&8*#KrxluuH}v{V`v>imm6X|LW`lphtD29e%z$V6Q>NHJboeqW*{^hUQ%3Mky~6b zHFr^E0Yb#2p<_qR9yO7k3L^=joy^G`KYV{^=A_xZXHS|uboe>5GbWE58>%$~!JIg9 z(#VNZM~>k1DunL;z18fI(!(S0vh9=UW@*fDEp;=j!4psk? zIv6!2Gc%M^kD$xMBwBdJIGWnzkxqk2T#g9p*rC%UED(%w<0p^K7o5hm6Ag7Q3?7{AI2ODjss5TY{|LK-%t%epCmsI5PfG!5KLc6h6VZZf42hd9Gcb}R6 zOSgKV(>$Vld2z-3f{MaC?lZTdqKw{&r|yy}7S5@xDB$JgmE;qe&7$08lPZ65^A-~J z3Ct|X%Uwi$HOs3kD=R3j2&NQdvRmxk6q^Q7KV|DlE#KQ@}XyeoA~~a?Jr@_#Q^nB}#f6 z>N!bE(rZ%T3MN62-gZ(SSXf+GF&N?egwqo8jFZK;DLFGw&dTU9m6(5VxMao_nJzLX z=gwJFz-q$5e<7!xOe~}p<#PUN#r#4-Rmv$RKUQ*rD@iRInF-NvNnv?mh087oF$w=L z;TTynB%&h<=H^x|B8s1paB4OVHJi%4NNv;Ngboo#H!^ni|JJ#|o!h9(CY?BE2|aR2 zvA2|iGHZtqT%M3|%29u~O;&Ej{6=W}zs|9Ox|~=rmqfC{=^P=@^oby}X-K{BC1oTu z!m$72M6J>gf7lG;s#RjdQ;ShZ2}{mrZ9tvMj%+DV61X5j<~Ry8DIp^xoMXq!9tSj* zC)-MWn^Bx!u#A*%e!-%OTox6n!t`P(Qk1{Qez$C-6Rzg$3R-`;vpdN7WE7VZI@JUz z1bRuSy@`07GN)Lh*>bs2Qd&@!%UiEqfyCIZfb>&JN=aOlC9HXyxqN7s$23MR?y=h` zv71p*P~=MTsKSCp`F5B68|$(uIXo5yGh%+3AHQP7Q{Z z%_|QQa!h4WsXgDsCa4m76XSt3x%07^Q$DRw8YjgC%N(Av#UazK5IFVZLcQ9&mznRN z(3kKJtIjL0XlRzYvY-{(l4P$gqp;ZN$|9(&ps0ZDfL4Dt3-bmwX=!0a-h8{tWDCtks1D z%gck(6F%O=CXaU-qqVk$ly>F9q2mgc4lOIoUGAu_{KBI0;O@s+;af$tO~|t4!*gkV zjs+V>OJV z8If(g3Kq3OW)3}%xMLn`(mBk?V_9Dy@iWeCihF+{jStrEb}#wtce*|cb&^SDWFh66 za>gU&MxUFXKdDl>|LosNAcv6QbwWUlCtSdjW_fWkbW+F}Ju=vMaeOqB#K!=ELg*Odxy+_=@iDp!W&EZXi zu1(S+9_)tQJ>o`gwiK6n&`;~YHazE>#3m2?&7rzpryCU_oQTaHVkh*7o9Tgqp<92% ztsdOWBPpDxBGP6b&WyqE(Etycyr?Z6yjX1YpoY3fREyg@XrOM0Z60yExWj{;F@n2~ z@Sw$y9<&f_iFY;u(ZlUXgyeA#?NEe)e~IlLtRqT_8gZuw$KnGXj3yl89()MFd!oqD zNbpw^kZcbj?h@A$7l%3_ucTle6ZwB`JcIxq@o&cX4snkM_cAwmnF>)%#`a;27A-26 zm%E5upo)T#!EmBS+)H%A1GvJ2Ef}{RestjO?i2TWFu>4GUPvMr?Bo?bARhFHUHqu! zyjDC;)5Iyrn{{HhA@+E1CHMZ2c-SNMibp)+QL)b>_H*82;&G37LOhAkr73?Kg$M6N zlD#fGlNMpPo?lW{;So>aAP*iE2R!1SIOGvei^CpFU~1pblzWE9dsaN>!3hjKFJAD7 z7a1p)<9ZKvWLE3MtaeHj;6&~`cs2KZ4L`1>2Z`Tt54Oe_5Blgq97j+*6DW?c7t2sv zX4jWIxP|724|8^V&Thx+X&HZ7&*b@KB}>_e@Zfzs*OzfC_a`5;k|QkBuZUMY;x+NQ zN4z1Z%3Dmj%}C3Bo2DV&5$}5N5hmh$Jj!D@(<9y&M?K;L4%4^(2hHvgABvCo@v%o7 z6Q6kCH&!9P^X%G&noK0cTUZogEpqv6jnsivV~2{8k`9Z=8!YI^;{AUql{O56(O%(% z!kSHTLa|QToaBaP01fX1kLYR83J6PkN8IT}g3L18%uAj5LV2qg|{&PN0p#e^Kk zGM;goX9Z21tt5paZSv`-JwlUXqXu~>HkX@)?pd!{T0#OR6>%#npHj?AF3ep-9Pd=kz2`HtkJY zMzg)+lZTrP>-W6WHb^XHDTtk(-vTz`p96%J)x-^lnmTBF&93} z4@o|$gQ9SYB*B}|cRO+8d-LjR`~VLY9y1x|Q6EYOwI)adUR zxrIea^agKEn0!J#PVSpldF7mPDZKKCi|F3S8MLv4jAgkKSrs8Wzx%28P=~_|8iABc zZ@z|8S}H@taS6ju9x4=xN^Z=;_%HR%ijqmrDq4RfG`faHEzzlbIDT3@#e;D_4ZMwWB9Kf7(rROw9fez3DUI&1)pbfkMZvw(wd~FN7lzuxb z{SKwy4NJdA>G#9ZM=AY5So%Xse-xJfn9|3>(w|WJ)3Eesl>R&{{RO4JJYoE=!qQ(; z`kQ~S^tY7$E-d{$t>6dvQNlk_K0q|b6?pd|=;NzW;FEf5Km~ zpTD8rzS4#$-@VoOHB3 z4~|~RcPl5~hcWWq+IhEe^8HTxwoW?MNymRV>3ApI&Plg-(jA<1M`t~qoOfqu{#|VR zaqv>6yJ2_vPH^5moOi$}Pn7ROT3He%6Y^3B`Uy0!_tr%>y%bQOdiD@&bvJ7gY<!wm^D-UbPSt2<(EGM5Zc`wV?6jHDW^_CQ;0MY^}mCra@PCPBA zT`jbyy6tI-9lRz@u>+6Tz79I>l!$-nNzW>1Pw03SbYjyed=A>+^UwibgamvUlJN+n z;w#V>Uxgv~8k~b~z+`+A&cnALAK!rm_#RZ^`)~msg-h`RxCTFjZS=kqkHNk83GBkp zU_X8i2k{Fyj9O9*=ubR@@4Hhk%qj+vJ{|ko3;^q?9k)D_ zFw*G|(b46APE69yYECV5=CZ^?U?{{01V<(kRqLQj9Q~$+P}r6S!Qa8aKZq;;f;jve z(y$)-36RU{U=QRj3Owkhjq7?*$4^l)7^cAgPi10&(XbXSiMVy>znmrpA zFB2sZQRWTAL9{Lt#^7Mm3JL^>A8H@#~>A1_{xzI(-mQ#$eJ9Ven z701wa#(ViWnCT3i$O6m1P`5f~h`cb#Mpv@O;yAmZ)}DBQ)TPpw=H}lF>P~*E)v%b} zXYPXjhhPXpdtm@^%D`Ia@8t8V76ye*2Td5j$pqyc(GPx!1lyO|eAaRTHsk>o#x~`-fJ|k`$lqLI&)W>1OCg?~t zM*8$MI!2!@#g+;lgAsKwde!(E7-84T*aU6edUlPBIv7J0I)|E{!_A{J?c(@dFt!fH zts1|^pbdX?gB;hVZiA(MEjV(g6GoOLp`p)qYSP%TZcV3-GkBMi26xIEj(!=TV|)#+ zq$*j5Xd$j@&vLMnuGc^}2d3AAd^JB^_vyDlRIFZ21lGwSS{$pdE28x3EI+*O!gF99b^HBjt&~AU2BB%BpSM{lG1x8VHK&~QK<(nF~ zmp8?@xE#0ZKjLzNo&QtEHL%QXl^@nB-)&U`Gkm&t$TslG8BpG2${Xoa46BxES8K^7 z-XT6c$FAAZu6f+8Nt0H1^dQI8!UP_FDsSaeIdhs%l`3%>CzzsfG8yZN8!6^20_T$y z7t((gwusbw5wsPHAwiTux+o|0UIAn2oh2$^npg_6#4=J&tDs7(hKt3;aJg6m8^on> ztyl}Ui_2h#SO<0Da(GUxhgZcF@V>Ybeij?iE3QJHxC~>(b=Xy0kG;eVc(%9^$BUaV zTWrEIaWifZx8Su@zKNvjR&g6vi`%hA+<|`&h=1WeQG+jtJMk597rrU(#<#={{7~!^ zs(4UXVwZ>)wW6D-6Djmg6MMv9@sJoT9u^bmJxx3!vc*1;FZPQi;xTcdcwDTd_m$#F zag{hAHj9H|hd3ne6NjmXXDIhM@rrmsye?i6?}?YiH&PEf-6kRvmxLr~y`T*$=?X*p!?>%-OT<0F%XT7C*9MqhQBv z5J9hJk zio|hPEPi)Q$x&ovraBgInY*8q;S7lp#B7}Dtn_nQDXWOmhAX874*!P*#yNir>`b$M zWUG|gY&B@d?f9hwpNHyIz~uqg-~6#=P= z0%s~Z3{eait(Y)YiGYbpbC|BQfC427N|csztpS?*5NEASuTpodrOsLzn&lYK=LT0T zJoc(F>7-T9KgFs?)2i>PmO6j^O!k?g5Tw(zOL_^}wUEP9Y(V}-P{X~Gm)0lN8?zOB zvEDXYp+&5>?^dv4y=PWKM4Xm0xCV?k2d}YCDBzbA^wjS&rNAtXmyh+N6f~P365t2~L+ax*3Jn+#gcZ+{?d8C)vz#m)! z@gz5`*<2)wwIzzh62;mP#X1nRI>RKT3uG(Zh*I65NJ)S)B>+p66u4074L2%%V2g4F zY*YHe-AX^WPZY%Wqfj!?qnv{sluS%i#z~4#BqOH4 zrTERHAQsqu0P!%BApwayis1 z>m{8^Are*-ucpeKtJ;Mgb)k11D(Y|!Y{$7ckDWwP-$8#)2A7io=i4p}C7gH%L3X^O z4SX(X%sX5mE^ui4h!fm8)(DM#M7w$Yb-%s~=BFDrvCsdn#MULTr}>P{5alNWs%^UA z*Et$Bp9El!U7aYQt;qKodQ}cl*0hbYuuLbsWs}5|Br)xs@}X+z-ALEAGJA-p$>idm z6xL%kWMqFzI_f9UF`GCZl&gr2S3_In8q!?XL4tBU^i^(vOr;toD7VudvmItDcfnlc zZa81r0qd3f;5y}g*sMH2w5@|0a*%f@d*DIkA$VBX3$H1U!pF*fH%hh4p`Qus9r|&U z>X<8q$6P5q7Ni;+bE8zp+$hyCTu9ESMqcAHl74?Wbc82yk+hL6!XhkoD4A(XD^#CA z$wXUR3;WAZ#{6{MCghxkgly{&GK$s`Cbt89`eyJZF}iiK^K~2D**=}ArQ0MVgWjc= zA?al}B1E0JLd0pMVK7X(^vY92g#+MM4nhazY3QyThIHi_(rmBNPX7i`;ccSAyRcX} z3M+q<4`7w@5nQT#3O6X9!B*vScQ07%;F!ZF)h>>!-SAnp>)cmk36@G6SL0%`_*C%2 zT1PTEz$%GZ4xf}^xnm`KZ|?>8E%D&fw>g?+aQr4R*t{L{DG@s`4CmNiwK4pty@mE` zXc5x(u|Nh{z0zJ#l6J!)>bGVqTysJp#3%?q+SeC{p*nT@Si&b;f)hgjmk5yMY#+bu50Qj>j+5Ec`~D z6bhW;x9(o?t-Duzixt?NB%&F9h?O$jm4F9v3FUF%bSW-#xL+e_;2mWsQ-gnqS&|rJ zcKfxs4$6qSC5c35m3YREC~by2ZS1Be+AKs|Jhoa!Q6yU?O0KA4wn%h%ycYWJ3@C}j zejG15Gf@VkViNblC}P)gD&?F+I|fy85QaD%SICZeP8E%GTw!-Ci>XtdTLtw|$wO4s zK(Qld(r`aS+K@-Ck(S7r&S-x%kinI-Y8Yy-sI_C{&#HwbQexaG2NV_}g>|5uVq}BS zLJV~SbOlhSLwhwF64aT{Lp>LIspmmobvBGtb78tV2lCWB$XDmW0<{oI)CI6aT?iMc zi(s8v0#~V}uti-AJJm9HL@kG>)CxGDE`jIOW$>E19Ntq`z%lhg_*#Fx7=BkTL7`rX zmU1AqKOilNzL30t<+l~R^0*tbt{~u-VRyn9W;mS zkgMJWh3ef=X%C){ z7Z65U!5wnj5o9V1;VbUa{H}6c@_Gl$Yfo}cJ2gaZOLy;H6DxnW3CFE$6?>xJNb0Tr zc4!gjz3_Ih;=HT2Nk7kV1-UulD$b6iwX_S?I6mS@p1S%7A?;C!R`)?ibwBi0pMW#f zr(lqJfLQn-j8UI~bJb^wb)O^FeE}|2UvfS5L9UNRi*wPkR(fG5p$nxyb`h?^iyW5I z39-h>{+Nu1YW9Cr?+)%Gs07u#QJQa**1_^=$+DSGQ*Eu!JHiTD)rx5fdjNiQ-!|R` ze0pkFy)`=4)PE8n>uEQfA6k71+3TRbMyr2=SmsR<;r8}pGESwR;ESzxeX)z3NX;@_LsY$Ea4tdDE}ZPxwr$(CZQC~P*x0eH z9ox3CV>{Wg%`eaMp8C#tt9qtZbxqIwnC{i97p{xAO!5y7KwlWs2JF?7Dy8AF2b}?C z5b9Zd2~u7ahvNH-fwTUxO#yD7)GIF*ak`8Qg`cy@i1f7ybw=*Vs@!O4#WEz*<5%Q3 z93u&z+M~+A)W47n21phIWb+>4DPOpZGY&?zPxRwIJN?E%X%zwk(vK7xmLm&S3pzEw zmk*4~q>X=(0h-{y5?9L;Ih7zOU`XXvu|J)4uXl^9Nmw;j6C0MdqZ@RgUR&)X*WP7~ zL3CndJ4m%XBpSx|Rn{P*6zmjx#0$g-ssnT9EtT(s!BL(Mo9xVV6dT&BzT8A)gtfcQ zoS2CKp~q(qbMl`c9e)7A6>k_18sFryOM{|87S_4yX+H}avHq)DW zd~h9-F;s^_E$)Qcte=UHsc+9*M4K5s9w97^;7hOMRxzD#5?LxvurFc(;D8>uTs@ z)zG|W>7#r%2$^#s8Q3}Gr2Mi}*rMiKM)h+rmF8_mopX@;W>#W*@70WJV~_UeEtZ|( zs~_=s%A?-rm}iIU9uLp`xD%8et~>=6$%4ISGkHr>T^ikD=unq zxsqtJXROVEwQlnwCf?}^B=u7iU8Dk&rua55vYX(cvb;Q|(kp}2BYUjt9RxlHE*!!R zscjuRZp{s|ZX=Rk$)5b18#c^l&?tue7r9lDVJbWJu_cyKc!L)`^xew_Wn>WVmmom8 zkTAYCF_CgCNr?tcTNqtGoJpBR|NHwSzqdRj4dQbhl=y@6##$vmi5(5xa=|Eq9fY~b zHvP{uaXEjQr|;AEtI#)`XHn7TRbu!ukVF!~0BYuW2Y9R6G82vNOqC;7+N+w^)oLgP zzdE_3c_*mwGw;CMQFi8K&?B6;?ks>$zn`z6M{lPXKS};1fi7iR%H4IY%*A&Gejyez z^!p-0(Uy@Il{+N3e3ztY7ECQm!rF{~eDl|xE{3py9a44)8q#{S)UouQt{v03E?2S@ zTAh4lNM$pbV|WYd)naP@=Q{L{=L&(r8lx|3UE0$?hfIn!T2X3q7j#oU1RXGMxraEZ zlx8cj1vIF{(dVeDPor$wU0K32jM!LDUXUUmut&am`1=z0Eakcq52~T+l*6Rkj-K#w zJc~ImQ=31U<7nHTWzC|5+fvPYFa~4J_JU?Sc)i%5fMQc)H-a&-G zj-P1hE~_6lZ}=%-2bPnmOB?_?boi|cT<;4G6LAC`aRm9F`|vO0P*Bk@`DQm#!t;Vy zcQB~26h_SrprWSOV&s|t+Dq&7Dm{>YRx3gY?tE2?_Cb|Ra*k>4ESr^E!l)f+_zNuq zM$SX}i!D;n)r4*+FcxFevq8i+cNV?MKyhuT-22eWNE&rQd}CzSW1!D-*Pc4O(xFe;e4;x*uKbM-`F_)G3p_(2(VZQi__CJ!WLdm5JFq@W zQy#q>Pd=$#=ZN`L&`C;r>YEcXeN_;}dbQz#_(r(+^7sWV0dR3BZVGI6EZV7iXS6K? zpfug!I49yAlG=Gj@a^e2F7Vg1iJqb4xkF$znsLp)FIMe-fy5Vy|D1h{q}3GRf&6`Qzx{>yr~ZR5 z+|V~+;*c$Y^wt23g}CdT0>U?ym|>pLTjGt_&RN`muD0ri4yEOD`3=k18Mk8~9nzpmsu!L@5Txp3frn74$_9k$dFbFB; z<`_*1eR%_6^y^yAxlfKUz^L>5{K6y-UWqzfm8V+iZ*7r6cQM+g_Tgn6??9P1PcnV) z*lFAbK<#P8`s^CPjhCzHpr0t$?tH}z^~uu@&81)l?lJRib|9P`6Jt5jZ|8t^;L5+z zpa`Dr*e}*6!N>y~*InJtU7ag>P0NDoMGYyfaOeUkRA!MQy>OJPto0y^spYhTkz^r zj>E5eQhXUEdP#&?d>QJ}Bw>`HhhQ8eVs3(|kusvj*&e zt?zi&tH{E~@`;n4`X|(kMgn_xVHUQckUTsAjI+0eWS4lNwY)Ky6t2n9Pq)O%a|u&V_=do| z1*?{mhPe5}bc>!*vmW#dwH45K9{3C86;R?&EuzvMzV`Y2esh*0py!=hMAkkM?eqAh zzlhBu_MV!c>dmV1zG;$46O;{|Ye@^{{V6_AN@01Vnn3jnW7f$lK|T3L4fAjhNG5x; zJ^IBb(Jncw#(v_Gob~YQ$ly)atc>4at&&0M=~O1A?7?ip$S?G+%fIKYqDR?FqE?yz zuLhODIR@3vxlQuH8(BqRts2RLn>Ea*Gn;s?@Z}!|MTj$v%A!Y`#oM>$Gty7*N8L|x zHi=#-y?h7d=!a?R4FARs)!vk609O|{vLU|fAYEIEyOw}%z|wr!8R(JeMI&5_WZbtM z=qV#)=>hwCB^)Qj$nK?WPC{^2*gqvJQ1irJZNX31lAc)hDczWdw6ddsac?NbDDMKM z8#zl7x(LaFg*M+KO61nTlC~V}bWa4`2#rRyKnO$p=_|R0MPB0Q>;%kpK!U?yw`Q=% z{6}uzG;=^v{{ri5r>B1#Du4Yb+De~jJFy6DAlXyY5SXHMtz;E^jU<#H@itun%vjB9 zYseQEeuhQFj%6|)?wum9W8Q_BN^W>1X)(=ppEZ|?$SY{-TBT~-pe|05G18aatkxO? z&!Mc^5!Gs(ie0Cwn}{+fz{_?rDBpZ$IKoHX>sGb5Iw86&=(`)PY|r{E0b-eNZz>=Wcfz*;j|AruH_VK~wgfPk7FL;&N|Z9tm> zx{DMM`KP%95!OSXeG)IE^XYU_EC77^mc*zDfDSu{FhsS(LU|}N3iHRDS;%uExuc7y zti((6Y>D2iKjc~sXQi`Zx)Aae$^u`LB|Tz&uKs+5Ny&Q4n#kwu71|!e@+YA;bM$p} zW7BLJUJ``KJ0^hu(1h#!x&7OUR5T>vPzmlAEBGe!gw4TLZuLVgDz|d7s##qGjBSC4 zMYEVQ10G%iduOFHc65AOd~1{-f-LZLIAYWEmie|4Ttqsi^koyA`Npy83RUoPWF&9u z0gL)#KY8OZJiSKt-T}$`0&ZFm2$^}4m=pQN^ghcI6!=sDVCDnhEzS-4FsWzfd&yJ* z5`Vt%ogWGECBKoRsT?A|V5*kl2f;rz+SI?{T26Wgx84XG5ssEl0fYYC__@RoUt%D8 zcp`o8$sSX4yDlPWq>emg?ih*__lK_*9rU9q8OVb1HNFff1JU*ZxE)P{KCOeBLsD zRd!W;6~(y#ZZDeK28Zw11YA5)&(7hjT&+<9R z)hjs*VP3C2RK7n=lTi%GKdEze=;Xhw-|38Ic20@`Ov!-#`18+J<~ABmyp-c7NyY-D z{T{=C{Gk>@;j*De=NVR`Ygu&AazqpkUlumeKxG&E#fdI#-2uhkl-@H5Js@7i6$*U7_csP?TYxi zEL=kXvoZ2FC4a%bOk6_`#67hAe^rPB6~&0!+L4-IkbrgK@G(uFgnq{IbM{LPVvS&N zPM$=EiVM&(y&ag10Ci1ZMyy~5--4S!+B1jkvzuVrbA)wLbHGUK+5c14iyiFK?^0^O zAK=X1W31Z+tW7Ajw<_5^)xDoNaouvwcj0*f6uo&#o^SQ;#sUY6^KNBcIx?^!OZRuG7 z9LE7WW8t1f0pz?0-q`m<)0D6q+_R3&?1-(w$;}Uy=i^=^;iVV-N((+rj(XELCE63Vv zgc>T!hZ5jUSw`ZvzWjNJ<2Jq-kB^Ul55F>EFXD%T*F3xrvHsdq>x*6Ni013#dkkl9 z)Q<%D?Jz7bz+I=FEpMbAu7PKPw1pkW0*~l2_lyUbRhUjeYp(s60>MG+xD5e`UsyJF zcZ+bbt|*-6GA3njpzmnemyR+XybQ?j7t3#dk&`rF!rr23kgq~?NxFNCCZI|{KyQ9? zO4NHwe~sWvD`3Oc72KOF_Fhcih#Fdx5!2e&i~>j!@k zRI;1awcm+Mm4=ec!O<`$Msu;G^K~od3DaM&_tr6)lmWupU zO)w1X%01%)bEzU}x&WPJhy%Qf*cGj+f z3Cki5N0HTLkpF?Yt%YrWoH!d*P8O5lX54)&z$l|0k0zGKso4ob-)J)yCl;@5sSV?r z`DzevMBaDE6X+SI^Cm(mx)!VR*2M(j%aS)l04E-D(os?gGr1u11&U>}ptb_R> z3F`~~_dP1_K>hp-n-(FmPih92m; z8Dl?Zh660<8;#Y1qdWZU25(Bo1Y&g5ZZIpI;6No^qv*QE_;wXm2J*{8twX*RPi-oC zEs?q;5$W^e8@Ny)nA8D)<(3GQ9s7izm)ikzRUORE4gfX9TPR1N&2zwDhdEG<*@Ssc zFz)E>y;|sUqVdEx)wc^g_TS=Zgm;%O`jnKXc)PHcES!>^Ne;(uFvzXrdjLs3$0N+@ zqvK!ND4ghN@d-8gNFsu<05-@2O5Z=sdzmcQ5#H6=2f|SDz;Xw8m_Xs01rI{v8U_17 zO|=N+t}^0WNbWk~#1J_q!ighuhV_Gw9ke|L!_U8*JYEm{#XQV9GKvqnN27thepX3wjdv0K>5c@@oQ4Ri=dg> zpz{)^sK)-e!u#KNJ}5 z$2#!+178Rz9riBDq2|)(-x$luOB$SBAxK`)BPk+iv2j}St|60I0h4(SlU`{r!3i#j z50U2RDA9sAa#QfofdAo3({bA*XDlM92Bz~i_+yv4;ciy<@3UY&#qB0tPaBQak5^Uu zD7BOz0B!aTKM^gK@K?blmxU@%Z-(U>Rd?FR2icdSBq=(w zrhnezLiwt`QYRCU){i|T5)=a^(D2lyU_L-6a}zQyX=^@N+%bDUwG=Ir4GlbV z%P?pSuQUsaar6S1%$%5(DakM;16CuGZ;u<$h+)g*GuS)Le-n@a9zMmgYsZ4e&+^{i zdYo}nxkkX|Lg+muglPglGINXwn=ay%&4pZ+UgX%~#ZJ%4;uy&V&XJkXHjXQk$pF)u zg>vKX@`Ft#KN3Do^^(kmX24vwM{^A8yD>FlaxDAN&x-+In?)JOrqfPuCmzWr;Z6s5 z5wFoAS{>^$t!7iqFu@Fqx&)@1(W8c%Cs49Q4?{PKREIAH=2oWnP!)i*;6m_ZUoC!J?6_&6ZwU?!7;JM*SYZyYAoY zIs+y3K1{xT_cBlKnc<>|b{BXl{~jV}Ei$+A$1=JVgsWlmE6Rc(@UaaTy(xg(k;!5{-%l9QLc;tr+(I!() z*{Yp_8?JonRLaREb#h)8f~j5Sur5$hs6<#fCaCG z%d}f2%#FV3Z)k(AWeEUAtzFUkx8o@Va-8?21H+4vPrvh%EZLK(r<+EI*@Rh*N2=BA zkX1KF)niB9a$30A#PYdtHAhD^0hCQQQ`MuIQAWe#h@y?QlY4%G9k*VZ-`fK?k6T?) zRo!-3nAya3qi{D0`e)=7{Q;qknK53MG08HOFR!ZR5h`*`=NEt^t6o1(9L=D)#J6p0 zGRd9ciJaboq72Ps2m3GS#)vHlfkjJd+E2Ltcq1z>Tvc>Jpd2!fZv^;Rd@RbUX2fv< zo{g3SZ2kuqcs(OMws!aHnzk)Trf1Ly(i}$64RJF=PL4u_xJ?DJzc|5rqdE`DW@`z( zf{+%+4USFP5ee{ZYl#m9zYk)+=Ta~bppw3c$(NKfkUVmdv5%Ta9McMuhk$lRmY^T$ zb7+xdWgm(mj5a?&{d@f|diBbG<^dt6I__XB)QgPr7(9ZxHjMNh`@}>a#$@Vz7xx|< z(_&ka=T(kzVNjmKo40(yRs2n&r{Ib-d*m-wxuQ z@!V&B&%bK1jS!!O(6?|Ld{dLvlRnS^o;HZ{H)W-gmBP z*Aw`h;Q%nod1ddh=?UM-xHjqbQXR@7h_F8nZ<+*W?-@~l$ z^`gp5*IK51i|d;D(=4a&L_Z!QG;Ms7)^L1_@O&{CS9M&;2M{4%X zg~>lO0bV24u2Vvs|wa%ml^GH*mOJBvCFqiW9M6RENq^&v9zn%#C_(uC482# zEAi?_tOzs@nrEw_);*R*FBxnS?X^@~YuVHsEaVnImSMYFQ>qb~&A}YHBl+hH^s5$A zbd3HqdAZ7}8W*b-m5U+bbX8O%z<4`>@^QgDn%+~sX}x4OMHD`4zjQswk6L~A|Iiyp zy%Zj9r+o?huYz9b8J1NqB@iH>6o@oIYG59~h60KZYB)fICbU7Yd>>2{tScE>eHdn2 zj9y!1D8e}AZ<`*uo6|;hryUzP_9p}@zs-Z1Ng)%GB(d^ zUuD+xInuU^GgYoj^QISmFv)m8Envw2rq9Xvj85BSjZ1ga+he3{XVjewze^!4qg=H( zu1>KksFVL~leB*fqIvaNaIEjjj~;43q}{p^GJVi5V&XNyz!QK_04UV|NIAlaHdpQaWH>le;msyi3SgbtKGy(H8 zj}kRsWZMV+q{1*pric@kuV-HhXbTm$K+MPWF1xj_2ffvzJ5{#g9)ZEg+^u19Q=qpGt$WQ5@M3d|XnKEJ&1WM2R>M#T)JIIGy3 z0g+ZJDq6aIFgPWJuP4zbr-HEGU@@)Ca*9lR-(cLggPt;|2rPNac@aF-m>0mv| zPHZ9$Qp;zldd10 zMO$mdRGe|Ev5NzOUlI6H^j}?|*_X`fHHw$pkMH933cK1dyQfU~Gr623Y03>2{{;S5?&^aSJbW#c!+xBOfFVb zK?#B*1^2C6`;bc|?=&I+j?(^t^{u44Wm1#ikBC<~Pls!9V|G)Wiz_0akiqwy?J}GD&eQu-UVpO*$kPXP1vvDuk)Y*CQZfXBdb!jt9NHe@mo+;^Mt)WXMn_6d%Fh&rO;iT!U4?BATrDV2 zcpLqelE9S@+Nmb3v|eqAlg8j_k?^gr1dy^~#mbDwBTo=@QnOd-94qus&2Qf}!Y^`v z^K9W+)pXzHPuB|r?xCgL)%izxs(~BmxQG3Jn7!?2%s5+|q4RQrhBsS;L2)Ws5E_au z(w5^*LH$OgXUX^B-$dLgG{gZ(MKG5N_sKz-RM`yzTs6Dascmj7?HBz2gegTe2oegd zQekUU+VNCc=ZJlvdy?hi!&w#Dtc6$4qYhr&tMzfXS|pm{rGw)44up8Ak4-$Y9mcfnVRi;} zU=chUwR@p^7uR4&n zf+?^#hXnuRYU#}FmTXdD^7S{Sv6pNjrwaA2*=foEatd7xpIC z>`(Y6JC&Er{!jZ$ik@)IFb_U$>|zztHGODS__Dp=%?zz2i z$L)?2Zw|s=89iWaA~4R3e9G;+yWo+AoY_zs2L~zqCn)}ZNo;!oP zw{Fh%Z;r$EkZB{2vCi%djWNupwd|Pe=ZZ;&&ymC1COUciG*jahNHR7VURPthqsGHM zp2NLP+x2J7rDrZ#jrMO4_QP<@QI|0%0ADo0?c+C-!<0g{5A%#W42g5)F>dOytc(~< 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

xr;@35aU{KnrLEQa6 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

;*w(J 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

Nq~HYWn#sM=lu!#ek2bqA+{VXpy?p3(UB_dX zOrHJdDcGj5r~;h=q#chZkNiNWK4vn502VI8=EUTco5ho9`nFKcIfa?7o~~!B2nw*L zFyrpQ$um?`rd>Mh-}$9y&Fer(W6e=|aHSMH_x98|vZN7Vq}8`A4u8vK^t9h5VM2{b zPM}jn!O372bOcK_2`nLPT)bJ3bV3*!Til#3Qxjx)rgb|P}D)hS@zk! zanB*Vdj7pn>0kCWF{2x6(YFp@A8YXd&YG0pM$+eRF|#v)>W!pEHm@i3i+JYJJsci` z&iz#uZg~NIrGu5!B6T7sNubAw2q0TkMAm521R3FhpjA(Er?EdTm#kTIIlDE?-~M`F~V<)!_8| zQOq5huR6ZI@jllw;NMh*1qKf41m3@-ZwhtYie-(~1mUh6eCw49q<0d- zhRf=hqSv1VQhRi=2p0UO0fG~*om|6yBq>~scMk8UdLptlo{i;wg?gub>bj(0N3w*W9g#g1n1bb=-vs_R!1cE#8ZP*5%k)I|3TEBE022CcLHuX$Sitt@ zPpHjgJTI;hn!W31kI~v^ItTY4;>h~M><37b)HDy67Rj3Y!YsXb3fJfo#@MMErt0rL z`i;>C^t>IQuI%o0q#Vc*e~)5Z#{I({m9k@1`ll% z_ffzcFz)XHZ_b9Z8U;18Na00QwbcVRcyjHM9^r!a7O zAJZwf=gN|ST>{TZK>TTS!%{Rsiz}0f)etHUN_nGYAgd0<(OI4E@q_Qv?a-oww_NYU zu|4t9SnINd(d$rS;D3{m(>Ae4Lxxy8Wq5^2W=QySVJN0*{ck(&VxnX*hpaV#Ks3D9@S;pobAEhbr%R$Tc@|Tz%Q8hf( z04%o)%x6Tq_GC@0Qbe0RXZ#`SwwfzB?dftIUBOlbh?(=3tC_BSjiDq*gH$TKFqT;u z2GJ}pdwp6W{VI{p(5fircDh@4OGp9+YJvcSZ(6N#0G+4}`b4w^!)y<`oIW)r+!oc? zH%k2vK=ZOtYN-3?b zmUa&-gDpmDUB0vO^;Dl`*@QoN#ouh1xge=v*1+Ev_;-o`c}i2x?E1v^toc8i4RAmm zUQN;Ai|}zOPQ%EgAkml>Af&D2L7VU%5&+H#01*7{@{o`I3Cm2fI~@d=H(p77dQ7D& z09Eeow;!)&>$2?ApFux^I7f!guWegLri12H zL0b1Mv7>{_ZnR&5QNMoJsN}cOUxvzm4l< zfIbuT^%h4&AIz_RA;GbX7mK5dzROc*y~eh$!cXBP`Grwu$bb-vr{&|7vp}P$caFPF z$<29e12$z{qe7y`4b{>gTHko<*1hkg6o>R9B2^wRWlPR1flxD@b7Itf?{koHNzZdd zS#JMqsJ~~(q8rAK8_N!}`0mPxZ-dkfSX`9RPbs`UpSe!$`zqlHnEZ|v z3kYy#i};YRN;|CLo8u`HU&87Xli5~P^)M2{D>!lOP^=z-&#!R$DH4f(pQP8t2?VU% zUio&30w!jq1Ol9zI0YBZJq85w$!gi@NIPv~{SMtWYApKb?NruV)bk!D2m%@b3&O}4 z#v+uKXCRc3foC|y2Mi7GXg3!u_W|Y_M`@agV3T%g!HmW_>;?X*alCI8SsgFBi_1#}cUh-EGu9_ZhQ6*Q*TxsGX8teN-A; zlxsRWuPoJq1pact_B1_HdG#x5kf{k;D8K+Vqwr7LrjS8bUrv)@r_!|AxVE!gWOl#y z+*auce69uAz=1K5Lwl%Sp?a-rH~&%ZSW#yP39T;E69>ZPzB%iiG{M%?@RgCtZ-m=W zw70@{*CN&OAYr{}gwama&jAP+t4t zZ`?!L!zbRVEXDzX@o%i;nBHktCS}FjxkU2C*R%uN<)XX*n#JFTDW(fYo9~oDZORs- z;NB6Io3h~DRC4}_p#ah6z$c4kyN$s#xKc&BRb6K`PzST@`Z& zz=HYwFw?|iocFb?g?)eBi#8T&1i%N)gYAtu5v2Dl;T*gBgY5&=;W!Uv@-)AlkC##Y zuT~S~f4!PKQWZnn|AZ;oDE~)hVcG~Yq2c}uZZViN<&`ObfbwV3l!gBp>i>aTm^AAG zXbeF9%zvrve@_3i{?S|4O|IYn=q=MuWlOgP8ZT>8{O}!ojpUTJ_Pul?Yez)|8oe?H z=kIdz3a%agpO*^5e@#`paT z)=U}oMjR%GMAK_817(5Rd}jLqCW0_KoTpU{HPJ47g67S0&(Lo~&aDjdLmk)>3rm1T=yVF;AMZ1AW@$iCL7 zAmB83iJ?OLlCVVAlXHMUFM9A&Wj;N*A#IE?318qVfGc*e71jFLOmB>c5Inb27NK+|Jc!D+gNE5K-C~YoW zU^cNR;OJ6k43-(11c`p!Af{k1SK+XT^rVr)OM*YbV_34M`$zzCxJC&oALxmdU$WYn z(SM1;2Re2wzZ`6DXD-;WKYK6T>%JtK24;4KMk%U18Fybk+fG3}cI-JbdjuYM-~&A% z_}wGkyYq$#C7Ov=~U5TpJx?^x1r$T)m!VK3fI76vbOVg&|{Xg}n*79(_Rj z0+yeBF7GQn*RN1Hstt#3RyT72^L9&t5L9XGby+#U7kR!{t;*ZiT?$PR=yQL4B-%H6 zJy#s=5As{#`&O$F>vjIr@h~Ar+G%S4G-|)xNj^kSER6v!dg?%QSmd@9`rdXm6A*fv z!aetU!gw?^oFH||1D0(Ki1xQJ4$cj8o*=*XZ05`yyS5=3dUh}MKb|ap*lj&OhTE$G znqb1<_~-~4fL8ZdKLxt}evAp4_*l+eKGiZn2DG^X*?%K&f$`lEd4_mxUn%7TX>afN z4#!O8mzDz>Jx}EWMYBA`o*?)U*XJQ2Rv>L;sQy7*C7MZ|={EZx`zBS#gH;9+pVOBt z$nLvOfzmtg{Tn{2H<&8LScvAkyl6Vj3hRtr6NAGI$ph{>CjLmVUCaZ}w|C7a*8zXE z7|hv|fm>6j7#c6#56SdxG9%VSoZdg2KTr|t{$2o8*ad5NxS^w`Cd+v@0!r);NH@tA zs#<-Dc{*Q6988M3X-9vhkM)|1f4}DT%5NvQ93>4~@qM#mz-Xh5!EZ1``+Au;$5UY+ zPvj}t-bYc*Tog42wos8^&4!VzpeG7fU;Gl}wT@NW)2ViAxYZeF1PK4efO`)oRD~4< ze`G+gIKI73)HUA6mfO{1NW|MadjD{mut%G6xB(YJ5)xici>tXbR`g%be3qyEh4vHuvk9Yoe=Lo|=Xg1)NHweB14oEhSS#Ah;kr6^B19JGlEdm~@ z6HPv+q#_xJA%tHXczX+?I>z##4tk<;r=rwvF*2m$JGSCN7|JsWp}u`Go>H-Z&-#uzy6Rlz*!NFKqn^@G(p61`iq;<@UsIr z`gKm0Vf!mGi<#dsj}DM?ILEv>U>XBs2LzMc%jNLtViuL^36!=&Q4*a-=8A|rG569# zLefev5p-Ck!aWhSS`u!fApC>9_z0G?Xcfw%tmJ?c%!Iyq9K(DISz{e6g?UX+DH-=_WQrx46bHciWo!YeHygGHwLUpCsJ#Vpsp0=vvkS|vEt}Ry3F1?D zCkUkk@h?XwJtSvA)>FztR66kvILm=)vf|Vr;+R9&U&%ri^RgHL4STDEf76qzf<|$h zLGZOwJk{^xODWXPh!60#K;@H|IT8Y9GJ4` zOF7wG3cwi8>Zst;iIRFeOkl!?kd$I62kdDgfJFq|{PvoMs6vqL`8WiUN%v%>NXRxb z)oK+&I2i&x^ZPl8tuB!0B(yYDrsVMyMU+Sr_CsA9RW`(Lxwk9X_I^su*^NJ2&6T?g zt_FFQve&TGM9Qg+bav_KP<#)J zb?>J*<#j>dB5WLg@4wy}fc(5HgA6e0(}qJmR&A{kTEVTg6T-m(cWO|Ku}YZeYC)q6 zd$O3fwnY#O+4h(-t+1AxVNJ(_>n{6t9Zs!!T(}I`@R&2~{RdR+XN3W}rS z>O!_03>O^b<{>y7V@<-A9OVun?>LdN=76~?cK3#6VS3!9df{9MltytTSq|sJ*kegw2tMqoJfEn}^lX1+a$4n;n|800e?P;G+pG4`_wZhP{3-xarcK{Iy73pA$8bp z#f7#3j=J|c%MN^|!TX5sq!*{yiqtO4ge~?tuEcwIVz2SMCDe^{sp@SPB7cz$=qd=<%eM62w#uRwcvWgvM-#5Ohq6JJQK~XSa4&7K zzRhOy;(&MT3aN#7?ahNF;|A)nFgV)1^$%R!{__0JH{eEUIYL zr-H6H_47f>LHdib+akP!I_|Bq1I~_9U}3Cv1Ddv(l5F}NJ9;{=zk9r|ULZ6LHt)oz zZo7J|{?HIwW%e8|%QMCZaO`+?$B=BUzLqRbNfM79;HQaqucCNUsNEtEU0Ix72|1EF zI_+HaE+Q?>W|TI0T7~sb(RM? zCeo{`V}HviwH1kQ>m*yc?~Ram2J-c$_Hjf}3*CQ71$YXDNqW$rs3M(n(=E~8a z<&%f3oL#!tkPp?yA=TJk>i!0I!z>phF-Crg9jSJ~wQ#Q%IS%xH8WGlurLhW6jnXZa zR|r=}mP(JTY0=?QFZ1ifGR0TgtyZQp2ocbR;`p?z zW=5}oeL3ED*j?E&Gt!;N3@?Z?M`$rOjB|@8@)#0W7yo#(0hDbDe7BQK%@bRzr3yDZ z+!H&Rr4DofVagRQi@#G!GVAkfVvOaON6~Mq?q`$79WxNoT-#{~OQj3BVdyh?))U%~ z62Db{rS|iD!dE>-e>ZCxlP&AWiIIBhe1iylB*K<%h4H?jC5$so>8jggWok_5H6|EkrXGzRHvB@5~5 zsFzf6G$0HC4PqGdT36r5sUug0=!@(Mc15$ir#uU@A2AxlZ-D zrEj)>;3&IiL^L-$HV0EGaTTm+OE;fab52Z6 zjh;0SZOf#}Vy<%od8U;yLJ~TGI|4PD(`yi+snr}GKf0*1@kK~Q(ao7lh+l#pB7zP# zE+OmcjLR!|5eZkb(pE6{1j?HH1ylcfCxnhHrk+gjT%ecsq?n?UH<3)mGXd<=VXM|&?P*ewFT0))r)hN!&?LZFX$uX|a-yW;MrCDXm&cs% zM47(>w`_f7Z7`YAOkLw1-5wiu4YyBj75qV+CBXp2iTExoWjvOMy)lyN@e^dsJqw6nK zSmD`SXb_#*R@3#Voq!!e4}o}hp4{wYhmtT0S?yp4U0tu)1YO_Ur-_Fc9kcbH8aDdM zS582byrAB`#Rlp>bHHzH<#Ayl&{T_9uUzm}=KRYXP9a2y$D%5agk7=zs%kq}ilVo7 zhpQFIr-#UP(3ZxK>7hSMPVe8&yf^cv2iLDennZncoNgCu2kWjK^>!Nv*34W7E2i-` zL5BcD%igZl*V|UqyS`+q*ch>(lC}@SUWOuU>-?9OMhR7!;S5r)DWF5*O#p!*fdXF8 z08zpR93z;Zw%}sa_Vo%|ZZU^c0-LZ1=L@2t|_LOim={r%91Z<;7-3 zC+_=9QOoHH!etYouy8lz>p$O&oGB(P5WL7+d`^FgTCYU!){8R046xSp`HYVd@XUCg z!QqG)m*MEonc-GtP;+NH{k@%xsC)*t` zzs)_+BB1WhTXN6%pVw-Kgj4L=*bM-@KQy>{X>J$K_m$5Jr$~UuGOpvRbB{@M^944- zYh-=yf-xnU+6U-lZC!wkmGc)hh5XUP17j1L5d^Z`yRJ%Cg=wh;^Jwxmw`TyGIiAcC zDSw2nAQTf!f!9?Ub&oU<1(s}DLNurF=aut@^tLoSaWYlPeU#ma)>VXSL(EEo{a`MQ zACgiIOWwY0QfUey&1p;^9gzus2SGN5=Dlo%i)x6c2AT0C?2NoVK|F;ovXA7ta$@BVv>Ky6kjLu#3Qb zOts9%WtY5lC|nzO8?%i@acjd@9(kPI*;I+OSFsp$x6K|jza}*pt_-{Q@9TA)mi5b( z%JRIwzDK{NYEURkwCL&;Y}rNltf0WmniVeYwD40ZIkH#Gj$>$KGNS;4{tuBk7=ME& z3FTUp{?;ZmC>-DI->IZc#UEU_J8uZP>Mq8@!{K%W@R~ZZBl1YDul>15(r@gPDe;32 zpp68FJnldpX2V^sosPmD;#}*%g?*^$`gol{qiINl_^PjaRw&d?&beL|X=b9H=G84) zHfC-)iq8k#w{>30GuZ_!ZQT{Re6%!bE_omr|5(*y=3Rw+;kcY(zQi~r&eX@&n;iao zxP86BSj4^RSo~hKout3#iNt{M>8Q|xMl@qx<@YOQEM*K}CYg6v{2TO-njRtG^&;+q znp$Ur?;zda*8EKFqVF%d<|zM@5lcamxgJEd7Fn19a&F4BBE<>d^erm7YE5FFFFSV3 zXKHu>n<)ofC)kT{zGKC7Nd)e4)HTz}_|BsVZGXZw)_|@U>v7o#uk{XhsXG zSXqi47DJowkErTxy=cB$v}F~MKj*;hp?|`!=6!v>9MO#|D-?6YU$}|BWRNt3(K_f6 z5P!O7fk6}UC^0AiF6E~sQ>O6~zo1S1{Y7Y29uV?@`Ttp=?w&F&1*BWe_fEns8 z>9Wp@(+5!|kzvJLmv=Y;U7Xuk`@c9R$mK&RrXhQ&H{A(3p5Fr-bQJ>m&BxrvV)^Im z9KcQ;VwrUmmfB9bEOP=&P};ny)H>w5rdap{JRc1nMGT|>9Q4F8y6Ot}ZFy*wKj>lP zm@$;`_PvI3r?L?opIclyDQ&)t2eT)hG&L;y7YWv6z`@dWsb(HdPs7s(8si59?nmm$ zC7ISS{4gy>Y>i6xE?8!3!~2ewGrAQN9Z3-h_gmPoKfM6JC~qs zAz4U(?b{!Fu9;1pvq^0{GIFAuprB5nvYc@zdX2?-o^&G40j9W%Qi!Fr02HdE9eyIJ z4c2QHxTQFl8wnoDykZhmh1C(dqy9`OfntQ<22iang8^MUoj%hl_y6Md;p?G^19fvv z=_eRqBz|91r*fs8X0m3;9HUXMtuN4m=&IGA97(R=ENVr>P)gB>D)pc;K|A10e1ark@gsX)9P{i$gD?|3cXcMdc>_ajhpo3x^l19#iZ(d6ZHrmlYh%b=IyLcMXbzrq%veyc1fQN zT~22$;?7h(z|buvQyc>mEp;mttxb4t+C0?>-FyjsrZt)(I3;TG_;*j5oM%3@s$<6i z!%*tmL%1!kD-?Av&oFg28|i<`NL^fRqSR9M-e$u~?LC{YR`zA>tW+ch#zpZx)ARP3 zzcVN0a48557~@+8YzwKPx5hi&2ssgx?+P<7JY+*q(ZrsmPLIm4$gfS>`_ zzE@9(AXZ?2#vwSx=``$Rv>Iv$lz#1RT+B~TTp$YjOb5JF{*&WnJiTm&RHNb^P85U& zDKjQ(62SYbUXzOWklVS&mAFhuB&jj0LwsX zP>JYKDK*vW%3Mxihcu4>1nf20Z1s487lOM_Io=PutR}jr{h1uCv3_K%Zjw&uo=|h6 ziF*YG3_RIEK(o-g3uc+=El1f8HM^jyIS|IG8|8B?(L_ZjIl- z8F;+H7A#JTUXXb_twkV_wpcqOe^{*YqhiYWTG)lY(Fi_Ra02)8?D~!}TD$Ap=&B7A zZ+i^mm9cbTne0eSpMq$zkaHeG$cFO&EPO(ZoF$;4uVM54l5JW&4PS!JBK(}h+>2~C z(K>`!_yMy3+aieq97>)gtTwt_R>G;e*@<%tqUuh?+I>bcu)<YnAO zKb&@Nk3F=DYKXPOW0|^1+D2+c0e@k)&^9%g8On17BH)`epKyIlJ$Bl*b zQrL2ma}OKik)HozdcGwtqBSML@806bY|@TutE8$9D`pDJlF(B~9 z9+St)DYb75!>;x#3=RR**9+Y-q=JUSBnOU%RKRbd@KE8{yNuFlyeGp2weXZNXf~$X zCRj5PRkw!*HOFT|v)n#=4X}jb;G{NXor{KV~B1 z0R2X(-j<%sqSvt(q-v%?HGlJ&P7;cmJi?}*1$#3A=_!Nxsa8M#1tjx~Xid2`xWBUGztR>nXXH6?d3yhb)hEp@a7(ywj~OF+E9=B$FZXJCUg%8 z`~;3Iq8?Me0z$`^HyZWV3rBj!X0G;W*}gb0ZV2CU{+l=Rpv?+P8zrz-I)wVA`kEf! z2P1#>TWC&;I=5Evz49o_`T#$udFZHlS!+*4HFlj%_uvs4w-%z;R}V!ZFIBg;T>E|A zYt2h@HA03PVOA_&-DzAy&^#a}y=iVk(A1p&L^$K}Ub3To$lP)G6mzAXJYHzLJ`6Gu zX*s0e3&5KIV15q9J*BQG3PxZ{B`<|aU;`8Jy0WyTA!s5%-pknaO`$Z^MZaRzq8*aq zus$_w@g7oP!q>)j-5rRc8-w2JU}k~OkpzNX*?DX2>T^!Fvzls#{~t8P`nn+_4-A8l z%(QeIJ(pZv3NXC~PUjp71)gAhxk2PIpD^@-0Q+NzpKOXnrdxUJ6AzKIqi8(vpFcRp z$p!&H$xMU*MQ7OP6QnZ54unyiouh%u-ltRR7slPX0OE0z-KcFxvGKnKI`yhfO%o?V z3|pNJoNap1f0&&{p2DTWi9^ex&s{dH$Cfb|s`<)=)`LkH990!tn?whX zEH4djHZ?Q3y~zkWCYj^)ar~2q5Dk))9sC*CZ&Gss7k>N8A9?V!4jO2F2`zCW~EO`|>Dl^efitEIv< zXStgMa|{AdB(mzXC2OCK27*hz$Wmd7n-TI(YnE*&C?ZWQ;q#uuFXynLOK-< zmO9T`Y$n=f?{b#*#yxgPMsDj;{5#>OF3y>*{-8?FkImI;a?vm#d29&PO?JCV=?8)G zMcZ12-4@Z-U^nq3t6K*9k<(2&NC>RXu*$h$GfV<*<^xnMiz>xa6Z@*kd6%Y>)C0^5 z^Ztz9EP!~mMX41JLwPFqIAcnJ_pPUCX0XcoZ5|&Vb4A*x@3r-?R*IF&PNI%9`Bg>l z*cuFu3(J=zb|F=FBJI-1c5G=jX$?3O`((=R-DRZUyWNNnT**$B>kuq*yd|dP#uyzE zOXC7m_{#pu=z|^7BVsQo5L%@=hK#s0ypX1kSf^cSVYS(fRT5U`=m=rBomT&JlcmKA z76_)yXKz#VO+ek`&5076yYNP8)gR+u;(h}8j3TJltWp_k^@zrRbs|DCdr2A~IWgFk zXIzt96XOs&MM)4;jq4hkaPDqeo&e`G9as8k&{`AM5X&}$3 zyCv^2loa$m7%CxW?qV>lSB9v)ls#tY%~iY@Kg600e~o2nXGoJVI;MfiCLRC5OEG0W znG9iW@kaqzcpUx&c5YRPI9sa;QTqjDDUnV+fmu>f&36>T!uZTcdidmNWPJBR%c=yx zQvinoYv&9ugZo2it~obBiDlw1z2nzJ*|fM^cPVGw(T0vHZl#G!^8WorjhtzLGuIRw z43q8v5JGB~oa+ zc`vTCX|iRX@fJ0L8y0I2RoUBJ6oM>S z!E57gdT2H7j6OXqgsyr-ZP;`NV{tI?>t<+i)cV%Oz3PAu7dmrV0Q;J)J>+T_0ddy= zO$Y0Fdo>ZSiy(eYN=5K3SiN(xv0Re|I@8)ASGs3TxD8%s}I-5*l z58)?xdv|>;lP{a6^+$e^V?k5A^4(8q(ULcN zs+obs0X#AM?{WV3_P@B)v2|S^Mg6!koHMRO%|dx!-CAT2av}TK(hM0+2kYzqG>{q( z#fC?sO!jMk{keDhDj_5U1OK@R9Z|l#KeWz2?AH)KI(sUwa#R*dkP!(Q+tG4;b_c@I9W$yQbBfPss`Y5# z8w!-_FOxF!K7YI^0w@#w<((W!GMJEegpwc9IM9qlE|Tjy;JVCd%q&OBgL;6paHC;; zzX%DBkS~_xeeZsOr|UjgKj1=9e9>$dOO(RNN0|XLLx@q@I{H4F_$Wk_T~kWYda#j% zJ}f6W#J5gI+kg#sP}ojBKWb8W$`!+Uhz!BZktrn%8Mgr^1jZ4HG@`K377gx`yWOwV z39&>x?gf^6GCst0&|$K^fM0;7h_sy+EQ`L0z=WMHy!rOr^I3Df>B0aaX$j7`w@oi> z$eanW@FUAYGj=a@%Evsk`W=vwm`iAE=7Jv`Xdw6ccIJcFO;-3~2qtCmG1NdZoP@tD z%C`wSA^pr9RJ`Q)!A^hhO|TUX#RP;m?@UuejrWkG>uT81sCKmGeg0)rTY%UC zsa~+PrAEfUmRXrsYy3@DyLQ#ubY+gH1m)%qzpf+M=#*BxBE84ib9cq~J zdwID^xBO0|v7_h;?12U_tBN3N`?wJa+TAm^AWswXZfkAPSZzhntS*VC#8kFovjTQ6 zW8DgWb;hN?L=27TXD_8~FK^wnq($JfF^|w}ouIp>izX~aw!y*dYol6-_27vipc1`- z8<`RzeVuUzc;!ZV%P)3Imi<@X0Ywn4)aY17z^d0v%wy4Otdjv)YE^4nd`J!1Qj4*z zF3%{PU6zN{+g7tJ8&r`JkQQF7!`sI5S0#HVKhc-vhz^*U|92%g{0{X)1OYv3D^crQ z|CBAL7_XHa*cYE))<2aJd5L}Ru$N;_4G|Ur!dd+;wHWE8!(*9WY0%Ov+q|Jxu1O`# zl~H~*(!U^wTQ~$5cSK*@qRP7AQ=#D;Xh zcH|-L^V<;^og`bp`*<@_bPfkmH+r-RFP|ysi&IWV;t&1lDEIs7L+)#nZ)_ke$ZHx#AWBxw3R9kfZswNdQfpJt-hrm6g4hRcZT zZvt{D$2Ya^;Lbv-yk-ZT?qrA<1lN1Bxhomg^H&vsPwDvGXHVPe7|oxo?a}^M~ z&nupE)G5jGu3!}SNt=nM)I`@}(v;bwt@NwWR%)a;_gaBN1k1jVe`BfZO)12|lTuE1 z+DYkGq}NB=QQa+-{|Tb1dUymf^(FB#d*s#eD+McFb$0})*I1xH5Du_#*YwwbU#0f_ zp0|_+2#PyiNp9i{9p+{i8ER{Hdd0SrCDg0VCLEgowE&!X&mWa48OZGJ+N~9p7;%Fm zg5++MPW1ReigvXx?MC-3^N17_19*0H5P)XweCYxxUl)4H-CM(0UX8yHXI-Ktf-)Ut& zp)cH%W$Wg|H>JHF;jp=rWK}!utR;^NDAv#a5~p>K}Jkh0~3Eftkj&{-Vo zGo;51C>)lJ=%akgR9(Otf>LLI$tcS5Kx$oiM=Ru}VL&0Xbitm$Q0zvz!M?NdCul|h zVj^;d@^1`T6AyF%{zYi}E^nO_l<%TP$4S~d^_%&DHT!JyMH;KEHoo2rc*+72x;CxWJ`0iCLDLT7MC}QV zg9ghL)-UW0!pkdxNYsgVW-{RwHa9dtq9=Uoq|HUYcfN;iV0g||kO+CiPU-aJoh!=;)&wc=2M2qv*BNFRyiN#DW|RukHbB^9E~@Ha#YGR z8sD1C(OxP4J%9pAc5TMU2{im##6+~>6%Z%pXLuj2bYMI>m~1%BOK$hJI=er4b{_>x z%QckDAikCEZ%uz}l=9m(C)uQ~M^S?|t!-gatxamHY|&wrB&lTZp_vWP07+;kB6$O= zZ&juBBlJ!A;LAk18_iDI*aA-Y_3Tw$nHAB8rBtoHRqZKB)^;vL(#T*`Mor^$!!B)o z$gx@``;GCf2)WXGadx>?l8?)xJ!rJXpj7~EazBU7H*^2zFma-bJ-h=lf6Fe-r7nxr zkhAPMv#cB=pM?PU3M4zg!);V0q>d3Lu2}4> z&rVTn?T1^yWR5=-AhDKOfCHy{&laq5?@!s%=NhYH@wB41mo*ve0>LF(zO%!YSMXw; zVW^*cfeoB$RJT~aXIl#D(i3-{5m>1YePigZ?eg}`xtvaiEcON5b9D-7|Fm*g{pl)|OE(jZO&KqE7UclGCdUrIf#+nBo-o;pU} zJFV0{_8N7>?=4%x9@TdcY4j_=PrZY?)n8=6J`8w_>S0GoICI31-%?bR!d4Y~e}Vx4 zyg@{kQIxrVGPx|fs$^;w6~DNB0f`K-JTa-IsOmg9vWEPHR$HUH=B1}ISf?{m=T2~d zJgV!lkE9PYnv!@IEN3mzh|Sm=WU8E_!Tvb;$Y7>|q5Z#KApiHTlSZtJV(^F`oW<6hc|7~>TbKW)+AX&##K z#{i5U+zg3NG`Y5_^+7TBu!{VtXO4eLwjAj6xaM#lU=VA~o^kSB6N?x^|DwO2F0hWU z5FIdKq}Mj_o)I}Vtz+nhG!Nle+EUKA2;{gV;BT1Ob27mak<7G5bp3;vV69hxB_hGK3SVg_mU_H{N4 ze?z{RVxYsg@x`=;Zrq7y+Y8_ZVwHUvGh#l@O$ArMXPkL4i@cgRVQTd^snbwO%?7a6 zq@CdNAnzL||7*G4Mkjz6ZPVi+M*(x&QT0YI23zAy$7Xy)Zu!hkz$U}SoyzQ2{cS4o zi`q7#YcVcw9=4cS4IEf9>U-=koqyvm!esl(b3lG>}C^V`qmOA zE&+T^FTP&{@s;1BuNSXRWkAa^hZj&_O5@q2)`er?k1k7+Ub*R(`);6^U!Af#MRkf3 zPL)&s)S!M*swP*SCb_QpBbuqj`622kvo&VlVk6LAulZ8Ya-%IwJ9Li4Q+S0*!^p6z zkI))YLg1*?5wZm0%e1Nw!Q~65x=*X2#ujpTNn*&D48uUuJ#SO7yJrTkN71Z?(}`#8 zXic=t+Ue7yYBzm`mqS&t@k6a;WKUIu8c*b3%8q4?`btBVOn<6}FGCB?PvMY}44EdHVEi5}L$z7pODf)+Ovu8t3wf z_eb@!29+jn=|rT>r>G?L-+v(8CE_icwuL6rq0zy`U8{g=d$>S}D_C+2ZwzvS{3cL? zg*f~&Q_Rs|vorM{vmt}a^KbzM%YHx{BdsAa=1K};L&}ixm74lm4PEKp+(M2R0i3pG_Wpm*v$j87> z$vmCRg*%w`i=`H^apLhQ2^p||P;}`KyWd!`yv57r{EDtFeA+oyiiSpT&1^@Um&ma* z{6^Br4nlgXl7oe|gMZxRwryuzqFU!#J3c9V(cZYMV7iwP--hp_Im9QK|VJ)zipZjDFblPJFFti3lNTv3qtdq(d~l5QX3D-ppFkN2%s#o>}T~I3n{2T zL96F&0!8G+>JaSo!1BEqC`vChIv`P{Q(=x=d0&W`P84u?K zqdH)!6_v%mj0Tg~m~KnmJZx+!gF}IK^?ZaC9cRb5_{ds!>wpn5eTYKL7nS`-g^|Yu zS4m@Av!E*!V`5Smd zaBt76IBw_G`M~%aSS;wTVpen0f0)3U8(0o7y%pf$4J;pk08?}cLz`7o?*NyBHivH% zNuuZf`WvhFvN=F{Z13l%q*#=64) zM44^jh02a$9#n_hA@E%x3|^^&1z%H(n=B>PR7YqwXQ+-jc}`kKu-s;Y4%5P>L?k_p zIJaSx*!3D9W1X;0Q$gYwN@CR2UWjWcimseL>>ih%Py4B+YTfkbs(uj*k=d)v`ga)P z41)PJBM}9~lP1m1LOb{bQ|v-@KoMRX2?4SC7RHZz^^-4QoPS`7CmbD88o7peqnh{%QU=9lZ6v)ow_ML z6CnTnw~~&y#WFlMk~Tx|xfO)pAlu5X!XOVZyBZa|IOxh3E~tCd7b^o&_+yHBF9TA< z6Z632;b&B9ex?Mdf2h`CObNgLp?+Y@&NCa5BA!yrr+w#~QOuVahz$K@?Ndo;4T0;X zP`hBr4|0UX@Ru#S(KXS7mkygltAT~k)ch(S1^86tEU6e$9P9Y@q7@u8#vE84OEUVTZ~(4KnnTv_gz*qT;*Bo}j3U zjFh4BN~M%ryW}?*DmkGDlb6RPs^5AJb&LvRjCZFUQvGf3^~CO{0HQy@ax$eZne_jP!IcYkORGIo z`@J8)kv>^AYeb3Sld}Mm^n^A75xf`00S=1BtqOu3D+Ba?fF%PZ2WCIO8Uj|+UZyIs z2L!Wv>7JL6gP^={G)+Tf5<vaJ5O-E? z!o3Z9XXUguSQZme=kIy=ptUm`r4}6`F&bx+Na49?-0WoRED7Qp3UZgk;F(<%&cLqC z|KI@BH7j}{g(72O8Q6DSJOHa-q;a?4iqJyZBRiV8+B4KpnixaG<)lP5OI>vakp-_O zS4meO0m~o9YqS9T-&G8Vt9pgsbqg`g2e&9 zj8QNE-+C!Dw;C+3_U#%SjI=J$rejA5Aie0kz!=U6XV>;`P0N@!ajbB^AEdpIB#FFu zhG`lC?-*)Ju2>i?SHK@nutK0oK;kI|uC z%|R^Imv_!LWm78K2Ufi|Z8~rD#^rpo0MLK&Ro(Ii%Xf?mY{+A;YV^?sW|)1PrR$V| zBa~>MRuLrq&wFMZMCU11FR%i?fhSL}v0#CWK(A+5O3*N1?lUYEyO0Mb>`ZKA78A{T zJMVfT;pj_$=VM+`+B-C1|L9>D^)?wv_h6|OJ3RW3QY@4j{q#6k7Vz~Mc90Qk8fi1R zaJNdukY*l^$J;w{mP3QWN&adoI2$4tFB<}$;76&vtFItRbwubK3h?3uRtb!K7AW`% z%LZx&ba{nkKqxQkE9O-PRhU0o)dp6+!UlmAI{}&AVEN&P_WL>cA3NGl?!AESZ?Hk2 z*}&&FSb8K@q7gO1HKyi((p$Z$Ii~h~P_XJx!wqouon^xPMEG&ExL=U-nyIsT( z8=R|T>6~Es3>U1cN?Ux#U&m&1`}m*_`7rQN*>)kDzJ_tNj5$4_Sm1 zyXlY5Kydq$bo(T^o40BCdjW?iv4Yn|rF^Xb7ua^s@f=3PYzZ`#|;U z1Dzu%jTWMwb> zmX`L>Js0|B*e>>O8v182vy0k9($CJ zG%iqU%8Y2%N4TWi=1S2b;obXPnp`hB%CuF!=V!yDRko6dZ)b3AQ0}t;MzSiEg5}=Z zIvmMWZrz;RiS>^Dm5gy`L6j|4jSh_9wX6&Knd|vLCCpLFAFZLKR9wV;@uUf$r;i)cv{>F-uJptc4ul=}7 z*gh@BilQM`Tz|G=(g`?aXTTXQwEmpP9RQY~4ek z+~3bU{aLdCv#_N|TQPY8EL7^>=6-=tZ1>#*a<`FPw120~;r3r%X8cU4v}L5ADSt*Fi~@c-KvUkZd3k9~VH|N8c3=J@Zv zt$7#@5AuKPpDByhKb?s|KqzN`*N|`m0Lq#FZIS<5`!6m9tUWg*{-fpla9^*P$t_4) zG<2q3a)=9KQlgI?l8l@`zX+3)lR$wYfs8McuW$FL`-8+t?C+6Kq~8RK6?C4TomHHj zfh+cWJZ?CSwifa6_zTm!*h6!X>*>_U(mM(>Rxy)))zvV#d}~R&0szKI#fLnV&9>sP z*9lR5I_rk-J8VHGFO`{n?Ol;lu762qa=-Q2pI;U%XTo`~Gq*T-kmwy9lFBc^@+gL2 zwXA~UAv~<0R~`$%XX>r&n6jARvhF#Cf}5&DGr0+2Kiol#ZpPa8wSQiP644KEzU+x< z4kDib00bn-#l239fGnQkX8Ec7$-j zr#j_urMj*8Sc9D>OM=j*_-CvjO3GZ0aQZqjcq{R;<#s@fxE?1AgkTO4k839)M^=2> zH)Dz1ipJME1LSnGIjfi;FM9Nzo+MByF`O9US+D9>+sCX302_!u|0lN=*n*{9u#oc; z@T^1_xGv_gqvenWljDI6mb#WV>Ayk(zL9@fw+T)mnsMVR$KQUp6-p5DGe9Nk@i$s% z7NJoP=wtrh`3{m}&Way(`)C`weX4jIP}DlF3G!)WKk-0oz{g?ErqD42)wuHkKm3K= zcX%cKqzFhN0)k7BDhvWU4p|uBMW>NO(sI(!SaApyx7|meeq9&d-c0hd#*Xg#QnO1r za{CBzZs*92jnx6nqN$4bxPwZAPgnV~6+D43KVU6E=i2rkzxi!$!KMUF_d9->WpHO|EiyQ(Y_PAlj%IZTIz!Jb7 zSa|j95BP63z>Y5${go~(KusmNwQ!}oQ?E@*aFYMm&Mu2|cfd4+EuBE2blOfs)X>d`6DNyufZ9oLISb*8gsLmIm2hq^ zIP5Qkj@j4naUbqH{@}Xb`%f@fp~9U7@_)0j0XO)setm11v7OYhurPI8DYjr5@yBW= zsR+@n{`b`^CpcQXVn44ZBj!x9Efwlw$Krd>!H#em6!{RXObsdY9TsXRj#y3!v(u&c zlQ5Q{Q_|A({PVWVmicz)M~rU|GE+Fd?DY3gx-Q=BB#%K?C+mWH-|urTz5fjfUTf_( z0Kk9u3p^j;S+?H=hrc6SmF+)gn~pTgJ2uBsDjVrefH(W0a~u5oZtVz)CQ$T_2jOZJ zs#8ir1To?!q|PNK`&OaVb^qznA&j&%$B)w5x`LG~R>u}NW^Xtgt`A_mR@b?FoK98n z(r9^`iEB3FMqk47)sbkGZPL0i3ef3513WBAdtiS6?n9ut4}e@X`~H+_Ocy(;Jf9e! zU_@aGFucPCIh{t&wFGan7tVD9eU02d_>ubCVKP65b%L>A!hZyUb0aM05WEnoUOcqJ z&sfRAc=br^ko5ukv2J+t^8(-RrnpXYsDC~8qm09oO+=*u!M4Y(KP#Jcgcr#809nw} zaGN;FM4JT*ROmI9?O+BF^9Qj%3c-I2{2FO(Yb<`qnf=N-Lzy@_026`50%cX@IC&I8 z>?nou7SAEP$Z|l5>qP0pbS4pV#~#;WH(Fp(iug2LI3e=qWu@${=K-^Yq37RVgRd97 zN(_#8@tDmHk_Cgxxy}KFajt#u2DtyB@v6$7hu^-;j3Dp?KNh|U>%GkR*2{bx1Qjz+ zl8*ee~IEHznmAjK=Mc{R??y}+`XbAuIN2k+ozWhcaBj;KGGpm)>ncrWC_2+ru ztuvM>gVD>|+Zh{!V{`+ z_8}a9p3P$fClaf&qXz!y^S9g;I@CW^UIFT83!Y%AB#c;O>#SA|^e7C}Fo)FGn8@xs zzk;QIVSq-wxsF8Ifre+4p#YK~*b^ypFEjNvnRUISZJWK%R}dyZ60DL_9&0&rH*T)~ zG&71q*0{!m(?;D_k_9K)+p7KbaS542!4!WJQ)kQBp@`0Ft$d;DPL&uF5XK?l}d zBF!o14x{7>I*x20=xi|HMi?M!7PChB_Pg2C{=#c>$SUKf{kcY92NWPC)kNX;S>6rf z*-*r!qsHI59S!?u%dNXZt=Rw*U=n_Z_Mj=L{jh^%Vp^)n27Du=1~cR@7(S={9gk8e zAJ0dRI|`5otH|40vS}f2&d`8@nHRkqAsiIkplr1Hf}LVjjbgQwC)78P=e}*9#{R2mAqb*tK zP7XuPq**((qHU$W&Q!Fv88!m{=I8&C!0%KDp5tZyQ@ck6`yK#4a!4}?4V)8J*oLep zQQ~vFVgfFX^5(=mSOsxR;)#cnjU-SuF+1_&-yEl{==(C~Ilsb)PLLg;SXAI6+#cV% z52F?PZ8cxh_r>xOUUOJL3HcStHHXWjEvB#bBC#3Yk=bDG)+f`P$^|e>?ua2jSG5C-XqeE7{U`23{Crx}5m;XC8RkG;z&IEAT!3A*`Esr@QdeJNcndx@o zqdL#XirkQK-~Y1OZ#Tt9)nUV#*6!F8f@)m8&u~#Y5Op+=8{o4F=I--OKM+#$h-RRD z3FPr{Wq(FBmw*38u|c{stfiyC#9h#Wh?{0h9SK7R$Eu6XDS+ELERoziD1@v~hD;ut?K0owO;pcfdzyL6+YGNi zqS9*P9_t{ZL$`7=))HHrd36lfS{av}fd(=|BxQZ_gvNrz&Snee{=5W)Q?F1lra2Ys z&<#cWIj>R8QSf>-6E1~rc}%AZk!0}u5lB=!>Hz%V;RDdo;)lk#aT>5h=!4T0(`V{t zd?xktZ-C9g+LLtl{ew7FQ=wpU+Ei(^8*JtU2VNgG8!DJwA;mZ~&TVa2c9=A5frI&P zSA=ACG-`Z@_s+T3FR;BBCNurGnRY%PzWk4+JP2YN@N#1Yj z>2p_8u|KvBTTMejK0{Q+SkU3j@#FU;v1;#wk1SmpGU#JWcC+n)7O>yW3SrB{8?Y{t zAu9xFPWTj4jiibl`ac4I4OwODUmWJVPDb2<`FV>pe2x@cM{ReW66B;rW(A>&FOO%Qt3c_YQTXR zZpI;qtKif(-{;G~;s<`bWE{SJyxuSXjD`Rmp3ZtF%hZFSg!H^C#ii`i<*>~!INELp z#i0Jz1U5@LzRU;IzdDat&)tbZW`MSx0wSqd#c2^2$sAx&>|x$oX0k70h-EMYJQ~vdyHQ5U+4(|x!5($^W`GLd2U8Bg zVy5HHnFL4mD4zWQPMQktM)7Ocm1#80EGO=old@C`UYdj}+1NF2H7=Ag5hpqfk;F;5HFOC$sT_%Ba@*+I-OR@9M=P&-2W22}e>Eo=xKFC{JN!z9Owg3hQ(=>uhK^PAGu ztX>#@)HhNx1P%{SC;N@i_K%B2FZDJwZN$XCuE4aaU_5PKVx3*3TmhX`ICu*~5$v3W zCbq@R7`ny*R5=EZ)i1>p{|ycLeiT&PfBvyFAZ-iKk-~z-nO#?Xq$3lUw|g!h;rogMRTh|@ zw&_a*HO=z(A6iExHp%Ts2J0yM+^$U(ZL!Jqb>cC@c0X?|F0dXzLaX=ek@Bt5`K>ER ztFCy(lp|Xb7gKGDF|es&VjiaM5(>58z!B@`$VBbHXjjr`>i{16*Q|8JmIDEvHjjwr zKg@WqkSI%7(lm6TfBiDfQP;`?33acz%o@}Zd~UpI;|t)U2?HRW{m?tARyiQ!#?O>= zq?-jG1?)G(2Y6?AOXNi{#zzU2Hr&?9CX6}ru)%qDr+9^3CR{&90?cyaw zaMsd|L-@%RD*=otgQk^!>Ez&k`{s!d^QjZ$y(?1EV~{vMTLkxAGsWQEHeOsZF8WtF z{?U?hH{-_@=eLdMMnX3iwm}_&Y@pT8XV{IQ{N$1oQ!}?5oX&x>I8j~%EX|-ZYYYl6 zhaiJG&gey70&22}k4TM#Hp;mJk~s3aMnlM?bPN0p2LO7u8~_~1RA_wrJ+}0RFLvHj z1zO_04GmdQ-|5N#$kV__U*jf2q1lz@u>am^GO&aD*;M?V$$wvJGmT7J)TH%%Wq zzai5ekr?||+0vnGg|KV!4OZPLrJ@I|iit>!cGtlMs^d7?PG`eLZHm^<0r2iwHUd8( zo3;dQH^2|s4t0mN#H;b+hzX-9SyOaq8g*(vxt!fU&Uo)!a*asyXrE1sp0)o(iO-SL z30F?P)SiVfK0na|FozSyd8>$Qi<`U&XqBbb?4VfAMB9RSGlgx$(k^lex&N369U4y& zLFyveA(iBCdlhz-VKQ;cM2VM&gg$k zrgZCxbJ5lbOrj)ZqdfTtiZlx6f7;NWujceNWz2i8NX9KfJWKe78XOj3+0qNu%csk! zXB0$sn33B{P6rO@HDFT9vvO%W69k5FB@hy0vS-R`Oaq5+^qz47>}_Iyoc1?n^ZFoE zApjD>b-<9{^pTei;7os1_titp-r(X(hxeZ4pXh7<;)uKW83iQ^8l@ItnlX^%6Yhmx zAP#OGNKw=892ip_wzvAg(A{PQo43Qk9R&Zbjx4@Cg9EAs0;9zfcKs*LXD9Bxx#5LQ zqAwC8v}_=O{$$35J^SF@V+6KS*l3GA$^)<@^e#SSW>z|iq;7@Z#Ao$yL6(cljzv!x)Wh!QF*-y2x z;5Y+|C1>B~X^5pUQujV;Sbm0)&UiCY=V^$(c}n*l4*g8K7&2Pb;J61{{JM@K*9s8z z5Z!<}TwdmGSf#?$z)`zcdzyYI9=*}_*S~&Z^KSW_6|2lrE14xWDdTB~)pLKzYx-fT zmB-n)c&mI5j=bw|z;+pVI{y^jbObo?=} z!{%Ndyi@dXOB$3og;h4!T#H~Imw&qOSlp^#Ld$vC(`-pRBCr}ijR0&{6`8kp z)9|Y*SHfp3d4lX%YQE_w+S4*ju~fX`{a(Z8UFh$P`ul#^)4Ai($S8H8$2xoO+l6ka|l*OMoJ+ zWOxXB>8PS=41+!4Tpq&OrD+xmmZmnZ(qI*xHOu|_2Fa@4utGlbYe4{OB$qRPz;ekb zZ`t*k3O8nvMw<5b%}#N%1)I9m>9yFuImFC6DxlWNYG0^->!YCWCzj%tT|GE7F-6jQ zXte~qxiFMXID4XUV8h14>*uD6`#{E}{_{;jThs4N3smj<8T)2~a7Ek7;7q|;a@hxL zrU6A7s9u}wbs?OE%^<+l58c8zA;f4;rn~W2%a6~f&DcSeJ7GXQHUKsSn(ZXkUznl z$TQk(w%@Z>g^K~wwKhwiB@frU^dG;}g&FI`SLyc}Fd1(W;$%Q~mty+Xv^KJ2H_7uJ zGQ#qRJaUj)p}|a`UB!C}f!1FWwj38z-;}X;X^=@u7kF*kEJGLu@XpX{Qa|Kf(4Jn% zA4+#ZL4e&2bJkgtvU+sLnYZMRbd2Qj&-Ha`?y@{tF@-bCP0dc|VP|YC7e<5Ie6O-C z7ef?Unl~x$z9N8d3-s=6v;@X!9o^>LF{-Zl^b_4|0p1obkK~NDU2i4NB;|*PSuL0^ zQX^3Oq3tV{H}UrkU09dG1#yqKDB{-XVKqStzc6|)T715$Sy=A7ZYS2KwtCuSbpBX| zldBWwd%qM?&`PeurSiquzs(3nH-TFhAi-RT*5e!=su5so&kl338|LB3tW<`1a|R>P zrO)#c&=ThmXkn?~%f7@`E@)gEOL4r*x>ab`5?QL0S0=l?*q}a~9`jWAMC{hMGMaFp zaIGnINFaESWlPrue$$BnDyJilGA6Ne@b3Fwk%M)nZO!Q9EK__j4Y&7_qkoRApCR>r z^5|JSHVW7}OkrZZ-3{YAA~}NMSwx;5u@g5Vv{moefEVK5-W%sUEmpKl!>&knMw#5P;t@`$gpH%{haJI zHA3~2hh#V1lZlXnt75TV=CwdfWGk=ST1WK|NDi2G(ZMQrEtHR(7K&VtAQ?2g4c&>0 z;K!^mqjj-A9`S)jscZ`eQ~@hR3}^n@Ni}wP9v9QhQ;Pa%PABee=2&Zb?k;vSH>Jr6 zWMXeK5O{r+0o#`f6YFd2zcr67BX%rIl6Bpyw9*IEMmsC1r*DtOQMy~ec$^_Hz+Qu* z?E$82uCrt@Y87QFCXD^PGh(QW!ty6Rze!_?lYDxY=U*!_lj~Tz+nfrMtp`R^yE!~$ zcjY_7{7vtsvmO=3k;U$x7BvJBvqPf$=)J|VAg-gb$UDqjB4@;o4b~I!n(qWqJMa+) zB2{|$_$0S!v*x1h0F7jP&xwEaKKhnA^#RnP0Pc5V&h=hSVz$+GfQ@Jt8kkDfRo|yb zYp%>|-q=qgF8Zv)mTZ6CbHyo#F3kGQ!Q$kWQnM>PyK;YC>dNg0B!V$b2rdEm$^QKF z8KKe(&=3^ibx@RetDasXCV$QCoQ4k*aZ}!a?eida?h9mJp#vlW8HXN^6TE(42SA=X zb18G{985;WUfl3n+r9N_kE^p0{;7$kG7$!s;c|T{**%P46{SC_KLDs~kj3FR~v`vcI zy^D(pe)QdEkF7h71aU-A$*eya`4`(J?Ija=`c^=Qa80Eh!Yf3sI!5g;jREtv{)n07 z2wFBHEC7k>t>vVxtGFaD111jc8C>H@>PP>;Rx>vNkDtM|ZK1)Szk$xgnVg zy`N3wI1HBF#CY4UJ*YlUW_Nq@H#N`vzjE@dEGrd|wbOBfID*fFiy23=3g;2fC(0hf zEUQVD1g)CJxQtYq2LQ09_SutHR9aPbe(}6ULGg-2D_cDFT#U;Tv-!jQpo>IHA9AP!>_!#y{38s5>@2%tq(zmWrveemtT^;}YM z>0Bs3IcW@`Zph!2(P38?P3rnvB0+76_>U?GKGv%4Bfl2LAJHrEAI0~SOe`T0Ss}*r zT}pik%b`L7ie>(9FUh}Se(a6W}=vSk&LE)Ih2%oGfA z?NH6MR2p9HHq{0y;iS3m9q9?I0YwzlR@s4n+Dd8oGM_Q4@oBk3BzlDj$DBlt4bwHV zWQHm^^2WO63^LV{&(P1q_Vu6p6NhFo<*Z4|!`8rBGyv-V2&yu*wDINeTIW@*)lO`C z1k&9(g~Xjx&g`3TmMLIvBPFtz&Dp3JLxjg(o)Ik4d+H>TPYqPSf9k$u-Yv4Z-8yH+ zQ`B;o*N%olg7cJP8R8ffdpMOSc;@=~*vgeZj0^2B*evpJDC{=0HerBSsGkWFPK{Gz za@Y(o6au(wRFE57*cpj>R9NmC+?q$eM^U-)W1}bOTS1+~Doc;zVi9GBI=-a4llY33 zhb}uy9twkfUYhkniy0e9DqsIZ9#7Ohr%7xG!@Llf*yymzczM#SR09O6E;cd%(ro2f zEn`zW=$j=z^91-0F=~|iGIp%n_`Y;e-A2>axo1DCUhE#*%jN9UIX zm$Z0`sW+N$iW^tcAE0oQD`*-0BD$?9A^=V-y@8lx`Kyz1WRS%JF4SH_Go{K{OgzDD z`8$mC^7b?%3F$1mVX6b)?kE($C>;{U@JpA(Ev;?5Yf5O_*UvnqnUa9F`-|B4^5cW! zmD2wrVh3#*SM7y1;uA0jN(XkUPE=anIn6haq9D?6`J40c_e{Twen8<%?PQhu!~~i3_r` zIv!)>zWUCXq((CSpp`W|?w5mSXkQRZ(U``|yCplCoR`h>_wf+*fo{5Tui|FU=~-2i zin0ESp%@8OdLyubpW6){3tH2Mz_EmxedIMQdL;pNnoGQ8Z`~cQW*4=&!M&{+SZt;%&Pc7wp*XgEZ-BvS2q&@ha&h}!$!q^FZb-2Al5qU zA~WRF#)e1ko5G01$Er_wOYM(zUUrkHj~r&#Q?)?X8v(4+fFlLF_5{vqz>)D@RciGN zG{g~bK4F5>ji>ZrH{^UPQKU+~eB;lEVF_pwfu~5u4h;)?3J35xU6*SW6i9M?G)YFqnF zY{rc4M1flaSl4>mfBg7?G0+@AOhXr%qNAPOTgFOT=wbZ2Ca7`P9Gd@H+18soU4x@~ zf*9_|umT-r=W4epY#?}e!!0$w4(?!;oYEZD+uJ)WZPozC{ft{})2xwgz)VYwik!gA ztjvc)9zQ6*rsz5^O%+NH)Li!{7rGPPYY2-W`gT7b?~#vTiCXM>jbV1h%ynU09gdyK zFTxLXN2|?x``pWE4UmQ96G|KvaVQKnY@^|i7wKF!0omltTpBxXTodz!XUT#YF_vsE zpOyux-DrmF8oA?pKI3w z?yJX(EUnSXcu7)|3zY~s6P#*^sr>l1PtL?*m> z9!CAjgwpsb&=j!$&rcD+hmd zoFnNW6~;6EQ5lDnWE^|PCVVk^sa{Q_YR^OklX5|v&zSlyGqqEzb%h=^zerBmJ_m`C z;u@6c@T-Baup-|CNWwB6;zuwmz;Y3{xikoU4hJ>e6UtqvYjTG z)|b95B5oh3a$=lxO}L*zo%r||H^pc4Yvy=R{Mwp zW3Oi6OOZkn-w4`mEwIciN>-(D@Y4z-?#b<+^ncp>>w@1vb&Ipe52fNmBl%`z;+48MJT??x;t-0(A# zP$#}L*5-GEeTuMVk$sN&`jHX7)=I3jgKXcBiITNnsX#T(bUP&fOK~Nst)R1)c#_U> zX~J@-rlZ=eS(Jt#!QO`*Mg{8_*54+CWy?ChrTBGzv57f!)OyX*(lGP{p1rI?U*U4s z5vN=peP?d^=RS2vb@HOueePyueaBy7gecoi_mby4?h{7@IC4BVA-7UN^WyJXINT(8 zYxFa7;#v-zx6g0gqGa7bA3I{yud!mFKp*cE`)4@wUA zSw8QO&$wsDn)&y$HG;oV8ZuRt6JJ2}F?iT{0~6?qsR+#2W!fO1Ij z2!A;)zZwPpGtCpSw?dGMzDKP8O7h+H(;v@)Avlx} z2_0B~Lus+RA$yYgY3T$`R+54Mejt<>UF$QOVFu3-zzzOD>I9Smq0%Tk4NbtKKqxQV zOQlCzb6aYk}oR^owLIN@v%vG2!s_;9a+3 zw0en6Ud+9Bc+u-ku?IHUUCac)_{;f#Yh1N`Yvg2l4s*Pt$GTe{Xeh8PAGKuoLRkrO zUrLujL>qZeV4RW;lUyRt8zHr{+Zgb#cGw;kH!8)+*iUpqO*CIKa2u+JS!TbB964e8 zA}T2;zps+`k!d+m964Z2N0i0A3Tx?0i3-|e*4rgxiE>{u#)pG<)*nSdVEKiU3Klz?8@4r>rIkwp&oNvU1GBYc!Gc^ z&8fqUBDBTC550LU=7*muT{F5#`n>IU@FnZQjqJUcVjJ3)Ug+wIC~{!&hVW7FC4FW> zc|GKUOHuHqcPs4^8G6c#X7Ky;sM*Is!fc!`mMoORe|==~T%5|<8me_Haazfjr~Dct zIU`hzYK4qCRS^6-JFNdoiLu42XEJb|h*eqWr^OX=qSw3bPx&P`R-hvmf`q2qoG{+1 zt8Y{zOL)Bn9!qu()Gv${O+=;MjveQC&8A+|-eKWpbklL`Now2p6QU29Moc%|LQ@J0 zI9fOs<5)ktLQj~!jPZE)Lu^Dtx*?yoaMM_`kK4&K==K=eKQ1kj>e8^~q&ASltx2{h z+Q0gD`f#cID!h3l;CEkKv1$4$l1$%#a?J5YWVd-f`kPcd+N4@Heg9-OSEQ^&x`xr< z6WQ0Ro<bqZebn4Kh23(0EEt78{v?(;@6KFn5YvW_Xe26^A$ z6il-?9`MBXoM;i&r}A9dw*aRYIm zn)P$yzP^G?R0%EXPSauw=!#=AGn;cJsweY@+3}7CuXs#dQ{>HE9ArZG%QFn2jbexDIx*>bMSz`$H(yx0-CEtawoNcLU?FM2AqKbMJ`i zx>3pxGd$8MQn}TIaykY%-rmMO zie+yj!$0;)gJg^t8Ubz_Y;KzlC9=6b(WFE;4h@cnw`{bS)et-#{{)@$C|@C&&QU;r zEEMuqyy;%Iaoxw6X3*O!*PyYmV|?$V*>_j&D!#p!wQhgSA9;5KDgMc|D$+$ z#nZJRcClsz-3BCYwCVRol$PU6elFXu#i{sv$8r*M>ymWS$8v(F{Q22&A3nB;>AJyH zC}ZDKW11PFy}+}|l>U5II5VR`V8QSf&9Ls`tR>YTCi)vArsTNn*6z7vPAV;}=~Hxa zoKuWU6fNs6ca&wiRvOJ@38rL;k+u}x0G66#Ez(9p^8oJorRD9P?MOd8Uu|#P&1mZH zZJZ8877_dvKmuh!B`aGS&;kGT3{-_%#K_6;^vPSixZ49OjUmYiut>&wtpJ&);rfhA zSg!E2K2{5)4rtugf)m4G zD(_VHnN1(OHdW@Bto9)>edGUFW?|qQk)@yhkJ=AYy{RY|a{xuj}%jiO{F zw`+srtLI2uEx|I{WF@t`V@BOVlJ_>#b0q`9(cWmQ!l40Z>O>{0F4vcam2UA&89(}=Bl)_%|!HuLFN-bx8MbWyVL#k3(s6a zB9HH}6HmTKSbs=>_j$O2Pa|}46At<6m)~R0R1u!X3{P6PXSbt2R9w|rFEK4AJd?xz z4(Z3bxVRv#lqsFLGioZ{&@9rIms#@^y|O0pWQ-}6KVgYKHVZ;uR#;N#rAsu8+@LTU z7om_StH!JTk+13Tm{@iWDUNo*cP--~axjyw3TEJs(w2_8Kz-Xx*f-f9E%k5!)w_yZ zJ&SqdA#q%ZrtjJ=R*>dbOEeL5{(AC+7z|F54a+BUCr&F|bVkh_p7sK0KMc)@nKEz9SVb3(N(eO6LPb`(*)~Sa5jvBnk@4V_ zTX`}(&BdE9a?&4FV-p2uVQ3$2Ecld0>6=a2F5U|zX;`ho&o zCb{e$`tBD?=0gn~Iz_i?W_>^icyV3{Yi;$CVfyN7IM}5v zD-&RPt=OJFy~y1j2A?k?F=4wIAGn?5BqK2svc}9zGGI2@8Y0Z@4YfIdNA38c?R_Bj z*s7c!N3pOh!`OZ_y*2S=_dU^L#kgtB_TY(w+@J1ls0_3TOX2rXcOu%{-KW79Wq+Avylm&g zbJo79@PuBa8OPgn<_-Sw4o>S!+N+IRsuGVXj=9T;!U-QvzPRS}3k^;^_(n%e1W)=A zn%E-`3rpWSa|I-){hKAa9O<^4Ydg30Y8VUgNE3Yhn$^^QT8HtmLb14!gbC)i(!`@GhS_KH645V$QphvYN1Lny~puncAg*zhdSetM(R!YzL4Z--8I6;<>~0iE0m_TL(kU zai(*9zVUm<*O;hqhZEs=zF7E#vzr{6`03De7L$}DAZ?CCH#X0VDpPNWmQs7lx`KH0 ziR74XYH?5Hb5Dc%Tw!KzUmXJKqup0;nqH{0<+I0&S@p7(C)RDZ<6`UQ zbavV`P%w`7bUTx59?ZNWP0wiL-E`aBq>il<;}&CTW3?{(?Z?AeXP>TCU&C&~ zP%ld3fs8sro3KZAlJ2&YWq=R&4 z8Er#oz6q2kdzjuA9%`b2ZAxJu%j^|AOGQC5_4ttc$=(Ay#i?I1eO9#1aa+7W^H`!- z{sr^vFXdrO4bPX@SNWZ5XPlAqO6iK-Z zZh%J1Rv$cS`N(1;psI zL!7eloUF~FUq1cMZ%SP+`(xx}^C_}4zqyuUrXb0>(Pf_4vAo`w9oLq7FlSCQ zo9*LwqeD=IJ5&;TCK3PYPJvXF)pdMF-Ny-fj}|+|o@UW2z||}`d>l!M0?H_;9v(Lg z&hV(2SYk081=>#Y5fX{Rp9%!wUa84Zzy77*Bs?kaBcM@w4QD~2(ax67NTM30>y6Gt z?se5Wp`3AEx9)kSphNg>`r?DHgI}FFOLNcr$BHhDNHQhg z+!whfoFne^_t3&|@u*q>pMvS0N1FVlIvg|HsK$=$rQbM-=oXNy%%x@6PU@;V<{wNt z%{z9Z+sRQ=2r0i@staXU&cQdzHCYtZJzV&8x&iP9ADYPc(&orgj=XT>Yty#2C(-MD zBRp!LL{vN%X^BoT-@67x7EI=j1o?DXr+K`)p%8&IcCrsow~;)mWp#*e6QYifF3t=1 z0-athSA08eMj!a1co69eJ8(ep1lbaHtL0@4|1BQ8H=pwDI}H^mA{*kbC49H)&Wpk- zt}~t+znY@0$w0&DQvX^5b3w{ZnMESux*%_B;*2q^{~E1IJ86uDaDwt$Sqcp*P>F_f zI)8=p$qV&0xPHwu$XaMG&X4y#1_Io&wO7Pv;$+k&?}^cOmd9$StXyxo zpPQ9fUm!Jn(}u4QW%MPU9R|zpq(JNHUI1BtwE62X+ZA>c!y*TFQi-L-kE1u6HM3i7 zMa%v4CWozBb5uUwD_+ea1grQB3Lfa>ikfmU?l!*u>9wCrJD$(%1It=r`MbDDn4fCDa7Rv*s6;&HCms z&BL>ZR5E4ZVW_o^szt2KV+|I?_k~`he!9Pv=YCjJQ;ilv2Y#(vHYE1xwMO>RV)Rl0 z>^T^m@W&wihX~W>Qsk3TdPS$ka+MlS`xC{Ay%LKhXg-=?6($<$U}YE-Xa$Itc=Nwh z;;7eYX&Gs7Z=tZls)4I<)sBS7u)eLb(sMM4T>X-|4F76+FNHc_*=f&On~0Q?&Uag%;iSsezOeyT!agmUn_a~gg;>PuPE8RYKmHOaE%>lOU9#wFXecXl6- z*0SnT%2z5#gB1r$Menxn!-oo{-d4lskR&y1I`2}=*Dg7x{Rr$JjU0GD zo4THfs_gf8&q6`O2yMakAP@gGjQ;T1a^5>NLsbQre#0vM66%e6?n<&royRD|bX~cQ ztEdbLx9$0n5}Y5>(LA5Iq5imyF}70jK2Os-PJ-YPRu*OA;B>r!o28^l9c%o&chz~l ziyIjA;3PD}s#nc*+kU-H+v!D#!5dy-ri*o2Qurz}0Y#D3jzzDE`(?DBPn zosnl|J2btph0C2??fJT?kYUxkO7r`MG;10%`5y(FVqcE@ocA^uUp=bAWn2#5`amLB zTevO-W5*nfT)UYGnX3?sXxy$py(2<1o`qxT;-qra?R)F$X^|H4r=7j9#we}+2y@`I z^z1Wxc*l#0vM)Dg{bwHqH@D{01$KGz*GuV$A+!Eadu~ei{)$fX+`Yr0vSIVCx{`>J zJn_&2nOAeFxmo2mQSKM5X6_dkG%+ZSk7}yRX%+@sc(E;@LsLqtEOc#TKA{F%xT$un z;`B*Kq(*6?`TA}?ykG8nBH(S5q4W-G`hkuchXXuHqB{VN)4B6TT5GqWxZ-=^?OPV* zGV$Ec=B&x?lJwB;64J#4lee@DX=3$|R|Li#-SS5kCfXJm*sF{hM1MbZA2;?Pr!dX7 zbS7hYmcZBx@~5kqHnaDSKB~d#NMJW94jg)owt4yE4F{iOF3q`K4OlLW{3%$oU66p8 zq%4;Nf3_t68@9)Aptm&U$O+@@4tr^cnXM5PqZ6?J{(U)*VX-FJ9i>^SgU4I?qo2{5 z>3aGkmAe4YN!hEBBwn+S-<&-)>QQo6im13~gPpocgGA48o?i-xirCELaDAhSCgIp_ z>t7&{+WSb{)27^sgCU_~Zj{|bS8G4E^lQKryjbEE&Xku7UTeu+0#0*Jo@VAvWBF>2f=hsr%t+K1o?RZ_I3^`$mt2#P6hjwHaV8^-f42 zy8(ZmPgOx)I+}2gMz4|PJ^}EcI{GH}>6aYqQi0$vKLwqMpD=zXHs#JScF0>XOG>h> zo@ZOTJ8<qcwe%#TDiMnv%mAI|HgKWK7_#F^+EC~XTM4CE5QL1 zVk%YsTZt@4@+#UNCvukV-MV2>UV2zuMHcKxdCvQInF!}5*8 ztHq9G-`2;13tV+omP)FK)D%#lXlZlb@5YJ9@i)2(`Y=s(I?vTT-S1&HhJAt@>RbFQ zs-wV1OBF8D;|4Ob?ZK|^ruRzyC(?~q5$fwdt}_=4#fjuyy<*ZLESWK7 z0;jX3NPrHR#WQ64*3}scci5yl(l_8mmM#)JV+*x@9!&i>OtKw6T}L*>yUsOaLfqjM z4%@^m)*d}_L?$_LNn2y75BbW~HK&~H>WM+c-a3_GL%rg9ibqA26rt{BnupgOcWwx3 z*Z-V>~zDLE1nNC z^IolIpa+x7nRyBt5E=vw^Lx`$G6ddLQ@G;4Dj|qF_?k_6;C6rsc8F1Ry0u__B31|7 z30o3cPkbuiEbw9<;0OujFpbId#jAhmLG9{D=x|?r|E}_ib+4~8Yc&b_<3n5V`bxS( zk2@TTN%Bt&-!kx4UMW{h)*j*{aeW;V0XC zjriRn87R3w-gWwYecbEFw7vC!4t=~7UJ=5gWPOm8#THOk#g#IBEy~@a(bNQ!ib&=` z2ZoJi?Jt-)dZ$NzD}Q?HlMmKM!UbC^^Px9B1tASa{av!z5rV3f8#+zeVule;26BC$f|=zAeAUIj-gHYX zOnYz1u9;G;Z_crizD=hvKB57p-7i;?edEQ?3X6aU2h z`4j8zH%YE}u*DBdl?k2cdi+pW;QCW1_O={ME5_ z>YgZJ)h&*(2nXIHn2=0WhQwf{Y&(lSy1(n4RJNKfpQ2wCeVxrvcN%x})T*{-T)@*n zYyTZCjd8FbJ36|RxGM9PA#X-I-cl_J6CYCV>{yrsT8f{av!%+eW5M2oq7~tdQuu?_ z`G=^VKCiM-*&%i7`$sO_58NSg>DCwG_|d}tEEB0%&vdQ^X8CiJix+dz&#>B1H{fW} ze&iq+Qx7_3bG>KSy47G@sV+~X2%`c%zR;ks^Q@gCTUw^;maR%7~fAFdG^2E}oc zrKb7TaxmdNwa`L}xt8nO3gn{P#CY%+eKY2&(I2@XuCt=d$TtKx8Wv`-bF~`>Kj%|0 z?G_d=Fp+0y?Svkf7?TkIZAVy>l3E|hs~&uC+Zl+Id{UMtC8@E)H1)Lo?UCwENPsuF z8Ux-8y24ie>UNUFA(0&X#L4H^y)8r9R}Gag2gi=bxbt#-G0GSgF}H)wm47T+l@-6~ ztlDtCueHyYBAxODEh22dFM>`c{WR!$J^8yC(eErd5%e)d>Rii_?w+_uxf)}Hb&(A# zSj-`vk*&N}t6E%D+~s8U>9_00684Pt<v`rqANlyCexmGJsoL-cpikW>#wjM0K-U(1M%4E}I;%LH?Exp^sz1@3+0 zOxenJsuh6j(Zr61_wB8t}8{venzliXo%>fyQ#v$)7h0AJ(C-XD6zG&`jd+(nTj(@J%b{$r|6^f!_ zVmk56Oe7`MD5H&l17|j{e$J<-A#Uf{ovNyy z!ws&5Op)YK{hJnFhS=;ZwD#Y=F!Je8tu`8VEFB|n)3uC>+tJqU+Wht~>XYa97F?BS z_v<-8>eCDlcZI@&n>(wX_p;&Ig>}!jkv1?|7m!Y~)v6X$otlaJrM90rWhz;w+P$v< zu2;>Gybu3o{nBtvxf_@KTF;l^MN=Q}`%zqvacO*{iwh2-bT`yL$=K=iW;=W?I<%&z zP>$AQf26kBMbMiwBlCvVM2%^G%gago-iB@Sq`;GQ3+}y5nK*5mYa52 zTpht4ljIR3c?#RTmZjnAW|Mo>4+oc?n#wOv99PGGjf`)^R8w^{A6UwiPn)*8-aSAX zp~TTQ4t?iZXM(0$Yu5!XuT}5gmP+~_0IvE0t_)OIO8er4*Ci0VI{_wksn*(|ySF{E2S@%UT}Z2{#A0dkI%PAwDHQ%8ooJGqVzYMW!%2yRcM3+0 zHisJH1V`=U>ooaq&)cX+4$aM2D2pjNWWsiJjexrERAC-JswIVl_IdJ$__Ayn)%%|< z?^r|chJSY3*SUlGC_s5~Wo;u_!1Z8` z+3BBZUb~qJ5GPv^rWR`Z4aXo)c7`5A+1ILN=*j5|X}t}3 z!Se`(A;-*#?QlS*qx3ex!%E9znM(^ZDp}K^s1%5$a=f)rb;d@Vh0Z}K&zCW35#OY~iUxtO69Gj_Pz5+U(fRU>Guqj)W<2RJDSWnm&Ur5; zRtmb7l_K5tL5mey!I!O)Kw_CHeid`lK~;`PWx{ao3V$=7&zCE?GGX#mhhTpyP)vIkMp;el%cv?aefT^~?mVoS61jx`BC4OP|I9C!0)j zHakozkix_~guVZD9>=zBu7*XAARP^giW-vVb>fmdMYJ7VF55>T%i?b~pUTSId+Yjj z6{;)L%jh!vHFTdS^GJ67?x^8yIQd6AKrfHKtiU_eJ@1MqQ&G1*m&2Rv(Bv7X9QMRW zBvTb^u_FeN{9?2(_FANZ{e&jr&qRX{4hWkAoua%VXa@>9zBXuZ52iay*|8VG`0}5< zb@*wF8@j@D6%(q+Ty25x233w8vnF+)Hl4wA+#fpPWV^DUIB&P@Ubw9h4=4X%X_9!m zORe$;ZFt8!`C9rPSM=ogcHKpWG zl$q4|4u*9qT!??*(zTgwzNdqn+vrz;%79h(No=u1K#Bh?5=bsxy@dq(+G;V}3)(=c?L z60TZ>CW~6xsC|~9m$8<_VxVrv53!l1A^W62oa_-68a8v3LC1|V0SQqQ4rSr#BIlm> zB@IhH6v**o_S{j&FZ>4=z z&O#6y*Cs>pwb#kd+^XpP;uX7Y{FrIr_0clj|8Bgx(HFN{`86_nCSebrpPR$9ui-Kz zB6MPqHS*+zX#{t{B)!b%iP(0tgps%o8_Cvc(FD`EH!=^_x#3#YeL;W4(-Uw2= zyH%>QgcT|g-kfy#6+~70jp!5bHZ~+cJuZ~w*FkMquhQ*k6{2ISmcc%A!qr!ecy4f|Ic zh|OsOitMTt#~cCz-=h*SIu)W21FwTP(5rYx+c7j+8Zfu}Pzr9@lJ2&P;#OTQoy%d!xg;QwBE<>#^`R@b%d8fIV|z$AIqfmdb$0$!YN(o*l`b zHwV}F97=281f!@^+0i8dQh4o4;Yav#ckfhmex&+TbR)XrwyI3;XOjI8T?>!RZ5Gnc z4O?kLJ&t}j0QZK^DcYrx=(X88l<;hT0W6VVJcyH6B$ycDq#p?;g*d@RhFwFP7$L*d z5hvNmFg?V{Ph^n~=j)Z&_1#|!d19IjM zub-V!C>S5AFa*MP$;ejMnG`<|gMQ(UleO-f`=BF4kbnJ|7(F*|uO9}igK$JfPtai$ z$mQq&5*Ca;j`jo#P{Dv|yO<$9>z{ z$NFElcQUg?ia{0bSP%%?CAXgvB2)l@C`gz<8fX&X%v%i5nU`eetThZ66@rS52~uy; zol`Y1VU!5>fNqZW4WLr#esD^2N%u6zIdqT$3Cj7eOB98B>bv0Ha^=(z2-vv4kF1~{ z2Ipct>fl;V3@8jAVVn{Q8dtOU&B6j4a4r(0_CksR9|k4|^x|@Kr?%(#awv=l;cO>{ zMqm^v1QKifud}z^&!O7p|HD}>o1etVln@AZGz7x`+f@iyvAPjwVhq4FA0&LhUFyOk zMPxrE3~2}?!wl)4CezKiz{ers0cMyN_<*K@&^KT*BtX|L>#zTMhL=S+Pf0@rAH{$` z>goS2gq~Hv8Ve?aK;3g4;+DXHKv=-*h4YfHDEsFjzTZW{0@ktqD?BVPvB_6}JJ>L0 zKo%Q@kI*9eDwU@fwDpt%0^z!(#hl^{DuHN}B5Y7LjPYF7hyfYrIoKu$4lWMJxxshF zp$BMjVVD3fFET!GN^}viMx~=s4KW1r#q(@y!9Pb*$Dj}&*q~q={XVjS zqHg^qbb1p;XYOYE|dFt@+(j(8WYM&g04Zh8I1qVz;20;It0O%VFb zIp;aM2_cY>NC-scxAn7P;(Pv=kR(2g0f865JqWO&fj}bt{`J=>?=Sotd>B03GJ=_C8R|NL&KEw^73%J>Fs3)xZ=Uc5H^1d-fi*#+hhj3 z7gD$+j<)-cIL3eCKr#J=G|`x|PylGSA8b+iOVVpU|B;qevG#PZ^ZZZ8|L!g+hGwYV zg5Bj6yniz=jSAc$2P+y;R$wqR2=7bVZa1}o-XDS9D_^pI1iOsKkoRy#D8j7k=wY;5cDqr-1PIZe@2{t2}z)!-~;Kh7lk##f%BOb zw8Q~gx-3K|_?Hj{5sV7q*(fF&>3y(S7a9I7igK~P@QHXR1PIR%)t^WNMw+GYo6n5s za}X?SVvr@Q_M3$PKT^cTKX9)$>aOLAeao&?m#21^h*xC54e9B#zG{q92~IH~}Rx7#AXi3idRCRbV^qfLF%l%CvlZ2IT@8$zUw! z(UE})p2nS1?QerQ{XM|W&MqxZg0l||aKa{XDZ1CGXLu!qt(DuM(Qe?7aYFy^RkQNu z3?&FaDK3WL&tfzh(qOt&!Ku_`w>nGCpqxN*1PUeaiR_|sSnPTa+rdhZr~6m6f7LmD zn&M)T@{0ltqo@UlrG)VVT9g-ksI90&EFY)<85}4s_xZg&XHX491W$W@-FN}IC4>9# zrQrPW48;YoQ^8mf(1sdeb~o^W%{~adJSg~sJ?mKnsZ=mZL}KfyK#z=P&#AYnP_Pk+ z1!$;Y)X2(f=VT{paH{T_2lg%zC>(%)5Gn!ijT&rge(|*g)7dXZgdxQl1K-JEI%mbOUR->|XVll`XH-_;g#ZRNaPPki;Io0O_M7J{L+}S81HzSB+PA@wFu@_= za!6hdXHaE?u}^2RDz4|UH0&@A1XYtAr0)CtreXo9>=*q@x6tZjHh6U+;s0BW*#77E zQ(X+wKbcK)K@-0X;*Y>-*=0BA9|A+1U@*5hVAKeYV~s`j^T1IVau3|<`ge<+&EEDS z&!PPs7tPD6Qp4;521gDCce#&1%Q%B_0mnWVxQG-XR0p{|JuwD5&{OJvRZr)fp;qA$ftSvHrijr4*e(&+|sk1!l;v{9JbRF$UfrTOAZ~!vUZINwDfKPx2OP&hh^Ms)3y{ivaWOQWQ6YWjRHw{~L?haaod;w!44<=H zc`jzy`_U}PGGO{Gz~;JqGvNH`96H7WV?Zc4Ia5G3dro~=d2x9lSk}BCi*@OomCbu` zd)kaE*69Q`tAWYCfr5SSEH6wIA2#cv@^0E+68%)4@QST zU28@MZ#E4k#2!UoYt!WZ)rOc787`vE4v#{y*ribP;&K!7eLCSWFV@tj1o z)9`IQI4tYe{d@1r5cEgtyz}ZkQ>K`5LBRErVsKC*E z%=76eLP}iaP3sg`b;$((O1ZTDEk*MZlsdb6Lr4+x8fji{;k!@o(m~$F&F~^ z8zrV=DG0Vo9XLzAT-QEZf3RpkqZo_|A@FBA_J3~;Nq_w961YP<(Vu(izqZr-=V?PJ z3cx1^P9Of;U-Nvbm@f{t?I-rXSR3LOSIeJmM*bZLp}d#z=zs+a6dkaVxEN^ve82+& zk-gL}&glFldG<*U0Q{r}F=D7kROO$~di>iCw+#Q41V8j~{w%6M5{$vZ>N5ZQe%-(# zwP+ITMkB!?|8mxk>@MR`0Sl>%ZvD@9F8&o#aQjyX{PM;5Ly7NFpc7xc{^f)3W)mU8 z1D^^(3BXy^e@9kOO~7B^Kp!X;uts{3z(4PC|2taPgq#U61BcQV-4c}yXxBUUoN6U= zadG;eQTp zYxiR|LuohzqOu$~1RMwm3}CA%cRS{O17qpCP7-fYSgVGLA+`GPWVBE{5N4^4B3@Zck!!9v_SO zqaiPkbF-ZsyV|*hgoJ|KoDVnK`i*Cn(a$KS+>9ll*ec{+v+Ho>3uOx?N85{eW2(lSILGVT?b@8BgqvDrleG+Nz)~$tW&8lHrkGk^?U=j zH&qlu^Eh~Q0%^^|m}@4_CG(RQ!UeJV8h{iG5YnpgO}K2Dd)0WuXiSI8X&USyL9`A0+` zKTgMY9oJD1(Gr*qZ%@Em(h1R0Sk*-I`aQY#Ey z>D}evSL$%+KV|~F4Kt?B2WZ1jBuNwdsNCU#P*JqZVRX1Z5y022!ePNXD`{jjrWmTj zVdPM@$2S4iFoO1WKWjic61W*#3Z^7-n4CF|7Pm9taG(2~ziLK~Eb}ZXxnE?_AX+tf zuFQ-cV&`eR?>Qt`s+kmY`=iOrGXHd}WwdSZ#vqNK^dTOo%=NJrZ86r4^-1R(=_N?x z)KT(;gVtmeiF_UVD>OGJKsGiu6;n>=4^R1C_X{0UC7fNw^#UL_?|Tw>pRD93&$OGL zr@y2Cw;~#wf@ZiOWv^2q&;(YKMZ+f`ja6aDWM1L0+&?|yTHeYKt)^C|YVVS@?~&{% zm#d!j>9mi*ICbBH>f#fubX!e$8)K`3jJ9aGwSCsuHlh(Du)fgzz^G~orLa)?Bh(1@ zq`5~^OB0}h*$qe=SrO+rg^cXe;#r07_{**dB*<*0(NxLEXsxT`^y0AU%g}a=>eDW~LlKRcX#~t2pYcEb$aeEtYvH4A7y0N% zxi?v)Y48rIO%Uj*6LM4WyOR?-I{c&l%`a53Ah>Pc)365eVN)%iXrg>OHhR{xjXzcV z_F*z|+bHqONuF=?R+rH2Am9OVop_s%xF{f|)TZwfA+oVS@ko=v6Ys(kNe=W3^Stl|A-o9(Y;L%Zk-eN?x!SnNa#+t9< zkBKJD)=TNzBwG*EzsyWGfk;omWpm2i+O{NlF9H|}HT~5}{@q?2wqCFEfGkeSWxHv% zxbSK-+p_Anim`B3+`EwoQcV+h^;=F!V?AK)(Pq}#8%3g(o;T}`c>k6PQp};S&h

*Y{|4?7krV~^bGETQC{|+4GB?#7 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%0AP0Ofrr<~;Nmy6FqHM$wRk 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

* Please don't use this method for finding an editor for quick fix. - * @see {@link com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement} + * @see com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement * * @param element target element * @return editor that works with a given element if the one is found; {@code null} otherwise @@ -221,17 +217,15 @@ public class PsiUtilBase extends PsiUtilCore implements PsiEditorUtil { } } } - if (SwingUtilities.isEventDispatchThread()) { - // We assume that data context from focus-based retrieval should success if performed from EDT. - AsyncResult asyncResult = DataManager.getInstance().getDataContextFromFocus(); - if (asyncResult.isDone()) { - Editor editor = CommonDataKeys.EDITOR.getData(asyncResult.getResult()); - if (editor != null) { - Document cachedDocument = PsiDocumentManager.getInstance(project).getCachedDocument(psiFile); - // Ensure that target editor is found by checking its document against the one from given PSI element. - if (cachedDocument == editor.getDocument()) { - return editor; - } + // We assume that data context from focus-based retrieval should success if performed from EDT. + AsyncResult asyncResult = DataManager.getInstance().getDataContextFromFocus(); + if (asyncResult.isDone()) { + Editor editor = CommonDataKeys.EDITOR.getData(asyncResult.getResult()); + if (editor != null) { + Document cachedDocument = PsiDocumentManager.getInstance(project).getCachedDocument(psiFile); + // Ensure that target editor is found by checking its document against the one from given PSI element. + if (cachedDocument == editor.getDocument()) { + return editor; } } } From 258afb3833b7e591dd8c23b46950804692e66523 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 28 Jun 2017 18:07:05 +0300 Subject: [PATCH 26/93] notnull --- java/java-impl/src/com/intellij/slicer/SliceLeafAnalyzer.java | 1 + .../src/com/intellij/slicer/SliceNullnessAnalyzer.java | 1 + .../service/project/manage/ExternalProjectsState.java | 1 + .../intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java | 1 + .../intellij/execution/console/ConsoleHistoryController.java | 1 + platform/lang-impl/src/com/intellij/mock/MockFileManager.java | 1 + .../com/intellij/util/containers/ConcurrentWeakFactoryMap.java | 3 +++ .../editor/ResourceBundlePropertiesUpdateManager.java | 1 + 8 files changed, 10 insertions(+) diff --git a/java/java-impl/src/com/intellij/slicer/SliceLeafAnalyzer.java b/java/java-impl/src/com/intellij/slicer/SliceLeafAnalyzer.java index 38370ba676f9..519661672530 100644 --- a/java/java-impl/src/com/intellij/slicer/SliceLeafAnalyzer.java +++ b/java/java-impl/src/com/intellij/slicer/SliceLeafAnalyzer.java @@ -172,6 +172,7 @@ public class SliceLeafAnalyzer { public static Map> createMap() { return new FactoryMap>() { + @NotNull @Override protected Map> createMap() { return ContainerUtil.newConcurrentMap(ContainerUtil.identityStrategy()); diff --git a/java/java-impl/src/com/intellij/slicer/SliceNullnessAnalyzer.java b/java/java-impl/src/com/intellij/slicer/SliceNullnessAnalyzer.java index cd9e1535f00e..e0a6856c972b 100644 --- a/java/java-impl/src/com/intellij/slicer/SliceNullnessAnalyzer.java +++ b/java/java-impl/src/com/intellij/slicer/SliceNullnessAnalyzer.java @@ -137,6 +137,7 @@ public class SliceNullnessAnalyzer { return new NullAnalysisResult(); } + @NotNull @Override protected Map createMap() { return ContainerUtil.newIdentityTroveMap(); diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsState.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsState.java index c1ef849a637e..867f93f6c67a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsState.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsState.java @@ -64,6 +64,7 @@ public class ExternalProjectsState { return new TaskActivationState(); } + @NotNull @Override protected Map createMap() { return new LinkedHashMap<>(); diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java index 0b1d597c67a8..d4e1ac91aa26 100644 --- a/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java +++ b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java @@ -49,6 +49,7 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager { private final Map myDefaultResolveScopesCache = new FactoryMap() { + @NotNull @Override protected Map createMap() { return ContainerUtil.createConcurrentWeakKeySoftValueMap(); 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 90ada3845f1c..750c51f9d1df 100644 --- a/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java +++ b/platform/lang-impl/src/com/intellij/execution/console/ConsoleHistoryController.java @@ -82,6 +82,7 @@ public class ConsoleHistoryController { /** @noinspection MismatchedQueryAndUpdateOfCollection*/ private final static FactoryMap ourModels = new FactoryMap() { + @NotNull @Override protected Map createMap() { return ContainerUtil.createConcurrentWeakValueMap(); diff --git a/platform/lang-impl/src/com/intellij/mock/MockFileManager.java b/platform/lang-impl/src/com/intellij/mock/MockFileManager.java index 04848c280611..f293f7d2f160 100644 --- a/platform/lang-impl/src/com/intellij/mock/MockFileManager.java +++ b/platform/lang-impl/src/com/intellij/mock/MockFileManager.java @@ -39,6 +39,7 @@ public class MockFileManager implements FileManager { // in mock tests it's LightVirtualFile, they're only alive when they're referenced, // and there can not be several instances representing the same file private final FactoryMap myViewProviders = new ConcurrentWeakFactoryMap() { + @NotNull @Override protected Map createMap() { return ContainerUtil.createConcurrentWeakKeyWeakValueMap(); diff --git a/platform/util/src/com/intellij/util/containers/ConcurrentWeakFactoryMap.java b/platform/util/src/com/intellij/util/containers/ConcurrentWeakFactoryMap.java index c360763401c5..b5bb50b037a5 100644 --- a/platform/util/src/com/intellij/util/containers/ConcurrentWeakFactoryMap.java +++ b/platform/util/src/com/intellij/util/containers/ConcurrentWeakFactoryMap.java @@ -16,6 +16,8 @@ package com.intellij.util.containers; +import org.jetbrains.annotations.NotNull; + import java.util.Map; /** @@ -23,6 +25,7 @@ import java.util.Map; */ public abstract class ConcurrentWeakFactoryMap extends FactoryMap{ + @NotNull @Override protected Map createMap() { return ContainerUtil.createConcurrentWeakMap(); diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertiesUpdateManager.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertiesUpdateManager.java index 45e1aec1018a..5b260a45b273 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertiesUpdateManager.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertiesUpdateManager.java @@ -234,6 +234,7 @@ public class ResourceBundlePropertiesUpdateManager { myKeys = new ArrayList<>(properties.size()); myKeyIndices = new FactoryMap() { + @NotNull @Override protected Map createMap() { return new THashMap<>(properties.size()); From 8037bdbfd1d7be4b39deedc322f710c6bbf3f637 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 29 Jun 2017 15:50:42 +0300 Subject: [PATCH 27/93] annotate method if asked even it's (implicitly) inferred as NotNull --- .../codeInspection/AnnotateMethodFix.java | 7 ++- .../intellij/codeInsight/AnnotationUtil.java | 56 +++++++++++-------- .../afterOverriddenWithInferred.java | 18 ++++++ .../beforeOverriddenWithInferred.java | 17 ++++++ .../daemon/quickFix/AnnotateMethodTest.java | 13 +++++ 5 files changed, 86 insertions(+), 25 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenWithInferred.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenWithInferred.java diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java b/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java index dff4e5d182a8..f035b07a2317 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java @@ -68,7 +68,8 @@ public class AnnotateMethodFix implements LocalQuickFix { List superMethodSignatures = method.findSuperMethodSignaturesIncludingStatic(true); for (MethodSignatureBackedByPsiMethod superMethodSignature : superMethodSignatures) { PsiMethod superMethod = superMethodSignature.getMethod(); - if (!AnnotationUtil.isAnnotated(superMethod, myAnnotation, false, false) && superMethod.getManager().isInProject(superMethod)) { + if (!AnnotationUtil.isAnnotated(superMethod, myAnnotation, false, false, true, null) && + superMethod.getManager().isInProject(superMethod)) { int ret = shouldAnnotateBaseMethod(method, superMethod, project); if (ret != 0 && ret != 1) return; if (ret == 0) { @@ -79,7 +80,9 @@ public class AnnotateMethodFix implements LocalQuickFix { if (annotateOverriddenMethods()) { PsiMethod[] methods = OverridingMethodsSearch.search(method).toArray(PsiMethod.EMPTY_ARRAY); for (PsiMethod psiMethod : methods) { - if (AnnotationUtil.isAnnotatingApplicable(psiMethod, myAnnotation) && !AnnotationUtil.isAnnotated(psiMethod, myAnnotation, false, false) && psiMethod.getManager().isInProject(psiMethod)) { + if (AnnotationUtil.isAnnotatingApplicable(psiMethod, myAnnotation) && + !AnnotationUtil.isAnnotated(psiMethod, myAnnotation, false, false, true, null) && + psiMethod.getManager().isInProject(psiMethod)) { toAnnotate.add(psiMethod); } } diff --git a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java index d84ff358f983..c95290a2d1e7 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java @@ -86,13 +86,10 @@ public class AnnotationUtil { } private static PsiAnnotation findOwnAnnotation(final PsiModifierListOwner listOwner, Collection annotationNames) { - ConcurrentFactoryMap, PsiAnnotation> map = CachedValuesManager.getCachedValue( + Map, PsiAnnotation> map = CachedValuesManager.getCachedValue( listOwner, () -> { - ConcurrentFactoryMap, PsiAnnotation> value = new ConcurrentFactoryMap, PsiAnnotation>() { - @Nullable - @Override - protected PsiAnnotation create(Collection annotationNames1) { + Map, PsiAnnotation> value = ConcurrentFactoryMap.createConcurrentMap(annotationNames1-> { final PsiModifierList list = listOwner.getModifierList(); if (list == null) return null; for (PsiAnnotation annotation : list.getAnnotations()) { @@ -102,20 +99,17 @@ public class AnnotationUtil { } return null; } - }; + ); return CachedValueProvider.Result.create(value, PsiModificationTracker.MODIFICATION_COUNT); }); return map.get(annotationNames); } private static PsiAnnotation findNonCodeAnnotation(final PsiModifierListOwner listOwner, Collection annotationNames) { - ConcurrentFactoryMap, PsiAnnotation> map = CachedValuesManager.getCachedValue( + Map, PsiAnnotation> map = CachedValuesManager.getCachedValue( listOwner, () -> { - ConcurrentFactoryMap, PsiAnnotation> value = new ConcurrentFactoryMap, PsiAnnotation>() { - @Nullable - @Override - protected PsiAnnotation create(Collection annotationNames1) { + Map, PsiAnnotation> value = ConcurrentFactoryMap.createConcurrentMap(annotationNames1-> { final Project project = listOwner.getProject(); final ExternalAnnotationsManager annotationsManager = ExternalAnnotationsManager.getInstance(project); for (String annotationName : annotationNames1) { @@ -134,7 +128,7 @@ public class AnnotationUtil { return null; } - }; + ); return CachedValueProvider.Result.create(value, PsiModificationTracker.MODIFICATION_COUNT); }); return map.get(annotationNames); @@ -184,13 +178,11 @@ public class AnnotationUtil { PsiAnnotation directAnnotation = findAnnotation(listOwner, annotationNames); if (directAnnotation != null) return directAnnotation; - ConcurrentFactoryMap, PsiAnnotation> map = CachedValuesManager.getCachedValue( + Map, PsiAnnotation> map = CachedValuesManager.getCachedValue( listOwner, () -> { - ConcurrentFactoryMap, PsiAnnotation> value = new ConcurrentFactoryMap, PsiAnnotation>() { - @Nullable - @Override - protected PsiAnnotation create(Set annotationNames1) { + Map, PsiAnnotation> value = ConcurrentFactoryMap.createConcurrentMap(annotationNames1-> + { for (PsiModifierListOwner superOwner : getSuperAnnotationOwners(listOwner)) { PsiAnnotation annotation = findAnnotation(superOwner, annotationNames1); if (annotation != null) { @@ -199,7 +191,7 @@ public class AnnotationUtil { } return null; } - }; + ); return CachedValueProvider.Result.create(value, PsiModificationTracker.MODIFICATION_COUNT); }); return map.get(annotationNames); @@ -280,6 +272,15 @@ public class AnnotationUtil { boolean checkHierarchy, boolean skipExternal, @Nullable Set processed) { + return isAnnotated(listOwner, annotationFQN, checkHierarchy, skipExternal, skipExternal, processed); + } + + public static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, + @NotNull String annotationFQN, + boolean checkHierarchy, + boolean skipExternal, + boolean skipInferred, + @Nullable Set processed) { if (!listOwner.isValid()) return false; PsiModifierList modifierList = listOwner.getModifierList(); @@ -289,14 +290,23 @@ public class AnnotationUtil { if (annotation != null) return true; PsiType type = null; - if (listOwner instanceof PsiMethod) type = ((PsiMethod)listOwner).getReturnType(); - else if (listOwner instanceof PsiVariable) type = ((PsiVariable)listOwner).getType(); + if (listOwner instanceof PsiMethod) { + type = ((PsiMethod)listOwner).getReturnType(); + } + else if (listOwner instanceof PsiVariable) { + type = ((PsiVariable)listOwner).getType(); + } if (type != null && type.findAnnotation(annotationFQN) != null) return true; if (!skipExternal) { final Project project = listOwner.getProject(); - if (ExternalAnnotationsManager.getInstance(project).findExternalAnnotation(listOwner, annotationFQN) != null || - InferredAnnotationsManager.getInstance(project).findInferredAnnotation(listOwner, annotationFQN) != null) { + if (ExternalAnnotationsManager.getInstance(project).findExternalAnnotation(listOwner, annotationFQN) != null) { + return true; + } + } + if (!skipInferred) { + final Project project = listOwner.getProject(); + if (InferredAnnotationsManager.getInstance(project).findInferredAnnotation(listOwner, annotationFQN) != null) { return true; } } @@ -536,7 +546,7 @@ public class AnnotationUtil { if (a == null) { return b == null; } - else if (b == null) { + if (b == null) { return false; } final String name = a.getQualifiedName(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenWithInferred.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenWithInferred.java new file mode 100644 index 000000000000..14a463bb4b07 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/afterOverriddenWithInferred.java @@ -0,0 +1,18 @@ +// "Annotate overridden methods as '@NotNull'" "true" + +import org.jetbrains.annotations.NotNull; + +abstract class P2 { + @NotNull + String foo(@NotNull String p) { + return p; + } + + Object o = new P2() { + @NotNull + @Override + String foo(String p) { + return ""; + } + }; +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenWithInferred.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenWithInferred.java new file mode 100644 index 000000000000..343fc019c121 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/annotateMethod/beforeOverriddenWithInferred.java @@ -0,0 +1,17 @@ +// "Annotate overridden methods as '@NotNull'" "true" + +import org.jetbrains.annotations.NotNull; + +abstract class P2 { + @NotNull + String foo(@NotNull String p) { + return p; + } + + Object o = new P2() { + @Override + String foo(String p) { + return ""; + } + }; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/AnnotateMethodTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/AnnotateMethodTest.java index f49118c787f5..9ffde57cf7fe 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/AnnotateMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/quickFix/AnnotateMethodTest.java @@ -67,3 +67,16 @@ public class AnnotateMethodTest extends LightQuickFixTestCase { return LanguageLevel.JDK_1_5; } } +abstract class P2 { + @NotNull + String foo(@NotNull String p) { + return p; + } + + Object o = new P2() { + @Override + String foo(String p) { + return ""; + } + }; +} \ No newline at end of file From 286f4c3115529ec25ebb6dc87b7905e63429440c Mon Sep 17 00:00:00 2001 From: Dmitriy Smirnov Date: Thu, 29 Jun 2017 15:46:09 +0300 Subject: [PATCH 28/93] IDEA-156702 Fixed spelling In the Edit repository URL dialog and corresponding action name --- .../svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties index 832c49f71828..16f2a17ca55f 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnBundle.properties @@ -484,7 +484,7 @@ repository.browser.add.location.title=New Repository Location repository.browser.details.action=Show/Hide Details repository.browser.refresh.action=Refresh selected tree node repository.browser.add.location.menu.item=_Repository Location... -repository.browser.edit.location.menu.item= Edit Location _Url... +repository.browser.edit.location.menu.item= Edit Location _URL... repository.browser.discard.location.action=Discard _Location repository.browser.discard.location.prompt=Would you like to discard the location ''{0}''? repository.browser.discard.location.title=Discard Location @@ -634,7 +634,7 @@ undo.integrate.to.branch=Undo Integrate To Branch... undo.integrate.to.branch.description=Removes changes done in revision from branch undo.integrate.to.branch.dialog.title=Undo Integrate To Branch merge.source.details.title=Merge source details for {0} [{1}] -repository.browser.edit.location.dialog.title= Edit Location Url +repository.browser.edit.location.dialog.title= Edit Location URL loading.default.branches.configuration.text=Loading default branches configuration... loading.data.for.root.text=Loading data for {0} action.Subversion.TogglePropertiesDiff.text=Show properties From fc21032d4a95aee7415edde05eb0a882264e9879 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 29 Jun 2017 16:03:24 +0300 Subject: [PATCH 29/93] IDEA-174145 Cannot navigate via keyboard arrows through folded region --- .../folding/JavaFoldingTest.groovy | 63 ++++---- .../impl/UpdateFoldRegionsOperation.java | 151 ++++++++++++------ .../util/resources/misc/registry.properties | 3 - 3 files changed, 132 insertions(+), 85 deletions(-) diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/folding/JavaFoldingTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/folding/JavaFoldingTest.groovy index c4965f48891d..ce287323f6a5 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/folding/JavaFoldingTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/folding/JavaFoldingTest.groovy @@ -27,10 +27,10 @@ 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.EditorEx +import com.intellij.openapi.editor.ex.FoldingListener import com.intellij.openapi.editor.ex.FoldingModelEx import com.intellij.openapi.editor.impl.FoldingModelImpl import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider -import com.intellij.openapi.util.registry.Registry import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiClass import com.intellij.psi.PsiMethod @@ -841,36 +841,6 @@ class Foo { assertEquals 3, expandedFoldRegionsCount } - public void "test single line closure unfolds when converted to multiline"() { - boolean oldValue = Registry.is("editor.durable.folding.state") - try { - Registry.get("editor.durable.folding.state").setValue(false) - - @Language("JAVA") - def text = """ - class Foo { - void m() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - System.out.println(); - } - }); - } - } - """ - configure text - assert myFixture.editor.foldingModel.getCollapsedRegionAtOffset(text.indexOf("new Runnable")) - myFixture.editor.caretModel.moveToOffset(text.indexOf("System")) - myFixture.performEditorAction(IdeActions.ACTION_EDITOR_ENTER) - myFixture.doHighlighting() - assert myFixture.editor.foldingModel.getCollapsedRegionAtOffset(text.indexOf("new Runnable")) == null - } - finally { - Registry.get("editor.durable.folding.state").setValue(oldValue) - } - } - public void "test folding state is preserved for unchanged text in bulk mode"() { @Language("JAVA") def text = """ @@ -1083,6 +1053,37 @@ class Foo { } } + public void testGroupedFoldingsAreNotUpdatedOnUnrelatedDocumentChange() throws Exception { + configure """\ +class Foo { + void m() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + System.out.println(); + } + }); + } +} +""" + assertTopLevelFoldRegionsState "[FoldRegion +(56:143), placeholder='(Runnable) () → { ', FoldRegion +(164:188), placeholder=' }']" + + (myFixture.editor.foldingModel as FoldingModelEx).addListener(new FoldingListener() { + @Override + void onFoldRegionStateChange(@NotNull FoldRegion region) { + fail "Unexpected fold region change" + } + + @Override + void onFoldProcessingEnd() { + fail "Unexpected fold regions change" + } + }, myFixture.testRootDisposable) + myFixture.editor.caretModel.moveToOffset(myFixture.editor.document.text.indexOf("SwingUtilities")) + myFixture.type(' ') + myFixture.doHighlighting() + } + private void assertTopLevelFoldRegionsState(String expectedState) { assertEquals(expectedState, myFixture.editor.foldingModel.toString()) } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java index 8ffd4276239e..7b7bc8753c1e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java @@ -29,8 +29,8 @@ import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.registry.Registry; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.SmartPointerManager; @@ -62,6 +62,7 @@ class UpdateFoldRegionsOperation implements Runnable { private final ApplyDefaultStateMode myApplyDefaultState; private final FoldingMap myElementsToFoldMap = new FoldingMap(); private final Set myRegionInfos = new LinkedHashSet<>(); + private final MultiMap myGroupedRegionInfos = new MultiMap<>(); private final boolean myKeepCollapsedRegions; private final boolean myForInjected; @@ -81,6 +82,8 @@ class UpdateFoldRegionsOperation implements Runnable { for (FoldingUpdate.RegionInfo regionInfo : elementsToFold) { myElementsToFoldMap.putValue(regionInfo.element, regionInfo); myRegionInfos.add(regionInfo); + FoldingGroup group = regionInfo.descriptor.getGroup(); + if (group != null) myGroupedRegionInfos.putValue(group, regionInfo); } } @@ -192,62 +195,60 @@ class UpdateFoldRegionsOperation implements Runnable { @NotNull FoldingModelEx foldingModel, @NotNull Map rangeToExpandStatusMap) { List toRemove = new ArrayList<>(); - InjectedLanguageManager injectedManager = InjectedLanguageManager.getInstance(myProject); + Ref infoRef = Ref.create(); + Set processedGroups = new HashSet<>(); + List matchedInfos = new ArrayList<>(); for (FoldRegion region : foldingModel.getAllFoldRegions()) { - boolean forceKeepRegion = myKeepCollapsedRegions && region.isValid() && !region.isExpanded() && - !regionOrGroupCanBeRemovedWhenCollapsed(region); - Boolean storedCollapsedByDefault = region.getUserData(COLLAPSED_BY_DEFAULT); - PsiElement element = info.getPsiElement(region); - if (element != null) { - PsiFile containingFile = element.getContainingFile(); - boolean isInjected = injectedManager.isInjectedFragment(containingFile); - if (isInjected != myForInjected) continue; + FoldingGroup group = region.getGroup(); + if (group != null && !processedGroups.add(group)) continue; + + List regionsToProcess = group == null ? Collections.singletonList(region) : foldingModel.getGroupedRegions(group); + matchedInfos.clear(); + boolean shouldRemove = false; + for (FoldRegion regionToProcess : regionsToProcess) { + if (shouldRemoveRegion(regionToProcess, info, rangeToExpandStatusMap, infoRef)) { + shouldRemove = true; + } + FoldingUpdate.RegionInfo regionInfo = infoRef.get(); + matchedInfos.add(regionInfo); } - final Collection regionInfos; - if (element != null && !(regionInfos = myElementsToFoldMap.get(element)).isEmpty()) { - boolean matchingDescriptorFound = false; - FoldingUpdate.RegionInfo[] array = regionInfos.toArray(new FoldingUpdate.RegionInfo[regionInfos.size()]); - for (FoldingUpdate.RegionInfo regionInfo : array) { - FoldingDescriptor descriptor = regionInfo.descriptor; - TextRange range = descriptor.getRange(); - if (TextRange.areSegmentsEqual(region, range)) { - matchingDescriptorFound = true; - if (!forceKeepRegion && (!region.isValid() || - region.getGroup() != null || - descriptor.getGroup() != null || - !region.getPlaceholderText().equals(descriptor.getPlaceholderText()) || - range.getLength() < 2) - ) { - rangeToExpandStatusMap.put(range, region.isExpanded()); - toRemove.add(region); - break; - } - else if (storedCollapsedByDefault != null && storedCollapsedByDefault != regionInfo.collapsedByDefault) { - rangeToExpandStatusMap.put(range, !regionInfo.collapsedByDefault); - toRemove.add(region); - break; - } - else { - myElementsToFoldMap.remove(element, regionInfo); - myRegionInfos.remove(regionInfo); - } + if (!shouldRemove && group != null) { + FoldingGroup requestedGroup = null; + for (FoldingUpdate.RegionInfo matchedInfo : matchedInfos) { + if (matchedInfo == null) { + shouldRemove = true; + break; + } + FoldingGroup g = matchedInfo.descriptor.getGroup(); + if (g == null) { + shouldRemove = true; + break; + } + if (requestedGroup == null) { + requestedGroup = g; + } + else if (!requestedGroup.equals(g)) { + shouldRemove = true; + break; } } - if (!matchingDescriptorFound && !forceKeepRegion) { - if (Registry.is("editor.durable.folding.state")) { - for (FoldingUpdate.RegionInfo regionInfo : regionInfos) { - rangeToExpandStatusMap.put(regionInfo.descriptor.getRange(), region.isExpanded()); - } - } - toRemove.add(region); + if (myGroupedRegionInfos.get(requestedGroup).size() != matchedInfos.size()) { + shouldRemove = true; + } + } + if (shouldRemove) { + for (FoldRegion r : regionsToProcess) { + rangeToExpandStatusMap.putIfAbsent(TextRange.create(r), r.isExpanded()); } + toRemove.addAll(regionsToProcess); } - else if (region.isValid() && info.isLightRegion(region)) { - boolean isExpanded = region.isExpanded(); - rangeToExpandStatusMap.put(TextRange.create(region), isExpanded); - } - else if (!forceKeepRegion) { - toRemove.add(region); + else { + for (FoldingUpdate.RegionInfo matchedInfo : matchedInfos) { + if (matchedInfo != null) { + myElementsToFoldMap.remove(matchedInfo.element, matchedInfo); + myRegionInfos.remove(matchedInfo); + } + } } } @@ -257,6 +258,54 @@ class UpdateFoldRegionsOperation implements Runnable { } } + private boolean shouldRemoveRegion(FoldRegion region, EditorFoldingInfo info, + Map rangeToExpandStatusMap, Ref matchingInfo) { + matchingInfo.set(null); + PsiElement element = info.getPsiElement(region); + if (element != null) { + PsiFile containingFile = element.getContainingFile(); + boolean isInjected = InjectedLanguageManager.getInstance(myProject).isInjectedFragment(containingFile); + if (isInjected != myForInjected) return false; + } + boolean forceKeepRegion = myKeepCollapsedRegions && region.isValid() && !region.isExpanded() && + !regionOrGroupCanBeRemovedWhenCollapsed(region); + Boolean storedCollapsedByDefault = region.getUserData(COLLAPSED_BY_DEFAULT); + final Collection regionInfos; + if (element != null && !(regionInfos = myElementsToFoldMap.get(element)).isEmpty()) { + FoldingUpdate.RegionInfo[] array = regionInfos.toArray(new FoldingUpdate.RegionInfo[regionInfos.size()]); + for (FoldingUpdate.RegionInfo regionInfo : array) { + FoldingDescriptor descriptor = regionInfo.descriptor; + TextRange range = descriptor.getRange(); + if (TextRange.areSegmentsEqual(region, range)) { + if (!forceKeepRegion && (!region.isValid() || + !region.getPlaceholderText().equals(descriptor.getPlaceholderText()) || + range.getLength() < 2) + ) { + return true; + } + else if (storedCollapsedByDefault != null && storedCollapsedByDefault != regionInfo.collapsedByDefault) { + rangeToExpandStatusMap.put(range, !regionInfo.collapsedByDefault); + return true; + } + else { + matchingInfo.set(regionInfo); + return false; + } + } + } + if (!forceKeepRegion) { + for (FoldingUpdate.RegionInfo regionInfo : regionInfos) { + rangeToExpandStatusMap.put(regionInfo.descriptor.getRange(), region.isExpanded()); + } + return true; + } + } + else if (!forceKeepRegion && !(region.isValid() && info.isLightRegion(region))) { + return true; + } + return false; + } + private boolean regionOrGroupCanBeRemovedWhenCollapsed(FoldRegion region) { FoldingGroup group = region.getGroup(); List affectedRegions = group != null && myEditor instanceof EditorEx diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index f6b7fbd388a8..4b3ba4d69007 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -178,9 +178,6 @@ editor.smarterSelectionQuoting=true editor.skip.copy.and.cut.for.empty.selection=false editor.distraction.free.mode=false -editor.durable.folding.state=true -editor.durable.folding.state.description=If set, collapsed fold regions will preserve their state after a wider variety of document editing changes - editor.soft.wrap.force.limit=10000 editor.soft.wrap.force.limit.description=If document contains lines longer than this value, soft wraps will be forcibly enabled in editor due to performance reasons From 80ddb4b00886fafc7279f4e55513e4ed28355206 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Thu, 29 Jun 2017 16:06:02 +0300 Subject: [PATCH 30/93] IDEA-175058 IDEA Out Of Memory on click Settings -> Editor -> Color Scheme -> Color Scheme Font -> Use color scheme font instead of *default* It is a local solution for this settings page. The cause is turned on File | Settings | Editor | General | Show virtual space at file bottom --- .../options/editor/fonts/AppEditorFontConfigurable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/application/options/editor/fonts/AppEditorFontConfigurable.java b/platform/lang-impl/src/com/intellij/application/options/editor/fonts/AppEditorFontConfigurable.java index 399cc8f7212f..2ebc48203cde 100644 --- a/platform/lang-impl/src/com/intellij/application/options/editor/fonts/AppEditorFontConfigurable.java +++ b/platform/lang-impl/src/com/intellij/application/options/editor/fonts/AppEditorFontConfigurable.java @@ -21,6 +21,7 @@ import com.intellij.openapi.editor.colors.EditorFontCache; import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.colors.impl.AppEditorFontOptions; import com.intellij.openapi.editor.colors.impl.EditorColorsManagerImpl; +import com.intellij.openapi.options.Configurable.NoScroll; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.util.Disposer; @@ -31,7 +32,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class AppEditorFontConfigurable implements SearchableConfigurable { +public class AppEditorFontConfigurable implements SearchableConfigurable, NoScroll { public static final String ID = "editor.preferences.fonts.default"; private LazyInstance myFontPanelInstance = new LazyInstance() { From ee10d4182540fea83b83b08a13f2e162367d649c Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Thu, 29 Jun 2017 14:01:06 +0300 Subject: [PATCH 31/93] [spring-boot] Endpoints: Beans: live beans graph - Store graph builder in finder recursive panel --- .../com/intellij/ui/FinderRecursivePanel.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java index dd15dd1bd930..e05cb6e9039f 100644 --- a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java +++ b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java @@ -29,6 +29,9 @@ import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.UserDataHolder; +import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.pom.Navigatable; @@ -61,7 +64,7 @@ import java.util.concurrent.atomic.AtomicBoolean; * @param List item type. Must implement {@code equals()/hashCode()} correctly. * @since 13.0 */ -public abstract class FinderRecursivePanel extends OnePixelSplitter implements DataProvider, Disposable { +public abstract class FinderRecursivePanel extends OnePixelSplitter implements DataProvider, UserDataHolder, Disposable { @NotNull private final Project myProject; @@ -101,6 +104,8 @@ public abstract class FinderRecursivePanel extends OnePixelSplitter implement } }; + private final UserDataHolderBase myUserDataHolder = new UserDataHolderBase(); + protected FinderRecursivePanel(@NotNull FinderRecursivePanel parent) { this(parent.getProject(), parent, parent.getGroupId()); } @@ -385,6 +390,17 @@ public abstract class FinderRecursivePanel extends OnePixelSplitter implement return null; } + @Nullable + @Override + public U getUserData(@NotNull Key key) { + return myUserDataHolder.getUserData(key); + } + + @Override + public void putUserData(@NotNull Key key, @Nullable U value) { + myUserDataHolder.putUserData(key, value); + } + @Override public void dispose() { super.dispose(); From ad7527b177d0fdb87e4da60eea85b3e3f9d0b993 Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Thu, 29 Jun 2017 16:49:11 +0300 Subject: [PATCH 32/93] FinderRecursivePanel: disposable right components - Make inheritors' right components disposable where required --- .../src/com/intellij/ui/FinderRecursivePanel.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java index e05cb6e9039f..30e3e2864040 100644 --- a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java +++ b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java @@ -708,4 +708,17 @@ public abstract class FinderRecursivePanel extends OnePixelSplitter implement protected final void customizeCellRenderer(@NotNull JList list, Object value, int index, boolean selected, boolean hasFocus) { } } + + protected static class DisposablePanel extends JPanel implements Disposable { + public DisposablePanel(LayoutManager layout, @Nullable Disposable parent) { + super(layout); + if (parent != null) { + Disposer.register(parent, this); + } + } + + @Override + public void dispose() { + } + } } \ No newline at end of file From 0ebb1660c1b88798f4507c52c715fc4d21cc8c9b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 29 Jun 2017 13:31:40 +0200 Subject: [PATCH 33/93] =?UTF-8?q?External=20project=20storage=20=E2=80=94?= =?UTF-8?q?=20store=20external=20system=20info=20in=20own=20component=20in?= =?UTF-8?q?stead=20of=20module=20options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As result — iml file is not created anymore --- .../src/ModuleStateStorageManager.kt | 7 +- .../src/StateStorageManagerImpl.kt | 2 +- .../ExternalSystemModulePropertyManager.kt | 165 +++++++++++++----- 3 files changed, 122 insertions(+), 52 deletions(-) diff --git a/platform/configuration-store-impl/src/ModuleStateStorageManager.kt b/platform/configuration-store-impl/src/ModuleStateStorageManager.kt index 4ad610170681..ab0ef074018f 100644 --- a/platform/configuration-store-impl/src/ModuleStateStorageManager.kt +++ b/platform/configuration-store-impl/src/ModuleStateStorageManager.kt @@ -25,7 +25,6 @@ import com.intellij.openapi.project.ProjectBundle import com.intellij.openapi.project.isExternalStorageEnabled import com.intellij.openapi.vfs.newvfs.events.VFileEvent import com.intellij.util.LineSeparator -import com.intellij.util.io.systemIndependentPath import com.intellij.util.loadElement import org.jdom.Element import java.io.FileNotFoundException @@ -87,7 +86,7 @@ internal class ModuleStateStorageManager(macroSubstitutor: TrackingPathMacroSubs override fun createFileBasedStorage(path: String, collapsedPath: String, roamingType: RoamingType, rootTagName: String?): StateStorage = ModuleFileStorage(this, Paths.get(path), collapsedPath, rootTagName, roamingType, getMacroSubstitutor(collapsedPath), if (roamingType == RoamingType.DISABLED) null else compoundStreamProvider) - private class ModuleFileStorage(storageManager: StateStorageManagerImpl, + private class ModuleFileStorage(storageManager: ModuleStateStorageManager, file: Path, fileSpec: String, rootElementName: String?, @@ -100,8 +99,8 @@ internal class ModuleStateStorageManager(macroSubstitutor: TrackingPathMacroSubs val virtualFile = virtualFile if (virtualFile == null || !virtualFile.exists()) { // only on first load - if (storageDataRef.get() == null) { - throw FileNotFoundException(ProjectBundle.message("module.file.does.not.exist.error", file.systemIndependentPath)) + if (storageDataRef.get() == null && !storageManager.isExternalSystemStorageEnabled) { + throw FileNotFoundException(ProjectBundle.message("module.file.does.not.exist.error", file.toString())) } else { return null diff --git a/platform/configuration-store-impl/src/StateStorageManagerImpl.kt b/platform/configuration-store-impl/src/StateStorageManagerImpl.kt index 288b7307a6ff..aa1e617e8547 100644 --- a/platform/configuration-store-impl/src/StateStorageManagerImpl.kt +++ b/platform/configuration-store-impl/src/StateStorageManagerImpl.kt @@ -318,7 +318,7 @@ open class StateStorageManagerImpl(private val rootTagName: String, } } - protected open val isExternalSystemStorageEnabled: Boolean + open val isExternalSystemStorageEnabled: Boolean get() = false protected open fun beforeElementSaved(element: Element) { diff --git a/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemModulePropertyManager.kt b/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemModulePropertyManager.kt index 1d530169b7f2..20405cf42062 100644 --- a/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemModulePropertyManager.kt +++ b/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemModulePropertyManager.kt @@ -15,95 +15,166 @@ */ package com.intellij.openapi.externalSystem +import com.intellij.openapi.components.PersistentStateComponent +import com.intellij.openapi.components.State import com.intellij.openapi.externalSystem.model.ProjectSystemId import com.intellij.openapi.externalSystem.model.project.ModuleData import com.intellij.openapi.externalSystem.model.project.ProjectData -import com.intellij.openapi.externalSystem.util.ExternalSystemConstants -import com.intellij.openapi.externalSystem.util.ExternalSystemConstants.EXTERNAL_SYSTEM_ID_KEY import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleServiceManager +import com.intellij.openapi.project.isExternalStorageEnabled import com.intellij.openapi.roots.ExternalProjectSystemRegistry - -private const val EXTERNAL_SYSTEM_MODULE_GROUP_KEY = "external.system.module.group" -private const val LINKED_PROJECT_PATH_KEY = "external.linked.project.path" -private const val LINKED_PROJECT_ID_KEY = "external.linked.project.id" -private const val EXTERNAL_SYSTEM_MODULE_TYPE_KEY = "external.system.module.type" -private const val EXTERNAL_SYSTEM_MODULE_VERSION_KEY = "external.system.module.version" -private const val ROOT_PROJECT_PATH_KEY = "external.root.project.path" +import com.intellij.openapi.roots.ProjectModelElement +import com.intellij.util.xmlb.annotations.Attribute +import com.intellij.util.xmlb.annotations.Transient +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty @Suppress("DEPRECATION") -class ExternalSystemModulePropertyManager(private val module: Module) { +@State(name = "ExternalSystem") +class ExternalSystemModulePropertyManager(module: Module) : PersistentStateComponent, ProjectModelElement { + override fun getExternalSource() = store.externalSystem?.let { ExternalProjectSystemRegistry.getInstance().getSourceById(it) } + + private var store = if (module.project.isExternalStorageEnabled) ExternalOptionStateComponent() else ExternalOptionStateModule(module) + + override fun getState() = store as? ExternalOptionStateComponent + + override fun loadState(state: ExternalOptionStateComponent) { + store = state + } + companion object { @JvmStatic fun getInstance(module: Module) = ModuleServiceManager.getService(module, ExternalSystemModulePropertyManager::class.java)!! } @Suppress("DEPRECATION") - fun getExternalSystemId() = module.getOptionValue(EXTERNAL_SYSTEM_ID_KEY) + fun getExternalSystemId() = store.externalSystem - fun getExternalModuleType() = module.getOptionValue(EXTERNAL_SYSTEM_MODULE_TYPE_KEY) + fun getExternalModuleType() = store.externalSystemModuleType - fun getExternalModuleVersion() = module.getOptionValue(EXTERNAL_SYSTEM_MODULE_VERSION_KEY) + fun getExternalModuleVersion() = store.externalSystemModuleVersion - fun getExternalModuleGroup() = module.getOptionValue(EXTERNAL_SYSTEM_MODULE_GROUP_KEY) + fun getExternalModuleGroup() = store.externalSystemModuleGroup - fun getLinkedProjectId() = module.getOptionValue(LINKED_PROJECT_ID_KEY) + fun getLinkedProjectId() = store.linkedProjectId - fun getRootProjectPath() = module.getOptionValue(ROOT_PROJECT_PATH_KEY) + fun getRootProjectPath() = store.rootProjectPath - fun getLinkedProjectPath() = module.getOptionValue(LINKED_PROJECT_PATH_KEY) + fun getLinkedProjectPath() = store.linkedProjectPath @Suppress("DEPRECATION") - fun isMavenized() = "true" == module.getOptionValue(ExternalProjectSystemRegistry.IS_MAVEN_MODULE_KEY) + fun isMavenized() = store.isMavenized @Suppress("DEPRECATION") fun setMavenized(mavenized: Boolean) { - module.setOption(ExternalProjectSystemRegistry.IS_MAVEN_MODULE_KEY, if (mavenized) "true" else null) - - if (!mavenized) { - return + if (mavenized) { + // clear external system API options + // see com.intellij.openapi.externalSystem.service.project.manage.ModuleDataService#setModuleOptions + unlinkExternalOptions() } - - // clear external system API options - // see com.intellij.openapi.externalSystem.service.project.manage.ModuleDataService#setModuleOptions - module.setOption(EXTERNAL_SYSTEM_ID_KEY, null) - module.setOption(LINKED_PROJECT_PATH_KEY, null) - module.setOption(ROOT_PROJECT_PATH_KEY, null) - module.setOption(EXTERNAL_SYSTEM_MODULE_GROUP_KEY, null) - module.setOption(EXTERNAL_SYSTEM_MODULE_VERSION_KEY, null) + // must be after unlinkExternalOptions + store.isMavenized = mavenized } fun unlinkExternalOptions() { - module.setOption(ExternalSystemConstants.EXTERNAL_SYSTEM_ID_KEY, null) - module.setOption(LINKED_PROJECT_ID_KEY, null) - module.setOption(LINKED_PROJECT_PATH_KEY, null) - module.setOption(ROOT_PROJECT_PATH_KEY, null) - module.setOption(EXTERNAL_SYSTEM_MODULE_GROUP_KEY, null) - module.setOption(EXTERNAL_SYSTEM_MODULE_VERSION_KEY, null) + store.externalSystem = null + store.linkedProjectId = null + store.linkedProjectPath = null + store.rootProjectPath = null + store.externalSystemModuleGroup = null + store.externalSystemModuleVersion = null } fun setExternalOptions(id: ProjectSystemId, moduleData: ModuleData, projectData: ProjectData?) { - module.setOption(ExternalSystemConstants.EXTERNAL_SYSTEM_ID_KEY, id.toString()) - module.setOption(LINKED_PROJECT_ID_KEY, moduleData.id) - module.setOption(LINKED_PROJECT_PATH_KEY, moduleData.linkedExternalProjectPath) - module.setOption(ROOT_PROJECT_PATH_KEY, projectData?.linkedExternalProjectPath ?: "") + // clear maven option, must be first + store.isMavenized = false - module.setOption(EXTERNAL_SYSTEM_MODULE_GROUP_KEY, moduleData.group) - module.setOption(EXTERNAL_SYSTEM_MODULE_VERSION_KEY, moduleData.version) + store.externalSystem = id.toString() + store.linkedProjectId = moduleData.id + store.linkedProjectPath = moduleData.linkedExternalProjectPath + store.rootProjectPath = projectData?.linkedExternalProjectPath ?: "" - // clear maven option - module.setOption(ExternalProjectSystemRegistry.IS_MAVEN_MODULE_KEY, null) + store.externalSystemModuleGroup = moduleData.group + store.externalSystemModuleVersion = moduleData.version } fun setExternalId(id: ProjectSystemId) { - module.setOption(EXTERNAL_SYSTEM_ID_KEY, id.id) + store.externalSystem = id.id } fun setExternalModuleType(type: String?) { - module.setOption(EXTERNAL_SYSTEM_MODULE_TYPE_KEY, type) + store.externalSystemModuleType = type } fun setLinkedProjectId(projectId: String) { - module.setOption(LINKED_PROJECT_ID_KEY, projectId) + store.linkedProjectId = projectId } +} + +private interface ExternalOptionState { + var externalSystem: String? + var externalSystemModuleVersion: String? + + var linkedProjectPath: String? + var linkedProjectId: String? + var rootProjectPath: String? + + var externalSystemModuleGroup: String? + var externalSystemModuleType: String? + + var isMavenized: Boolean +} + +@Suppress("DEPRECATION") +private class ModuleOptionDelegate(private val key: String) : ReadWriteProperty { + override operator fun getValue(thisRef: ExternalOptionStateModule, property: KProperty<*>) = thisRef.module.getOptionValue(key) + + override operator fun setValue(thisRef: ExternalOptionStateModule, property: KProperty<*>, value: String?) { + thisRef.module.setOption(key, value) + } +} + +@Suppress("DEPRECATION") +private class ExternalOptionStateModule(internal val module: Module) : ExternalOptionState { + override var externalSystem by ModuleOptionDelegate(ExternalProjectSystemRegistry.EXTERNAL_SYSTEM_ID_KEY) + override var externalSystemModuleVersion by ModuleOptionDelegate("external.system.module.version") + override var externalSystemModuleGroup by ModuleOptionDelegate("external.system.module.group") + override var externalSystemModuleType by ModuleOptionDelegate("external.system.module.type") + + override var linkedProjectPath by ModuleOptionDelegate("external.linked.project.path") + override var linkedProjectId by ModuleOptionDelegate("external.linked.project.id") + + override var rootProjectPath by ModuleOptionDelegate("external.root.project.path") + + override var isMavenized: Boolean + get() = "true" == module.getOptionValue(ExternalProjectSystemRegistry.IS_MAVEN_MODULE_KEY) + set(value) { + module.setOption(ExternalProjectSystemRegistry.IS_MAVEN_MODULE_KEY, if (value) "true" else null) + } +} + +class ExternalOptionStateComponent : ExternalOptionState { + @get:Attribute + override var externalSystem: String? = null + @get:Attribute + override var externalSystemModuleVersion: String? = null + @get:Attribute + override var externalSystemModuleGroup: String? = null + @get:Attribute + override var externalSystemModuleType: String? = null + + @get:Attribute + override var linkedProjectPath: String? = null + @get:Attribute + override var linkedProjectId: String? = null + @get:Attribute + override var rootProjectPath: String? = null + + @get:Transient + override var isMavenized: Boolean + get() = externalSystem == ExternalProjectSystemRegistry.MAVEN_EXTERNAL_SOURCE_ID + set(value) { + externalSystem = if (value) ExternalProjectSystemRegistry.MAVEN_EXTERNAL_SOURCE_ID else null + } } \ No newline at end of file From 9e6ffb3deceee95f85ac0e1a8263c3ea826e885b Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 29 Jun 2017 14:36:34 +0200 Subject: [PATCH 34/93] cleanup (overrides, comparator) --- .../settings/AbstractExternalProjectSettingsControl.java | 5 ++++- .../settings/AbstractExternalSystemConfigurable.java | 6 +++--- .../src/org/jetbrains/plugins/gradle/GradleManager.java | 6 ++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalProjectSettingsControl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalProjectSettingsControl.java index b87b035e3615..b02342dd32bb 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalProjectSettingsControl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/settings/AbstractExternalProjectSettingsControl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -80,6 +80,7 @@ public abstract class AbstractExternalProjectSettingsControl settings = ContainerUtilRt.newArrayList(s.getLinkedProjectsSettings()); myProjectsList.setVisibleRowCount(Math.max(3, Math.min(5, settings.size()))); - ContainerUtil.sort(settings, - (s1, s2) -> getProjectName(s1.getExternalProjectPath()).compareTo(getProjectName(s2.getExternalProjectPath()))); + ContainerUtil.sort(settings, Comparator.comparing(s2 -> getProjectName(s2.getExternalProjectPath()))); myProjectSettingsControls.clear(); for (ProjectSettings setting : settings) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java index c370f7975290..c4837145aeb0 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -361,9 +361,7 @@ public class GradleManager String projectPath = taskExecutionSettings.getExternalProjectPath(); if (StringUtil.isEmpty(projectPath)) return null; - GradleProjectSettings projectSettings = - - getSettingsProvider().fun(project).getLinkedProjectSettings(projectPath); + GradleProjectSettings projectSettings = getSettingsProvider().fun(project).getLinkedProjectSettings(projectPath); if (projectSettings == null) return null; if (!projectSettings.isResolveModulePerSourceSet()) { From 7323d992e7e8859b6caf06cb257fbbd6b11472da Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 29 Jun 2017 16:07:39 +0200 Subject: [PATCH 35/93] =?UTF-8?q?External=20project=20storage=20=E2=80=94?= =?UTF-8?q?=20store=20external=20system=20info=20in=20own=20component=20in?= =?UTF-8?q?stead=20of=20module=20options=20=E2=80=94=20fix=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/ExternalProjectsManagerImpl.java | 18 ++++++++++++++++++ .../ExternalSystemStorageTest.kt | 19 +++++++++++++------ .../maven/project/MavenProjectsManager.java | 3 +++ 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java index bb768b947438..993995985eb7 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsManagerImpl.java @@ -18,6 +18,7 @@ package com.intellij.openapi.externalSystem.service.project.manage; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.*; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.externalSystem.ExternalSystemManager; import com.intellij.openapi.externalSystem.importing.ImportSpec; import com.intellij.openapi.externalSystem.model.DataNode; @@ -33,8 +34,12 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemUtil; import com.intellij.openapi.externalSystem.view.ExternalProjectsView; import com.intellij.openapi.externalSystem.view.ExternalProjectsViewImpl; import com.intellij.openapi.externalSystem.view.ExternalProjectsViewState; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectFileStoreOptionManager; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.impl.ModuleRootManagerImpl; import com.intellij.openapi.util.Disposer; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; @@ -57,6 +62,8 @@ import static com.intellij.openapi.externalSystem.model.ProjectKeys.TASK; */ @State(name = "ExternalProjectsManager", storages = {@Storage(StoragePathMacros.WORKSPACE_FILE)}) public class ExternalProjectsManagerImpl implements ExternalProjectsManager, PersistentStateComponent, Disposable, ProjectFileStoreOptionManager { + private static final Logger LOG = Logger.getInstance(ExternalProjectsManager.class); + private final AtomicBoolean isInitializationFinished = new AtomicBoolean(); private final AtomicBoolean isInitializationStarted = new AtomicBoolean(); private final CompositeRunnable myPostInitializationActivities = new CompositeRunnable(); @@ -91,6 +98,17 @@ public class ExternalProjectsManagerImpl implements ExternalProjectsManager, Per public void setStoreExternally(boolean value) { myState.storeExternally = value; + // force re-save + try { + for (Module module : ModuleManager.getInstance(myProject).getModules()) { + if (!module.isDisposed()) { + ((ModuleRootManagerImpl)ModuleRootManager.getInstance(module)).stateChanged(); + } + } + } + catch (Exception e) { + LOG.warn(e); + } } @NotNull diff --git a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt index 2c58d5d86f28..b7986315ead1 100644 --- a/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt +++ b/platform/external-system-impl/testSrc/com/intellij/openapi/externalSystem/configurationStore/ExternalSystemStorageTest.kt @@ -16,12 +16,15 @@ package com.intellij.openapi.externalSystem.configurationStore import com.intellij.configurationStore.ESCAPED_MODULE_DIR -import com.intellij.configurationStore.IS_EXTERNAL_STORAGE_ENABLED import com.intellij.configurationStore.createModule import com.intellij.configurationStore.useAndDispose import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsDataStorage +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl +import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.roots.ModuleRootModificationUtil +import com.intellij.openapi.roots.impl.ModuleRootManagerImpl import com.intellij.testFramework.* import com.intellij.testFramework.assertions.Assertions.assertThat import com.intellij.util.io.delete @@ -47,7 +50,7 @@ class ExternalSystemStorageTest { @Suppress("unused") @JvmField @Rule - val ruleChain = RuleChain(tempDirManager, EdtRule(), ActiveStoreRule(projectRule), DisposeModulesRule(projectRule), ExternalStorageRule()) + val ruleChain = RuleChain(tempDirManager, EdtRule(), ActiveStoreRule(projectRule), DisposeModulesRule(projectRule), ExternalStorageRule(projectRule.project)) @Test fun `must be empty if external system storage`() { @@ -74,16 +77,19 @@ class ExternalSystemStorageTest { """) ExternalSystemModulePropertyManager.getInstance(this).setMavenized(true) + // force re-save: this call not in the setMavenized because ExternalSystemModulePropertyManager in the API (since in production we have the only usage, it is ok for now) + (ModuleRootManager.getInstance(this) as ModuleRootManagerImpl).stateChanged() assertThat(cacheDir).doesNotExist() saveStore() assertThat(cacheDir).isDirectory assertThat(moduleFile).isEqualTo(""" - """) + """) assertThat(cacheDir.resolve("test.xml")).isEqualTo(""" + @@ -94,15 +100,16 @@ class ExternalSystemStorageTest { } } -private class ExternalStorageRule : TestRule { +private class ExternalStorageRule(private val project: Project) : TestRule { override fun apply(base: Statement, description: Description): Statement { return statement { + val manager = ExternalProjectsManagerImpl.getInstance(project) try { - IS_EXTERNAL_STORAGE_ENABLED = true + manager.setStoreExternally(true) base.evaluate() } finally { - IS_EXTERNAL_STORAGE_ENABLED = false + manager.setStoreExternally(false) } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index 8a88032f8a5f..2878e629f779 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -40,6 +40,7 @@ import com.intellij.openapi.project.DumbAwareRunnable; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.roots.impl.ModuleRootManagerImpl; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.*; import com.intellij.openapi.util.text.StringUtil; @@ -563,6 +564,8 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent for (Module m : modules) { if (m.isDisposed()) continue; ExternalSystemModulePropertyManager.getInstance(m).setMavenized(mavenized); + // force re-save (since can be stored externally) + ((ModuleRootManagerImpl)ModuleRootManager.getInstance(m)).stateChanged(); } } From a249f6cc6982f02f170b2172dfd0d97777936b0f Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 29 Jun 2017 16:15:45 +0200 Subject: [PATCH 36/93] =?UTF-8?q?External=20project=20storage=20=E2=80=94?= =?UTF-8?q?=20option=20to=20store=20project=20files=20externally=20in=20th?= =?UTF-8?q?e=20project=20wizard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/wizard/GradleModuleBuilder.java | 14 +++++++++++++- ...eaGradleProjectSettingsControlBuilder.java | 19 ++++++++++++++++++- .../settings/GradleProjectSettings.java | 18 +++++++++++++----- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java index 839cfa980e7a..e47f2f58440f 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/wizard/GradleModuleBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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.externalSystem.model.ExternalSystemDataKeys; import com.intellij.openapi.externalSystem.model.project.ProjectData; import com.intellij.openapi.externalSystem.model.project.ProjectId; import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode; +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl; import com.intellij.openapi.externalSystem.service.project.wizard.AbstractExternalModuleBuilder; import com.intellij.openapi.externalSystem.service.project.wizard.ExternalModuleSettingsStep; import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings; @@ -458,4 +459,15 @@ public class GradleModuleBuilder extends AbstractExternalModuleBuilder Date: Thu, 29 Jun 2017 17:18:15 +0300 Subject: [PATCH 37/93] [vcs-log] fix exception when dragging a column out of table bounds When a point is out of table bounds, table model returns -1 instead of the first or the last column index. --- .../src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 9d01acf5f4e8..4ba7961ab4f2 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -987,7 +987,8 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, if (isOnBorder(e) || isOnRootColumn(e)) return; int deltaX = Math.abs(e.getX() - myStartXCoordinate); int deltaY = Math.abs(e.getY() - myStartYCoordinate); - boolean sameColumn = (header.getTable().getColumnModel().getColumn(header.getTable().columnAtPoint(e.getPoint())) == + Point point = new Point(Math.min(Math.max(e.getX(), 0), header.getTable().getWidth() - 1), e.getY()); + boolean sameColumn = (header.getTable().getColumnModel().getColumn(header.getTable().columnAtPoint(point)) == header.getDraggedColumn()); // start dragging only if mouse moved horizontally // or if dragging was already started earlier (it looks weird to stop mid-dragging) From b5048b0d1aef6954d8948d305f0af2a5fec1e4f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Thu, 29 Jun 2017 16:32:50 +0200 Subject: [PATCH 38/93] [devkit] RegistrationCheckerUtil: performance --- .../inspections/RegistrationCheckerUtil.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java index 08435b07cb5b..c7c5d21b696f 100644 --- a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java +++ b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java @@ -16,7 +16,6 @@ package org.jetbrains.idea.devkit.inspections; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.paths.PathReference; import com.intellij.openapi.project.Project; @@ -60,7 +59,7 @@ class RegistrationCheckerUtil { if (PluginModuleType.isOfType(module) || PsiUtil.isPluginModule(module)) { - final Set pluginModuleResults = checkModule(module, psiClass, includeActions, stopOnFirst); + final Set pluginModuleResults = checkModule(module, isIdeaProject, psiClass, includeActions, stopOnFirst); if (!isIdeaProject && pluginModuleResults != null) { return pluginModuleResults; } @@ -69,26 +68,20 @@ class RegistrationCheckerUtil { final List candidateModules = PluginModuleType.getCandidateModules(module); candidateModules.remove(module); // already checked for (Module m : candidateModules) { - Set types = checkModule(m, psiClass, includeActions, stopOnFirst); + Set types = checkModule(m, isIdeaProject, psiClass, includeActions, stopOnFirst); if (types != null) return types; } - // fallback in IJ project: all modules - if (isIdeaProject) { - for (Module m : ModuleManager.getInstance(module.getProject()).getModules()) { - if (candidateModules.contains(m)) continue; - Set types = checkModule(m, psiClass, includeActions, stopOnFirst); - if (types != null) { - return types; - } - } - } return null; } @Nullable - private static Set checkModule(Module module, PsiClass psiClass, boolean includeActions, boolean stopOnFirst) { - List> pluginXmlCandidates = findPluginXmlFilesForModule(module); + private static Set checkModule(Module module, + boolean isIdeaProject, + PsiClass psiClass, + boolean includeActions, + boolean stopOnFirst) { + List> pluginXmlCandidates = findPluginXmlFilesForModule(module, isIdeaProject); if (pluginXmlCandidates.isEmpty()) return null; final String qualifiedName = psiClass.getQualifiedName(); @@ -98,12 +91,12 @@ class RegistrationCheckerUtil { final RegistrationTypeFinder finder = new RegistrationTypeFinder(psiClass, stopOnFirst); - final List candidateXmlFiles = ContainerUtil.map(pluginXmlCandidates, element -> element.getFile()); - for (DomFileElement pluginXml : pluginXmlCandidates) { // "main" plugin.xml if (!processPluginXml(pluginXml, finder, includeActions)) return finder.getTypes(); + if (isIdeaProject) continue; // pluginXmlCandidates == all candidates in module + // plugin.xml files for (Dependency dependency : pluginXml.getRootElement().getDependencies()) { final GenericAttributeValue configFileAttribute = dependency.getConfigFile(); @@ -114,7 +107,6 @@ class RegistrationCheckerUtil { final PsiElement resolve = configFile.resolve(); if (!(resolve instanceof XmlFile)) continue; final XmlFile depPluginXml = (XmlFile)resolve; - if (candidateXmlFiles.contains(depPluginXml)) continue; // already processed final DomFileElement dependentIdeaPlugin = DescriptorUtil.getIdeaPlugin(depPluginXml); if (dependentIdeaPlugin != null) { @@ -128,10 +120,7 @@ class RegistrationCheckerUtil { } @NotNull - private static List> findPluginXmlFilesForModule(Module module) { - final Project project = module.getProject(); - final boolean isIdeaProject = PsiUtil.isIdeaProject(project); - + private static List> findPluginXmlFilesForModule(Module module, boolean isIdeaProject) { XmlFile pluginXml = PluginModuleType.getPluginXml(module); if (pluginXml != null && !isIdeaProject) { return Collections.singletonList(DescriptorUtil.getIdeaPlugin(pluginXml)); @@ -141,7 +130,7 @@ class RegistrationCheckerUtil { return Collections.emptyList(); } - return DomService.getInstance().getFileElements(IdeaPlugin.class, project, + return DomService.getInstance().getFileElements(IdeaPlugin.class, module.getProject(), GlobalSearchScope.moduleRuntimeScope(module, false)); } @@ -211,7 +200,7 @@ class RegistrationCheckerUtil { private boolean processGroup(Group group) { final GenericAttributeValue groupClazz = group.getClazz(); - if (DomUtil.hasXml(groupClazz) && myPsiClass.isEquivalentTo(groupClazz.getValue())) { + if (matchesClass(groupClazz)) { if (addType(ActionType.GROUP.myClassName, group)) return false; } @@ -225,12 +214,24 @@ class RegistrationCheckerUtil { } private boolean processAction(Action action) { - if (myPsiClass.isEquivalentTo(action.getClazz().getValue())) { + if (matchesClass(action.getClazz())) { if (addType(ActionType.ACTION.myClassName, action)) return false; } return true; } + private boolean matchesClass(GenericAttributeValue attributeValue) { + if (!DomUtil.hasXml(attributeValue)) return false; + + final String stringValue = attributeValue.getStringValue(); + if (stringValue == null) return false; + + // perform cheap String comparison first + final String clazzName = stringValue.replace('$', '.'); + return clazzName.equals(myPsiClass.getQualifiedName()) && + myPsiClass.isEquivalentTo(attributeValue.getValue()); + } + private boolean addType(String fqn, DomElement context) { final PsiClass psiClass = DomJavaUtil.findClass(fqn, context); ContainerUtil.addIfNotNull(myTypes, psiClass); From 5e492c5f7921270994baa59b4f7edae96477470d Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Thu, 29 Jun 2017 16:53:44 +0200 Subject: [PATCH 39/93] =?UTF-8?q?do=20not=20log=20#com.intellij.openapi.ut?= =?UTF-8?q?il.DefaultJDOMExternalizer=20no=20such=20field=20=E2=80=94=20no?= =?UTF-8?q?t=20required=20and=20in=20any=20case=20this=20class=20is=20depr?= =?UTF-8?q?ecated?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/intellij/openapi/util/DefaultJDOMExternalizer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/util/DefaultJDOMExternalizer.java b/platform/util/src/com/intellij/openapi/util/DefaultJDOMExternalizer.java index fa87820681d0..fbc5dc112a09 100644 --- a/platform/util/src/com/intellij/openapi/util/DefaultJDOMExternalizer.java +++ b/platform/util/src/com/intellij/openapi/util/DefaultJDOMExternalizer.java @@ -289,8 +289,7 @@ public class DefaultJDOMExternalizer { throw new InvalidDataException("wrong type: " + type); } } - catch (NoSuchFieldException ex) { - LOG.debug("No field '" + fieldName + "' in " + data.getClass(), ex); + catch (NoSuchFieldException ignore) { } catch (SecurityException ex) { throw new InvalidDataException(); From ef9d196474b3d17265875d558d38c2c3aeed8e75 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Thu, 29 Jun 2017 17:56:27 +0300 Subject: [PATCH 40/93] SideEffectChecker#mayHaveExceptionalSideEffect: "check" prefix added Review: IDEA-CR-21913 --- .../src/com/siyeh/ig/psiutils/SideEffectChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java index 4efa924cc3d0..7ceb54a568da 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/psiutils/SideEffectChecker.java @@ -206,7 +206,7 @@ public class SideEffectChecker { * @return true if the method has exceptional side effect */ public static boolean mayHaveExceptionalSideEffect(PsiMethod method) { - if (method.getName().startsWith("assert")) { + if (method.getName().startsWith("assert") || method.getName().startsWith("check")) { return true; } return ControlFlowAnalyzer.getMethodContracts(method).stream() From 6002555e3730f495ad6bcad92262fd6f9e9ccdb8 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 29 Jun 2017 18:03:05 +0300 Subject: [PATCH 41/93] one more create method --- .../intellij/util/containers/FactoryMap.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/platform/util/src/com/intellij/util/containers/FactoryMap.java b/platform/util/src/com/intellij/util/containers/FactoryMap.java index 2832ffdf55e0..1a61f13d0128 100644 --- a/platform/util/src/com/intellij/util/containers/FactoryMap.java +++ b/platform/util/src/com/intellij/util/containers/FactoryMap.java @@ -20,6 +20,7 @@ import com.intellij.openapi.util.RecursionManager; import com.intellij.util.ConcurrencyUtil; import com.intellij.util.Function; import com.intellij.util.ObjectUtils; +import com.intellij.util.Producer; import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -178,4 +179,21 @@ public abstract class FactoryMap implements Map { } }; } + + @NotNull + public static FactoryMap createMap(@NotNull final Producer> createMap, @NotNull final Function computeValue) { + return new FactoryMap() { + @NotNull + @Override + protected Map createMap() { + return createMap.produce(); + } + + @Nullable + @Override + protected V create(K key) { + return computeValue.fun(key); + } + }; + } } From 52146cfba5e537f67dc1725597d9447fe1df8e8e Mon Sep 17 00:00:00 2001 From: Kirill Kirichenko Date: Thu, 29 Jun 2017 18:32:12 +0300 Subject: [PATCH 42/93] IDEA-171869 Win10 cosmetic changes and Links reworked --- .../platform-api/src/com/intellij/ui/UI.java | 3 ++- .../ui/components/labels/LinkLabel.java | 8 ++++++- .../laf/intellij/WinIntelliJComboBoxUI.java | 22 +++++++++---------- .../ui/laf/intellij/WinIntelliJSpinnerUI.java | 2 +- .../laf/intellij/WinIntelliJTextBorder.java | 2 +- .../laf/intellij/WinIntelliJTextFieldUI.java | 2 +- .../ide/ui/laf/intellijlaf_native.properties | 5 ++++- 7 files changed, 26 insertions(+), 18 deletions(-) diff --git a/platform/platform-api/src/com/intellij/ui/UI.java b/platform/platform-api/src/com/intellij/ui/UI.java index 1aaba6a8b35a..731022af83df 100644 --- a/platform/platform-api/src/com/intellij/ui/UI.java +++ b/platform/platform-api/src/com/intellij/ui/UI.java @@ -40,6 +40,7 @@ public class UI { ourColors.put("panel.custom.background", new Color(250, 249, 245)); ourColors.put("link.foreground", new Color(82, 99, 155)); + ourColors.put("link.hover.foreground", new JBColor(new Color(82, 99, 155), new Color(82, 99, 155))); ourColors.put("link.pressed.foreground", new JBColor(new Color(240, 0, 0), new Color(186, 111, 37))); ourColors.put("link.visited.foreground", new JBColor(new Color(128, 0, 128), new Color(151, 118, 169))); @@ -73,7 +74,7 @@ public class UI { } public static Color getColor(@NonNls String id) { - if (UIUtil.isUnderDarcula()) { + if (UIUtil.isUnderDarcula() || UIUtil.isUnderWin10LookAndFeel()) { final Color color = UIManager.getColor(id); if (color != null) { return color; diff --git a/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java b/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java index f7bc0a94b7c4..d6f116895dc7 100644 --- a/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java +++ b/platform/platform-api/src/com/intellij/ui/components/labels/LinkLabel.java @@ -216,7 +216,9 @@ public class LinkLabel extends JLabel { } protected Color getTextColor() { - return myIsLinkActive ? getActive() : isVisited() ? getVisited() : getNormal(); + return myIsLinkActive ? getActive() : + myUnderline ? getHover() : + isVisited() ? getVisited() : getNormal(); } public void setPaintUnderline(boolean paintUnderline) { @@ -317,6 +319,10 @@ public class LinkLabel extends JLabel { return UI.getColor("link.foreground"); } + protected Color getHover() { + return UI.getColor("link.hover.foreground"); + } + public void entered(MouseEvent e) { enableUnderline(); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java index 95c5cc2cf76e..436f44021293 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJComboBoxUI.java @@ -19,7 +19,6 @@ import com.intellij.ide.ui.laf.darcula.DarculaUIUtil; import com.intellij.ide.ui.laf.darcula.ui.DarculaComboBoxUI; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.registry.Registry; -import com.intellij.ui.ComboBoxCompositeEditor; import com.intellij.ui.EditorTextField; import com.intellij.ui.PopupMenuListenerAdapter; import com.intellij.util.ui.JBDimension; @@ -116,11 +115,13 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - g2.setColor(getComboBackground(editor != null && editor.isOpaque())); + boolean isOpaque = editor != null && editor.isOpaque(); + g2.setColor(getComboBackground(isOpaque)); JBInsets.removeFrom(r, JBUI.insets(2)); - if (!comboBox.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); + if (!comboBox.isEnabled() && !isOpaque) { + float alpha = comboBox.isEditable() ? 0.35f : 0.47f; + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); } g2.fill(r); @@ -256,10 +257,6 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } - if (!comboBox.isEnabled()) { - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f)); - } - Icon icon = MacIntelliJIconCache.getIcon("comboDropTriangle", false, false, isEnabled()); int x = JBUI.scale(5); int y = (getHeight() - icon.getIconHeight()) / 2; @@ -392,8 +389,7 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { etf.addMouseListener(editorHoverListener); etf.setBackground(getComboBackground(true)); - int topBorderWidth = editor instanceof ComboBoxCompositeEditor ? 1 : 2; - jEditor.setBorder(JBUI.Borders.emptyTop(topBorderWidth)); + jEditor.setBorder(JBUI.Borders.emptyTop(1)); } } } @@ -460,7 +456,9 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { } } else { g2.setColor(UIManager.getColor("Button.intellij.native.borderColor")); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); + + float alpha = comboBox.isEditable() ? 0.35f : 0.47f; + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha)); } Path2D border = new Path2D.Double(Path2D.WIND_EVEN_ODD); @@ -505,7 +503,7 @@ public class WinIntelliJComboBoxUI extends DarculaComboBoxUI { @Override public Insets getBorderInsets(Component c) { return c.getComponentOrientation().isLeftToRight() ? - JBUI.insets(2, 6, 2, 2).asUIResource() : JBUI.insets(2, 2, 2, 6).asUIResource(); + JBUI.insets(2, 5, 2, 2).asUIResource() : JBUI.insets(2, 2, 2, 5).asUIResource(); } private Dimension getSizeWithButton(Dimension d) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java index 8954d331542a..1a3cb580f858 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJSpinnerUI.java @@ -225,7 +225,7 @@ public class WinIntelliJSpinnerUI extends DarculaSpinnerUI { Dimension prevButtonSize = prevButton.getPreferredSize(); prevButton.setBounds(bounds.width - prevButtonSize.width, nextButtonSize.height - JBUI.scale(1), - prevButtonSize.width, prevButtonSize.height); + prevButtonSize.width, bounds.height - nextButtonSize.height + JBUI.scale(1)); JComponent editor = spinner.getEditor(); if (editor != null) { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java index 62e0dc290e3e..c29c6447050b 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextBorder.java @@ -44,7 +44,7 @@ public class WinIntelliJTextBorder extends DarculaTextBorder { } else if (c instanceof JTextField && c.getParent() instanceof ColorPanel) { return JBUI.insets(3, 3, 2, 2).asUIResource(); } else { - return JBUI.insets(4, 6).asUIResource(); + return JBUI.insets(4, 5).asUIResource(); } } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java index ced1625d5a3d..41d3c89364c0 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/WinIntelliJTextFieldUI.java @@ -85,7 +85,7 @@ public class WinIntelliJTextFieldUI extends DarculaTextFieldUI { } static void paintTextFieldBackground(JComponent c, Graphics2D g2) { - g2.setColor(c.isEnabled() ? c.getBackground() : UIManager.getColor("TextField.inactiveBackground")); + g2.setColor(c.isEnabled() ? c.getBackground() : UIManager.getColor("Button.background")); if (!c.isEnabled()) { g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.47f)); diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties index 496aa1c1c0be..abc6ed280be5 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellijlaf_native.properties @@ -33,7 +33,10 @@ Menu.border=com.intellij.ide.ui.laf.darcula.ui.DarculaMenuItemBorder EditorPaneUI=com.intellij.ide.ui.laf.darcula.ui.DarculaEditorPaneUI control=f2f2f2 -link.foreground=589df6 +link.foreground=016cc1 +link.pressed.foreground=006064 +link.hover.foreground=00bcd4 +link.visited.foreground=016cc1 ScrollBarUI=com.intellij.ui.components.JBScrollBar TableHeaderUI=com.intellij.ide.ui.laf.darcula.DarculaTableHeaderUI Table.gridColor=dddddd From e4e59d906a10b31dab464a2579ca97f410ff5b68 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Thu, 29 Jun 2017 18:43:55 +0300 Subject: [PATCH 43/93] Gradle: apply option to store project files externally after the change in existing project --- .../org/jetbrains/plugins/gradle/settings/GradleSettings.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java index c6e8235e11ab..ff412b64ebb6 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleSettings.java @@ -20,6 +20,7 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManager; +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl; import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettings; import com.intellij.openapi.externalSystem.settings.ExternalSystemSettingsListener; import com.intellij.openapi.project.Project; @@ -128,6 +129,9 @@ public class GradleSettings extends AbstractExternalSystemSettings { From 67ebe8da58384529c49673e2314d4fc228aebe9e Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Thu, 29 Jun 2017 18:49:17 +0300 Subject: [PATCH 44/93] Fix test data for PyPackageRequirementsInspectionTest.testImportsNotInRequirementsTxt. --- .../ImportsNotInRequirementsTxt/test1.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py b/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py index 24b98b4a04ec..fe9a411a2ea4 100644 --- a/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py +++ b/python/testData/inspections/PyPackageRequirementsInspection/ImportsNotInRequirementsTxt/test1.py @@ -1,9 +1,9 @@ import pip -import opster -from clevercss import convert -import django.conf +import opster +from clevercss import convert +import django.conf import httplib -import test3 +import test3 print('Hello, World!') From 01eed3f7860c5334a672cf44932abb70fcd90f47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Thu, 29 Jun 2017 17:48:36 +0200 Subject: [PATCH 45/93] [devkit] RegistrationCheckerUtil: performance, #2 - cleanup - fix test - RegistrationProblemsInspection: stop after first hit --- .../ComponentNotRegisteredInspection.java | 2 +- .../inspections/RegistrationCheckerUtil.java | 25 +++++++------------ .../RegistrationProblemsInspection.java | 2 +- 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java b/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java index a60f1287bf38..8538484bf42b 100644 --- a/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java +++ b/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java @@ -105,7 +105,7 @@ public class ComponentNotRegisteredInspection extends DevKitInspectionBase { @Nullable @Override protected PsiClass compute() { - final Set types = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS, true); + final Set types = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS); return ContainerUtil.getFirstItem(types); } }; diff --git a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java index c7c5d21b696f..9edc40a45ec2 100644 --- a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java +++ b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java @@ -43,7 +43,7 @@ import java.util.Set; class RegistrationCheckerUtil { @Nullable - static Set getRegistrationTypes(PsiClass psiClass, boolean includeActions, boolean stopOnFirst) { + static Set getRegistrationTypes(PsiClass psiClass, boolean includeActions) { final Project project = psiClass.getProject(); final PsiFile psiFile = psiClass.getContainingFile(); @@ -52,23 +52,19 @@ class RegistrationCheckerUtil { final VirtualFile virtualFile = psiFile.getVirtualFile(); if (virtualFile == null) return null; final Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); - if (module == null) return null; final boolean isIdeaProject = PsiUtil.isIdeaProject(project); - if (PluginModuleType.isOfType(module) || - PsiUtil.isPluginModule(module)) { - final Set pluginModuleResults = checkModule(module, isIdeaProject, psiClass, includeActions, stopOnFirst); - if (!isIdeaProject && pluginModuleResults != null) { - return pluginModuleResults; - } + final Set pluginModuleResults = checkModule(module, isIdeaProject, psiClass, includeActions); + if (pluginModuleResults != null) { + return pluginModuleResults; } final List candidateModules = PluginModuleType.getCandidateModules(module); candidateModules.remove(module); // already checked for (Module m : candidateModules) { - Set types = checkModule(m, isIdeaProject, psiClass, includeActions, stopOnFirst); + Set types = checkModule(m, isIdeaProject, psiClass, includeActions); if (types != null) return types; } @@ -79,8 +75,7 @@ class RegistrationCheckerUtil { private static Set checkModule(Module module, boolean isIdeaProject, PsiClass psiClass, - boolean includeActions, - boolean stopOnFirst) { + boolean includeActions) { List> pluginXmlCandidates = findPluginXmlFilesForModule(module, isIdeaProject); if (pluginXmlCandidates.isEmpty()) return null; @@ -89,7 +84,7 @@ class RegistrationCheckerUtil { return null; } - final RegistrationTypeFinder finder = new RegistrationTypeFinder(psiClass, stopOnFirst); + final RegistrationTypeFinder finder = new RegistrationTypeFinder(psiClass); for (DomFileElement pluginXml : pluginXmlCandidates) { // "main" plugin.xml @@ -164,13 +159,11 @@ class RegistrationCheckerUtil { private static class RegistrationTypeFinder { private final PsiClass myPsiClass; - private final boolean myStopOnFirst; private final Set myTypes = ContainerUtil.newIdentityTroveSet(1); - private RegistrationTypeFinder(PsiClass psiClass, boolean stopOnFirst) { + private RegistrationTypeFinder(PsiClass psiClass) { myPsiClass = psiClass; - myStopOnFirst = stopOnFirst; } private boolean processComponents(ComponentType type, List components) { @@ -235,7 +228,7 @@ class RegistrationCheckerUtil { private boolean addType(String fqn, DomElement context) { final PsiClass psiClass = DomJavaUtil.findClass(fqn, context); ContainerUtil.addIfNotNull(myTypes, psiClass); - return psiClass != null && myStopOnFirst; + return psiClass != null; } private Set getTypes() { diff --git a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java index d30a0ee0526f..b288812eb227 100644 --- a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java +++ b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java @@ -115,7 +115,7 @@ public class RegistrationProblemsInspection extends DevKitInspectionBase { nameIdentifier != null && checkedClass.getQualifiedName() != null && checkedClass.getContainingFile().getVirtualFile() != null) { - final Set componentClasses = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS, false); + final Set componentClasses = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS); if (componentClasses != null && !componentClasses.isEmpty()) { List problems = new SmartList<>(); From 24faab93a39cd5a13b2a5806f043c7ba79dc61d3 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 29 Jun 2017 18:27:13 +0300 Subject: [PATCH 46/93] IDEA-175168 On-demand renderers - implemented on-demand user renderers --- .../intellij/debugger/engine/JavaValue.java | 22 ++++- .../CompoundRendererConfigurable.java | 15 ++- .../ui/impl/watch/NodeDescriptorImpl.java | 4 +- .../ui/tree/render/LabelRenderer.java | 36 ++++++-- ...oStringRenderer.kt => OnDemandRenderer.kt} | 91 ++++++++++++++----- .../xdebugger/frame/XFullValueEvaluator.java | 3 +- .../src/messages/DebuggerBundle.properties | 1 + 7 files changed, 128 insertions(+), 44 deletions(-) rename java/debugger/impl/src/com/intellij/debugger/ui/tree/render/{LazyToStringRenderer.kt => OnDemandRenderer.kt} (52%) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java index d2af8760cf9f..ac222be24052 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java @@ -157,8 +157,13 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV XValuePresentation presentation = new JavaValuePresentation( value, myValueDescriptor.getIdLabel(), exception != null ? exception.getMessage() : null, myValueDescriptor); - if (myValueDescriptor.getLastRenderer() instanceof FullValueEvaluatorProvider) { - XFullValueEvaluator evaluator = ((FullValueEvaluatorProvider)myValueDescriptor.getLastRenderer()) + // TODO move inside JavaValuePresentation + Renderer lastRenderer = myValueDescriptor.getLastRenderer(); + if (lastRenderer instanceof CompoundNodeRenderer) { + lastRenderer = ((CompoundNodeRenderer)lastRenderer).getLabelRenderer(); + } + if (lastRenderer instanceof FullValueEvaluatorProvider) { + XFullValueEvaluator evaluator = ((FullValueEvaluatorProvider)lastRenderer) .getFullValueEvaluator(myEvaluationContext, myValueDescriptor); if (evaluator != null) { node.setFullValueEvaluator(evaluator); @@ -302,13 +307,20 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV String value = truncateToMaxLength(myValue); Renderer lastRenderer = myValueDescriptor.getLastRenderer(); + if (lastRenderer instanceof OnDemandRenderer) { + OnDemandRenderer onDemandRenderer = (OnDemandRenderer)lastRenderer; + if (OnDemandRenderer.isCalculated(myValueDescriptor)) { + lastRenderer = onDemandRenderer.getRenderer(); + } + else { + return; + } + } + if (lastRenderer instanceof CompoundTypeRenderer) { lastRenderer = ((CompoundTypeRenderer)lastRenderer).getLabelRenderer(); } if (lastRenderer instanceof ToStringRenderer) { - if (lastRenderer instanceof LazyToStringRenderer && !((LazyToStringRenderer)lastRenderer).isCalculated(myValueDescriptor)) { - return; - } value = StringUtil.wrapWithDoubleQuote(value); } renderer.renderValue(value); diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java index f8b7afa03a57..d36f8718ef09 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/CompoundRendererConfigurable.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -59,6 +59,7 @@ class CompoundRendererConfigurable extends JPanel { private final JRadioButton myRbDefaultLabel; private final JRadioButton myRbExpressionLabel; private final JBCheckBox myShowTypeCheckBox; + private final JBCheckBox myOnDemandCheckBox; private final JRadioButton myRbDefaultChildrenRenderer; private final JRadioButton myRbExpressionChildrenRenderer; private final JRadioButton myRbListChildrenRenderer; @@ -88,6 +89,7 @@ class CompoundRendererConfigurable extends JPanel { labelButtonsGroup.add(myRbExpressionLabel); myShowTypeCheckBox = new JBCheckBox(DebuggerBundle.message("label.compound.renderer.configurable.show.type")); + myOnDemandCheckBox = new JBCheckBox(DebuggerBundle.message("label.compound.renderer.configurable.ondemand")); myRbDefaultChildrenRenderer = new JRadioButton(DebuggerBundle.message("label.compound.renderer.configurable.use.default.renderer")); myRbExpressionChildrenRenderer = new JRadioButton(DebuggerBundle.message("label.compound.renderer.configurable.use.expression")); @@ -156,6 +158,8 @@ class CompoundRendererConfigurable extends JPanel { JBUI.insetsLeft(10), 0, 0)); panel.add(myLabelEditor.getComponent(), new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.HORIZONTAL, JBUI.insetsLeft(30), 0, 0)); + panel.add(myOnDemandCheckBox, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, + GridBagConstraints.HORIZONTAL, JBUI.insetsLeft(30), 0, 0)); panel.add(new JLabel(DebuggerBundle.message("label.compound.renderer.configurable.when.expanding")), new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, @@ -218,7 +222,9 @@ class CompoundRendererConfigurable extends JPanel { } private void updateEnabledState() { - myLabelEditor.setEnabled(myRbExpressionLabel.isSelected()); + boolean isLabelRenderer = myRbExpressionLabel.isSelected(); + myLabelEditor.setEnabled(isLabelRenderer); + myOnDemandCheckBox.setEnabled(isLabelRenderer); final boolean isChildrenExpression = myRbExpressionChildrenRenderer.isSelected(); myChildrenExpandedEditor.setEnabled(isChildrenExpression); @@ -321,6 +327,7 @@ class CompoundRendererConfigurable extends JPanel { if (myRbExpressionLabel.isSelected()) { labelRenderer = new LabelRenderer(); labelRenderer.setLabelExpression(TextWithImportsImpl.fromXExpression(myLabelEditor.getExpression())); + labelRenderer.setOnDemand(myOnDemandCheckBox.isSelected()); } renderer.setLabelRenderer(labelRenderer); // children @@ -362,7 +369,9 @@ class CompoundRendererConfigurable extends JPanel { } else { myRbExpressionLabel.setSelected(true); - myLabelEditor.setExpression(TextWithImportsImpl.toXExpression(((LabelRenderer)labelRenderer).getLabelExpression())); + LabelRenderer lr = (LabelRenderer)labelRenderer; + myLabelEditor.setExpression(TextWithImportsImpl.toXExpression(lr.getLabelExpression())); + myOnDemandCheckBox.setSelected(lr.isOnDemand()); } getTableModel().clear(); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java index 6a57152614ae..3182f211bbb6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/NodeDescriptorImpl.java @@ -22,7 +22,7 @@ import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.ui.tree.NodeDescriptor; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; -import com.intellij.debugger.ui.tree.render.LazyToStringRenderer; +import com.intellij.debugger.ui.tree.render.OnDemandRenderer; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.util.containers.HashMap; @@ -119,7 +119,7 @@ public abstract class NodeDescriptorImpl implements NodeDescriptor { // TODO introduce unified way to handle this if (myUserData != null) { - myUserData.remove(LazyToStringRenderer.LAZY_CALCULATED); // lazy flag should not be inherited + myUserData.remove(OnDemandRenderer.ON_DEMAND_CALCULATED); // calculated flag should not be inherited } } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java index 176803a04837..665d2dfbfdea 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -18,25 +18,25 @@ package com.intellij.debugger.ui.tree.render; import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.engine.DebuggerUtils; -import com.intellij.debugger.engine.evaluation.EvaluateException; -import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil; -import com.intellij.debugger.engine.evaluation.EvaluationContext; -import com.intellij.debugger.engine.evaluation.TextWithImports; +import com.intellij.debugger.engine.FullValueEvaluatorProvider; +import com.intellij.debugger.engine.evaluation.*; import com.intellij.debugger.engine.evaluation.expression.ExpressionEvaluator; +import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.debugger.ui.tree.ValueDescriptor; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.DefaultJDOMExternalizer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.xdebugger.frame.XFullValueEvaluator; import com.sun.jdi.Value; import org.jdom.Element; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer{ +public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer, FullValueEvaluatorProvider { public static final @NonNls String UNIQUE_ID = "LabelRenderer"; - private static final Logger LOG = Logger.getInstance("#com.intellij.debugger.ui.impl.watch.render.ClassLabelRenderer"); + public boolean myOnDemand; private CachedEvaluator myLabelExpression = createCachedEvaluator(); @@ -62,6 +62,10 @@ public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer{ public String calcLabel(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener labelListener) throws EvaluateException { + if (myOnDemand && !OnDemandRenderer.isCalculated(descriptor)) { + return ""; + } + final Value value = descriptor.getValue(); String result; @@ -88,6 +92,15 @@ public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer{ return result; } + @Nullable + @Override + public XFullValueEvaluator getFullValueEvaluator(EvaluationContextImpl evaluationContext, ValueDescriptorImpl valueDescriptor) { + if (myOnDemand && !OnDemandRenderer.isCalculated(valueDescriptor)) { + return OnDemandRenderer.createFullValueEvaluator("… " + getLabelExpression().getText()); + } + return null; + } + public void readExternal(Element element) throws InvalidDataException { super.readExternal(element); DefaultJDOMExternalizer.readExternal(this, element); @@ -111,4 +124,11 @@ public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer{ myLabelExpression.setReferenceExpression(expression); } + public boolean isOnDemand() { + return myOnDemand; + } + + public void setOnDemand(boolean value) { + myOnDemand = value; + } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.kt similarity index 52% rename from java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt rename to java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.kt index 00298030d235..41fcf05e600f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LazyToStringRenderer.kt +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.kt @@ -16,64 +16,105 @@ package com.intellij.debugger.ui.tree.render import com.intellij.debugger.DebuggerBundle +import com.intellij.debugger.DebuggerContext import com.intellij.debugger.engine.FullValueEvaluatorProvider +import com.intellij.debugger.engine.JavaValue import com.intellij.debugger.engine.evaluation.EvaluateException import com.intellij.debugger.engine.evaluation.EvaluationContext import com.intellij.debugger.engine.evaluation.EvaluationContextImpl import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl +import com.intellij.debugger.ui.tree.DebuggerTreeNode +import com.intellij.debugger.ui.tree.NodeDescriptor import com.intellij.debugger.ui.tree.ValueDescriptor import com.intellij.openapi.util.Key +import com.intellij.psi.PsiElement import com.intellij.xdebugger.frame.XFullValueEvaluator import com.intellij.xdebugger.frame.XValuePlace import com.intellij.xdebugger.impl.ui.tree.nodes.HeadlessValueEvaluationCallback +import com.sun.jdi.Type +import com.sun.jdi.Value +import javax.swing.Icon /** * @author egor */ -class LazyToStringRenderer : ToStringRenderer(), FullValueEvaluatorProvider { +class OnDemandRenderer(val renderer: NodeRendererImpl) : NodeRendererImpl(), FullValueEvaluatorProvider { init { isEnabled = true } - override fun getFullValueEvaluator(evaluationContext: EvaluationContextImpl?, valueDescriptor: ValueDescriptorImpl): XFullValueEvaluator? { - if (!isCalculated(valueDescriptor)) { - return object : XFullValueEvaluator(DebuggerBundle.message("message.node.toString")) { - override fun startEvaluation(callback: XFullValueEvaluator.XFullValueEvaluationCallback) { - if (callback is HeadlessValueEvaluationCallback) { - val node = callback.node - node.clearFullValueEvaluator() - valueDescriptor.putUserData(LAZY_CALCULATED, true) - node.valueContainer.computePresentation(node, XValuePlace.TREE) - } - callback.evaluated("") - } - }.setShowValuePopup(false) - } - return null - } - @Throws(EvaluateException::class) override fun calcLabel(descriptor: ValueDescriptor, evaluationContext: EvaluationContext, listener: DescriptorLabelListener): String? { if (!isCalculated(descriptor)) { return "" } - return super.calcLabel(descriptor, evaluationContext, listener) + return renderer.calcLabel(descriptor, evaluationContext, listener) } - fun isCalculated(descriptor: ValueDescriptor): Boolean { - return LAZY_CALCULATED.get(descriptor, false) + override fun getFullValueEvaluator(evaluationContext: EvaluationContextImpl?, valueDescriptor: ValueDescriptorImpl): XFullValueEvaluator? { + if (!isCalculated(valueDescriptor)) { + return createFullValueEvaluator(DebuggerBundle.message("message.node.toString")) + } + return null + } + + override fun buildChildren(value: Value?, builder: ChildrenBuilder?, evaluationContext: EvaluationContext?) { + renderer.buildChildren(value, builder, evaluationContext) + } + + override fun getChildValueExpression(node: DebuggerTreeNode?, context: DebuggerContext?): PsiElement { + return renderer.getChildValueExpression(node, context) + } + + override fun isExpandable(value: Value?, evaluationContext: EvaluationContext?, parentDescriptor: NodeDescriptor?): Boolean { + return renderer.isExpandable(value, evaluationContext, parentDescriptor) + } + + override fun calcValueIcon(descriptor: ValueDescriptor?, + evaluationContext: EvaluationContext?, + listener: DescriptorLabelListener?): Icon? { + return renderer.calcValueIcon(descriptor, evaluationContext, listener) + } + + override fun isApplicable(type: Type?): Boolean { + return renderer.isApplicable(type) } override fun getName(): String { - return "Lazy" + super.getName() + return "OnDemand" + renderer.getName() } override fun getUniqueId(): String { - return "Lazy" + super.getUniqueId() + return "OnDemand" + renderer.getUniqueId() } companion object { + @JvmStatic + fun createFullValueEvaluator(text: String): XFullValueEvaluator { + return object : XFullValueEvaluator(text) { + override fun startEvaluation(callback: XFullValueEvaluator.XFullValueEvaluationCallback) { + if (callback is HeadlessValueEvaluationCallback) { + val node = callback.node + node.clearFullValueEvaluator() + setCalculated((node.valueContainer as JavaValue).descriptor) + node.valueContainer.computePresentation(node, XValuePlace.TREE) + } + callback.evaluated("") + } + }.setShowValuePopup(false) + } + @JvmField - val LAZY_CALCULATED = Key.create("LAZY_CALCULATED") + val ON_DEMAND_CALCULATED = Key.create("ON_DEMAND_CALCULATED") + + @JvmStatic + fun isCalculated(descriptor: ValueDescriptor): Boolean { + return ON_DEMAND_CALCULATED.get(descriptor, false) + } + + @JvmStatic + fun setCalculated(descriptor: ValueDescriptor) { + ON_DEMAND_CALCULATED.set(descriptor, true) + } } -} +} \ No newline at end of file diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/frame/XFullValueEvaluator.java b/platform/xdebugger-api/src/com/intellij/xdebugger/frame/XFullValueEvaluator.java index 6c4f6c9c17fe..d1753cadf620 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/frame/XFullValueEvaluator.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/frame/XFullValueEvaluator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -52,6 +52,7 @@ public abstract class XFullValueEvaluator { return myShowValuePopup; } + @NotNull public XFullValueEvaluator setShowValuePopup(boolean value) { myShowValuePopup = value; return this; diff --git a/resources-en/src/messages/DebuggerBundle.properties b/resources-en/src/messages/DebuggerBundle.properties index 634c20b0bc64..a7dcafea0328 100644 --- a/resources-en/src/messages/DebuggerBundle.properties +++ b/resources-en/src/messages/DebuggerBundle.properties @@ -208,6 +208,7 @@ label.base.renderer.configurable.enable.toString=Enable 't&oString()' object vie label.base.renderer.configurable.all.overriding=For all classes that override 'toString()' method label.base.renderer.configurable.classes.from.list=For classes from the list: label.compound.renderer.configurable.show.type=Show type and object id +label.compound.renderer.configurable.ondemand=On-demand label.compound.renderer.configurable.use.default.renderer=Use default renderer label.compound.renderer.configurable.use.expression=Use following expression: label.compound.renderer.configurable.use.expression.list=Use list of expressions: From ead0a6c40e476e616a7adeb9d2c76640a6e38bf1 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 29 Jun 2017 18:56:03 +0300 Subject: [PATCH 47/93] IDEA-175168 On-demand renderers - fix for graphics renderer and others who's lost the link --- .../intellij/debugger/engine/JavaValue.java | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java index ac222be24052..a92fc8f3add7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java @@ -157,19 +157,12 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV XValuePresentation presentation = new JavaValuePresentation( value, myValueDescriptor.getIdLabel(), exception != null ? exception.getMessage() : null, myValueDescriptor); - // TODO move inside JavaValuePresentation Renderer lastRenderer = myValueDescriptor.getLastRenderer(); - if (lastRenderer instanceof CompoundNodeRenderer) { - lastRenderer = ((CompoundNodeRenderer)lastRenderer).getLabelRenderer(); + boolean fullEvaluatorSet = setFullValueEvaluator(lastRenderer); + if (!fullEvaluatorSet && lastRenderer instanceof CompoundNodeRenderer) { + fullEvaluatorSet = setFullValueEvaluator(((CompoundNodeRenderer)lastRenderer).getLabelRenderer()); } - if (lastRenderer instanceof FullValueEvaluatorProvider) { - XFullValueEvaluator evaluator = ((FullValueEvaluatorProvider)lastRenderer) - .getFullValueEvaluator(myEvaluationContext, myValueDescriptor); - if (evaluator != null) { - node.setFullValueEvaluator(evaluator); - } - } - else if (value.length() > XValueNode.MAX_VALUE_LENGTH) { + if (!fullEvaluatorSet && value.length() > XValueNode.MAX_VALUE_LENGTH) { node.setFullValueEvaluator(new JavaFullValueEvaluator(myEvaluationContext) { @Override public void evaluate(@NotNull final XFullValueEvaluationCallback callback) { @@ -185,6 +178,17 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV } node.setPresentation(nodeIcon, presentation, myValueDescriptor.isExpandable()); } + + private boolean setFullValueEvaluator(Renderer renderer) { + if (renderer instanceof FullValueEvaluatorProvider) { + XFullValueEvaluator evaluator = ((FullValueEvaluatorProvider)renderer).getFullValueEvaluator(myEvaluationContext, myValueDescriptor); + if (evaluator != null) { + node.setFullValueEvaluator(evaluator); + return true; + } + } + return false; + } }); } }); From 9217911cf26259954f57265d8bc1c572dc33e8fd Mon Sep 17 00:00:00 2001 From: Maxim Kropotov Date: Thu, 29 Jun 2017 18:27:12 +0300 Subject: [PATCH 48/93] EA-103865 - assert: DocumentImpl.replaceString Caused by use of HtmlQuotesFormatPreprocessor to convert quotes To reproduce, enable emmet preview in HTML. Set HTML quote style to 'Single' in HTML Code Style Settings. Expand template containing attribute, for example, div.foo --- .../template/emmet/EmmetPreviewHint.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java index 4b7bfa76125f..b4eaf719685d 100644 --- a/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java +++ b/xml/impl/src/com/intellij/codeInsight/template/emmet/EmmetPreviewHint.java @@ -105,15 +105,17 @@ public class EmmetPreviewHint extends LightweightHint implements Disposable { public void updateText(@NotNull final Producer contentProducer) { myAlarm.cancelAllRequests(); myAlarm.addRequest(() -> { - if (!isDisposed) { - final String newText = contentProducer.produce(); - if (StringUtil.isEmpty(newText)) { - hide(); + DocumentUtil.writeInRunUndoTransparentAction(() -> { + if (!isDisposed) { + final String newText = contentProducer.produce(); + if (StringUtil.isEmpty(newText)) { + hide(); + } + else if (!myEditor.getDocument().getText().equals(newText)) { + myEditor.getDocument().setText(newText); + } } - else if (!myEditor.getDocument().getText().equals(newText)) { - DocumentUtil.writeInRunUndoTransparentAction(() -> myEditor.getDocument().setText(newText)); - } - } + }); }, 100); } From 289e1f92101a7b9f13d23c3f110f6f15777da683 Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Thu, 15 Jun 2017 19:23:17 +0300 Subject: [PATCH 49/93] =?UTF-8?q?PY-18375=20Fixed:=20=E2=80=9C=5F=E2=80=9D?= =?UTF-8?q?=20in=20comprehensions=20triggers=20=E2=80=9CRedeclared=20names?= =?UTF-8?q?=20without=20usage=E2=80=9D=20PY-24408=20Fixed:=20Single=20unde?= =?UTF-8?q?rscore=20redeclared=20usage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ignore `_` in PyRedeclarationInspection. --- python/psi-api/src/com/jetbrains/python/PyNames.java | 2 ++ .../python/inspections/PyRedeclarationInspection.java | 1 + .../python/inspections/PyShadowingNamesInspection.java | 5 +++-- .../python/inspections/PyUnusedLocalInspectionVisitor.java | 2 +- .../PyRedeclarationInspection/singleUnderscore.py | 5 +++++ .../testData/inspections/PyShadowingNamesInspection/test.py | 6 ++++++ .../inspections/PyUnusedLocalInspection/singleUnderscore.py | 3 +++ .../python/inspections/PyRedeclarationInspectionTest.java | 5 +++++ .../python/inspections/PyUnusedLocalInspectionTest.java | 4 ++++ 9 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 python/testData/inspections/PyRedeclarationInspection/singleUnderscore.py create mode 100644 python/testData/inspections/PyUnusedLocalInspection/singleUnderscore.py diff --git a/python/psi-api/src/com/jetbrains/python/PyNames.java b/python/psi-api/src/com/jetbrains/python/PyNames.java index 57487a9e985e..605ebcc19971 100644 --- a/python/psi-api/src/com/jetbrains/python/PyNames.java +++ b/python/psi-api/src/com/jetbrains/python/PyNames.java @@ -217,6 +217,8 @@ public class PyNames { public static final String UNNAMED_ELEMENT = ""; + public static final String UNDERSCORE = "_"; + /** * Contains all known predefined names of "__foo__" form. */ diff --git a/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java b/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java index 7f9d3946aeee..7f4f1d93f58d 100644 --- a/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java @@ -78,6 +78,7 @@ public class PyRedeclarationInspection extends PyInspection { @Override public void visitPyTargetExpression(final PyTargetExpression node) { + if (PyNames.UNDERSCORE.equals(node.getText())) return; final ScopeOwner owner = ScopeUtil.getScopeOwner(node); if (owner instanceof PyFile || owner instanceof PyClass) { processElement(node); diff --git a/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java b/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java index 795aab4b5a23..73813f9d1781 100644 --- a/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiNameIdentifierOwner; import com.intellij.psi.util.PsiTreeUtil; +import com.jetbrains.python.PyNames; import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import com.jetbrains.python.codeInsight.dataflow.scope.Scope; @@ -92,7 +93,7 @@ public class PyShadowingNamesInspection extends PyInspection { if (name != null) { final PsiElement identifier = element.getNameIdentifier(); final PsiElement problemElement = identifier != null ? identifier : element; - if ("_".equals(name)) { + if (PyNames.UNDERSCORE.equals(name)) { return; } if (owner != null) { diff --git a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java index 28c16ce42d42..c7b240b30f7c 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java +++ b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java @@ -157,7 +157,7 @@ public class PyUnusedLocalInspectionVisitor extends PyInspectionVisitor { final String name = readWriteInstruction.getName(); // Ignore empty, wildcards, global and nonlocal names final Scope scope = ControlFlowCache.getScope(owner); - if (name == null || "_".equals(name) || scope.isGlobal(name) || scope.isNonlocal(name)) { + if (name == null || PyNames.UNDERSCORE.equals(name) || scope.isGlobal(name) || scope.isNonlocal(name)) { continue; } // Ignore elements out of scope diff --git a/python/testData/inspections/PyRedeclarationInspection/singleUnderscore.py b/python/testData/inspections/PyRedeclarationInspection/singleUnderscore.py new file mode 100644 index 000000000000..3441f1f9341e --- /dev/null +++ b/python/testData/inspections/PyRedeclarationInspection/singleUnderscore.py @@ -0,0 +1,5 @@ +f2e = [(f, e) for _, e, f in [(1, 2, 3)]] +e2f = [(e, f) for _, e, f in [(1, 2, 3)]] + +array = [1, 2, 3] +_, mid, _ = array \ No newline at end of file diff --git a/python/testData/inspections/PyShadowingNamesInspection/test.py b/python/testData/inspections/PyShadowingNamesInspection/test.py index b87b8b27bae3..6ae8a30bfbcc 100644 --- a/python/testData/inspections/PyShadowingNamesInspection/test.py +++ b/python/testData/inspections/PyShadowingNamesInspection/test.py @@ -44,3 +44,9 @@ def test_outer_comprehensions(): print([y for y in range(10)]) def f(x, y): pass + + +def test_outer_single_underscore(): + _ = "abc" + def foo(): + _ = "def" diff --git a/python/testData/inspections/PyUnusedLocalInspection/singleUnderscore.py b/python/testData/inspections/PyUnusedLocalInspection/singleUnderscore.py new file mode 100644 index 000000000000..18fb14498629 --- /dev/null +++ b/python/testData/inspections/PyUnusedLocalInspection/singleUnderscore.py @@ -0,0 +1,3 @@ +def foo(): + l = [42 for _ in xrange(100)] + print(l) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java index 918151e9e6f4..3771abe80f13 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java @@ -94,6 +94,11 @@ public class PyRedeclarationInspectionTest extends PyTestCase { runWithLanguageLevel(LanguageLevel.PYTHON36, this::doTest); } + // PY-18375, PY-24408 + public void testSingleUnderscore() { + doTest(); + } + private void doTest() { final String path = "inspections/PyRedeclarationInspection/" + getTestName(true) + ".py"; diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java index ed3ec5fdf8e2..22fff46ee8bf 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java @@ -82,6 +82,10 @@ public class PyUnusedLocalInspectionTest extends PyTestCase { runWithLanguageLevel(LanguageLevel.PYTHON35, this::doTest); } + public void testSingleUnderscore() { + doTest(); + } + private void doTest() { final String path = "inspections/PyUnusedLocalInspection/" + getTestName(true) + ".py"; From c9f889c81153f3620490ec81a751d904a5cda21c Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Tue, 20 Jun 2017 17:17:49 +0300 Subject: [PATCH 50/93] PY-3996 Fixed: Don't flag underscore-prefixed variables as unused (or make not doing so an option). Update PyRedeclarationInspection, PyShadowingNamesInspection and PyUnusedLocalInspection to ignore names that starts with underscore. --- .../inspections/PyShadowingNamesInspection.java | 2 +- .../PyUnusedLocalInspectionVisitor.java | 4 ++++ .../underscorePrefixed.py | 12 ++++++++++++ .../PyShadowingNamesInspection/test.py | 15 +++++++++++++++ .../PyUnusedLocalInspection/underscorePrefixed.py | 7 +++++++ .../PyRedeclarationInspectionTest.java | 5 +++++ .../inspections/PyUnusedLocalInspectionTest.java | 5 +++++ 7 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py create mode 100644 python/testData/inspections/PyUnusedLocalInspection/underscorePrefixed.py diff --git a/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java b/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java index 73813f9d1781..80d925065f37 100644 --- a/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyShadowingNamesInspection.java @@ -93,7 +93,7 @@ public class PyShadowingNamesInspection extends PyInspection { if (name != null) { final PsiElement identifier = element.getNameIdentifier(); final PsiElement problemElement = identifier != null ? identifier : element; - if (PyNames.UNDERSCORE.equals(name)) { + if (PyNames.UNDERSCORE.equals(name) || name.startsWith(PyNames.UNDERSCORE) && element instanceof PyParameter) { return; } if (owner != null) { diff --git a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java index c7b240b30f7c..98b86605cea5 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java +++ b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java @@ -160,6 +160,10 @@ public class PyUnusedLocalInspectionVisitor extends PyInspectionVisitor { if (name == null || PyNames.UNDERSCORE.equals(name) || scope.isGlobal(name) || scope.isNonlocal(name)) { continue; } + // Ignore underscore-prefixed parameters + if (name.startsWith(PyNames.UNDERSCORE) && element instanceof PyParameter) { + continue; + } // Ignore elements out of scope if (element == null || !PsiTreeUtil.isAncestor(owner, element, false)) { continue; diff --git a/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py b/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py new file mode 100644 index 000000000000..e2a82a93af74 --- /dev/null +++ b/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py @@ -0,0 +1,12 @@ +def foo(_a): + _a = 10 + + +l = lambda _a: [_a for _a in []] + + +f2e = [(f, e) for _a, e, f in [(1, 2, 3)]] +e2f = [(e, f) for _a, e, f in [(1, 2, 3)]] + +array = [1, 2, 3] +_a, mid, _a = array \ No newline at end of file diff --git a/python/testData/inspections/PyShadowingNamesInspection/test.py b/python/testData/inspections/PyShadowingNamesInspection/test.py index 6ae8a30bfbcc..883734bcc642 100644 --- a/python/testData/inspections/PyShadowingNamesInspection/test.py +++ b/python/testData/inspections/PyShadowingNamesInspection/test.py @@ -50,3 +50,18 @@ def test_outer_single_underscore(): _ = "abc" def foo(): _ = "def" + + +# PY-3996 +def test_outer_underscore_prefixed(): + _a = "abc" + def foo(): + _a = "def" + + +# PY-3996 +def test_outer_underscore_prefixed_parameter(): + def foo(_a): + def bar(_a): + print(_a) + print(_a) diff --git a/python/testData/inspections/PyUnusedLocalInspection/underscorePrefixed.py b/python/testData/inspections/PyUnusedLocalInspection/underscorePrefixed.py new file mode 100644 index 000000000000..d48832ae25cc --- /dev/null +++ b/python/testData/inspections/PyUnusedLocalInspection/underscorePrefixed.py @@ -0,0 +1,7 @@ +def foo(): + l = [42 for _a in xrange(100)] + print(l) + + +def bar(_a): + print(10) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java index 3771abe80f13..259c27d8b845 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyRedeclarationInspectionTest.java @@ -99,6 +99,11 @@ public class PyRedeclarationInspectionTest extends PyTestCase { doTest(); } + // PY-3996 + public void testUnderscorePrefixed() { + doTest(); + } + private void doTest() { final String path = "inspections/PyRedeclarationInspection/" + getTestName(true) + ".py"; diff --git a/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java index 22fff46ee8bf..030625d5060e 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyUnusedLocalInspectionTest.java @@ -86,6 +86,11 @@ public class PyUnusedLocalInspectionTest extends PyTestCase { doTest(); } + // PY-3996 + public void testUnderscorePrefixed() { + doTest(); + } + private void doTest() { final String path = "inspections/PyUnusedLocalInspection/" + getTestName(true) + ".py"; From 5d35f9bd5d5208c45698fb7783fe8e69643df677 Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Wed, 24 May 2017 17:45:33 +0300 Subject: [PATCH 51/93] PY-24287 Fixed: False positive: A variable of type AnyStr should also accept bytearray Implement `mypy` type promotions related to `bytearray` in PyTypeChecker. --- .../src/com/jetbrains/python/PyNames.java | 4 ++++ .../python/psi/types/PyTypeChecker.java | 16 ++++++++++++++++ .../PromotingBytearrayToBytes.py | 5 +++++ .../PromotingBytearrayToStrAndUnicode.py | 6 ++++++ .../Py3TypeCheckerInspectionTest.java | 5 +++++ .../inspections/PyTypeCheckerInspectionTest.java | 5 +++++ 6 files changed, 41 insertions(+) create mode 100644 python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToBytes.py create mode 100644 python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToStrAndUnicode.py diff --git a/python/psi-api/src/com/jetbrains/python/PyNames.java b/python/psi-api/src/com/jetbrains/python/PyNames.java index 605ebcc19971..5c84eec859de 100644 --- a/python/psi-api/src/com/jetbrains/python/PyNames.java +++ b/python/psi-api/src/com/jetbrains/python/PyNames.java @@ -64,6 +64,10 @@ public class PyNames { */ public static final String TYPE_TIME = "datetime.time"; + public static final String TYPE_BYTES = "bytes"; + + public static final String TYPE_BYTEARRAY = "bytearray"; + public static final String TYPE_ENUM = "enum.Enum"; private PyNames() { diff --git a/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java b/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java index 76bdcdd468fb..1b569176e27e 100644 --- a/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java +++ b/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java @@ -17,6 +17,7 @@ package com.jetbrains.python.psi.types; import com.intellij.openapi.extensions.Extensions; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.python.PyNames; @@ -25,6 +26,7 @@ import com.jetbrains.python.psi.impl.PyBuiltinCache; import com.jetbrains.python.psi.impl.PyTypeProvider; import com.jetbrains.python.psi.resolve.PyResolveContext; import com.jetbrains.python.psi.resolve.RatedResolveResult; +import com.jetbrains.python.pyi.PyiFile; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -609,6 +611,7 @@ public class PyTypeChecker { subClass.isSubclass(superClass, context) || PyABCUtil.isSubclass(subClass, superClass, context) || isStrUnicodeMatch(subClass, superClass) || + isBytearrayBytesStringMatch(subClass, superClass) || PyUtil.hasUnresolvedAncestors(subClass, context)) { return true; } @@ -623,6 +626,19 @@ public class PyTypeChecker { return PyNames.TYPE_STR.equals(subClass.getName()) && PyNames.TYPE_UNICODE.equals(superClass.getName()); } + private static boolean isBytearrayBytesStringMatch(@NotNull PyClass subClass, @NotNull PyClass superClass) { + if (!PyNames.TYPE_BYTEARRAY.equals(subClass.getName())) return false; + + final PsiFile subClassFile = subClass.getContainingFile(); + + final boolean isPy2 = subClassFile instanceof PyiFile + ? PyBuiltinCache.getInstance(subClass).getObjectType(PyNames.TYPE_UNICODE) != null + : LanguageLevel.forElement(subClass).isOlderThan(LanguageLevel.PYTHON30); + + final String superClassName = superClass.getName(); + return isPy2 && PyNames.TYPE_STR.equals(superClassName) || !isPy2 && PyNames.TYPE_BYTES.equals(superClassName); + } + @Nullable public static Boolean isCallable(@Nullable PyType type) { if (type == null) { diff --git a/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToBytes.py b/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToBytes.py new file mode 100644 index 000000000000..e39544bf88a8 --- /dev/null +++ b/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToBytes.py @@ -0,0 +1,5 @@ +def f(bar: bytes): + return bar + + +f(bytearray()) \ No newline at end of file diff --git a/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToStrAndUnicode.py b/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToStrAndUnicode.py new file mode 100644 index 000000000000..7af7520ce639 --- /dev/null +++ b/python/testData/inspections/PyTypeCheckerInspection/PromotingBytearrayToStrAndUnicode.py @@ -0,0 +1,6 @@ +def f(bar): + # type: (str) -> str + return bar + + +f(bytearray()) \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java index b2802b975dd2..8dfe81e8f7bb 100644 --- a/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/Py3TypeCheckerInspectionTest.java @@ -250,4 +250,9 @@ public class Py3TypeCheckerInspectionTest extends PyTestCase { public void testInitializingTypingNamedTuple() { doTest(); } + + // PY-24287 + public void testPromotingBytearrayToBytes() { + doTest(); + } } diff --git a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java index 9104fa360eb9..3ba98ae8c05f 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyTypeCheckerInspectionTest.java @@ -412,4 +412,9 @@ public class PyTypeCheckerInspectionTest extends PyTestCase { public void testMatchingModuleAgainstStructuralType() { doMultiFileTest(); } + + // PY-24287 + public void testPromotingBytearrayToStrAndUnicode() { + doTest(); + } } From c98e575623d51cb3f7b7aa43f6c0a89480b6fb83 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 17:58:50 +0300 Subject: [PATCH 52/93] [vcs-log] if there is no dragged column set, column under cursor is dragged --- .../intellij/vcs/log/ui/table/VcsLogGraphTable.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 4ba7961ab4f2..15f4a6c2e959 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -988,8 +988,14 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, int deltaX = Math.abs(e.getX() - myStartXCoordinate); int deltaY = Math.abs(e.getY() - myStartYCoordinate); Point point = new Point(Math.min(Math.max(e.getX(), 0), header.getTable().getWidth() - 1), e.getY()); - boolean sameColumn = (header.getTable().getColumnModel().getColumn(header.getTable().columnAtPoint(point)) == - header.getDraggedColumn()); + boolean sameColumn; + if (header.getDraggedColumn() == null) { + sameColumn = true; + } + else { + sameColumn = (header.getTable().getColumnModel().getColumn(header.getTable().columnAtPoint(point)) == + header.getDraggedColumn()); + } // start dragging only if mouse moved horizontally // or if dragging was already started earlier (it looks weird to stop mid-dragging) if ((deltaX >= 3 * deltaY && sameColumn) || header.getCursor() == Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR) || From 747634e3bb5eae73814cfc4f3317982d98f74c87 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 18:22:01 +0300 Subject: [PATCH 53/93] [vcs-log] no need to check mouse location on release --- .../impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java | 1 - 1 file changed, 1 deletion(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 15f4a6c2e959..96ed0cde75de 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -967,7 +967,6 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, @Override public void mouseReleased(@NotNull MouseEvent e) { - if (isOnBorder(e) || isOnRootColumn(e)) return; mouseInputListener.mouseReleased(convertMouseEvent(e)); if (header.getCursor() == Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)) { header.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); From 25ab4519dc7a5938bbbee083c15c20c478de84f4 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 18:57:28 +0300 Subject: [PATCH 54/93] [vcs-log] send mouseEntred/mouseExited events to the header listener --- .../src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 96ed0cde75de..4247dff8069a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -975,10 +975,12 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, @Override public void mouseEntered(@NotNull MouseEvent e) { + mouseInputListener.mouseEntered(convertMouseEvent(e)); } @Override public void mouseExited(@NotNull MouseEvent e) { + mouseInputListener.mouseExited(convertMouseEvent(e)); } @Override From b5276f3292d87caf2d536f2e7d492da9221db033 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 18:57:57 +0300 Subject: [PATCH 55/93] [vcs-log] extract isDraggingEnabled method --- .../vcs/log/ui/table/VcsLogGraphTable.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 4247dff8069a..747e483313af 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -985,7 +985,27 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, @Override public void mouseDragged(@NotNull MouseEvent e) { - if (isOnBorder(e) || isOnRootColumn(e)) return; + if (!isDraggingEnabled(e)) { + return; + } + + mouseInputListener.mouseDragged(convertMouseEvent(e)); + // if I change cursor on mouse pressed, it will change on double-click as well + // and I do not want that + if (header.getDraggedColumn() != null && header.getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) { + header.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } + } + + private boolean isDraggingEnabled(@NotNull MouseEvent e) { + if (isOnBorder(e) || isOnRootColumn(e)) return false; + // can not check for getDragged/Resized column here since they can be set in mousePressed method + // their presence does not necessarily means something is being dragged or resized + if (header.getCursor() == Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR) || + header.getCursor() == Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR)) { + return true; + } + int deltaX = Math.abs(e.getX() - myStartXCoordinate); int deltaY = Math.abs(e.getY() - myStartYCoordinate); Point point = new Point(Math.min(Math.max(e.getX(), 0), header.getTable().getWidth() - 1), e.getY()); @@ -999,15 +1019,7 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, } // start dragging only if mouse moved horizontally // or if dragging was already started earlier (it looks weird to stop mid-dragging) - if ((deltaX >= 3 * deltaY && sameColumn) || header.getCursor() == Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR) || - header.getCursor() == Cursor.getPredefinedCursor(Cursor.E_RESIZE_CURSOR)) { - mouseInputListener.mouseDragged(convertMouseEvent(e)); - // if I change cursor on mouse pressed, it will change on double-click as well - // and I do not want that - if (header.getDraggedColumn() != null && header.getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) { - header.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - } - } + return deltaX >= 3 * deltaY && sameColumn; } @Override From 1129745d313b4fb615fe00f5a14241dca32ecfe1 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 19:45:07 +0300 Subject: [PATCH 56/93] [vcs-log] cancel dragging when target column is root column --- .../intellij/vcs/log/ui/table/VcsLogGraphTable.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java index 747e483313af..e53965d17462 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/table/VcsLogGraphTable.java @@ -992,8 +992,14 @@ public class VcsLogGraphTable extends TableWithProgress implements DataProvider, mouseInputListener.mouseDragged(convertMouseEvent(e)); // if I change cursor on mouse pressed, it will change on double-click as well // and I do not want that - if (header.getDraggedColumn() != null && header.getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) { - header.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + if (header.getDraggedColumn() != null) { + if (header.getCursor() == Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)) { + header.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); + } + int draggedColumn = header.getTable().convertColumnIndexToView(header.getDraggedColumn().getModelIndex()); + if (header.getTable().convertColumnIndexToView(ROOT_COLUMN) == draggedColumn + (header.getDraggedDistance() < 0 ? -1 : 1)) { + mouseReleased(e); //cancel dragging to the root column + } } } From cc97074c94d31fa662f8135c3f0026b68f68d51d Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Thu, 29 Jun 2017 20:12:38 +0300 Subject: [PATCH 57/93] don't read PropertyKeyIndex in dumb mode (EA-103964) --- .../properties/psi/impl/PropertiesFileImpl.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java index 2b1b5b0b19dd..3152d1b2464a 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -23,6 +23,8 @@ import com.intellij.lang.properties.parsing.PropertiesElementTypes; import com.intellij.lang.properties.psi.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.project.DumbService; +import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.FileViewProvider; @@ -192,12 +194,19 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { } private Stream propertiesByKey(@NotNull String key) { - VirtualFile file = getVirtualFile(); - if (file != null && ProjectFileIndex.getInstance(getProject()).isInContent(file)) { + if (shouldReadIndex()) { return PropertyKeyIndex.getInstance().get(key, getProject(), GlobalSearchScope.fileScope(this)).stream(); - } else { + } + else { // see PropertiesElementFactory.createPropertiesFile(Project, Properties, String) return getProperties().stream().filter(p -> key.equals(p.getUnescapedKey())); } } + + private boolean shouldReadIndex() { + Project project = getProject(); + if (DumbService.getInstance(project).isDumb()) return false; + VirtualFile file = getVirtualFile(); + return file != null && ProjectFileIndex.getInstance(project).isInContent(file); + } } From 695f076ff6a43c250bf8b58dc45f40b28233a5a8 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Thu, 29 Jun 2017 19:02:28 +0300 Subject: [PATCH 58/93] vcs: remove unused action --- .../src/messages/ActionsBundle.properties | 1 - platform/platform-resources/src/idea/VcsActions.xml | 3 --- 2 files changed, 4 deletions(-) diff --git a/platform/platform-resources-en/src/messages/ActionsBundle.properties b/platform/platform-resources-en/src/messages/ActionsBundle.properties index 96d8a8c99a98..17a365ef4d17 100644 --- a/platform/platform-resources-en/src/messages/ActionsBundle.properties +++ b/platform/platform-resources-en/src/messages/ActionsBundle.properties @@ -1318,7 +1318,6 @@ action.Diff.FocusOppositePaneAndScroll.text=Select Position In Opposite Diff Pan action.Diff.FocusOppositePaneAndScroll.description=Select the same position in opposite pane in diff view action.Diff.PrevChange.text=Compare Previous File action.Diff.NextChange.text=Compare Next File -action.Diff.SelectedChange.text=Choose File To Compare action.Diff.ApplyLeftSide.text=Accept Left Side action.Diff.ApplyRightSide.text=Accept Right Side action.Diff.AppendLeftSide.text=Append Left Side diff --git a/platform/platform-resources/src/idea/VcsActions.xml b/platform/platform-resources/src/idea/VcsActions.xml index fb3f0a36184a..ecf6df0f61e5 100644 --- a/platform/platform-resources/src/idea/VcsActions.xml +++ b/platform/platform-resources/src/idea/VcsActions.xml @@ -218,8 +218,6 @@ icon="AllIcons.Actions.Prevfile" use-shortcut-of="PreviousTab"/> - @@ -381,7 +379,6 @@ - From 596a82d1b97c317ea16a6454bd6cdffd3997eb2f Mon Sep 17 00:00:00 2001 From: Alexander Koshevoy Date: Thu, 29 Jun 2017 20:28:45 +0300 Subject: [PATCH 59/93] Fixes some comments in IDEA-CR-22189 --- .../RemoteServerListConfigurableProvider.java | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurableProvider.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurableProvider.java index 0da148995892..f2f65794e212 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurableProvider.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/impl/configuration/RemoteServerListConfigurableProvider.java @@ -20,6 +20,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurableEP; import com.intellij.openapi.options.ConfigurableProvider; +import com.intellij.openapi.options.UnnamedConfigurable; import com.intellij.remoteServer.ServerType; import com.intellij.remoteServer.configuration.RemoteServersManager; import com.intellij.util.containers.ContainerUtil; @@ -27,7 +28,9 @@ import org.jetbrains.annotations.NotNull; import java.util.Arrays; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author Sergey.Malenkov @@ -47,21 +50,23 @@ public final class RemoteServerListConfigurableProvider extends ConfigurableProv @NotNull private static List> getServerTypesInCloudsList() { Application application = ApplicationManager.getApplication(); - List> excludedTypes = Arrays.stream(application.getExtensions(Configurable.APPLICATION_CONFIGURABLE)) - .filter(RemoteServerListConfigurableProvider::isRemoteServerListConfigurable) - .filter(ConfigurableEP::canCreateConfigurable) - .map(ConfigurableEP::createConfigurable) - .map(RemoteServerListConfigurable.class::cast) - .map(RemoteServerListConfigurable::getDisplayedServerTypes) - .flatMap(List::stream) - .collect(Collectors.toList()); + Set> excludedTypes = Arrays.stream(application.getExtensions(Configurable.APPLICATION_CONFIGURABLE)) + .flatMap(RemoteServerListConfigurableProvider::tryGetServerTypes) + .collect(Collectors.toSet()); ServerType[] allServerTypes = ServerType.EP_NAME.getExtensions(); return ContainerUtil.filter(allServerTypes, t -> !excludedTypes.contains(t)); } - private static boolean isRemoteServerListConfigurable(@NotNull ConfigurableEP ep) { + @NotNull + private static Stream> tryGetServerTypes(@NotNull ConfigurableEP ep) { Class type = ep.getConfigurableType(); - return type != null && RemoteServerListConfigurable.class.isAssignableFrom(type); + if (type != null && RemoteServerListConfigurable.class.isAssignableFrom(type)) { + UnnamedConfigurable configurable = ep.createConfigurable(); + if (configurable instanceof RemoteServerListConfigurable) { + return ((RemoteServerListConfigurable)configurable).getDisplayedServerTypes().stream(); + } + } + return Stream.empty(); } } From 7e894d6f2e8bda8fb51d428899d6491d90e3a5c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yann=20C=C3=A9bron?= Date: Thu, 29 Jun 2017 19:46:42 +0200 Subject: [PATCH 60/93] [devkit] RegistrationCheckerUtil: performance, #3 more fine-grained search for registration --- .../ComponentNotRegisteredInspection.java | 77 +++++++++---------- .../inspections/RegistrationCheckerUtil.java | 58 +++++++++----- .../RegistrationProblemsInspection.java | 4 +- 3 files changed, 78 insertions(+), 61 deletions(-) diff --git a/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java b/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java index 8538484bf42b..78513d3b4553 100644 --- a/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java +++ b/plugins/devkit/src/inspections/ComponentNotRegisteredInspection.java @@ -25,7 +25,6 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.NullableLazyValue; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.MethodReferencesSearch; @@ -41,12 +40,12 @@ import org.jetbrains.idea.devkit.DevKitBundle; import org.jetbrains.idea.devkit.inspections.quickfix.RegisterActionFix; import org.jetbrains.idea.devkit.inspections.quickfix.RegisterComponentFix; import org.jetbrains.idea.devkit.module.PluginModuleType; -import org.jetbrains.idea.devkit.util.ActionType; import org.jetbrains.idea.devkit.util.ComponentType; import javax.swing.*; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import java.util.Map; import java.util.Set; public class ComponentNotRegisteredInspection extends DevKitInspectionBase { @@ -101,15 +100,6 @@ public class ComponentNotRegisteredInspection extends DevKitInspectionBase { GlobalSearchScope scope = checkedClass.getResolveScope(); - final NullableLazyValue registrationType = new NullableLazyValue() { - @Nullable - @Override - protected PsiClass compute() { - final Set types = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS); - return ContainerUtil.getFirstItem(types); - } - }; - if (CHECK_ACTIONS) { PsiClass actionClass = JavaPsiFacade.getInstance(manager.getProject()).findClass(AnAction.class.getName(), scope); if (actionClass == null) { @@ -120,7 +110,7 @@ public class ComponentNotRegisteredInspection extends DevKitInspectionBase { if (IGNORE_NON_PUBLIC && !checkedClass.hasModifierProperty(PsiModifier.PUBLIC)) { return null; } - if (!isActionRegistered(checkedClass, registrationType.getValue()) && canFix(checkedClass)) { + if (!isActionRegistered(checkedClass) && canFix(checkedClass)) { LocalQuickFix fix = new RegisterActionFix(org.jetbrains.idea.devkit.util.PsiUtil.createPointer(checkedClass)); ProblemDescriptor problem = manager.createProblemDescriptor(classIdentifier, @@ -139,45 +129,50 @@ public class ComponentNotRegisteredInspection extends DevKitInspectionBase { // stop if component class cannot be found (non-devkit module/project) return null; } - if (checkedClass.isInheritor(compClass, true)) { - boolean registeredAsComponent = false; + if (!checkedClass.isInheritor(compClass, true)) { + return null; + } - final PsiClass registrationClass = registrationType.getValue(); - if (registrationClass != null) { - final String qualifiedName = registrationClass.getQualifiedName(); - registeredAsComponent = !ActionType.ACTION.myClassName.equals(qualifiedName) && - !ActionType.GROUP.myClassName.equals(qualifiedName); + for (ComponentType componentType : ComponentType.values()) { + if (!InheritanceUtil.isInheritor(checkedClass, componentType.myClassName)) { + continue; } - if (!registeredAsComponent && canFix(checkedClass)) { - ComponentType type = null; - for (ComponentType componentType : ComponentType.values()) { - if (InheritanceUtil.isInheritor(checkedClass, componentType.myClassName)) { - type = componentType; - break; - } - } - if (type == null) { - return null; - } - - LocalQuickFix fix = new RegisterComponentFix(type, org.jetbrains.idea.devkit.util.PsiUtil.createPointer(checkedClass)); - ProblemDescriptor problem = - manager.createProblemDescriptor(classIdentifier, - DevKitBundle.message("inspections.component.not.registered.message", - DevKitBundle.message(type.myPropertyKey)), - fix, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly); - return new ProblemDescriptor[]{problem}; + if (findRegistrationType(checkedClass, COMPONENT_TYPE_TO_REGISTRATION_TYPE.get(componentType)) != null) { + return null; } + + if (!canFix(checkedClass)) { + return null; + } + LocalQuickFix fix = new RegisterComponentFix(componentType, org.jetbrains.idea.devkit.util.PsiUtil.createPointer(checkedClass)); + ProblemDescriptor problem = + manager.createProblemDescriptor(classIdentifier, + DevKitBundle.message("inspections.component.not.registered.message", + DevKitBundle.message(componentType.myPropertyKey)), + fix, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, isOnTheFly); + return new ProblemDescriptor[]{problem}; } } return null; } - private static boolean isActionRegistered(PsiClass actionClass, PsiClass registrationType) { + private static final Map COMPONENT_TYPE_TO_REGISTRATION_TYPE = + ContainerUtil.immutableMapBuilder() + .put(ComponentType.APPLICATION, RegistrationCheckerUtil.RegistrationType.APPLICATION_COMPONENT) + .put(ComponentType.PROJECT, RegistrationCheckerUtil.RegistrationType.PROJECT_COMPONENT) + .put(ComponentType.MODULE, RegistrationCheckerUtil.RegistrationType.MODULE_COMPONENT) + .build(); + + private static PsiClass findRegistrationType(@Nullable PsiClass checkedClass, RegistrationCheckerUtil.RegistrationType type) { + final Set types = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, type); + return ContainerUtil.getFirstItem(types); + } + + private static boolean isActionRegistered(PsiClass actionClass) { + final PsiClass registrationType = findRegistrationType(actionClass, RegistrationCheckerUtil.RegistrationType.ACTION); if (registrationType != null) { - if (ActionType.ACTION.myClassName.equals(registrationType.getQualifiedName())) return true; - if (ActionType.GROUP.myClassName.equals(registrationType.getQualifiedName())) return true; + return true; } // search code usages: 1) own CTOR calls 2) usage via "new ActionClass()" diff --git a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java index 9edc40a45ec2..17d8701ae527 100644 --- a/plugins/devkit/src/inspections/RegistrationCheckerUtil.java +++ b/plugins/devkit/src/inspections/RegistrationCheckerUtil.java @@ -42,8 +42,17 @@ import java.util.Set; class RegistrationCheckerUtil { + enum RegistrationType { + ALL, + ALL_COMPONENTS, + APPLICATION_COMPONENT, + PROJECT_COMPONENT, + MODULE_COMPONENT, + ACTION + } + @Nullable - static Set getRegistrationTypes(PsiClass psiClass, boolean includeActions) { + static Set getRegistrationTypes(PsiClass psiClass, RegistrationType registrationType) { final Project project = psiClass.getProject(); final PsiFile psiFile = psiClass.getContainingFile(); @@ -56,7 +65,7 @@ class RegistrationCheckerUtil { final boolean isIdeaProject = PsiUtil.isIdeaProject(project); - final Set pluginModuleResults = checkModule(module, isIdeaProject, psiClass, includeActions); + final Set pluginModuleResults = checkModule(module, isIdeaProject, psiClass, registrationType); if (pluginModuleResults != null) { return pluginModuleResults; } @@ -64,7 +73,7 @@ class RegistrationCheckerUtil { final List candidateModules = PluginModuleType.getCandidateModules(module); candidateModules.remove(module); // already checked for (Module m : candidateModules) { - Set types = checkModule(m, isIdeaProject, psiClass, includeActions); + Set types = checkModule(m, isIdeaProject, psiClass, registrationType); if (types != null) return types; } @@ -75,7 +84,7 @@ class RegistrationCheckerUtil { private static Set checkModule(Module module, boolean isIdeaProject, PsiClass psiClass, - boolean includeActions) { + RegistrationType registrationType) { List> pluginXmlCandidates = findPluginXmlFilesForModule(module, isIdeaProject); if (pluginXmlCandidates.isEmpty()) return null; @@ -88,7 +97,7 @@ class RegistrationCheckerUtil { for (DomFileElement pluginXml : pluginXmlCandidates) { // "main" plugin.xml - if (!processPluginXml(pluginXml, finder, includeActions)) return finder.getTypes(); + if (!processPluginXml(pluginXml, finder, registrationType)) return finder.getTypes(); if (isIdeaProject) continue; // pluginXmlCandidates == all candidates in module @@ -105,7 +114,7 @@ class RegistrationCheckerUtil { final DomFileElement dependentIdeaPlugin = DescriptorUtil.getIdeaPlugin(depPluginXml); if (dependentIdeaPlugin != null) { - if (!processPluginXml(dependentIdeaPlugin, finder, includeActions)) return finder.getTypes(); + if (!processPluginXml(dependentIdeaPlugin, finder, registrationType)) return finder.getTypes(); } } } @@ -131,23 +140,34 @@ class RegistrationCheckerUtil { private static boolean processPluginXml(DomFileElement pluginXml, RegistrationTypeFinder finder, - boolean includeActions) { + RegistrationType registrationType) { final IdeaPlugin rootElement = pluginXml.getRootElement(); - if (!ContainerUtil.process(rootElement.getApplicationComponents(), components -> - finder.processComponents(ComponentType.APPLICATION, components.getComponents()))) { - return false; - } - if (!ContainerUtil.process(rootElement.getProjectComponents(), components -> - finder.processComponents(ComponentType.PROJECT, components.getComponents()))) { - return false; - } - if (!ContainerUtil.process(rootElement.getModuleComponents(), components -> - finder.processComponents(ComponentType.MODULE, components.getComponents()))) { - return false; + final boolean findAll = registrationType == RegistrationType.ALL; + final boolean allComponents = findAll || registrationType == RegistrationType.ALL_COMPONENTS; + + if (allComponents || registrationType == RegistrationType.APPLICATION_COMPONENT) { + if (!ContainerUtil.process(rootElement.getApplicationComponents(), components -> + finder.processComponents(ComponentType.APPLICATION, components.getComponents()))) { + return false; + } } - if (includeActions) { + if (allComponents || registrationType == RegistrationType.PROJECT_COMPONENT) { + if (!ContainerUtil.process(rootElement.getProjectComponents(), components -> + finder.processComponents(ComponentType.PROJECT, components.getComponents()))) { + return false; + } + } + + if (allComponents || registrationType == RegistrationType.MODULE_COMPONENT) { + if (!ContainerUtil.process(rootElement.getModuleComponents(), components -> + finder.processComponents(ComponentType.MODULE, components.getComponents()))) { + return false; + } + } + + if (findAll || registrationType == RegistrationType.ACTION) { if (!ContainerUtil.process(rootElement.getActions(), actions -> finder.processActions(actions))) { return false; diff --git a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java index b288812eb227..aba52942d4dc 100644 --- a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java +++ b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java @@ -115,7 +115,9 @@ public class RegistrationProblemsInspection extends DevKitInspectionBase { nameIdentifier != null && checkedClass.getQualifiedName() != null && checkedClass.getContainingFile().getVirtualFile() != null) { - final Set componentClasses = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, CHECK_ACTIONS); + final RegistrationCheckerUtil.RegistrationType registrationType = + CHECK_ACTIONS ? RegistrationCheckerUtil.RegistrationType.ALL : RegistrationCheckerUtil.RegistrationType.ALL_COMPONENTS; + final Set componentClasses = RegistrationCheckerUtil.getRegistrationTypes(checkedClass, registrationType); if (componentClasses != null && !componentClasses.isEmpty()) { List problems = new SmartList<>(); From cf6018c64d01af1233eaf2d63f09d5ee403b3345 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 20:39:17 +0300 Subject: [PATCH 61/93] [git] first commit can be empty when file history is empty EA-103921 --- plugins/git4idea/src/git4idea/history/GitFileHistory.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/git4idea/src/git4idea/history/GitFileHistory.java b/plugins/git4idea/src/git4idea/history/GitFileHistory.java index 768d671b8be7..7da3401f8155 100644 --- a/plugins/git4idea/src/git4idea/history/GitFileHistory.java +++ b/plugins/git4idea/src/git4idea/history/GitFileHistory.java @@ -118,7 +118,9 @@ public class GitFileHistory { } try { - Pair firstCommitParentAndPath = getFirstCommitParentAndPathIfRename(recordConsumer.getFirstCommit(), currentPath); + String firstCommit = recordConsumer.getFirstCommit(); + if (firstCommit == null) return; + Pair firstCommitParentAndPath = getFirstCommitParentAndPathIfRename(firstCommit, currentPath); if (firstCommitParentAndPath == null) { return; } @@ -448,7 +450,7 @@ public class GitFileHistory { return myCurrentPath.get(); } - @NotNull + @Nullable public String getFirstCommit() { return myFirstCommit.get(); } From aeae4d744288ac784fdbc5f40dd309e0d4b49fb5 Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Thu, 29 Jun 2017 21:12:22 +0300 Subject: [PATCH 62/93] Test fix: do not remove SDK roots because typesheds are also removed in this case --- python/testSrc/com/jetbrains/python/sdkTools/PyTestSdkTools.java | 1 - 1 file changed, 1 deletion(-) diff --git a/python/testSrc/com/jetbrains/python/sdkTools/PyTestSdkTools.java b/python/testSrc/com/jetbrains/python/sdkTools/PyTestSdkTools.java index d4b2f801df35..26230463d676 100644 --- a/python/testSrc/com/jetbrains/python/sdkTools/PyTestSdkTools.java +++ b/python/testSrc/com/jetbrains/python/sdkTools/PyTestSdkTools.java @@ -109,7 +109,6 @@ public final class PyTestSdkTools { final SdkModificator modificator = sdk.getSdkModificator(); - modificator.removeRoots(OrderRootType.CLASSES); modificator.setSdkAdditionalData(new PythonSdkAdditionalData(PythonSdkFlavor.getFlavor(sdk))); From 2551703651e678479b67a5d2edfd003c07f1cb59 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 29 Jun 2017 21:37:32 +0300 Subject: [PATCH 63/93] expand all selected paths if more than one --- .../src/com/intellij/ui/TreeExpandCollapse.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ui/TreeExpandCollapse.java b/platform/platform-impl/src/com/intellij/ui/TreeExpandCollapse.java index baf86acc57b8..dfd3076583c2 100644 --- a/platform/platform-impl/src/com/intellij/ui/TreeExpandCollapse.java +++ b/platform/platform-impl/src/com/intellij/ui/TreeExpandCollapse.java @@ -31,9 +31,13 @@ public class TreeExpandCollapse { } public static void expandAll(JTree tree) { - TreePath path = tree.getSelectionPath(); - if (path == null) path = new TreePath(tree.getModel().getRoot()); - new ExpandContext(300, 10).expand(tree, path); + TreePath[] paths = tree.getSelectionPaths(); + if (paths == null) { + paths = new TreePath[] { new TreePath(tree.getModel().getRoot()) }; + } + for (TreePath path : paths) { + new ExpandContext(300, 10).expand(tree, path); + } } private static class ExpandContext { From ddda48e8c4ba23c491e239f56167ccd469a12a6d Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Thu, 29 Jun 2017 21:45:06 +0300 Subject: [PATCH 64/93] [git] set handler to the created record for debugging purposes EA-83758 --- plugins/git4idea/src/git4idea/history/GitLogUtil.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/git4idea/src/git4idea/history/GitLogUtil.java b/plugins/git4idea/src/git4idea/history/GitLogUtil.java index 6d0176541ad3..a9629d1de6dd 100644 --- a/plugins/git4idea/src/git4idea/history/GitLogUtil.java +++ b/plugins/git4idea/src/git4idea/history/GitLogUtil.java @@ -90,6 +90,7 @@ public class GitLogUtil { for (String parent : record.getParentsHashes()) { parents.add(HashImpl.build(parent)); } + record.setUsedHandler(h); return factory.createShortDetails(HashImpl.build(record.getHash()), parents, record.getCommitTime(), root, record.getSubject(), record.getAuthorName(), record.getAuthorEmail(), record.getCommitterName(), record.getCommitterEmail(), @@ -121,6 +122,7 @@ public class GitLogUtil { List records = parser.parse(output); for (GitLogRecord record : records) { if (record == null) continue; + record.setUsedHandler(handler); Hash hash = HashImpl.build(record.getHash()); List parents = getParentHashes(factory, record); @@ -286,6 +288,7 @@ public class GitLogUtil { try { GitLogRecord record = parser.parseOneRecord(output); if (record != null) { + record.setUsedHandler(handler); converter.consume(record); } } From e60108fc0650b8f475118639657bad53c1b730c2 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 29 Jun 2017 21:54:56 +0300 Subject: [PATCH 65/93] less logging for EA-103861 - assert: VirtualFileManagerImpl.getFileSystem --- .../intellij/openapi/vfs/impl/VirtualFileManagerImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java index fa67da9afd05..38d8da323df6 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java @@ -85,8 +85,11 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx { public VirtualFileSystem getFileSystem(@Nullable String protocol) { if (protocol == null) return null; List systems = myCollector.forKey(protocol); - if (systems.isEmpty()) return null; - LOG.assertTrue(systems.size() == 1, protocol + ": " + systems); + int size = systems.size(); + if (size == 0) return null; + if (size > 1) { + LOG.error(protocol + ": " + systems); + } return systems.get(0); } From a775610324877bf80520c3c31cb13c8d7e954ea0 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 29 Jun 2017 17:30:19 +0200 Subject: [PATCH 66/93] SSR: fix replace tool window issues - ask for all files at once when replacing selected read-only files - don't cache excluded usages, so they can be changed after a replace - allow preview on multiple selected files - select a sensible next usage after replace - more efficient when replacing many usages by using removeUsagesBulk() --- .../replace/ui/ReplaceUsageViewContext.java | 171 +++++++----------- 1 file changed, 65 insertions(+), 106 deletions(-) diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java index 9728828facf3..2c43042dc847 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java @@ -19,6 +19,7 @@ import com.intellij.history.LocalHistory; import com.intellij.history.LocalHistoryAction; import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; import com.intellij.structuralsearch.MatchResult; import com.intellij.structuralsearch.SSRBundle; import com.intellij.structuralsearch.plugin.replace.ReplacementInfo; @@ -26,21 +27,18 @@ import com.intellij.structuralsearch.plugin.replace.impl.Replacer; import com.intellij.structuralsearch.plugin.ui.Configuration; import com.intellij.structuralsearch.plugin.ui.SearchContext; import com.intellij.structuralsearch.plugin.ui.UsageViewContext; -import com.intellij.usageView.UsageInfo; import com.intellij.usages.Usage; import com.intellij.usages.UsageInfo2UsageAdapter; import com.intellij.usages.UsageView; +import com.intellij.util.ObjectUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; class ReplaceUsageViewContext extends UsageViewContext { private final HashMap usage2ReplacementInfo = new HashMap<>(); private final Replacer replacer = new Replacer(mySearchContext.getProject(), ((ReplaceConfiguration)myConfiguration).getReplaceOptions()); private UsageView myUsageView; - private Set myExcludedSet; ReplaceUsageViewContext(SearchContext context, Configuration configuration, Runnable searchStarter) { super(configuration, context, searchStarter); @@ -51,128 +49,89 @@ class ReplaceUsageViewContext extends UsageViewContext { myUsageView = usageView; } - public Replacer getReplacer() { - return replacer; - } - public void addReplaceUsage(Usage usage, MatchResult result) { - usage2ReplacementInfo.put(usage, getReplacer().buildReplacement(result)); + usage2ReplacementInfo.put(usage, replacer.buildReplacement(result)); } - private boolean isValid(UsageInfo2UsageAdapter info) { - final UsageInfo usageInfo = info.getUsageInfo(); - return !isExcluded(info) && usageInfo.getElement() != null && usageInfo.getElement().isValid(); + private static boolean isValid(UsageInfo2UsageAdapter info) { + final PsiElement element = info.getUsageInfo().getElement(); + return element != null && element.isValid(); } @Override protected void configureActions() { - final Runnable replaceRunnable = () -> { - LocalHistoryAction labelAction = LocalHistory.getInstance().startAction(SSRBundle.message("structural.replace.title")); - - doReplace(); - myUsageView.close(); - - labelAction.finish(); - }; - - //noinspection HardCodedStringLiteral - myUsageView.addPerformOperationAction(replaceRunnable, "Replace All", null, SSRBundle.message("do.replace.all.button")); - - final Runnable replaceSelected = () -> { - final Set infos = myUsageView.getSelectedUsages(); - if (infos == null || infos.isEmpty()) return; - - LocalHistoryAction labelAction = LocalHistory.getInstance().startAction(SSRBundle.message("structural.replace.title")); - - for (final Usage info : infos) { - final UsageInfo2UsageAdapter usage = (UsageInfo2UsageAdapter)info; - - if (isValid(usage)) { - replaceOne(usage, false); - } - } - - labelAction.finish(); - - if (myUsageView.getUsagesCount() > 0) { - for (Usage usage : myUsageView.getSortedUsages()) { - if (!isExcluded(usage)) { - myUsageView.selectUsages(new Usage[]{usage}); - return; - } - } - } - }; - - myUsageView.addButtonToLowerPane(replaceSelected, SSRBundle.message("replace.selected.button")); + myUsageView.addButtonToLowerPane(() -> replace(myUsageView.getSortedUsages()), SSRBundle.message("do.replace.all.button")); + myUsageView.addButtonToLowerPane(() -> replace(myUsageView.getSelectedUsages()), SSRBundle.message("replace.selected.button")); final Runnable previewReplacement = () -> { - Set selection = myUsageView.getSelectedUsages(); - - if (selection != null && !selection.isEmpty()) { - UsageInfo2UsageAdapter usage = (UsageInfo2UsageAdapter)selection.iterator().next(); - - if (isValid(usage)) { - replaceOne(usage, true); + final Set selection = myUsageView.getSelectedUsages(); + if (selection == null || selection.isEmpty()) { + return; + } + for (Usage usage : selection) { + final UsageInfo2UsageAdapter info = (UsageInfo2UsageAdapter)usage; + if (!isValid(info) || myUsageView.getExcludedUsages().contains(usage)) { + continue; } + final ReplacementInfo replacementInfo = usage2ReplacementInfo.get(usage); + final ReplacementPreviewDialog previewDialog = + new ReplacementPreviewDialog(mySearchContext.getProject(), info.getUsageInfo(), replacementInfo.getReplacement()); + if (!previewDialog.showAndGet()) { + return; + } + replace(Collections.singleton(info)); } }; - myUsageView.addButtonToLowerPane(previewReplacement, SSRBundle.message("preview.replacement.button")); - - super.configureActions(); } - private static void ensureFileWritable(final UsageInfo2UsageAdapter usage) { - final VirtualFile file = usage.getFile(); + private void replace(Collection usages) { + if (usages == null) { + return; + } + final Set excluded = myUsageView.getExcludedUsages(); + usages = usages.stream().filter(u -> !excluded.contains(u)).filter(u -> isValid((UsageInfo2UsageAdapter)u)).collect(Collectors.toList()); - if (file != null && !file.isWritable()) { - ReadonlyStatusHandler.getInstance(usage.getElement().getProject()).ensureFilesWritable(file); + final List files = usages.stream().map(i -> ((UsageInfo2UsageAdapter)i).getFile()).collect(Collectors.toList()); + if (ReadonlyStatusHandler.getInstance(mySearchContext.getProject()).ensureFilesWritable(files).hasReadonlyFiles()) { + return; + } + removeUsagesAndSelectNext(usages, excluded); + final LocalHistoryAction action = LocalHistory.getInstance().startAction(SSRBundle.message("structural.replace.title")); + try { + replacer.replaceAll(usages.stream().map(usage2ReplacementInfo::get).collect(Collectors.toList())); + } finally { + action.finish(); } } - private void replaceOne(UsageInfo2UsageAdapter info, boolean doConfirm) { - ReplacementInfo replacementInfo = usage2ReplacementInfo.get(info); - boolean approved; - - if (doConfirm) { - ReplacementPreviewDialog wrapper = - new ReplacementPreviewDialog(mySearchContext.getProject(), info.getUsageInfo(), replacementInfo.getReplacement()); - - approved = wrapper.showAndGet(); + private void removeUsagesAndSelectNext(Collection usages, Collection excluded) { + final List sortedUsages = myUsageView.getSortedUsages(); + if (sortedUsages.size() == usages.size()) { + myUsageView.close(); } else { - approved = true; - } - - if (approved) { - ensureFileWritable(info); - myUsageView.removeUsage(info); - getReplacer().replace(replacementInfo); - - if (myUsageView.getUsagesCount() == 0) { - myUsageView.close(); + Usage firstValid = null; + Usage select = null; + for (Usage usage : sortedUsages) { + if (usages.contains(usage)) { + select = null; + continue; + } + if (excluded.contains(usage) || !isValid((UsageInfo2UsageAdapter)usage)) { + continue; + } + if (select == null) { + select = usage; + } + if (firstValid == null) { + firstValid = usage; + } } + myUsageView.removeUsagesBulk(usages); + myUsageView.selectUsages(new Usage[]{ + ObjectUtils.coalesce(select, firstValid, myUsageView.getSortedUsages().get(0)) + }); } } - - private void doReplace() { - List infos = myUsageView.getSortedUsages(); - List results = new ArrayList<>(infos.size()); - - for (final Usage info : infos) { - UsageInfo2UsageAdapter usage = (UsageInfo2UsageAdapter)info; - - if (isValid(usage)) { - results.add(usage2ReplacementInfo.get(usage)); - } - } - - getReplacer().replaceAll(results); - } - - private boolean isExcluded(Usage usage) { - if (myExcludedSet == null) myExcludedSet = myUsageView.getExcludedUsages(); - return myExcludedSet.contains(usage); - } } From dbf5098292bb0b4a0554b9be80326f8733ec33ef Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 29 Jun 2017 17:41:27 +0200 Subject: [PATCH 67/93] a nullable collection leads to confusion --- .../find/replaceInProject/ReplaceInProjectManager.java | 5 ++--- .../plugin/replace/ui/ReplaceUsageViewContext.java | 8 +++----- platform/usageView/src/com/intellij/usages/UsageView.java | 5 ++--- .../src/com/intellij/usages/impl/UsageViewImpl.java | 6 +++--- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java index c0fe923f9e4c..e0ef589cd2ef 100644 --- a/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java +++ b/platform/lang-impl/src/com/intellij/find/replaceInProject/ReplaceInProjectManager.java @@ -58,7 +58,6 @@ import com.intellij.usages.rules.UsageInFile; import com.intellij.util.AdapterProcessor; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.*; @@ -491,8 +490,8 @@ public class ReplaceInProjectManager { return true; } - private void replaceUsagesUnderCommand(@NotNull final ReplaceContext replaceContext, @Nullable final Set usagesSet) { - if (usagesSet == null) { + private void replaceUsagesUnderCommand(@NotNull final ReplaceContext replaceContext, @NotNull final Set usagesSet) { + if (usagesSet.isEmpty()) { return; } diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java index 2c43042dc847..f71d1b7fc6ef 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/replace/ui/ReplaceUsageViewContext.java @@ -31,6 +31,7 @@ import com.intellij.usages.Usage; import com.intellij.usages.UsageInfo2UsageAdapter; import com.intellij.usages.UsageView; import com.intellij.util.ObjectUtils; +import org.jetbrains.annotations.NotNull; import java.util.*; import java.util.stream.Collectors; @@ -65,7 +66,7 @@ class ReplaceUsageViewContext extends UsageViewContext { final Runnable previewReplacement = () -> { final Set selection = myUsageView.getSelectedUsages(); - if (selection == null || selection.isEmpty()) { + if (selection.isEmpty()) { return; } for (Usage usage : selection) { @@ -85,10 +86,7 @@ class ReplaceUsageViewContext extends UsageViewContext { myUsageView.addButtonToLowerPane(previewReplacement, SSRBundle.message("preview.replacement.button")); } - private void replace(Collection usages) { - if (usages == null) { - return; - } + private void replace(@NotNull Collection usages) { final Set excluded = myUsageView.getExcludedUsages(); usages = usages.stream().filter(u -> !excluded.contains(u)).filter(u -> isValid((UsageInfo2UsageAdapter)u)).collect(Collectors.toList()); diff --git a/platform/usageView/src/com/intellij/usages/UsageView.java b/platform/usageView/src/com/intellij/usages/UsageView.java index 82fa8851feb7..2e93e9354f3d 100644 --- a/platform/usageView/src/com/intellij/usages/UsageView.java +++ b/platform/usageView/src/com/intellij/usages/UsageView.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -81,8 +81,7 @@ public interface UsageView extends Disposable { @NotNull Set getExcludedUsages(); - @Nullable - Set getSelectedUsages(); + @NotNull Set getSelectedUsages(); @NotNull Set getUsages(); @NotNull List getSortedUsages(); diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java index 11cd89d8eaa7..e7bf59a5ece3 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java @@ -1470,12 +1470,12 @@ public class UsageViewImpl implements UsageView { } @Override - @Nullable + @NotNull public Set getSelectedUsages() { ApplicationManager.getApplication().assertIsDispatchThread(); TreePath[] selectionPaths = myTree.getSelectionPaths(); if (selectionPaths == null) { - return null; + return Collections.emptySet(); } Set usages = new THashSet<>(); @@ -1679,7 +1679,7 @@ public class UsageViewImpl implements UsageView { else if (key == USAGES_KEY) { final Set selectedUsages = getSelectedUsages(); - sink.put(USAGES_KEY, selectedUsages != null ? selectedUsages.toArray(new Usage[selectedUsages.size()]) : null); + sink.put(USAGES_KEY, selectedUsages.toArray(new Usage[selectedUsages.size()])); } else if (key == USAGE_TARGETS_KEY) { From 9c5a627aeea4ba25fd84db82a56c11fa1b1b0ed4 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Thu, 29 Jun 2017 21:53:48 +0200 Subject: [PATCH 68/93] avoid deadlock at initialization (IDEA-175193) --- .../com/intellij/util/indexing/FileBasedIndexImpl.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java index 69ab2b03a203..32673635d193 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndexImpl.java @@ -318,6 +318,12 @@ public class FileBasedIndexImpl extends FileBasedIndex implements BaseComponent, started = System.nanoTime(); myStateFuture = IndexInfrastructure.submitGenesisTask(new FileIndexDataInitialization(extensions)); + IndexInfrastructure.submitGenesisTask(() -> { + if (!myShutdownPerformed.get()) { + myChangedFilesCollector.ensureUpToDateAsync(); + } + return null; + }); LOG.info("Index scheduled:" + (System.nanoTime() - started) / 1000000); if (!IndexInfrastructure.ourDoAsyncIndicesInitialization) { waitUntilIndicesAreInitialized(); @@ -2381,8 +2387,6 @@ public class FileBasedIndexImpl extends FileBasedIndex implements BaseComponent, } }); myInitialized = true; // this will ensure that all changes to component's state will be visible to other threads - - myChangedFilesCollector.ensureUpToDateAsync(); } } } From 7ccc5647b87d7d40a254fdb5c5adb886b11de653 Mon Sep 17 00:00:00 2001 From: Semyon Proshev Date: Thu, 29 Jun 2017 23:06:45 +0300 Subject: [PATCH 69/93] Fix test data for PyRedeclarationInspectionTest.testUnderscorePrefixed. --- .../PyRedeclarationInspection/underscorePrefixed.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py b/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py index e2a82a93af74..1aeb1f4b6319 100644 --- a/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py +++ b/python/testData/inspections/PyRedeclarationInspection/underscorePrefixed.py @@ -6,7 +6,7 @@ l = lambda _a: [_a for _a in []] f2e = [(f, e) for _a, e, f in [(1, 2, 3)]] -e2f = [(e, f) for _a, e, f in [(1, 2, 3)]] +e2f = [(e, f) for _a, e, f in [(1, 2, 3)]] array = [1, 2, 3] -_a, mid, _a = array \ No newline at end of file +_a, mid, _a = array \ No newline at end of file From dd1ef4e79178c763f3033fd607aa5eec1f2f4e91 Mon Sep 17 00:00:00 2001 From: Pavel Fatin Date: Thu, 29 Jun 2017 22:52:59 +0200 Subject: [PATCH 70/93] @SystemIndependent instrumentation: use "indexOf" instead of "contains" --- .../instrumentation/internal/AssertionMethodImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java index 4b8a7c46419b..c3e39f8c2106 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/internal/AssertionMethodImpl.java @@ -22,7 +22,7 @@ import com.intellij.openapi.diagnostic.Logger; */ class AssertionMethodImpl { private static void assertArgumentIsSystemIndependent(String className, String methodName, String parameterName, String argument) { - if (argument != null && argument.contains("\\")) { + if (argument != null && argument.indexOf('\\') > -1) { String message = String.format("Argument for @SystemIndependent parameter '%s' of %s.%s must be system-independent: %s", parameterName, className, methodName, argument); From d23311ca50b611888c4a3a6f6cef00d89dabce4a Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Fri, 30 Jun 2017 01:40:53 +0300 Subject: [PATCH 71/93] java.lang.IllegalStateException: element.parent must not be null --- python/src/com/jetbrains/python/testing/PyTestsShared.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/src/com/jetbrains/python/testing/PyTestsShared.kt b/python/src/com/jetbrains/python/testing/PyTestsShared.kt index 8f6e33a4fbc9..b1ee4474ec2e 100644 --- a/python/src/com/jetbrains/python/testing/PyTestsShared.kt +++ b/python/src/com/jetbrains/python/testing/PyTestsShared.kt @@ -700,7 +700,7 @@ object PyTestsConfigurationProducer : com.jetbrains.python.testing.AbstractPytho } } } - element = element.parent + element = element.parent ?: break } while (element !is com.intellij.psi.PsiDirectory) // if parent is folder, then we are at file level return null From f4076b4ad794c00570c3dcd2812ac7453eb9ee06 Mon Sep 17 00:00:00 2001 From: Kiryl Chetyrbak Date: Thu, 13 Apr 2017 10:32:56 -0400 Subject: [PATCH 72/93] Patch command line in PyPackageManager --- .../jetbrains/python/packaging/PyPackageManagerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java index d2c1c45fab48..cd15397fe2e7 100644 --- a/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java +++ b/python/src/com/jetbrains/python/packaging/PyPackageManagerImpl.java @@ -41,8 +41,10 @@ import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.net.HttpConfigurable; import com.jetbrains.python.PythonHelpersLocator; import com.jetbrains.python.psi.LanguageLevel; +import com.jetbrains.python.run.CommandLinePatcher; import com.jetbrains.python.sdk.PythonEnvUtil; import com.jetbrains.python.sdk.PythonSdkType; +import com.jetbrains.python.sdk.flavors.PythonSdkFlavor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -471,6 +473,10 @@ public class PyPackageManagerImpl extends PyPackageManager { PythonEnvUtil.setPythonUnbuffered(environment); PythonEnvUtil.setPythonDontWriteBytecode(environment); PythonEnvUtil.resetHomePathChanges(homePath, environment); + final PythonSdkFlavor flavor = PythonSdkFlavor.getFlavor(mySdk); + if (flavor != null && flavor.commandLinePatcher() != null) { + flavor.commandLinePatcher().patchCommandLine(commandLine); + } final Process process; if (useSudo) { process = ExecUtil.sudo(commandLine, "Please enter your password to make changes in system packages: "); From 288e99245dec2f34614cdff44f917c3954c1767a Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 29 Jun 2017 16:50:12 +0200 Subject: [PATCH 73/93] slowCheck: handle exceptions from generators --- .../src/slowCheck/GeneratorException.java | 11 ++++++ slowCheck/src/slowCheck/PropertyChecker.java | 22 ++++++++++-- slowCheck/src/slowCheck/PropertyFailure.java | 3 ++ slowCheck/test/slowCheck/ExceptionTest.java | 36 +++++++++++++++++++ slowCheck/test/slowCheck/GeneratorTest.java | 9 ----- 5 files changed, 70 insertions(+), 11 deletions(-) create mode 100644 slowCheck/src/slowCheck/GeneratorException.java diff --git a/slowCheck/src/slowCheck/GeneratorException.java b/slowCheck/src/slowCheck/GeneratorException.java new file mode 100644 index 000000000000..6cc9ea143a50 --- /dev/null +++ b/slowCheck/src/slowCheck/GeneratorException.java @@ -0,0 +1,11 @@ +package slowCheck; + +/** + * @author peter + */ +public class GeneratorException extends RuntimeException { + + GeneratorException(long seed, Throwable cause) { + super("Exception while generating data, seed=" + seed, cause); + } +} diff --git a/slowCheck/src/slowCheck/PropertyChecker.java b/slowCheck/src/slowCheck/PropertyChecker.java index 6859c043ec8e..d6ec3b6e7cc3 100644 --- a/slowCheck/src/slowCheck/PropertyChecker.java +++ b/slowCheck/src/slowCheck/PropertyChecker.java @@ -79,7 +79,13 @@ public class PropertyChecker { private CounterExampleImpl findCounterExample(int sizeHint) { for (int i = 0; i < 100; i++) { StructureNode node = new StructureNode(); - T value = generator.generateUnstructured(new GenerativeDataStructure(random, node, sizeHint)); + T value; + try { + value = generator.generateUnstructured(new GenerativeDataStructure(random, node, sizeHint)); + } + catch (Throwable e) { + throw new GeneratorException(seed, e); + } if (!generatedHashes.add(node.hashCode())) continue; return CounterExampleImpl.checkProperty(property, value, node); @@ -92,12 +98,18 @@ public class PropertyChecker { private CounterExampleImpl minimized; private int totalSteps; private int sizeHint; + private Throwable stoppingReason; PropertyFailureImpl(@NotNull CounterExampleImpl initial, int sizeHint) { this.initial = initial; this.minimized = initial; this.sizeHint = sizeHint; - shrink(); + try { + shrink(); + } + catch (Throwable e) { + stoppingReason = e; + } } @NotNull @@ -112,6 +124,12 @@ public class PropertyChecker { return minimized; } + @Nullable + @Override + public Throwable getStoppingReason() { + return stoppingReason; + } + @Override public int getTotalMinimizationStepCount() { return totalSteps; diff --git a/slowCheck/src/slowCheck/PropertyFailure.java b/slowCheck/src/slowCheck/PropertyFailure.java index 3c2fbb7b5888..5999ebc19c37 100644 --- a/slowCheck/src/slowCheck/PropertyFailure.java +++ b/slowCheck/src/slowCheck/PropertyFailure.java @@ -12,6 +12,9 @@ public interface PropertyFailure { @NotNull CounterExample getMinimalCounterexample(); + + @Nullable + Throwable getStoppingReason(); int getTotalMinimizationStepCount(); diff --git a/slowCheck/test/slowCheck/ExceptionTest.java b/slowCheck/test/slowCheck/ExceptionTest.java index 6c876fc6cc84..3494cc88106d 100644 --- a/slowCheck/test/slowCheck/ExceptionTest.java +++ b/slowCheck/test/slowCheck/ExceptionTest.java @@ -1,6 +1,8 @@ package slowCheck; +import static slowCheck.Generator.from; import static slowCheck.Generator.integers; +import static slowCheck.Generator.listsOf; /** * @author peter @@ -48,4 +50,38 @@ public class ExceptionTest extends PropertyCheckerTestCase { } } + public void testExceptionWhileGeneratingValue() { + try { + PropertyChecker.forAll(ourTestSettings, from(data -> { + throw new AssertionError("fail"); + }), i -> true); + fail(); + } + catch (GeneratorException ignore) { + } + } + + public void testExceptionWhileShrinkingValue() { + try { + PropertyChecker.forAll(ourTestSettings, listsOf(integers()).suchThat(l -> { + if (l.size() == 1 && l.get(0) == 0) throw new RuntimeException("my exception"); + return true; + }), l -> l.stream().allMatch(i -> i > 0)); + fail(); + } + catch (PropertyFalsified e) { + assertEquals("my exception", e.getFailure().getStoppingReason().getMessage()); + } + } + + public void testUnsatisfiableSuchThat() { + try { + PropertyChecker.forAll(integers(-1, 1).suchThat(i -> i > 2), i -> i == 0); + fail(); + } + catch (GeneratorException e) { + assertTrue(e.getCause() instanceof CannotSatisfyCondition); + } + } + } diff --git a/slowCheck/test/slowCheck/GeneratorTest.java b/slowCheck/test/slowCheck/GeneratorTest.java index b8be3046acde..ad83d8c2a6a3 100644 --- a/slowCheck/test/slowCheck/GeneratorTest.java +++ b/slowCheck/test/slowCheck/GeneratorTest.java @@ -75,15 +75,6 @@ public class GeneratorTest extends PropertyCheckerTestCase { PropertyChecker.forAll(integers().suchThat(i -> i < 0), i -> i < 0); } - public void testUnsatisfiableSuchThat() { - try { - PropertyChecker.forAll(integers(-1, 1).suchThat(i -> i > 2), i -> i == 0); - fail(); - } - catch (CannotSatisfyCondition ignored) { - } - } - public void testStringOfStringChecksAllChars() { checkFalsified(stringsOf("abc "), s -> !s.contains(" "), From 11b8ec6ec81680f996dae7bd5ca94b1ace7f007e Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 29 Jun 2017 22:09:33 +0200 Subject: [PATCH 74/93] try to provide a cause for PCE happening in disposable indicators e.g. daemon's --- .../util/AbstractProgressIndicatorBase.java | 16 ++++++++++++++-- .../progress/ProcessCanceledException.java | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java b/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java index d74c7c2b50ba..10bca4f54152 100644 --- a/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java +++ b/platform/core-impl/src/com/intellij/openapi/progress/util/AbstractProgressIndicatorBase.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.progress.util; +import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.TransactionGuard; @@ -25,13 +26,16 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.progress.impl.CoreProgressManager; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.ui.mac.foundation.MacUtil; +import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.DoubleArrayList; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Set; @@ -127,15 +131,23 @@ public class AbstractProgressIndicatorBase extends UserDataHolderBase implements @Override public void checkCanceled() { if (isCanceled() && isCancelable()) { - throw new ProcessCanceledException(); + throw new ProcessCanceledException(getDisposeTrace()); } if (CoreProgressManager.runCheckCanceledHooks(this)) { if (isCanceled() && isCancelable()) { - throw new ProcessCanceledException(); + throw new ProcessCanceledException(getDisposeTrace()); } } } + @Nullable + private Throwable getDisposeTrace() { + if (this instanceof Disposable) { + return ObjectUtils.tryCast(Disposer.getTree().getDisposalInfo((Disposable)this), Throwable.class); + } + return null; + } + @Override public void setText(final String text) { myText = text; diff --git a/platform/util/src/com/intellij/openapi/progress/ProcessCanceledException.java b/platform/util/src/com/intellij/openapi/progress/ProcessCanceledException.java index 598fd86f2c61..de0e2f1ed52f 100644 --- a/platform/util/src/com/intellij/openapi/progress/ProcessCanceledException.java +++ b/platform/util/src/com/intellij/openapi/progress/ProcessCanceledException.java @@ -16,12 +16,12 @@ package com.intellij.openapi.progress; import com.intellij.openapi.diagnostic.ControlFlowException; -import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; public class ProcessCanceledException extends RuntimeException implements ControlFlowException { public ProcessCanceledException() { } - public ProcessCanceledException(@NotNull Throwable cause) { + public ProcessCanceledException(@Nullable Throwable cause) { super(cause); if (cause instanceof ProcessCanceledException) { throw new IllegalArgumentException("Must not self-wrap ProcessCanceledException: " + cause); From fef1016e08129c3803f306652ba0d4b0ab543e8a Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 30 Jun 2017 08:39:11 +0200 Subject: [PATCH 75/93] goto line: select offset text when focusing, to quickly overwrite it --- .../com/intellij/ide/util/GotoLineNumberDialog.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java b/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java index 6b322715a20d..9866caddad74 100644 --- a/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java +++ b/platform/platform-impl/src/com/intellij/ide/util/GotoLineNumberDialog.java @@ -28,6 +28,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -80,6 +82,14 @@ public abstract class GotoLineNumberDialog extends DialogWrapper { class MyTextField extends JTextField { public MyTextField() { super(""); + addFocusListener(new FocusAdapter() { + @Override + public void focusGained(FocusEvent e) { + if (!e.isTemporary()) { + selectAll(); + } + } + }); } public Dimension getPreferredSize() { From 3b46635bdc205daf306728310354ef906c0c887c Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Fri, 30 Jun 2017 11:38:44 +0300 Subject: [PATCH 76/93] IDEA-175189 Projects are displayed in random order in the Gradle Composite Build Configuration window --- .../gradle/ui/GradleProjectCompositeSelectorDialog.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectCompositeSelectorDialog.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectCompositeSelectorDialog.java index 4b1f83dea1dd..0c0d5dc19665 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectCompositeSelectorDialog.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/ui/GradleProjectCompositeSelectorDialog.java @@ -70,7 +70,7 @@ public class GradleProjectCompositeSelectorDialog extends DialogWrapper { myExternalSystemUiAware = ExternalSystemUiUtil.getUiAware(GradleConstants.SYSTEM_ID); myTree = createTree(); - setTitle(String.format("%s Project Build Composite", GradleConstants.SYSTEM_ID.getReadableName())); + setTitle("Composite Build Configuration"); init(); } @@ -121,7 +121,7 @@ public class GradleProjectCompositeSelectorDialog extends DialogWrapper { private CheckboxTree createTree() { final CheckedTreeNode root = new CheckedTreeNode(); if (myCompositeRootSettings != null) { - List nodes = ContainerUtil.newArrayList(); + List nodes = ContainerUtil.newArrayList(); for (GradleProjectSettings projectSettings : GradleSettings.getInstance(myProject).getLinkedProjectsSettings()) { if (projectSettings == myCompositeRootSettings) continue; if (projectSettings.getCompositeBuild() != null && @@ -140,6 +140,8 @@ public class GradleProjectCompositeSelectorDialog extends DialogWrapper { nodes.add(treeNode); } + ContainerUtil.sort(nodes, (o1, o2) -> + StringUtil.naturalCompare((String)((Pair)o1.getUserObject()).first, (String)((Pair)o2.getUserObject()).first)); TreeUtil.addChildrenTo(root, nodes); } From 8799713ad47576a093eb61d50436b4ca9d8c24ed Mon Sep 17 00:00:00 2001 From: "Irina.Chernushina" Date: Thu, 29 Jun 2017 17:07:44 +0200 Subject: [PATCH 77/93] WEB-27538 JSON Schema: quick documentation improvements --- .../impl/JsonSchemaCompletionContributor.java | 9 ++-- .../impl/JsonSchemaDocumentationProvider.java | 41 ++++++------------ .../jsonSchema/impl/JsonSchemaObject.java | 11 ++++- .../jsonSchema/impl/JsonSchemaResolver.java | 1 + .../JsonBySchemaDocumentationBaseTest.java | 13 +++++- .../JsonSchemaDocumentationTest.java | 8 ++++ .../impl/JsonBySchemaCompletionTest.java | 43 +++++++++++++++++++ .../documentation/checkEscaping_short.html | 1 + .../documentation/secondLevel_short.html | 1 + .../documentation/simple_short.html | 1 + .../documentation/withDefinition.html | 1 + .../documentation/withDefinition.json | 3 ++ .../documentation/withDefinitionSchema.json | 12 ++++++ .../documentation/withDefinition_short.html | 1 + .../documentation/withTitleInDefinition.html | 1 + .../documentation/withTitleInDefinition.json | 3 ++ .../withTitleInDefinitionSchema.json | 13 ++++++ .../withTitleInDefinition_short.html | 1 + 18 files changed, 128 insertions(+), 36 deletions(-) create mode 100644 json/tests/testData/jsonSchema/documentation/checkEscaping_short.html create mode 100644 json/tests/testData/jsonSchema/documentation/secondLevel_short.html create mode 100644 json/tests/testData/jsonSchema/documentation/simple_short.html create mode 100644 json/tests/testData/jsonSchema/documentation/withDefinition.html create mode 100644 json/tests/testData/jsonSchema/documentation/withDefinition.json create mode 100644 json/tests/testData/jsonSchema/documentation/withDefinitionSchema.json create mode 100644 json/tests/testData/jsonSchema/documentation/withDefinition_short.html create mode 100644 json/tests/testData/jsonSchema/documentation/withTitleInDefinition.html create mode 100644 json/tests/testData/jsonSchema/documentation/withTitleInDefinition.json create mode 100644 json/tests/testData/jsonSchema/documentation/withTitleInDefinitionSchema.json create mode 100644 json/tests/testData/jsonSchema/documentation/withTitleInDefinition_short.html diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java index 749064ab01a6..8b0a752eef7e 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaCompletionContributor.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Consumer; +import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker; import com.jetbrains.jsonSchema.extension.JsonSchemaFileProvider; @@ -210,13 +211,13 @@ public class JsonSchemaCompletionContributor extends CompletionContributor { } private void addPropertyVariant(@NotNull String key, @NotNull JsonSchemaObject jsonSchemaObject, boolean hasValue, boolean insertComma) { - final String description = jsonSchemaObject.getDescription(); - final String title = jsonSchemaObject.getTitle(); + jsonSchemaObject = ObjectUtils.coalesce(ContainerUtil.getFirstItem(new JsonSchemaResolver(jsonSchemaObject).resolve()), + jsonSchemaObject); key = !myWrapInQuotes ? key : StringUtil.wrapWithDoubleQuote(key); LookupElementBuilder builder = LookupElementBuilder.create(key); - String typeText = StringUtil.isEmpty(title) ? description : title; - if (!StringUtil.isEmpty(typeText)) { + final String typeText = StringUtil.escapeXml(jsonSchemaObject.getDocumentation(true)); + if (!StringUtil.isEmptyOrSpaces(typeText)) { builder = builder.withTypeText(typeText, true); } diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java index c866e1e02346..b399cd843109 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaDocumentationProvider.java @@ -1,15 +1,11 @@ package com.jetbrains.jsonSchema.impl; -import com.intellij.json.psi.JsonObject; -import com.intellij.json.psi.JsonProperty; -import com.intellij.json.psi.JsonStringLiteral; -import com.intellij.json.psi.JsonValue; import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ObjectUtils; import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker; import com.jetbrains.jsonSchema.ide.JsonSchemaService; import org.jetbrains.annotations.NotNull; @@ -23,7 +19,7 @@ public class JsonSchemaDocumentationProvider implements DocumentationProvider { @Nullable @Override public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) { - return null; + return findSchemaAndGenerateDoc(element, originalElement, true); } @Nullable @@ -35,21 +31,24 @@ public class JsonSchemaDocumentationProvider implements DocumentationProvider { @Nullable @Override public String generateDoc(PsiElement element, @Nullable PsiElement originalElement) { + return findSchemaAndGenerateDoc(element, originalElement, false); + } + + @Nullable + private static String findSchemaAndGenerateDoc(PsiElement element, @Nullable PsiElement originalElement, final boolean preferShort) { + element = ObjectUtils.coalesce(originalElement, element); final PsiFile containingFile = element.getContainingFile(); if (containingFile == null) return null; final JsonSchemaService service = JsonSchemaService.Impl.get(element.getProject()); final JsonSchemaObject rootSchema = service.getSchemaObject(containingFile.getViewProvider().getVirtualFile()); if (rootSchema == null) return null; - if (JsonSchemaService.isSchemaFile(containingFile)) { - return generateForJsonSchemaFileType(element); - } - return generateDoc(element, rootSchema); + return generateDoc(element, rootSchema, preferShort); } @Nullable public static String generateDoc(@NotNull final PsiElement element, - @NotNull final JsonSchemaObject rootSchema) { + @NotNull final JsonSchemaObject rootSchema, final boolean preferShort) { final JsonLikePsiWalker walker = JsonLikePsiWalker.getWalker(element, rootSchema); if (walker == null) return null; @@ -59,24 +58,8 @@ public class JsonSchemaDocumentationProvider implements DocumentationProvider { final Collection schemas = new JsonSchemaResolver(rootSchema, true, position).resolve(); - return schemas.stream().filter(schema -> !StringUtil.isEmptyOrSpaces(schema.getDescription())) - .findFirst().map(JsonSchemaObject::getDescription).orElse(null); - } - - @Nullable - private static String generateForJsonSchemaFileType(@NotNull PsiElement element) { - final JsonProperty jsonProperty = - element instanceof JsonProperty ? (JsonProperty)element : PsiTreeUtil.getParentOfType(element, JsonProperty.class); - if (jsonProperty != null) { - final JsonValue value = jsonProperty.getValue(); - if (value instanceof JsonObject) { - final JsonProperty description = ((JsonObject)value).findProperty("description"); - if (description != null && description.getValue() instanceof JsonStringLiteral) { - return StringUtil.escapeXml(StringUtil.unquoteString(description.getValue().getText())); - } - } - } - return null; + return StringUtil.escapeXml(schemas.stream().filter(schema -> !StringUtil.isEmptyOrSpaces(schema.getDocumentation(preferShort))) + .findFirst().map(schema -> schema.getDocumentation(preferShort)).orElse(null)); } @Nullable diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaObject.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaObject.java index 6a413de23d00..b531bfe4a3e0 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaObject.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaObject.java @@ -87,7 +87,7 @@ public class JsonSchemaObject { // peer pointer is not merged! public void mergeValues(JsonSchemaObject other) { - // we do not copy id, schema, title and description + // we do not copy id, schema myProperties.putAll(other.myProperties); myDefinitionsMap = copyMap(myDefinitionsMap, other.myDefinitionsMap); @@ -95,6 +95,9 @@ public class JsonSchemaObject { other.myPatternProperties == null ? null : other.myPatternProperties.mySchemasMap); myPatternProperties = map == null ? null : new PatternProperties(map); + if (!StringUtil.isEmptyOrSpaces(other.myTitle)) { + myTitle = other.myTitle; + } if (!StringUtil.isEmptyOrSpaces(other.myDescription)) { myDescription = other.myDescription; } @@ -548,6 +551,12 @@ public class JsonSchemaObject { return current; } + @Nullable + public String getDocumentation(final boolean preferShort) { + if (preferShort) return StringUtil.isEmptyOrSpaces(myTitle) ? myDescription : myTitle; + return StringUtil.isEmptyOrSpaces(myDescription) ? myTitle : myDescription; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaResolver.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaResolver.java index 169821a805cb..2f635c73dc09 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaResolver.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaResolver.java @@ -54,6 +54,7 @@ public class JsonSchemaResolver { return MatchResult.create(node); } + @NotNull public Collection resolve() { return resolve(false, false, false); } diff --git a/json/tests/test/com/jetbrains/jsonSchema/JsonBySchemaDocumentationBaseTest.java b/json/tests/test/com/jetbrains/jsonSchema/JsonBySchemaDocumentationBaseTest.java index 191fa9ba56e2..1cd2dea2fa74 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/JsonBySchemaDocumentationBaseTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/JsonBySchemaDocumentationBaseTest.java @@ -20,8 +20,10 @@ import com.intellij.json.JsonLanguage; import com.intellij.lang.LanguageDocumentation; import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.psi.PsiElement; +import com.intellij.psi.util.PsiUtilBase; import com.jetbrains.jsonSchema.impl.JsonSchemaDocumentationProvider; import org.jetbrains.annotations.NotNull; +import org.junit.Assert; import java.util.ArrayList; @@ -52,7 +54,8 @@ public abstract class JsonBySchemaDocumentationBaseTest extends JsonSchemaHeavyA @Override public void doCheck() { - PsiElement psiElement = DocumentationManager.getInstance(getProject()).findTargetElement(myEditor, myFile); + final PsiElement psiElement = PsiUtilBase.getElementAtCaret(myEditor); + Assert.assertNotNull(psiElement); assertDocumentation(psiElement, psiElement, hasDoc); } }); @@ -65,6 +68,12 @@ public abstract class JsonBySchemaDocumentationBaseTest extends JsonSchemaHeavyA protected void assertDocumentation(@NotNull PsiElement docElement, @NotNull PsiElement context, boolean shouldHaveDoc) { DocumentationProvider documentationProvider = DocumentationManager.getProviderFromElement(context); String inlineDoc = documentationProvider.generateDoc(docElement, context); + String quickNavigate = documentationProvider.getQuickNavigateInfo(docElement, context); + checkExpectedDoc(shouldHaveDoc, inlineDoc, false); + checkExpectedDoc(shouldHaveDoc, quickNavigate, true); + } + + private void checkExpectedDoc(boolean shouldHaveDoc, String inlineDoc, boolean preferShort) { if (shouldHaveDoc) { assertNotNull("inline help is null", inlineDoc); } @@ -72,7 +81,7 @@ public abstract class JsonBySchemaDocumentationBaseTest extends JsonSchemaHeavyA assertNull("inline help is not null", inlineDoc); } if (shouldHaveDoc) { - assertSameLinesWithFile(getTestDataPath() + "/" + getTestName(true) + ".html", inlineDoc); + assertSameLinesWithFile(getTestDataPath() + "/" + getTestName(true) + (preferShort ? "_short.html" : ".html"), inlineDoc); } } } diff --git a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaDocumentationTest.java b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaDocumentationTest.java index b7f47cb68571..88e69f8823ba 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaDocumentationTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaDocumentationTest.java @@ -32,4 +32,12 @@ public class JsonSchemaDocumentationTest extends JsonBySchemaDocumentationBaseTe public void testCheckEscaping() throws Exception { doTest(true, "json"); } + + public void testWithDefinition() throws Exception { + doTest(true, "json"); + } + + public void testWithTitleInDefinition() throws Exception { + doTest(true, "json"); + } } diff --git a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java index fe2072a64959..631165f20686 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/impl/JsonBySchemaCompletionTest.java @@ -1,7 +1,9 @@ package com.jetbrains.jsonSchema.impl; +import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.jetbrains.jsonSchema.JsonSchemaHighlightingTest; import org.jetbrains.annotations.NotNull; +import org.junit.Assert; /** * @author Irina.Chernushina on 10/1/2015. @@ -157,6 +159,47 @@ public class JsonBySchemaCompletionTest extends JsonBySchemaCompletionBaseTest { testImpl(schema, "{\"null\": }", "false", "null", "true"); } + public void testDescriptionFromDefinitionInCompletion() throws Exception { + final String schema = "{\n" + + " \"definitions\": {\n" + + " \"target\": {\n" + + " \"description\": \"Target description\"\n" + + " }\n" + + " },\n" + + " \"properties\": {\n" + + " \"source\": {\n" + + " \"$ref\": \"#/definitions/target\"\n" + + " }\n" + + " }\n" + + "}"; + testImpl(schema, "{}", "\"source\""); + Assert.assertEquals(1, myItems.length); + final LookupElementPresentation presentation = new LookupElementPresentation(); + myItems[0].renderElement(presentation); + Assert.assertEquals("Target description", presentation.getTypeText()); + } + + public void testDescriptionFromTitleInCompletion() throws Exception { + final String schema = "{\n" + + " \"definitions\": {\n" + + " \"target\": {\n" + + " \"title\": \"Target title\",\n" + + " \"description\": \"Target description\"\n" + + " }\n" + + " },\n" + + " \"properties\": {\n" + + " \"source\": {\n" + + " \"$ref\": \"#/definitions/target\"\n" + + " }\n" + + " }\n" + + "}"; + testImpl(schema, "{}", "\"source\""); + Assert.assertEquals(1, myItems.length); + final LookupElementPresentation presentation = new LookupElementPresentation(); + myItems[0].renderElement(presentation); + Assert.assertEquals("Target title", presentation.getTypeText()); + } + @NotNull private static String parcelShopSchema() { return "{\n" + diff --git a/json/tests/testData/jsonSchema/documentation/checkEscaping_short.html b/json/tests/testData/jsonSchema/documentation/checkEscaping_short.html new file mode 100644 index 000000000000..c73fc4ac3bd3 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/checkEscaping_short.html @@ -0,0 +1 @@ +Disallows /// <reference path=> imports (use ES6-style imports instead) \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/secondLevel_short.html b/json/tests/testData/jsonSchema/documentation/secondLevel_short.html new file mode 100644 index 000000000000..888aa3fb0ae8 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/secondLevel_short.html @@ -0,0 +1 @@ +my second level property description 1 \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/simple_short.html b/json/tests/testData/jsonSchema/documentation/simple_short.html new file mode 100644 index 000000000000..c4941ce9e4db --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/simple_short.html @@ -0,0 +1 @@ +my property description 1 \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withDefinition.html b/json/tests/testData/jsonSchema/documentation/withDefinition.html new file mode 100644 index 000000000000..d4bcb21909aa --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withDefinition.html @@ -0,0 +1 @@ +Description found through definition \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withDefinition.json b/json/tests/testData/jsonSchema/documentation/withDefinition.json new file mode 100644 index 000000000000..67cd5bfb5990 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withDefinition.json @@ -0,0 +1,3 @@ +{ + "source": {} +} \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withDefinitionSchema.json b/json/tests/testData/jsonSchema/documentation/withDefinitionSchema.json new file mode 100644 index 000000000000..12ca74daad47 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withDefinitionSchema.json @@ -0,0 +1,12 @@ +{ + "definitions": { + "target": { + "description": "Description found through definition" + } + }, + "properties": { + "source": { + "$ref": "#/definitions/target" + } + } +} \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withDefinition_short.html b/json/tests/testData/jsonSchema/documentation/withDefinition_short.html new file mode 100644 index 000000000000..d4bcb21909aa --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withDefinition_short.html @@ -0,0 +1 @@ +Description found through definition \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.html b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.html new file mode 100644 index 000000000000..d4bcb21909aa --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.html @@ -0,0 +1 @@ +Description found through definition \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.json b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.json new file mode 100644 index 000000000000..67cd5bfb5990 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition.json @@ -0,0 +1,3 @@ +{ + "source": {} +} \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withTitleInDefinitionSchema.json b/json/tests/testData/jsonSchema/documentation/withTitleInDefinitionSchema.json new file mode 100644 index 000000000000..7995bfeb9710 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withTitleInDefinitionSchema.json @@ -0,0 +1,13 @@ +{ + "definitions": { + "target": { + "title": "Title found through definition", + "description": "Description found through definition" + } + }, + "properties": { + "source": { + "$ref": "#/definitions/target" + } + } +} \ No newline at end of file diff --git a/json/tests/testData/jsonSchema/documentation/withTitleInDefinition_short.html b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition_short.html new file mode 100644 index 000000000000..3fc51fb08d52 --- /dev/null +++ b/json/tests/testData/jsonSchema/documentation/withTitleInDefinition_short.html @@ -0,0 +1 @@ +Title found through definition \ No newline at end of file From 909373cb17c43f378b33861a0e4a99a30626e409 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Fri, 30 Jun 2017 12:13:06 +0300 Subject: [PATCH 78/93] EA-102897 - ISE: InternalExternalProjectInfo.getExternalProjectPath --- .../model/internal/InternalExternalProjectInfo.java | 5 +++++ .../service/project/manage/ExternalProjectsDataStorage.java | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/model/internal/InternalExternalProjectInfo.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/model/internal/InternalExternalProjectInfo.java index 3d2a1cf3f87c..e7f7ca9b23b7 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/model/internal/InternalExternalProjectInfo.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/model/internal/InternalExternalProjectInfo.java @@ -61,6 +61,11 @@ public class InternalExternalProjectInfo implements ExternalProjectInfo, Seriali return myExternalProjectPath; } + @Nullable + public String getNullSafeExternalProjectPath() { + return myExternalProjectPath; + } + @Override @Nullable public DataNode getExternalProjectStructure() { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java index 97bcc853f59b..17456ace75f4 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ExternalProjectsDataStorage.java @@ -104,7 +104,10 @@ public class ExternalProjectsDataStorage implements SettingsSavingComponent, Per } } else { - markDirty(projectInfo.getExternalProjectPath()); + String projectPath = projectInfo.getNullSafeExternalProjectPath(); + if (projectPath != null) { + markDirty(projectPath); + } } } } From 40159b20ef534f1a8ffcb404db45b512ce295b77 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Fri, 30 Jun 2017 12:14:18 +0300 Subject: [PATCH 79/93] IDEA-175168 On-demand renderers - fixed long text view --- .../debugger/ui/impl/watch/ValueDescriptorImpl.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java index 6ac237b51544..a900f2206ca3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java @@ -33,6 +33,7 @@ import com.intellij.debugger.ui.tree.render.*; import com.intellij.debugger.ui.tree.render.Renderer; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; @@ -327,6 +328,16 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements public PsiExpression getDescriptorEvaluation(DebuggerContext context) throws EvaluateException { return null; } + + @Override + public NodeRenderer getRenderer(DebugProcessImpl debugProcess) { + return ValueDescriptorImpl.this.getRenderer(debugProcess); + } + + @Override + public T getUserData(Key key) { + return ValueDescriptorImpl.this.getUserData(key); + } }; descriptor.myFullValue = true; return descriptor; From a959efed0e71b4139a700302f88ae79a30b2c507 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 27 Jun 2017 14:19:09 +0300 Subject: [PATCH 80/93] Edu: remove all project guessing --- .../edu/coursecreator/CCVirtualFileListener.java | 12 +++++------- .../com/jetbrains/edu/learning/StudyTaskManager.java | 7 ++----- .../edu/learning/PyStudyLanguageLevelInspection.kt | 3 +-- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java index b08cb49066eb..11d78532fe80 100644 --- a/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java +++ b/python/educational-core/src/com/jetbrains/edu/coursecreator/CCVirtualFileListener.java @@ -1,7 +1,6 @@ package com.jetbrains.edu.coursecreator; import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectUtil; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileEvent; @@ -77,18 +76,17 @@ public class CCVirtualFileListener implements VirtualFileListener { return; } - Project project = ProjectUtil.guessProjectForFile(removedFile); - if (project == null) { + if (myProject == null) { return; } - if (project.getBasePath() !=null && !FileUtil.isAncestor(project.getBasePath(), removedFile.getPath(), true)) { + if (myProject.getBasePath() !=null && !FileUtil.isAncestor(myProject.getBasePath(), removedFile.getPath(), true)) { return; } - Course course = StudyTaskManager.getInstance(project).getCourse(); + Course course = StudyTaskManager.getInstance(myProject).getCourse(); if (course == null) { return; } - final TaskFile taskFile = StudyUtils.getTaskFile(project, removedFile); + final TaskFile taskFile = StudyUtils.getTaskFile(myProject, removedFile); if (taskFile != null) { deleteTaskFile(removedFile, taskFile); return; @@ -97,7 +95,7 @@ public class CCVirtualFileListener implements VirtualFileListener { deleteTask(course, removedFile); } if (removedFile.getName().contains(EduNames.LESSON)) { - deleteLesson(course, removedFile, project); + deleteLesson(course, removedFile, myProject); } } diff --git a/python/educational-core/src/com/jetbrains/edu/learning/StudyTaskManager.java b/python/educational-core/src/com/jetbrains/edu/learning/StudyTaskManager.java index 5014a322c1d0..810c24113f9f 100644 --- a/python/educational-core/src/com/jetbrains/edu/learning/StudyTaskManager.java +++ b/python/educational-core/src/com/jetbrains/edu/learning/StudyTaskManager.java @@ -4,10 +4,7 @@ import com.intellij.ide.fileTemplates.FileTemplate; import com.intellij.ide.fileTemplates.FileTemplateManager; import com.intellij.ide.fileTemplates.FileTemplateUtil; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.components.PersistentStateComponent; -import com.intellij.openapi.components.ServiceManager; -import com.intellij.openapi.components.State; -import com.intellij.openapi.components.Storage; +import com.intellij.openapi.components.*; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; @@ -41,7 +38,7 @@ import static com.jetbrains.edu.learning.StudySerializationUtils.Xml.REMOTE_COUR * about study in context of current project */ -@State(name = "StudySettings", storages = @Storage("study_project.xml")) +@State(name = "StudySettings", storages = @Storage(value = "study_project.xml", roamingType = RoamingType.DISABLED)) public class StudyTaskManager implements PersistentStateComponent, DumbAware { private static final Logger LOG = Logger.getInstance(StudyTaskManager.class); public static final int CURRENT_VERSION = 6; diff --git a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageLevelInspection.kt b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageLevelInspection.kt index f89f717f7f81..474a169c9f49 100644 --- a/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageLevelInspection.kt +++ b/python/educational-python/Edu-Python/src/com/jetbrains/edu/learning/PyStudyLanguageLevelInspection.kt @@ -8,7 +8,6 @@ import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.module.ModuleUtilCore import com.intellij.openapi.options.ShowSettingsUtil import com.intellij.openapi.project.Project -import com.intellij.openapi.project.guessProjectForContentFile import com.intellij.psi.PsiElementVisitor import com.intellij.psi.util.PsiUtilCore import com.jetbrains.edu.learning.courseFormat.Course @@ -42,7 +41,7 @@ class PyStudyLanguageLevelInspection : PyInspection() { val sdk = PythonSdkType.findPythonSdk(module) if (sdk != null) { val projectLanguageLevel = PythonSdkType.getLanguageLevelForSdk(sdk) - val project = guessProjectForContentFile(node.virtualFile) ?: return + val project = node.project val course = StudyTaskManager.getInstance(project).course ?: return checkIfLanguageLevelSupported(course, projectLanguageLevel, node) } From bf784d2d7e94b773790a12e9acab596ec9371054 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Fri, 30 Jun 2017 12:33:43 +0300 Subject: [PATCH 81/93] Jupyter Notebook: added validation for URL+token --- .../ipnb/configuration/IpnbConnectionManager.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java index 35e0d84f33d7..7b1f9aab1992 100644 --- a/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java +++ b/python/ipnb/src/org/jetbrains/plugins/ipnb/configuration/IpnbConnectionManager.java @@ -14,6 +14,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.InputValidator; import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.popup.*; @@ -174,7 +175,18 @@ public final class IpnbConnectionManager implements ProjectComponent, Disposable private static Pair askForUrlAndToken() { final String urlToken = Messages.showInputDialog("Please, enter your Jupyter Notebook URL and authentication token", - "Jupyter Notebook", null, "http://localhost:8888/?token=", null); + "Jupyter Notebook", null, "http://localhost:8888/?token=", + new InputValidator() { + @Override + public boolean checkInput(String inputString) { + return !inputString.endsWith("?token="); + } + + @Override + public boolean canClose(String inputString) { + return true; + } + }); if (!StringUtil.isEmptyOrSpaces(urlToken)) { final String trimmed = urlToken.trim(); final List strings = StringUtil.split(trimmed, "?token=", true); From 743944d82c03ee01bd9e7e4081dcb46789bfe133 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 30 Jun 2017 12:41:22 +0300 Subject: [PATCH 82/93] add ability yo run community tests in ultimate classpath --- .../org/jetbrains/intellij/build/TestingTasks.groovy | 5 ++++- .../intellij/build/impl/TestingTasksImpl.groovy | 10 +++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/TestingTasks.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/TestingTasks.groovy index 114eb6daadac..30a8df45a371 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/TestingTasks.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/TestingTasks.groovy @@ -17,6 +17,9 @@ package org.jetbrains.intellij.build import groovy.transform.CompileStatic import org.jetbrains.intellij.build.impl.TestingTasksImpl + +import java.util.function.Predicate + /** * @author nik */ @@ -26,7 +29,7 @@ abstract class TestingTasks { * @param defaultMainModule main module to be used instead of {@link TestingOptions#mainModule} if it isn't specified * @param excludedSourceDirectory if not {@code null} tests from modules which sources are located under this directory will be skipped */ - abstract void runTests(List additionalJvmOptions, String defaultMainModule, String excludedSourceDirectory) + abstract void runTests(List additionalJvmOptions, String defaultMainModule, Predicate rootExcludeCondition) static TestingTasks create(CompilationContext context, TestingOptions options = new TestingOptions()) { return new TestingTasksImpl(context, options) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy index c5ccb8cce72f..dbe1b35f56d4 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/TestingTasksImpl.groovy @@ -15,7 +15,6 @@ */ package org.jetbrains.intellij.build.impl -import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.io.FileUtilRt import groovy.transform.CompileDynamic import groovy.transform.CompileStatic @@ -28,6 +27,7 @@ import org.jetbrains.intellij.build.TestingTasks import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil +import java.util.function.Predicate /** * @author nik */ @@ -42,7 +42,7 @@ class TestingTasksImpl extends TestingTasks { } @Override - void runTests(List additionalJvmOptions, String defaultMainModule, String excludedSourceDirectory) { + void runTests(List additionalJvmOptions, String defaultMainModule, Predicate rootExcludeCondition) { def compilationTasks = CompilationTasks.create(context) if (options.mainModule != null) { compilationTasks.compileModules(["tests_bootstrap"], [options.mainModule]) @@ -108,11 +108,11 @@ class TestingTasksImpl extends TestingTasks { systemProperties[key.substring("pass.".length())] = value } } - - if (excludedSourceDirectory != null) { + + if (rootExcludeCondition != null) { List excludedModules = context.project.modules.findAll { List contentRoots = it.contentRootsList.urls - !contentRoots.isEmpty() && FileUtil.isAncestor(new File(excludedSourceDirectory), JpsPathUtil.urlToFile(contentRoots.first()), false) + !contentRoots.isEmpty() && rootExcludeCondition.test(JpsPathUtil.urlToFile(contentRoots.first())) } List excludedRoots = excludedModules.collectMany { [context.projectBuilder.moduleOutput(it), context.projectBuilder.moduleTestsOutput(it)] From e4bba435ade897174da166f0816510c067e5b676 Mon Sep 17 00:00:00 2001 From: "Irina.Chernushina" Date: Fri, 30 Jun 2017 12:02:22 +0200 Subject: [PATCH 83/93] json schema annotation fixes related to oneOf: [...] - if oneOf-schema does not have a detectable type, assume it matches for more detailed check; also, schema does not match if it has an enum, but actual type is object/array - if schemas are different with not-currently-tested properties (i.e. format), they are still different and we should not report that several schemas are matching + tests found checking the data from WEB-25058 Wrong json schema warning --- .../impl/JsonSchemaAnnotatorChecker.java | 33 +++++++++----- .../JsonSchemaHighlightingTest.java | 43 ++++++++++++++++++- 2 files changed, 63 insertions(+), 13 deletions(-) diff --git a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaAnnotatorChecker.java b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaAnnotatorChecker.java index 799ea2508ed9..0d9cfdaf76d9 100644 --- a/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaAnnotatorChecker.java +++ b/json/src/com/jetbrains/jsonSchema/impl/JsonSchemaAnnotatorChecker.java @@ -26,6 +26,7 @@ import com.intellij.psi.PsiElement; import com.intellij.util.ObjectUtils; import com.intellij.util.SmartList; import com.intellij.util.ThreeState; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import com.jetbrains.jsonSchema.extension.JsonLikePsiWalker; import com.jetbrains.jsonSchema.extension.adapters.JsonArrayValueAdapter; @@ -43,6 +44,8 @@ import java.util.stream.Collectors; * @author Irina.Chernushina on 4/25/2017. */ class JsonSchemaAnnotatorChecker { + private static final Set PRIMITIVE_TYPES = + ContainerUtil.set(JsonSchemaType._integer, JsonSchemaType._number, JsonSchemaType._boolean, JsonSchemaType._string, JsonSchemaType._null); private final Map myErrors; private boolean myHadTypeError; @@ -351,13 +354,12 @@ class JsonSchemaAnnotatorChecker { } private static boolean areSchemaTypesCompatible(@NotNull final JsonSchemaObject schema, @NotNull final JsonSchemaType type) { - if (getMatchingSchemaType(schema, type) != null) return true; - if (schema.getEnum() != null && (JsonSchemaType._integer.equals(type) || - JsonSchemaType._number.equals(type) || JsonSchemaType._boolean.equals(type) || - JsonSchemaType._string.equals(type))) { - return true; + if (schema.getEnum() != null) { + return PRIMITIVE_TYPES.contains(type); } - return false; + final JsonSchemaType matchingSchemaType = getMatchingSchemaType(schema, type); + if (matchingSchemaType != null) return matchingSchemaType.equals(type); + return true; } @Nullable @@ -550,7 +552,7 @@ class JsonSchemaAnnotatorChecker { private JsonSchemaObject processOneOf(@NotNull JsonValueAdapter value, List oneOf) { final Map errors = new HashMap<>(); boolean wasTypeError = false; - int cntCorrect = 0; + final List correct = new SmartList<>(); JsonSchemaObject current = null; for (JsonSchemaObject object : oneOf) { // skip it if something JS awaited, we do not process it currently @@ -562,7 +564,7 @@ class JsonSchemaAnnotatorChecker { if (checker.isCorrect()) { current = object; errors.clear(); - ++cntCorrect; + correct.add(object); } else { if (errors.isEmpty() || wasTypeError && !checker.isHadTypeError() || errors.size() > checker.getErrors().size()) { @@ -573,10 +575,15 @@ class JsonSchemaAnnotatorChecker { } } } - if (cntCorrect == 1) return current; - if (cntCorrect > 0) { + if (correct.size() == 1) return current; + if (correct.size() > 0) { final JsonSchemaType type = JsonSchemaType.getType(value); - if (type != null) error("Validates to more than one variant", value.getDelegate()); + if (type != null) { + // also check maybe some currently not checked properties like format are different with schemes + if (!schemesDifferWithNotCheckedProperties(correct)) { + error("Validates to more than one variant", value.getDelegate()); + } + } } else { if (!errors.isEmpty()) { @@ -588,6 +595,10 @@ class JsonSchemaAnnotatorChecker { return current; } + private static boolean schemesDifferWithNotCheckedProperties(@NotNull final List list) { + return list.stream().anyMatch(s -> !StringUtil.isEmptyOrSpaces(s.getFormat())); + } + // returns the schema, selected for annotation private JsonSchemaObject processAnyOf(@NotNull JsonValueAdapter value, List anyOf) { final Map errors = new HashMap<>(); diff --git a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaHighlightingTest.java b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaHighlightingTest.java index 7ff84fa0126f..62763ba31810 100644 --- a/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaHighlightingTest.java +++ b/json/tests/test/com/jetbrains/jsonSchema/JsonSchemaHighlightingTest.java @@ -305,8 +305,8 @@ public class JsonSchemaHighlightingTest extends DaemonAnalyzerTestCase { final String subSchema1 = "{\"enum\": [1,2,3,4,5]}"; final String subSchema2 = "{\"type\": \"array\", \"items\": {\"properties\": {\"kilo\": {}}, \"additionalProperties\": false}}"; final String schema = "{\"properties\": {\"prop\": {\"oneOf\": [" + subSchema1 + ", " + subSchema2 + "]}}}"; - doTest(schema, "{\"prop\": [{\"kilo\": 20}]}"); - doTest(schema, "{\"prop\": 5}"); + //doTest(schema, "{\"prop\": [{\"kilo\": 20}]}"); + //doTest(schema, "{\"prop\": 5}"); doTest(schema, "{\"prop\": [{\"foxtrot\": 15, \"kilo\": 20}]}"); } @@ -512,6 +512,45 @@ public class JsonSchemaHighlightingTest extends DaemonAnalyzerTestCase { doTest(schema, "{\"not_type\": \"4a4\"}"); } + public void testDoNotMarkOneOfThatDiffersWithFormat() throws Exception { + final String schema = "{\n" + + "\n" + + " \"properties\": {\n" + + " \"withFormat\": {\n" + + " \"type\": \"string\"," + + " \"oneOf\": [\n" + + " {\n" + + " \"format\":\"hostname\"\n" + + " },\n" + + " {\n" + + " \"format\": \"ip4\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + "}"; + doTest(schema, "{\"withFormat\": \"localhost\"}"); + } + + public void testAcceptSchemaWithoutType() throws Exception { + final String schema = "{\n" + + "\n" + + " \"properties\": {\n" + + " \"withFormat\": {\n" + + " \"oneOf\": [\n" + + " {\n" + + " \"format\":\"hostname\"\n" + + " },\n" + + " {\n" + + " \"format\": \"ip4\"\n" + + " }\n" + + " ]\n" + + " }\n" + + " }\n" + + "}"; + doTest(schema, "{\"withFormat\": \"localhost\"}"); + } + public static String rootObjectRedefinedSchema() { return "{\n" + " \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n" + From e5a1ed1b66f80f206bd8aa114224ee8637f89485 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 30 Jun 2017 12:11:54 +0200 Subject: [PATCH 84/93] directory index: correctly handle files for language injections (EA-102538) --- .../roots/impl/DirectoryInfoWithExcludePatterns.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoWithExcludePatterns.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoWithExcludePatterns.java index d647f8f53e7b..8bc920a1b4bd 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoWithExcludePatterns.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryInfoWithExcludePatterns.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.roots.impl; +import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.impl.FileTypeAssocTable; import com.intellij.openapi.module.Module; @@ -51,7 +52,7 @@ public class DirectoryInfoWithExcludePatterns extends DirectoryInfoImpl { private boolean isExcludedByPatterns(@NotNull VirtualFile file, @Nullable FileTypeAssocTable patterns) { if (patterns == null) return false; - VirtualFile current = file; + VirtualFile current = getPhysicalFile(file); while (current != null && !myRoot.equals(current)) { if (patterns.findAssociatedFileType(current.getNameSequence()) != null) { return true; @@ -64,6 +65,10 @@ public class DirectoryInfoWithExcludePatterns extends DirectoryInfoImpl { return false; } + private static VirtualFile getPhysicalFile(VirtualFile file) { + return file instanceof VirtualFileWindow ? ((VirtualFileWindow)file).getDelegate() : file; + } + @Override public boolean isExcluded(@NotNull VirtualFile file) { if (myExcluded) return true; @@ -75,7 +80,7 @@ public class DirectoryInfoWithExcludePatterns extends DirectoryInfoImpl { boolean inContent = getContentRoot() != null; if (!inContent && !myInLibrarySource) return false; - VirtualFile current = file; + VirtualFile current = getPhysicalFile(file); while (current != null && !myRoot.equals(current)) { CharSequence name = current.getNameSequence(); boolean excludedFromModule = myContentExcludePatterns != null && myContentExcludePatterns.findAssociatedFileType(name) != null; From f21f5d80611e7a423707198a1dbb1313fc33b8a5 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 30 Jun 2017 12:21:16 +0200 Subject: [PATCH 85/93] ant: get rid of circular dependency between services AntWorkspaceConfiguration accesses AntConfigurationImpl in its 'writeExternal' method so if AntConfigurationImpl's constructor depends on AntWorkspaceConfiguration it may lead to circular dependency (EA-95431). --- .../ant/config/impl/AntConfigurationImpl.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java index 1e3260c791fa..9e1abc052fb6 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java @@ -118,16 +118,14 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis private final Map myModelToBuildFileMap = new HashMap<>(); private final Map myAntFileToContextFileMap = new java.util.HashMap<>(); private final EventDispatcher myEventDispatcher = EventDispatcher.create(AntConfigurationListener.class); - private final AntWorkspaceConfiguration myAntWorkspaceConfiguration; private final StartupManager myStartupManager; - public AntConfigurationImpl(final Project project, final AntWorkspaceConfiguration antWorkspaceConfiguration, final DaemonCodeAnalyzer daemon) { + public AntConfigurationImpl(final Project project, final DaemonCodeAnalyzer daemon) { super(project); getProperties().registerProperty(DEFAULT_ANT, AntReference.EXTERNALIZER); getProperties().rememberKey(INSTANCE); getProperties().rememberKey(DEFAULT_JDK_NAME); INSTANCE.set(getProperties(), this); - myAntWorkspaceConfiguration = antWorkspaceConfiguration; myPsiManager = PsiManager.getInstance(project); myStartupManager = StartupManager.getInstance(project); addAntConfigurationListener(new AntConfigurationListener() { @@ -441,12 +439,12 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis @Override public boolean isFilterTargets() { - return myAntWorkspaceConfiguration.FILTER_TARGETS; + return getAntWorkspaceConfiguration().FILTER_TARGETS; } @Override public void setFilterTargets(final boolean value) { - myAntWorkspaceConfiguration.FILTER_TARGETS = value; + getAntWorkspaceConfiguration().FILTER_TARGETS = value; } @Override @@ -530,12 +528,12 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis @Override public boolean isAutoScrollToSource() { - return myAntWorkspaceConfiguration.IS_AUTOSCROLL_TO_SOURCE; + return getAntWorkspaceConfiguration().IS_AUTOSCROLL_TO_SOURCE; } @Override public void setAutoScrollToSource(final boolean value) { - myAntWorkspaceConfiguration.IS_AUTOSCROLL_TO_SOURCE = value; + getAntWorkspaceConfiguration().IS_AUTOSCROLL_TO_SOURCE = value; } @Override @@ -677,6 +675,10 @@ public class AntConfigurationImpl extends AntConfigurationBase implements Persis } } + private AntWorkspaceConfiguration getAntWorkspaceConfiguration() { + return AntWorkspaceConfiguration.getInstance(getProject()); + } + private static void collectTargetActions(final AntBuildTarget[] targets, final List> actionList, final AntBuildFile buildFile) { From 67058ae9075beb0262e9a3e4e3248770d6aea42d Mon Sep 17 00:00:00 2001 From: Pavel Dolgov Date: Wed, 28 Jun 2017 21:02:18 +0300 Subject: [PATCH 86/93] Java: Support Jigsaw modules in calculation of class usages and visibility - added inspection setting for exported packages (IDEA-169200, IDEA-169204) --- .../reference/RefJavaModule.java | 6 + .../java19modules/Java9ModuleEntryPoint.java | 159 +++++++++++---- .../reference/RefJavaModuleImpl.java | 184 +++++++++++------- .../EntryPointWithVisibilityLevel.java | 9 +- .../visibility/VisibilityInspection.java | 56 +++--- .../Public.java | 3 + .../ServiceApi.java | 3 + .../ServiceImpl.java | 3 + .../UsedService.java | 3 + .../expected.xml | 10 + .../java9Visibility/usedService/Api.java | 3 + .../java9Visibility/usedService/Impl.java | 4 + .../java9Visibility/usedService/Other.java | 4 + .../java9Visibility/usedService/expected.xml | 10 + .../codeInspection/Java9VisibilityTest.kt | 23 ++- 15 files changed, 342 insertions(+), 138 deletions(-) create mode 100644 java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/Public.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceApi.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceImpl.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/UsedService.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/expected.xml create mode 100644 java/java-tests/testData/inspection/java9Visibility/usedService/Api.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/usedService/Impl.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/usedService/Other.java create mode 100644 java/java-tests/testData/inspection/java9Visibility/usedService/expected.xml diff --git a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefJavaModule.java b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefJavaModule.java index bd072f85f38d..5c5ffd7a1371 100644 --- a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefJavaModule.java +++ b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefJavaModule.java @@ -35,9 +35,15 @@ public interface RefJavaModule extends RefElement { @NotNull Map> getExportedPackageNames(); + @NotNull + Set getServiceInterfaces(); + @NotNull Set getServiceImplementations(); + @NotNull + Set getUsedServices(); + @NotNull List getRequiredModules(); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleEntryPoint.java b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleEntryPoint.java index 63be397acfaa..3329d6334d5f 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleEntryPoint.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/java19modules/Java9ModuleEntryPoint.java @@ -16,8 +16,8 @@ package com.intellij.codeInspection.java19modules; import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil; -import com.intellij.codeInspection.reference.EntryPoint; -import com.intellij.codeInspection.reference.RefElement; +import com.intellij.codeInspection.reference.*; +import com.intellij.codeInspection.visibility.EntryPointWithVisibilityLevel; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.pom.java.LanguageLevel; @@ -30,16 +30,20 @@ import com.intellij.util.xmlb.XmlSerializer; import gnu.trove.THashSet; import one.util.streamex.StreamEx; import org.jdom.Element; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.List; +import java.util.Map; import java.util.Set; /** * @author Pavel.Dolgov */ -public class Java9ModuleEntryPoint extends EntryPoint { +public class Java9ModuleEntryPoint extends EntryPointWithVisibilityLevel { + public static final String ID = "moduleInfo"; public boolean ADD_EXPORTED_PACKAGES_AND_SERVICES_TO_ENTRIES = true; @NotNull @@ -56,54 +60,126 @@ public class Java9ModuleEntryPoint extends EntryPoint { @Override public boolean isEntryPoint(@NotNull PsiElement psiElement) { if (psiElement instanceof PsiClass) { - return isExported((PsiClass)psiElement); + return isServiceOrExported((PsiClass)psiElement); } if (psiElement instanceof PsiMethod) { PsiMethod method = (PsiMethod)psiElement; if (isDefaultConstructor(method) || isProviderMethod(method)) { - return isExported(method.getContainingClass()); + return isServiceOrExported(method.getContainingClass()); } } return false; } - private static boolean isDefaultConstructor(PsiMethod method) { + @Override + public int getMinVisibilityLevel(PsiMember member) { + if (member instanceof PsiClass) { + final PsiJavaModule javaModule = getJavaModule(member); + if (javaModule != null && + !isServiceClass((PsiClass)member, javaModule) && + isInExportedPackage((PsiClass)member, javaModule)) { + return PsiUtil.ACCESS_LEVEL_PACKAGE_LOCAL; + } + } + return -1; + } + + @Override + public String getTitle() { + return "Suggest package-private visibility level for classes in exported packages (Java 9+)"; + } + + @Override + public String getId() { + return ID; + } + + @Override + public boolean keepVisibilityLevel(boolean entryPointEnabled, RefJavaElement refJavaElement) { + if (refJavaElement instanceof RefClass) { + RefClass refClass = (RefClass)refJavaElement; + RefModule refModule = refClass.getModule(); + if (refModule != null) { + RefJavaModule refJavaModule = RefJavaModule.JAVA_MODULE.get(refModule); + if (refJavaModule != null) { + return isServiceClass(refClass, refJavaModule) || + !entryPointEnabled && isInExportedPackage(refClass, refJavaModule); + } + } + } + return false; + } + + private static boolean isInExportedPackage(@Nullable RefClass refClass, @NotNull RefJavaModule refJavaModule) { + RefEntity refOwner = refClass; + while (refOwner instanceof RefClass) { + String modifier = ((RefClass)refOwner).getAccessModifier(); + refOwner = PsiModifier.PUBLIC.equals(modifier) || PsiModifier.PROTECTED.equals(modifier) ? refOwner.getOwner() : null; + } + if (refOwner instanceof RefPackage) { + Map> exportedPackageNames = refJavaModule.getExportedPackageNames(); + if (exportedPackageNames.containsKey(refOwner.getQualifiedName())) { + return true; + } + } + return false; + } + + private static boolean isServiceClass(@Nullable RefClass refClass, @NotNull RefJavaModule refJavaModule) { + return refJavaModule.getServiceInterfaces().contains(refClass) || + refJavaModule.getServiceImplementations().contains(refClass) || + refJavaModule.getUsedServices().contains(refClass); + } + + + private static boolean isDefaultConstructor(@NotNull PsiMethod method) { return method.isConstructor() && method.getParameterList().getParametersCount() == 0 && method.hasModifierProperty(PsiModifier.PUBLIC); } - private static boolean isProviderMethod(PsiMethod method) { + private static boolean isProviderMethod(@NotNull PsiMethod method) { return "provider".equals(method.getName()) && method.getParameterList().getParametersCount() == 0 && method.hasModifierProperty(PsiModifier.PUBLIC) && method.hasModifierProperty(PsiModifier.STATIC); } - private static boolean isExported(@Nullable PsiClass psiClass) { - if (psiClass != null) { - String className = psiClass.getQualifiedName(); - if (className != null) { - final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(psiClass); - if (languageLevel.isAtLeast(LanguageLevel.JDK_1_9)) { - PsiJavaModule javaModule = JavaModuleGraphUtil.findDescriptorByElement(psiClass); - if (javaModule != null) { - String packageName = getPublicApiPackageName(psiClass); - if (packageName != null) { - Set exportedPackageNames = getExportedPackageNames(javaModule); - if (exportedPackageNames.contains(packageName)) { - return true; - } - } - Set serviceImplementationNames = getServiceImplementationNames(javaModule); - return serviceImplementationNames.contains(className); - } - } + private static boolean isServiceOrExported(@Nullable PsiClass psiClass) { + PsiJavaModule javaModule = getJavaModule(psiClass); + return javaModule != null && (isServiceClass(psiClass, javaModule) || isInExportedPackage(psiClass, javaModule)); + } + + private static boolean isInExportedPackage(@NotNull PsiClass psiClass, @NotNull PsiJavaModule javaModule) { + String packageName = getPublicApiPackageName(psiClass); + if (packageName != null) { + Set exportedPackageNames = getExportedPackageNames(javaModule); + if (exportedPackageNames.contains(packageName)) { + return true; } } return false; } + private static boolean isServiceClass(@NotNull PsiClass psiClass, @NotNull PsiJavaModule javaModule) { + Set serviceClassNames = CachedValuesManager.getCachedValue( + javaModule, () -> CachedValueProvider.Result.create(collectServiceClassNames(javaModule), javaModule)); + + return serviceClassNames.contains(psiClass.getQualifiedName()); + } + + @Contract("null -> null") + @Nullable + private static PsiJavaModule getJavaModule(@Nullable PsiElement element) { + if (element != null) { + final LanguageLevel languageLevel = PsiUtil.getLanguageLevel(element); + if (languageLevel.isAtLeast(LanguageLevel.JDK_1_9)) { + return JavaModuleGraphUtil.findDescriptorByElement(element); + } + } + return null; + } + private static String getPublicApiPackageName(PsiClass psiClass) { if (psiClass != null && (psiClass.hasModifierProperty(PsiModifier.PUBLIC) || psiClass.hasModifierProperty(PsiModifier.PROTECTED))) { PsiElement parent = psiClass.getParent(); @@ -128,18 +204,25 @@ public class Java9ModuleEntryPoint extends EntryPoint { } @NotNull - private static Set getServiceImplementationNames(@NotNull PsiJavaModule javaModule) { - return CachedValuesManager.getCachedValue(javaModule, () -> { - Set classes = StreamEx.of(javaModule.getProvides().iterator()) - .map(PsiProvidesStatement::getImplementationList) - .nonNull() - .map(PsiReferenceList::getReferenceElements) - .flatMap(Arrays::stream) - .map(PsiJavaCodeReferenceElement::getQualifiedName) - .nonNull() - .toCollection(THashSet::new); - return CachedValueProvider.Result.create(classes, javaModule); - }); + private static Set collectServiceClassNames(@NotNull PsiJavaModule javaModule) { + Set classes = StreamEx.of(javaModule.getProvides().spliterator()) + .map(PsiProvidesStatement::getImplementationList) + .nonNull() + .map(PsiReferenceList::getReferenceElements) + .flatMap(Arrays::stream) + .map(PsiJavaCodeReferenceElement::getQualifiedName) + .nonNull() + .toCollection(THashSet::new); + + Set usages = StreamEx.of(javaModule.getUses().iterator()) + .map(PsiUsesStatement::getClassReference) + .nonNull() + .map(PsiJavaCodeReferenceElement::getQualifiedName) + .nonNull() + .toCollection(THashSet::new); + + classes.addAll(usages); + return classes; } @Override diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java index 71efaf4daba5..16e81f8d8854 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/reference/RefJavaModuleImpl.java @@ -33,7 +33,9 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule { private final RefModule myRefModule; private Map> myExportedPackageNames; + private Set myServiceInterfaces; private Set myServiceImplementations; + private Set myUsedServices; private List myRequiredModules; RefJavaModuleImpl(@NotNull PsiJavaModule javaModule, @NotNull RefManagerImpl manager) { @@ -75,104 +77,152 @@ public class RefJavaModuleImpl extends RefElementImpl implements RefJavaModule { return myExportedPackageNames != null ? myExportedPackageNames : Collections.emptyMap(); } + @NotNull + @Override + public Set getServiceInterfaces() { + return myServiceInterfaces != null ? myServiceInterfaces : Collections.emptySet(); + } + @NotNull @Override public Set getServiceImplementations() { return myServiceImplementations != null ? myServiceImplementations : Collections.emptySet(); } + @NotNull + @Override + public Set getUsedServices() { + return myUsedServices != null ? myUsedServices : Collections.emptySet(); + } + @Override @NotNull public List getRequiredModules() { return myRequiredModules != null ? myRequiredModules : Collections.emptyList(); } - @Override - public void buildReferences() { - PsiJavaModule javaModule = getElement(); - if (javaModule != null) { - for (PsiRequiresStatement statement : javaModule.getRequires()) { - PsiJavaModuleReferenceElement referenceElement = statement.getReferenceElement(); + private void buildRequiresReferences(PsiJavaModule javaModule) { + for (PsiRequiresStatement statement : javaModule.getRequires()) { + PsiJavaModuleReferenceElement referenceElement = statement.getReferenceElement(); + if (referenceElement != null) { + PsiElement element = addReference(referenceElement.getReference()); + if (element instanceof PsiJavaModule) { + PsiJavaModule requiredModule = (PsiJavaModule)element; + Map> packagesExportedByModule = getPackagesExportedByModule(requiredModule); + if (myRequiredModules == null) myRequiredModules = new ArrayList<>(1); + myRequiredModules.add(new RequiredModule(requiredModule.getName(), packagesExportedByModule, statement.hasModifierProperty(PsiModifier.TRANSITIVE))); + } + } + } + } + + private void buildExportsReferences(PsiJavaModule javaModule) { + List emptyList = Collections.emptyList(); + for (PsiPackageAccessibilityStatement statement : javaModule.getExports()) { + PsiElement element = addReference(statement.getPackageReference()); + String packageName = null; + if (element instanceof PsiPackage) { + packageName = ((PsiPackage)element).getQualifiedName(); + if (myExportedPackageNames == null) myExportedPackageNames = new THashMap<>(1); + myExportedPackageNames.put(packageName, emptyList); + } + for (PsiJavaModuleReferenceElement referenceElement : statement.getModuleReferences()) { if (referenceElement != null) { - PsiElement element = addReference(referenceElement.getReference()); - if (element instanceof PsiJavaModule) { - PsiJavaModule requiredModule = (PsiJavaModule)element; - Map> packagesExportedByModule = getPackagesExportedByModule(requiredModule); - if (myRequiredModules == null) myRequiredModules = new ArrayList<>(1); - myRequiredModules.add(new RequiredModule(requiredModule.getName(), packagesExportedByModule, statement.hasModifierProperty(PsiModifier.TRANSITIVE))); + PsiElement moduleElement = addReference(referenceElement.getReference()); + if (packageName != null && moduleElement instanceof PsiJavaModule) { + List toModuleNames = myExportedPackageNames.get(packageName); + if (toModuleNames == emptyList) myExportedPackageNames.put(packageName, toModuleNames = new ArrayList<>(1)); + toModuleNames.add(((PsiJavaModule)moduleElement).getName()); } } } - List emptyList = Collections.emptyList(); - for (PsiPackageAccessibilityStatement statement : javaModule.getExports()) { - PsiElement element = addReference(statement.getPackageReference()); - String packageName = null; - if (element instanceof PsiPackage) { - packageName = ((PsiPackage)element).getQualifiedName(); - if (myExportedPackageNames == null) myExportedPackageNames = new THashMap<>(1); - myExportedPackageNames.put(packageName, emptyList); - } - for (PsiJavaModuleReferenceElement referenceElement : statement.getModuleReferences()) { - if (referenceElement != null) { - PsiElement moduleElement = addReference(referenceElement.getReference()); - if (packageName != null && moduleElement instanceof PsiJavaModule) { - List toModuleNames = myExportedPackageNames.get(packageName); - if (toModuleNames == emptyList) myExportedPackageNames.put(packageName, toModuleNames = new ArrayList<>(1)); - toModuleNames.add(((PsiJavaModule)moduleElement).getName()); - } - } - } - } - for (PsiProvidesStatement statement : javaModule.getProvides()) { - final PsiJavaCodeReferenceElement interfaceReference = statement.getInterfaceReference(); - final PsiReferenceList implementationList = statement.getImplementationList(); - if (interfaceReference != null && implementationList != null) { - final PsiElement providerInterface = interfaceReference.resolve(); - if (providerInterface instanceof PsiClass) { - final RefElement refInterface = getRefManager().getReference(providerInterface); - if (refInterface instanceof RefJavaElementImpl) { - for (PsiJavaCodeReferenceElement implementationReference : implementationList.getReferenceElements()) { - final PsiElement implementationClass = implementationReference.resolve(); - if (implementationClass instanceof PsiClass) { - RefElement refTargetElement = null; - PsiElement targetElement = getProviderMethod((PsiClass)implementationClass); + } + } - if (targetElement == null) { - final RefElement refClass = getRefManager().getReference(implementationClass); - if (refClass instanceof RefClassImpl) { - if (myServiceImplementations == null) myServiceImplementations = new THashSet<>(); - myServiceImplementations.add((RefClass)refClass); + private void buildProvidesReferences(PsiJavaModule javaModule) { + for (PsiProvidesStatement statement : javaModule.getProvides()) { + final PsiJavaCodeReferenceElement interfaceReference = statement.getInterfaceReference(); + final PsiReferenceList implementationList = statement.getImplementationList(); + if (interfaceReference != null && implementationList != null) { + final PsiElement providerInterface = interfaceReference.resolve(); + if (providerInterface instanceof PsiClass) { + final RefElement refInterface = getRefManager().getReference(providerInterface); + if (refInterface instanceof RefClassImpl) { + if (myServiceInterfaces == null) myServiceInterfaces = new THashSet<>(); + myServiceInterfaces.add((RefClass)refInterface); - final RefMethod refConstructor = ((RefClassImpl)refClass).getDefaultConstructor(); - if (refConstructor != null) { - final PsiModifierListOwner constructorElement = refConstructor.getElement(); - if (constructorElement != null && constructorElement.hasModifierProperty(PsiModifier.PUBLIC)) { - refTargetElement = refConstructor; - targetElement = constructorElement; - } + for (PsiJavaCodeReferenceElement implementationReference : implementationList.getReferenceElements()) { + final PsiElement implementationClass = implementationReference.resolve(); + if (implementationClass instanceof PsiClass) { + RefElement refTargetElement = null; + PsiElement targetElement = getProviderMethod((PsiClass)implementationClass); + + if (targetElement == null) { + final RefElement refClass = getRefManager().getReference(implementationClass); + if (refClass instanceof RefClassImpl) { + if (myServiceImplementations == null) myServiceImplementations = new THashSet<>(); + myServiceImplementations.add((RefClass)refClass); + + final RefMethod refConstructor = ((RefClassImpl)refClass).getDefaultConstructor(); + if (refConstructor != null) { + final PsiModifierListOwner constructorElement = refConstructor.getElement(); + if (constructorElement != null && constructorElement.hasModifierProperty(PsiModifier.PUBLIC)) { + refTargetElement = refConstructor; + targetElement = constructorElement; } } } - if (targetElement == null) { - targetElement = implementationClass; - } - if (refTargetElement == null) { - refTargetElement = getRefManager().getReference(targetElement); - } - if (refTargetElement != null) { - ((RefJavaElementImpl)refInterface) - .addReference(refTargetElement, targetElement, providerInterface, false, true, null); - } + } + if (targetElement == null) { + targetElement = implementationClass; + } + if (refTargetElement == null) { + refTargetElement = getRefManager().getReference(targetElement); + } + if (refTargetElement != null) { + ((RefClassImpl)refInterface) + .addReference(refTargetElement, targetElement, providerInterface, false, true, null); } } } } } } + } + } + + private void buildUsesReferences(PsiJavaModule javaModule) { + for (PsiUsesStatement statement : javaModule.getUses()) { + final PsiJavaCodeReferenceElement reference = statement.getClassReference(); + if (reference != null) { + final PsiElement usedInterface = reference.resolve(); + if (usedInterface instanceof PsiClass) { + final RefElement refClass = getRefManager().getReference(usedInterface); + if (refClass instanceof RefClass) { + if (myUsedServices == null) myUsedServices = new THashSet<>(); + myUsedServices.add((RefClass)refClass); + } + } + } + } + } + + @Override + public void buildReferences() { + PsiJavaModule javaModule = getElement(); + if (javaModule != null) { + buildRequiresReferences(javaModule); + buildExportsReferences(javaModule); + buildProvidesReferences(javaModule); + buildUsesReferences(javaModule); + getRefManager().fireBuildReferences(this); } } + /** + * For building references between modules + */ private PsiElement addReference(PsiPolyVariantReference reference) { List resolvedElements = new ArrayList<>(); if (reference != null) { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/EntryPointWithVisibilityLevel.java b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/EntryPointWithVisibilityLevel.java index 36a1e0ed4298..b57721487944 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/EntryPointWithVisibilityLevel.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/EntryPointWithVisibilityLevel.java @@ -16,7 +16,7 @@ package com.intellij.codeInspection.visibility; import com.intellij.codeInspection.reference.EntryPoint; -import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.codeInspection.reference.RefJavaElement; import com.intellij.psi.PsiMember; import com.intellij.psi.util.PsiUtil; @@ -39,4 +39,11 @@ public abstract class EntryPointWithVisibilityLevel extends EntryPoint { * Id to serialize checkbox state in visibility inspection settings */ public abstract String getId(); + + /** + * Don't suggest decreasing visibility for the element, sometimes even if the entry point is disabled. + */ + public boolean keepVisibilityLevel(boolean entryPointEnabled, @SuppressWarnings("unused") RefJavaElement refJavaElement) { + return false; + } } diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java index b64802ac94b2..6865cf828374 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/visibility/VisibilityInspection.java @@ -23,6 +23,7 @@ import com.intellij.codeInsight.daemon.impl.IdentifierUtil; import com.intellij.codeInspection.*; import com.intellij.codeInspection.ex.EntryPointsManager; import com.intellij.codeInspection.reference.*; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.ExtensionPoint; import com.intellij.openapi.extensions.ExtensionPointName; @@ -36,10 +37,12 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.ui.components.panels.VerticalBox; import com.intellij.usageView.UsageViewTypeLocation; import com.intellij.util.VisibilityUtil; +import one.util.streamex.StreamEx; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import javax.swing.*; import java.awt.*; @@ -101,7 +104,7 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { if (entryPoint instanceof EntryPointWithVisibilityLevel) { gc.gridy++; final JCheckBox checkBox = new JCheckBox(((EntryPointWithVisibilityLevel)entryPoint).getTitle()); - checkBox.setSelected(myExtensions.getOrDefault(((EntryPointWithVisibilityLevel)entryPoint).getId(), true)); + checkBox.setSelected(isEntryPointEnabled((EntryPointWithVisibilityLevel)entryPoint)); checkBox.addActionListener(e -> myExtensions.put(((EntryPointWithVisibilityLevel)entryPoint).getId(), checkBox.isSelected())); add(checkBox, gc); } @@ -181,11 +184,14 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { //ignore anonymous classes. They do not have access modifiers. if (refElement instanceof RefClass) { RefClass refClass = (RefClass) refElement; - if (refClass.isAnonymous() || refClass.isServlet() || refClass.isApplet() || refClass.isLocalClass() || isExported(refClass)) { + if (refClass.isAnonymous() || refClass.isServlet() || refClass.isApplet() || refClass.isLocalClass()) { return null; } } + if (keepVisibilityLevel(refElement)) { + return null; + } //ignore unreferenced code. They could be a potential entry points. if (refElement.getInReferences().isEmpty()) { @@ -215,30 +221,10 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { return null; } - private static boolean isExported(RefClass refClass) { - RefModule refModule = refClass.getModule(); - if (refModule != null) { - RefJavaModule refJavaModule = RefJavaModule.JAVA_MODULE.get(refModule); - if (refJavaModule != null) { - Set serviceImplementations = refJavaModule.getServiceImplementations(); - if (serviceImplementations.contains(refClass)) { - return true; - } - - RefEntity refOwner = refClass; - while (refOwner instanceof RefClass) { - String modifier = ((RefClass)refOwner).getAccessModifier(); - refOwner = PsiModifier.PUBLIC.equals(modifier) || PsiModifier.PROTECTED.equals(modifier) ? refOwner.getOwner() : null; - } - if (refOwner instanceof RefPackage) { - Map> exportedPackageNames = refJavaModule.getExportedPackageNames(); - if (exportedPackageNames.containsKey(refOwner.getQualifiedName())) { - return true; - } - } - } - } - return false; + private boolean keepVisibilityLevel(RefJavaElement refElement) { + return StreamEx.of(ExtensionPointName.create(ToolExtensionPoints.DEAD_CODE_TOOL).getExtensions()) + .select(EntryPointWithVisibilityLevel.class) + .anyMatch(point -> point.keepVisibilityLevel(isEntryPointEnabled(point), refElement)); } @NotNull @@ -273,13 +259,17 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { } int getMinVisibilityLevel(PsiMember member) { - return Arrays.stream(ExtensionPointName.create(ToolExtensionPoints.DEAD_CODE_TOOL).getExtensions()) - .filter(point -> point instanceof EntryPointWithVisibilityLevel && - myExtensions.getOrDefault(((EntryPointWithVisibilityLevel)point).getId(), true)) - .mapToInt(point -> ((EntryPointWithVisibilityLevel)point).getMinVisibilityLevel(member)) + return StreamEx.of(ExtensionPointName.create(ToolExtensionPoints.DEAD_CODE_TOOL).getExtensions()) + .select(EntryPointWithVisibilityLevel.class) + .filter(point -> isEntryPointEnabled(point)) + .mapToInt(point -> point.getMinVisibilityLevel(member)) .max().orElse(-1); } + private boolean isEntryPointEnabled(EntryPointWithVisibilityLevel point) { + return myExtensions.getOrDefault(point.getId(), true); + } + private int getMinVisibilityLevel(RefJavaElement refElement) { PsiElement element = refElement.getElement(); if (element instanceof PsiMember) { @@ -627,6 +617,12 @@ public class VisibilityInspection extends GlobalJavaBatchInspectionTool { } } + @TestOnly + public void setEntryPointEnabled(@NotNull String entryPointId, boolean enabled) { + LOG.assertTrue(ApplicationManager.getApplication().isUnitTestMode()); + myExtensions.put(entryPointId, enabled); + } + private static class AcceptSuggestedAccess implements LocalQuickFix{ private final RefManager myManager; @PsiModifier.ModifierConstant private final String myHint; diff --git a/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/Public.java b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/Public.java new file mode 100644 index 000000000000..69dda4039633 --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/Public.java @@ -0,0 +1,3 @@ +package foo.bar; + +public class Public {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceApi.java b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceApi.java new file mode 100644 index 000000000000..7fd656840fcc --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceApi.java @@ -0,0 +1,3 @@ +package foo.bar; + +public class ServiceApi {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceImpl.java b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceImpl.java new file mode 100644 index 000000000000..16a1a3626aec --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/ServiceImpl.java @@ -0,0 +1,3 @@ +package foo.bar; + +public class ServiceImpl extends ServiceApi {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/UsedService.java b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/UsedService.java new file mode 100644 index 000000000000..e737a4be4fd0 --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/UsedService.java @@ -0,0 +1,3 @@ +package foo.bar; + +public class UsedService {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/expected.xml b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/expected.xml new file mode 100644 index 000000000000..8e068179635c --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/reduceVisibilityInExportedPackages/expected.xml @@ -0,0 +1,10 @@ + + + + Public.java + 3 + + Declaration access can be weaker + Can be package-private + + \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/usedService/Api.java b/java/java-tests/testData/inspection/java9Visibility/usedService/Api.java new file mode 100644 index 000000000000..417e6f7a08f1 --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/usedService/Api.java @@ -0,0 +1,3 @@ +package foo.bar; + +public class Api {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/usedService/Impl.java b/java/java-tests/testData/inspection/java9Visibility/usedService/Impl.java new file mode 100644 index 000000000000..a700ddc5ed2c --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/usedService/Impl.java @@ -0,0 +1,4 @@ +package foo.bar.impl; +import foo.bar Api; + +public class Impl extends Api {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/usedService/Other.java b/java/java-tests/testData/inspection/java9Visibility/usedService/Other.java new file mode 100644 index 000000000000..5e7f2d1881ce --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/usedService/Other.java @@ -0,0 +1,4 @@ +package foo.bar.impl; +import foo.bar Api; + +public class Other extends Api {} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/java9Visibility/usedService/expected.xml b/java/java-tests/testData/inspection/java9Visibility/usedService/expected.xml new file mode 100644 index 000000000000..161b0b37a534 --- /dev/null +++ b/java/java-tests/testData/inspection/java9Visibility/usedService/expected.xml @@ -0,0 +1,10 @@ + + + + Other.java + 4 + + Declaration access can be weaker + Can be package-private + + \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9VisibilityTest.kt b/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9VisibilityTest.kt index 3ff360804f72..ecd67d3e589d 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9VisibilityTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/Java9VisibilityTest.kt @@ -16,6 +16,7 @@ package com.intellij.java.codeInspection import com.intellij.codeInspection.ex.GlobalInspectionToolWrapper +import com.intellij.codeInspection.java19modules.Java9ModuleEntryPoint import com.intellij.codeInspection.visibility.VisibilityInspection import com.intellij.java.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase import com.intellij.openapi.application.ex.PathManagerEx @@ -33,6 +34,21 @@ class Java9VisibilityTest : LightJava9ModulesCodeInsightFixtureTestCase() { fun testInheritedService() = doTestService() fun testProvidedService() = doTestService() + fun testUsedService() { + moduleInfo("module foo.bar { exports foo.bar; uses foo.bar.Api; uses foo.bar.impl.Impl; }") + doTest("foo.bar.Api", "foo.bar.impl.Impl", "foo.bar.impl.Other") + } + + fun testReduceVisibilityInExportedPackages() { + moduleInfo("""module foo.bar { + exports foo.bar; + provides foo.bar.ServiceApi with foo.bar.ServiceImpl; + uses foo.bar.UsedService; +}""") + doTest("foo.bar.Public", "foo.bar.ServiceApi", "foo.bar.ServiceImpl", "foo.bar.UsedService", + reduceVisibilityInExportedPackages = true) + } + private fun doTestClass() { moduleInfo("module foo.bar { exports foo.bar; }") doTest("foo.bar.Api", "foo.bar.impl.Impl") @@ -43,11 +59,14 @@ class Java9VisibilityTest : LightJava9ModulesCodeInsightFixtureTestCase() { doTest("foo.bar.Api", "foo.bar.impl.Impl", "foo.bar.impl.Other") } - private fun doTest(vararg classNames: String) { + private fun doTest(vararg classNames: String, reduceVisibilityInExportedPackages: Boolean = false) { val testPath = testDataPath + getTestName(true) addJavaFiles(testPath, classNames) - val toolWrapper = GlobalInspectionToolWrapper(VisibilityInspection()) + val inspection = VisibilityInspection() + inspection.setEntryPointEnabled(Java9ModuleEntryPoint.ID, reduceVisibilityInExportedPackages) + + val toolWrapper = GlobalInspectionToolWrapper(inspection) doGlobalInspectionTest(testPath, toolWrapper) } } From 7b7498be2cf3029b3d3440a48ed441a8e01c56cb Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Fri, 30 Jun 2017 13:28:08 +0300 Subject: [PATCH 87/93] FinderRecursivePanel: add java doc. --- .../src/com/intellij/ui/FinderRecursivePanel.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java index 30e3e2864040..2db9101370fd 100644 --- a/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java +++ b/platform/platform-impl/src/com/intellij/ui/FinderRecursivePanel.java @@ -709,6 +709,13 @@ public abstract class FinderRecursivePanel extends OnePixelSplitter implement } } + /** + * {@link FinderRecursivePanel} disposes right component on selection change if it is disposable. + * If an inheritor creates disposable objects during right component creation, + * the disposable objects must be registered as children of the created right component + * in order to dispose created objects on selection change. + * {@link DisposablePanel} could be used as a right component in that case. + */ protected static class DisposablePanel extends JPanel implements Disposable { public DisposablePanel(LayoutManager layout, @Nullable Disposable parent) { super(layout); From 27768a33a85ea34bc6c069d350727a5d0bb5a4d4 Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Thu, 29 Jun 2017 14:02:10 +0300 Subject: [PATCH 88/93] IDEA-CR-22016 RUBY-19336 add 'Rename file' action on the editor tab context menu onto PhpStorm, RubyMine, WebStorm --- .../actions/RenameFileActionImpl.java | 27 +++++++++++++++++++ .../refactoring/actions/RenameFileAction.java | 12 ++++++--- resources/src/idea/JavaActions.xml | 2 +- 3 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 java/java-impl/src/com/intellij/refactoring/actions/RenameFileActionImpl.java rename {java/java-impl => platform/lang-impl}/src/com/intellij/refactoring/actions/RenameFileAction.java (86%) diff --git a/java/java-impl/src/com/intellij/refactoring/actions/RenameFileActionImpl.java b/java/java-impl/src/com/intellij/refactoring/actions/RenameFileActionImpl.java new file mode 100644 index 000000000000..95e7b3bfd292 --- /dev/null +++ b/java/java-impl/src/com/intellij/refactoring/actions/RenameFileActionImpl.java @@ -0,0 +1,27 @@ +/* + * Copyright 2000-2017 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.refactoring.actions; + +import com.intellij.psi.PsiClassOwner; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +public class RenameFileActionImpl extends RenameFileAction { + @Override + protected boolean enabledInProjectView(@NotNull PsiFile file) { + return file instanceof PsiClassOwner; + } +} diff --git a/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/RenameFileAction.java similarity index 86% rename from java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java rename to platform/lang-impl/src/com/intellij/refactoring/actions/RenameFileAction.java index 56d07e1985a5..c7c04f4d0ae9 100644 --- a/java/java-impl/src/com/intellij/refactoring/actions/RenameFileAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/RenameFileAction.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -19,9 +19,9 @@ import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiClassOwner; import com.intellij.psi.PsiFile; import com.intellij.refactoring.rename.PsiElementRenameHandler; +import org.jetbrains.annotations.NotNull; /** * @author ven @@ -48,8 +48,8 @@ public class RenameFileAction extends AnAction implements DumbAware { PsiFile file = e.getData(CommonDataKeys.PSI_FILE); Presentation presentation = e.getPresentation(); String place = e.getPlace(); - boolean enabled = file != null && - (file instanceof PsiClassOwner || !ActionPlaces.PROJECT_VIEW_POPUP.equals(place)) && + boolean enabled = file != null && + (enabledInProjectView(file) || !ActionPlaces.PROJECT_VIEW_POPUP.equals(place)) && place != ActionPlaces.EDITOR_POPUP && e.getData(CommonDataKeys.PROJECT) != null; presentation.setEnabled(enabled); presentation.setVisible(enabled); @@ -58,4 +58,8 @@ public class RenameFileAction extends AnAction implements DumbAware { presentation.setDescription("Rename selected file"); } } + + protected boolean enabledInProjectView(@NotNull PsiFile file) { + return true; + } } diff --git a/resources/src/idea/JavaActions.xml b/resources/src/idea/JavaActions.xml index 676ef3dbc23f..d212692e1d9e 100644 --- a/resources/src/idea/JavaActions.xml +++ b/resources/src/idea/JavaActions.xml @@ -83,7 +83,7 @@ - + From a81f94669d37392fc56602d470d69ddc24dc5c85 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 29 Jun 2017 18:54:57 +0300 Subject: [PATCH 89/93] search in local scope too --- .../impl/GroovyDirectInheritorsSearcher.java | 25 ++++++++----------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyDirectInheritorsSearcher.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyDirectInheritorsSearcher.java index d8046317e671..6980e4c583bf 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyDirectInheritorsSearcher.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyDirectInheritorsSearcher.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.impl.search.StubHierarchyInheritorSearcher; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.GlobalSearchScopeUtil; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.searches.DirectClassInheritorsSearch; import com.intellij.psi.stubs.StubIndex; @@ -71,23 +72,19 @@ public class GroovyDirectInheritorsSearcher implements QueryExecutor candidates = DumbService.getInstance(project).runReadActionInSmartMode(() -> { - if (!clazz.isValid()) return Collections.emptyList(); - GlobalSearchScope restrictedScope = StubHierarchyInheritorSearcher.restrictScope((GlobalSearchScope)scope); - return getDerivingClassCandidates(clazz, restrictedScope, queryParameters.includeAnonymous()); - }); - for (final PsiClass candidate : candidates) { - if (!queryParameters.isCheckInheritance() || isInheritor(clazz, candidate, project)) { - if (!consumer.process(candidate)) { - return false; - } + GlobalSearchScope globalSearchScope = GlobalSearchScopeUtil.toGlobalSearchScope(scope, project); + final List candidates = DumbService.getInstance(project).runReadActionInSmartMode(() -> { + if (!clazz.isValid()) return Collections.emptyList(); + GlobalSearchScope restrictedScope = StubHierarchyInheritorSearcher.restrictScope(globalSearchScope); + return getDerivingClassCandidates(clazz, restrictedScope, queryParameters.includeAnonymous()); + }); + for (final PsiClass candidate : candidates) { + if (!queryParameters.isCheckInheritance() || isInheritor(clazz, candidate, project)) { + if (!consumer.process(candidate)) { + return false; } } - - return true; } - return true; } From 5418e3dcff00dbd4f394f312d674ced6f71604c9 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 30 Jun 2017 13:14:36 +0300 Subject: [PATCH 90/93] cleanup --- .../vfs/encoding/FileEncodingTest.java | 75 +++++++++++-------- .../vfs/impl/CoreJarFileSystemTest.java | 3 +- .../vfs/impl/VirtualFilePointerTest.java | 3 +- .../vfs/impl/local/CanonicalPathMapTest.java | 45 +++++------ 4 files changed, 70 insertions(+), 56 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/encoding/FileEncodingTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/encoding/FileEncodingTest.java index 986f3753df1a..0d6483e37ddc 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/encoding/FileEncodingTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/encoding/FileEncodingTest.java @@ -50,6 +50,7 @@ import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.PsiTestUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.ObjectUtils; import com.intellij.util.text.ByteArrayCharSequence; import com.intellij.util.text.XmlCharsetDetector; import com.intellij.util.ui.UIUtil; @@ -112,7 +113,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testXmlProlog() throws IOException { VirtualFile vTestRoot = getTestRoot(); - VirtualFile xml = vTestRoot.findChild("xNotepadUtf8.xml"); + VirtualFile xml = ObjectUtils.assertNotNull(vTestRoot.findChild("xNotepadUtf8.xml")); String expected = UTF8_XML_PROLOG + XML_TEST_BODY; String text = getDocument(xml).getText(); @@ -154,7 +155,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testChangeToUtfProlog() throws IOException { - VirtualFile src = getTestRoot().findChild("xWin1251.xml"); + VirtualFile src = find("xWin1251.xml"); final File dir = createTempDirectory(); final File file = new File(dir, "copy.xml"); FileUtil.copy(new File(src.getPath()), file); @@ -178,25 +179,30 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testDefaultHtml() { - VirtualFile file = getTestRoot().findChild("defaultHtml.html"); + VirtualFile file = find("defaultHtml.html"); assertEquals(EncodingProjectManager.getInstance(getProject()).getDefaultCharset(), file.getCharset()); } + @NotNull + private static VirtualFile find(String name) { + return ObjectUtils.assertNotNull(getTestRoot().findChild(name)); + } + public void testTrickyProlog() { - VirtualFile xml = getTestRoot().findChild("xTrickyProlog.xml"); + VirtualFile xml = find("xTrickyProlog.xml"); assertEquals("Big5", xml.getCharset().name()); } public void testDefaultXml() { - VirtualFile xml = getTestRoot().findChild("xDefault.xml"); + VirtualFile xml = find("xDefault.xml"); assertEquals(CharsetToolkit.UTF8_CHARSET, xml.getCharset()); } public void testIbm866() { - VirtualFile xml = getTestRoot().findChild("xIbm866.xml"); + VirtualFile xml = find("xIbm866.xml"); String expected = prolog(Charset.forName("IBM866")) + XML_TEST_BODY; String text = getDocument(xml).getText(); @@ -210,8 +216,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testUTF16BOM() throws IOException { - VirtualFile vTestRoot = getTestRoot(); - VirtualFile file = vTestRoot.findChild(getTestName(false) + ".txt"); + VirtualFile file = find(getTestName(false) + ".txt"); File source = new File(file.getPath()); byte[] bytesSource = FileUtil.loadFileBytes(source); assertTrue(Arrays.toString(bytesSource), CharsetToolkit.hasUTF16LEBom(bytesSource)); @@ -254,7 +259,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { WINDOWS_1252); myFilesToDelete.add(temp); - VirtualFile file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp); + VirtualFile file = ObjectUtils.assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp)); assertEquals(WINDOWS_1252, file.getCharset()); @@ -372,8 +377,10 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { public void testCopyMove() throws IOException { File root = createTempDirectory(); - File dir1 = new File(root, "dir1"); dir1.mkdir(); - File dir2 = new File(root, "dir2"); dir2.mkdir(); + File dir1 = new File(root, "dir1"); + assertTrue(dir1.mkdir()); + File dir2 = new File(root, "dir2"); + assertTrue(dir2.mkdir()); final VirtualFile vdir1 = getVirtualFile(dir1); final VirtualFile vdir2 = getVirtualFile(dir2); assertNotNull(dir1.getPath(), vdir1); @@ -402,8 +409,10 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { public void testCopyNested() throws IOException, IncorrectOperationException { File root = createTempDirectory(); - File dir1 = new File(root, "dir1"); dir1.mkdir(); - File dir2 = new File(root, "dir2"); dir2.mkdir(); + File dir1 = new File(root, "dir1"); + assertTrue(dir1.mkdir()); + File dir2 = new File(root, "dir2"); + assertTrue(dir2.mkdir()); final VirtualFile vdir1 = getVirtualFile(dir1); final VirtualFile vdir2 = getVirtualFile(dir2); assertNotNull(dir1.getPath(), vdir1); @@ -416,10 +425,10 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { protected void run() throws Throwable { VirtualFile winf = vdir1.createChildData(this, "xxx.txt"); - PsiDirectory psidir1 = PsiManager.getInstance(getProject()).findDirectory(vdir1); - PsiDirectory psidir2 = PsiManager.getInstance(getProject()).findDirectory(vdir2); + PsiDirectory psidir1 = ObjectUtils.assertNotNull(PsiManager.getInstance(getProject()).findDirectory(vdir1)); + PsiDirectory psidir2 = ObjectUtils.assertNotNull(PsiManager.getInstance(getProject()).findDirectory(vdir2)); CopyFilesOrDirectoriesHandler.copyToDirectory(psidir1, psidir1.getName(), psidir2); - VirtualFile winfCopy = psidir2.getVirtualFile().findFileByRelativePath(psidir1.getName() + "/" + winf.getName()); + VirtualFile winfCopy = ObjectUtils.assertNotNull(psidir2.getVirtualFile().findFileByRelativePath(psidir1.getName() + "/" + winf.getName())); assertEquals(WINDOWS_1251, winfCopy.getCharset()); VirtualFile dir1Copy = psidir2.getVirtualFile().findChild(psidir1.getName()); assertEquals(WINDOWS_1251, EncodingManager.getInstance().getEncoding(dir1Copy, false)); @@ -466,8 +475,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testVFileGetInputStreamIsBOMAware() throws IOException { - VirtualFile vTestRoot = getTestRoot(); - VirtualFile file = vTestRoot.findChild("UTF16BOM.txt"); + VirtualFile file = find("UTF16BOM.txt"); String vfsLoad = VfsUtilCore.loadText(file); assertEquals("\u041f\u0440\u0438", vfsLoad); @@ -478,8 +486,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { assertArrayEquals(CharsetToolkit.UTF16LE_BOM, file.getBOM()); } public void testSetCharsetAfter() throws IOException { - VirtualFile vTestRoot = getTestRoot(); - VirtualFile file = vTestRoot.findChild("UTF16LE_NOBOM.txt"); + VirtualFile file = find("UTF16LE_NOBOM.txt"); file.setCharset(CharsetToolkit.UTF_16LE_CHARSET); file.setBOM(null); String vfsLoad = VfsUtilCore.loadText(file); @@ -606,7 +613,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { public void testSetEncodingForDirectoryChangesEncodingsForEvenNotLoadedFiles() throws IOException { EncodingProjectManager.getInstance(getProject()).setEncoding(null, CharsetToolkit.UTF8_CHARSET); File fc = FileUtil.createTempDirectory("", ""); - VirtualFile root = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(fc); + VirtualFile root = ObjectUtils.assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(fc)); PsiTestUtil.addContentRoot(getModule(), root); VirtualFile file = createChildData(root, "win.txt"); @@ -693,7 +700,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { change(file, WINDOWS_1251); assertEquals(WINDOWS_1251, file.getCharset()); - Document document = documentManager.getDocument(file); + Document document = ObjectUtils.assertNotNull(documentManager.getDocument(file)); change(file, CharsetToolkit.UTF8_CHARSET); assertEquals(CharsetToolkit.UTF8_CHARSET, file.getCharset()); @@ -701,7 +708,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { UIUtil.dispatchAllInvocationEvents(); assertEquals(WINDOWS_1251, file.getCharset()); - document.getText(); + ObjectUtils.assertNotNull(document.getText()); } private void globalUndo() { @@ -718,7 +725,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { public void testCantReloadBOMDetected() throws IOException { VirtualFile file = createTempFile("txt", CharsetToolkit.UTF8_BOM, THREE_RUSSIAN_LETTERS, CharsetToolkit.UTF8_CHARSET); file.contentsToByteArray(); - Document document = FileDocumentManager.getInstance().getDocument(file); + Document document = ObjectUtils.assertNotNull(FileDocumentManager.getInstance().getDocument(file)); assertEquals(THREE_RUSSIAN_LETTERS, document.getText()); assertEquals(CharsetToolkit.UTF8_CHARSET, file.getCharset()); EncodingManager.getInstance().setEncoding(file, CharsetToolkit.UTF_16LE_CHARSET); @@ -731,7 +738,8 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { String text = "text"; VirtualFile file = createTempFile("txt", CharsetToolkit.UTF8_BOM, text, CharsetToolkit.UTF8_CHARSET); file.contentsToByteArray(); - Document document = FileDocumentManager.getInstance().getDocument(file); + Document document = ObjectUtils.assertNotNull(FileDocumentManager.getInstance().getDocument(file)); + assertEquals(text, document.getText()); assertEquals(CharsetToolkit.UTF8_CHARSET, file.getCharset()); assertArrayEquals(CharsetToolkit.UTF8_BOM, file.getBOM()); @@ -809,9 +817,10 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { EncodingManager.getInstance().setDefaultCharsetName(differentFromDefault); File temp = createTempDirectory(); - VirtualFile tempDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp); + VirtualFile tempDir = ObjectUtils.assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(temp)); - final Project newProject = ProjectManagerEx.getInstanceEx().newProject("new", tempDir.getPath(), false, false); + final Project newProject = + ObjectUtils.assertNotNull(ProjectManagerEx.getInstanceEx().newProject("new", tempDir.getPath(), false, false)); Disposer.register(getTestRootDisposable(), () -> ApplicationManager.getApplication().runWriteAction(() -> Disposer.dispose(newProject))); PlatformTestUtil.saveProject(newProject); @@ -829,14 +838,14 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { } public void testFileMustNotLoadInWrongEncodingIfAccessedBeforeProjectOpen() { - VirtualFile dir = getTestRoot().findChild("newEncoding"); - VirtualFile file = dir.findFileByRelativePath("src/xxx.txt"); + VirtualFile dir = find("newEncoding"); + VirtualFile file = ObjectUtils.assertNotNull(dir.findFileByRelativePath("src/xxx.txt")); - Document document = FileDocumentManager.getInstance().getDocument(file); - document.getText(); + Document document = ObjectUtils.assertNotNull(FileDocumentManager.getInstance().getDocument(file)); + ObjectUtils.assertNotNull(document.getText()); UIUtil.dispatchAllInvocationEvents(); - Project newEncodingProject = ProjectUtil.openProject(dir.getPath(), null, false); + Project newEncodingProject = ObjectUtils.assertNotNull(ProjectUtil.openProject(dir.getPath(), null, false)); UIUtil.dispatchAllInvocationEvents(); try { assertEquals(US_ASCII, file.getCharset()); @@ -906,7 +915,7 @@ public class FileEncodingTest extends PlatformTestCase implements TestDialog { File file = createTempFile("a.txt", text); setContentOnDisk(file, null, text, CharsetToolkit.UTF_16LE_CHARSET); - VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file); + VirtualFile vFile = ObjectUtils.assertNotNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file)); vFile.setCharset(CharsetToolkit.UTF_16LE_CHARSET); vFile.setBOM(null); CharSequence loaded = LoadTextUtil.loadText(vFile); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/CoreJarFileSystemTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/CoreJarFileSystemTest.java index e74e817fb813..4d4aa6f69c97 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/CoreJarFileSystemTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/CoreJarFileSystemTest.java @@ -19,6 +19,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem; import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.UsefulTestCase; +import com.intellij.util.ObjectUtils; /** * @author yole @@ -27,7 +28,7 @@ public class CoreJarFileSystemTest extends UsefulTestCase{ public void testSimple() { CoreJarFileSystem fs = new CoreJarFileSystem(); String jarPath = PlatformTestUtil.getPlatformTestDataPath() + "vfs/corejar/rt.jar"; - VirtualFile root = fs.findFileByPath(jarPath + "!/"); + VirtualFile root = ObjectUtils.assertNotNull(fs.findFileByPath(jarPath + "!/")); VirtualFile[] children = root.getChildren(); assertEquals(4, children.length); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java index 35d241b90e70..534663d64ce8 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/VirtualFilePointerTest.java @@ -763,7 +763,7 @@ public class VirtualFilePointerTest extends PlatformTestCase { final LoggingListener listener = new LoggingListener(); final String url = VfsUtilCore.pathToUrl("/a/b/c/d/e"); final VirtualFilePointer thePointer = myVirtualFilePointerManager.create(url, disposable, listener); - TempFileSystem.getInstance(); + assertNotNull(TempFileSystem.getInstance()); PlatformTestUtil.startPerformanceTest("same url vfp create", 9000, () -> { for (int i = 0; i < 10_000_000; i++) { VirtualFilePointer pointer = myVirtualFilePointerManager.create(url, disposable, listener); @@ -962,6 +962,7 @@ public class VirtualFilePointerTest extends PlatformTestCase { ready.await(); VirtualFilePointer bc = VirtualFilePointerManager.getInstance().create(fileToCreatePointer.getUrl() + "/b/c", disposable, listener); + assertNotNull(bc); run = false; ConcurrencyUtil.joinAll(threads); diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/local/CanonicalPathMapTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/local/CanonicalPathMapTest.java index cecd6d5b59e7..fcee8b1ac143 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/local/CanonicalPathMapTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/vfs/impl/local/CanonicalPathMapTest.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vfs.impl.local; +import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.IoTestUtil; import com.intellij.testFramework.rules.TempDirectory; @@ -25,10 +26,8 @@ import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.Collection; +import java.util.Collections; -import static com.intellij.openapi.util.Pair.pair; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; public class CanonicalPathMapTest { @@ -42,7 +41,7 @@ public class CanonicalPathMapTest { @Test public void flatRootReportedExactlyViaParent() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(PathUtil.getParentPath(root), true); assertThat(paths).isEmpty(); } @@ -50,15 +49,16 @@ public class CanonicalPathMapTest { @Test public void flatRootReportedExactlyViaItself() { String root = FILE_ROOT; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(root, true); assertThat(paths).containsExactly(root); } @Test public void flatRootReportedExactlyViaChild() { - String root = DIR_ROOT, child = root + CHILD_FILE; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + String root = DIR_ROOT; + String child = root + CHILD_FILE; + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(child, true); assertThat(paths).containsExactly(child); } @@ -66,7 +66,7 @@ public class CanonicalPathMapTest { @Test public void flatRootReportedInexactlyViaParent() { String root = FILE_ROOT; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(PathUtil.getParentPath(root), false); assertThat(paths).containsExactly(root); } @@ -74,15 +74,16 @@ public class CanonicalPathMapTest { @Test public void flatRootReportedInexactlyViaItself() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(root, false); assertThat(paths).containsExactly(root); } @Test public void flatRootReportedInexactlyViaChild() { - String root = DIR_ROOT, child = root + CHILD_DIR; - CanonicalPathMap map = new CanonicalPathMap(emptyList(), singletonList(root)); + String root = DIR_ROOT; + String child = root + CHILD_DIR; + CanonicalPathMap map = new CanonicalPathMap(Collections.emptyList(), Collections.singletonList(root)); Collection paths = map.getWatchedPaths(child, false); assertThat(paths).isEmpty(); } @@ -90,7 +91,7 @@ public class CanonicalPathMapTest { @Test public void recursiveRootReportedExactlyViaParent() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(PathUtil.getParentPath(root), true); assertThat(paths).isEmpty(); } @@ -98,15 +99,16 @@ public class CanonicalPathMapTest { @Test public void recursiveRootReportedExactlyViaItself() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(root, true); assertThat(paths).containsExactly(root); } @Test public void recursiveRootReportedExactlyViaChild() { - String root = DIR_ROOT, child = root + CHILD_FILE; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + String root = DIR_ROOT; + String child = root + CHILD_FILE; + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(child, true); assertThat(paths).containsExactly(child); } @@ -114,7 +116,7 @@ public class CanonicalPathMapTest { @Test public void recursiveRootReportedInexactlyViaParent() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(PathUtil.getParentPath(root), false); assertThat(paths).containsExactly(root); } @@ -122,15 +124,16 @@ public class CanonicalPathMapTest { @Test public void recursiveRootReportedInexactlyViaItself() { String root = DIR_ROOT; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(root, false); assertThat(paths).containsExactly(root); } @Test public void recursiveRootReportedInexactlyViaChild() { - String root = DIR_ROOT, child = root + CHILD_DIR; - CanonicalPathMap map = new CanonicalPathMap(singletonList(root), emptyList()); + String root = DIR_ROOT; + String child = root + CHILD_DIR; + CanonicalPathMap map = new CanonicalPathMap(Collections.singletonList(root), Collections.emptyList()); Collection paths = map.getWatchedPaths(child, false); assertThat(paths).containsExactly(child); } @@ -143,10 +146,10 @@ public class CanonicalPathMapTest { File mappedDir = new File(myTempDir.getRoot(), "mapped"); // Initial symlink map: /?/root/link_dir -> /?/root/real - CanonicalPathMap pathMap = new CanonicalPathMap(singletonList(symLink.getPath()), emptyList()); + CanonicalPathMap pathMap = new CanonicalPathMap(Collections.singletonList(symLink.getPath()), Collections.emptyList()); // REMAP from native file watcher: /?/root/mapped -> /?/root/real - pathMap.addMapping(singletonList(pair(mappedDir.getPath(), realDir.getPath()))); + pathMap.addMapping(Collections.singletonList(Pair.pair(mappedDir.getPath(), realDir.getPath()))); Collection watchedPaths = pathMap.getWatchedPaths(new File(mappedDir, "file.txt").getPath(), true); assertThat(watchedPaths).containsExactly(new File(symLink, "file.txt").getPath()); From 1bb83f51788a185a1df0fe1a1f11fd6338353132 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 30 Jun 2017 13:34:02 +0300 Subject: [PATCH 91/93] artifactutiltest fixed --- .../packaging/impl/artifacts/PackagingElementPath.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/PackagingElementPath.java b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/PackagingElementPath.java index 689a5a088249..28b55b12e55c 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/PackagingElementPath.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/PackagingElementPath.java @@ -15,7 +15,6 @@ */ package com.intellij.packaging.impl.artifacts; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.elements.*; import com.intellij.packaging.impl.elements.ArtifactPackagingElement; @@ -25,6 +24,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; +import java.util.stream.Collectors; /** * @author nik @@ -60,7 +60,8 @@ public class PackagingElementPath { @NotNull public String getPathStringFrom(String separator, @Nullable CompositePackagingElement ancestor) { final List> parents = getParentsFrom(ancestor); - return StringUtil.join(ContainerUtil.reverse(parents), RenameablePackagingElement::getName, separator); + // StringUtil.join ignores empty strings whereas this monstrosity doesn't + return ContainerUtil.reverse(parents).stream().map(RenameablePackagingElement::getName).collect(Collectors.joining("/")); } public List> getParents() { From abe554019bc43826bd1eeec18073ad5810edc873 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 30 Jun 2017 13:53:25 +0300 Subject: [PATCH 92/93] IDEA-CR-22456 followup --- .../codeInspection/AnnotateMethodFix.java | 6 ++--- .../intellij/codeInsight/AnnotationUtil.java | 24 +++++++++---------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java b/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java index f035b07a2317..88c679bfa509 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/AnnotateMethodFix.java @@ -19,7 +19,6 @@ import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.FileModificationService; import com.intellij.codeInsight.intention.AddAnnotationPsiFix; import com.intellij.openapi.command.undo.UndoUtil; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; @@ -37,7 +36,6 @@ import java.util.List; * @author cdr */ public class AnnotateMethodFix implements LocalQuickFix { - private static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.AnnotateMethodFix"); protected final String myAnnotation; private final String[] myAnnotationsToRemove; @@ -68,7 +66,7 @@ public class AnnotateMethodFix implements LocalQuickFix { List superMethodSignatures = method.findSuperMethodSignaturesIncludingStatic(true); for (MethodSignatureBackedByPsiMethod superMethodSignature : superMethodSignatures) { PsiMethod superMethod = superMethodSignature.getMethod(); - if (!AnnotationUtil.isAnnotated(superMethod, myAnnotation, false, false, true, null) && + if (!AnnotationUtil.isAnnotated(superMethod, myAnnotation, false, false, true) && superMethod.getManager().isInProject(superMethod)) { int ret = shouldAnnotateBaseMethod(method, superMethod, project); if (ret != 0 && ret != 1) return; @@ -81,7 +79,7 @@ public class AnnotateMethodFix implements LocalQuickFix { PsiMethod[] methods = OverridingMethodsSearch.search(method).toArray(PsiMethod.EMPTY_ARRAY); for (PsiMethod psiMethod : methods) { if (AnnotationUtil.isAnnotatingApplicable(psiMethod, myAnnotation) && - !AnnotationUtil.isAnnotated(psiMethod, myAnnotation, false, false, true, null) && + !AnnotationUtil.isAnnotated(psiMethod, myAnnotation, false, false, true) && psiMethod.getManager().isInProject(psiMethod)) { toAnnotate.add(psiMethod); } diff --git a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java index c95290a2d1e7..041a8f5036b4 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/AnnotationUtil.java @@ -257,25 +257,25 @@ public class AnnotationUtil { } public static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN, boolean checkHierarchy) { - return isAnnotated(listOwner, annotationFQN, checkHierarchy, true, null); + return isAnnotated(listOwner, annotationFQN, checkHierarchy, true, true, null); } public static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN, boolean checkHierarchy, boolean skipExternal) { - return isAnnotated(listOwner, annotationFQN, checkHierarchy, skipExternal, null); - } - - private static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, - @NotNull String annotationFQN, - boolean checkHierarchy, - boolean skipExternal, - @Nullable Set processed) { - return isAnnotated(listOwner, annotationFQN, checkHierarchy, skipExternal, skipExternal, processed); + return isAnnotated(listOwner, annotationFQN, checkHierarchy, skipExternal, skipExternal); } public static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, + @NotNull String annotationFQN, + boolean checkHierarchy, + boolean skipExternal, + boolean skipInferred) { + return isAnnotated(listOwner, annotationFQN, checkHierarchy, skipExternal, skipInferred, null); + } + + private static boolean isAnnotated(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN, boolean checkHierarchy, boolean skipExternal, @@ -318,7 +318,7 @@ public class AnnotationUtil { if (!processed.add(method)) return false; final PsiMethod[] superMethods = method.findSuperMethods(); for (PsiMethod superMethod : superMethods) { - if (isAnnotated(superMethod, annotationFQN, true, skipExternal, processed)) return true; + if (isAnnotated(superMethod, annotationFQN, true, skipExternal, skipInferred, processed)) return true; } } else if (listOwner instanceof PsiClass) { @@ -327,7 +327,7 @@ public class AnnotationUtil { if (!processed.add(clazz)) return false; final PsiClass[] superClasses = clazz.getSupers(); for (PsiClass superClass : superClasses) { - if (isAnnotated(superClass, annotationFQN, true, skipExternal, processed)) return true; + if (isAnnotated(superClass, annotationFQN, true, skipExternal, skipInferred, processed)) return true; } } } From 4e8e6af935291d4b2f2962642804b7b8b59e114e Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Fri, 30 Jun 2017 13:51:41 +0300 Subject: [PATCH 93/93] [project view] track pane selection from content manager --- .../ide/projectView/impl/ProjectViewImpl.java | 11 +++++++- .../ide/projectView/impl/statistics.kt | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 platform/lang-impl/src/com/intellij/ide/projectView/impl/statistics.kt 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 5ccdd2e85c2b..5c678abaef17 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 @@ -106,6 +106,8 @@ import java.awt.*; import java.util.*; import java.util.List; +import static com.intellij.ide.projectView.impl.StatisticsKt.triggerProjectViewPane; + @State(name = "ProjectView", storages = @Storage(StoragePathMacros.WORKSPACE_FILE)) public class ProjectViewImpl extends ProjectView implements PersistentStateComponent, Disposable, QuickActionProvider, BusyObject { private static final Logger LOG = Logger.getInstance("#com.intellij.ide.projectView.impl.ProjectViewImpl"); @@ -546,7 +548,7 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo @Override public void selectionChanged(ContentManagerEvent event) { if (event.getOperation() == ContentManagerEvent.ContentOperation.add) { - viewSelectionChanged(); + viewSelectionChanged(true); } } }); @@ -575,6 +577,10 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo } private boolean viewSelectionChanged() { + return viewSelectionChanged(false); + } + + private boolean viewSelectionChanged(boolean fromContentManager) { Content content = getContentManager().getSelectedContent(); if (content == null) return false; final String id = content.getUserData(ID_KEY); @@ -584,6 +590,9 @@ public class ProjectViewImpl extends ProjectView implements PersistentStateCompo if (newPane == null) return false; newPane.setSubId(subId); showPane(newPane); + if (fromContentManager) { + triggerProjectViewPane(myCurrentViewId, myCurrentViewSubId); + } ProjectViewSelectInTarget target = getProjectViewSelectInTarget(newPane); if (target != null) target.setSubId(subId); if (isAutoscrollFromSource(id)) { diff --git a/platform/lang-impl/src/com/intellij/ide/projectView/impl/statistics.kt b/platform/lang-impl/src/com/intellij/ide/projectView/impl/statistics.kt new file mode 100644 index 000000000000..bb42b146c88b --- /dev/null +++ b/platform/lang-impl/src/com/intellij/ide/projectView/impl/statistics.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2000-2017 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.projectView.impl + +import com.intellij.internal.statistic.UsageTrigger +import com.intellij.internal.statistic.beans.ConvertUsagesUtil.ensureProperKey + +private val prefix = "project.view.pane" + +internal fun triggerProjectViewPane(id: String?, subId: String?) { + if (id == null) return + val featureString = if (subId == null) "$prefix.$id" else "$prefix.$id.$subId" + val key = ensureProperKey(featureString) + UsageTrigger.trigger(key) +}

pf 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 From 6bea5274581e5637a6bc2b1eec8751e0ec29f0fa Mon Sep 17 00:00:00 2001 From: Pavel Fatin Date: Thu, 29 Jun 2017 13:12:45 +0200 Subject: [PATCH 15/93] Package "annotation-internal" module classes in openapi.jar --- .../intellij/build/impl/DistributionJARsBuilder.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy index 1ff5f96b5e7a..9b72e8b36b30 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy @@ -103,6 +103,7 @@ class DistributionJARsBuilder { productLayout.platformApiModules.each { withModule(it, "openapi.jar") } + withModule("annotations-internal", "openapi.jar") productLayout.platformImplementationModules.each { withModule(it, productLayout.mainJarName) } @@ -111,7 +112,6 @@ class DistributionJARsBuilder { } withModule("util") withModule("util-rt", "util.jar") - withModule("annotations-internal", "util.jar") withModule("annotations") withModule("annotations-common", "annotations.jar") withModule("extensions") From 3bb87f90b36fd6cc13cb5d2c90afa0890b9adf07 Mon Sep 17 00:00:00 2001 From: Pavel Fatin Date: Thu, 29 Jun 2017 13:51:35 +0200 Subject: [PATCH 16/93] Merge "annotations-internal" module into "core-api" one --- .idea/modules.xml | 1 - .../annotations/internal/annotations-internal.iml | 11 ----------- .../build/impl/DistributionJARsBuilder.groovy | 1 - platform/core-api/core-api.iml | 1 - .../org/jetbrains/annotations/SystemDependent.java | 0 .../org/jetbrains/annotations/SystemIndependent.java | 0 6 files changed, 14 deletions(-) delete mode 100644 platform/annotations/internal/annotations-internal.iml rename platform/{annotations/internal => core-api}/src/org/jetbrains/annotations/SystemDependent.java (100%) rename platform/{annotations/internal => core-api}/src/org/jetbrains/annotations/SystemIndependent.java (100%) diff --git a/.idea/modules.xml b/.idea/modules.xml index 8baef1d3adc6..a20d716756d7 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -26,7 +26,6 @@ - diff --git a/platform/annotations/internal/annotations-internal.iml b/platform/annotations/internal/annotations-internal.iml deleted file mode 100644 index c90834f2d607..000000000000 --- a/platform/annotations/internal/annotations-internal.iml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy index 9b72e8b36b30..296b77d38c8b 100644 --- a/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy +++ b/platform/build-scripts/groovy/org/jetbrains/intellij/build/impl/DistributionJARsBuilder.groovy @@ -103,7 +103,6 @@ class DistributionJARsBuilder { productLayout.platformApiModules.each { withModule(it, "openapi.jar") } - withModule("annotations-internal", "openapi.jar") productLayout.platformImplementationModules.each { withModule(it, productLayout.mainJarName) } diff --git a/platform/core-api/core-api.iml b/platform/core-api/core-api.iml index 5f094ec347c8..fedaceca9ba6 100644 --- a/platform/core-api/core-api.iml +++ b/platform/core-api/core-api.iml @@ -7,7 +7,6 @@ - diff --git a/platform/annotations/internal/src/org/jetbrains/annotations/SystemDependent.java b/platform/core-api/src/org/jetbrains/annotations/SystemDependent.java similarity index 100% rename from platform/annotations/internal/src/org/jetbrains/annotations/SystemDependent.java rename to platform/core-api/src/org/jetbrains/annotations/SystemDependent.java diff --git a/platform/annotations/internal/src/org/jetbrains/annotations/SystemIndependent.java b/platform/core-api/src/org/jetbrains/annotations/SystemIndependent.java similarity index 100% rename from platform/annotations/internal/src/org/jetbrains/annotations/SystemIndependent.java rename to platform/core-api/src/org/jetbrains/annotations/SystemIndependent.java From 5f82e776be5380a5b41d14a61d87676f5406b41b Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Fri, 23 Jun 2017 19:53:39 +0300 Subject: [PATCH 17/93] [vcs]: rename file from java to kotlin --- .../vcs/changes/{ChangeListUtil.java => ChangeListUtil.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename platform/vcs-impl/src/com/intellij/openapi/vcs/changes/{ChangeListUtil.java => ChangeListUtil.kt} (100%) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt similarity index 100% rename from platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.java rename to platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt From 1582fae3c35277755ea5142735895918b4fe1126 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Mon, 26 Jun 2017 15:12:57 +0300 Subject: [PATCH 18/93] [vcs]: unify system changelist name policy for uncommitted changes * delete heuristic changelist choosing, use regexp mechanism instead to find oringinal changelist name; * move common naming part to VcsBundle; * convert ChangeListUtil to Kotlin and add several util methods; * IDEA-172343 unshelve to relevant changelist; --- .../src/messages/VcsBundle.properties | 1 + .../openapi/vcs/changes/ChangeListUtil.kt | 41 ++++++++++--------- .../changes/shelf/ShelveChangesManager.java | 10 ++--- .../shelf/UnshelveWithDialogAction.java | 10 ++--- .../src/git4idea/rebase/GitRebaseSpec.java | 3 +- .../git4idea/stash/GitShelveChangesSaver.java | 9 ++-- .../git4idea/util/GitPreservingProcess.java | 5 ++- .../svn/integrate/LocalChangesPromptTask.java | 5 ++- 8 files changed, 44 insertions(+), 40 deletions(-) diff --git a/platform/platform-resources-en/src/messages/VcsBundle.properties b/platform/platform-resources-en/src/messages/VcsBundle.properties index 682a2e481980..b81cae50d33e 100644 --- a/platform/platform-resources-en/src/messages/VcsBundle.properties +++ b/platform/platform-resources-en/src/messages/VcsBundle.properties @@ -367,6 +367,7 @@ create.patch.success.confirmation=Successfully created patch {0} patch.apply.error=Failed to apply patch for file {0}: {1} patch.load.base.revision.error=Failed to load patch base revision for file {0}: {1} shelve.changes.only.directories=The selected changes affect only directories and no files, so they cannot be shelved +stash.changes.message=Uncommitted changes before {0} edit.errors=Edit Errors rollback.modified.without.editing.confirm.single=Would you like to {0} the changes to {1}? rollback.modified.without.editing.confirm.multiple=Would you like to {0} the changes to {1} selected files? diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt index ceb2f3518326..3d01bc38abed 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListUtil.kt @@ -13,32 +13,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.openapi.vcs.changes; +package com.intellij.openapi.vcs.changes -import com.google.common.primitives.Ints; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.openapi.vcs.VcsBundle +import com.intellij.openapi.vcs.changes.shelf.ShelvedChangeList -import java.util.Collections; -import java.util.List; +object ChangeListUtil { -public class ChangeListUtil { + private val CHANGELIST_NAME_PATTERN = "\\s\\[([\\s\\S]*)\\]" + private val STASH_MESSAGE_PATTERN = VcsBundle.message("stash.changes.message", "[\\s\\S]*") + private val SYSTEM_CHANGELIST_REGEX = (STASH_MESSAGE_PATTERN + CHANGELIST_NAME_PATTERN).toRegex() - @Nullable - public static LocalChangeList getPredefinedChangeList(@NotNull String defaultName, @NotNull ChangeListManager changeListManager) { - final LocalChangeList sameNamedList = changeListManager.findChangeList(defaultName); - if (sameNamedList != null) return sameNamedList; - return tryToMatchWithExistingChangelist(changeListManager, defaultName); + @JvmStatic fun createSystemShelvedChangeListName(systemPrefix: String, changelistName: String): String { + return "$systemPrefix [$changelistName]" } - @Nullable - private static LocalChangeList tryToMatchWithExistingChangelist(@NotNull ChangeListManager changeListManager, - @NotNull final String defaultName) { - List matched = ContainerUtil.findAll(changeListManager.getChangeListsCopy(), - list -> defaultName.contains(list.getName().trim())); + fun getOriginalName(shelvedName: String): String { + return SYSTEM_CHANGELIST_REGEX.matchEntire(shelvedName)?.groups?.get(1)?.value ?: shelvedName + } - return matched.isEmpty() ? null : Collections.max(matched, - (o1, o2) -> Ints.compare(o1.getName().trim().length(), o2.getName().trim().length())); + @JvmStatic fun getPredefinedChangeList(shelvedList: ShelvedChangeList, changeListManager: ChangeListManager): LocalChangeList? { + val defaultName = shelvedList.DESCRIPTION + return changeListManager.findChangeList(defaultName) ?: + if (shelvedList.isMarkedToDelete) changeListManager.findChangeList(getOriginalName(defaultName)) else null + } + + @JvmStatic fun getChangeListNameForUnshelve(shelvedList: ShelvedChangeList): String { + val defaultName = shelvedList.DESCRIPTION + return if (shelvedList.isMarkedToDelete) getOriginalName(defaultName) else defaultName } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java index 06d4c45c44b4..84acd3ef3091 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java @@ -78,6 +78,7 @@ import java.util.concurrent.TimeUnit; import static com.intellij.openapi.util.io.FileUtil.toSystemIndependentName; import static com.intellij.openapi.vcs.changes.ChangeListUtil.getPredefinedChangeList; +import static com.intellij.openapi.vcs.changes.ChangeListUtil.getChangeListNameForUnshelve; import static com.intellij.util.ObjectUtils.chooseNotNull; public class ShelveChangesManager extends AbstractProjectComponent implements JDOMExternalizable { @@ -791,14 +792,9 @@ public class ShelveChangesManager extends AbstractProjectComponent implements JD @NotNull private LocalChangeList getChangeListUnshelveTo(@NotNull ShelvedChangeList list) { - String changeListName = list.DESCRIPTION; ChangeListManager manager = ChangeListManager.getInstance(myProject); - LocalChangeList localChangeList = manager.findChangeList(changeListName); - if (localChangeList != null) return localChangeList; - if (list.isMarkedToDelete()) { - localChangeList = getPredefinedChangeList(changeListName, manager); - } - return localChangeList != null ? localChangeList : manager.addChangeList(changeListName, ""); + LocalChangeList localChangeList = getPredefinedChangeList(list, manager); + return localChangeList != null ? localChangeList : manager.addChangeList(getChangeListNameForUnshelve(list), ""); } private class BinaryPatchApplier implements CustomBinaryPatchApplier { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/UnshelveWithDialogAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/UnshelveWithDialogAction.java index 3df376d25ad7..d21d41049c8d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/UnshelveWithDialogAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/UnshelveWithDialogAction.java @@ -46,6 +46,7 @@ import java.util.Collections; import java.util.List; import static com.intellij.openapi.vcs.changes.ChangeListUtil.getPredefinedChangeList; +import static com.intellij.openapi.vcs.changes.ChangeListUtil.getChangeListNameForUnshelve; import static com.intellij.openapi.vcs.changes.shelf.ShelvedChangesViewManager.getBinaryShelveChanges; import static com.intellij.openapi.vcs.changes.shelf.ShelvedChangesViewManager.getShelveChanges; import static com.intellij.util.containers.ContainerUtil.newArrayList; @@ -116,13 +117,10 @@ public class UnshelveWithDialogAction extends DumbAwareAction { @NotNull ShelvedChangeList changeList, @NotNull List binaryShelvedPatches, @Nullable Change[] preselectedChanges) { - super(project, new UnshelvePatchDefaultExecutor(project, changeList), - Collections.emptyList(), ApplyPatchMode.UNSHELVE, - patchFile, null, - changeList.isMarkedToDelete() ? getPredefinedChangeList(changeList.DESCRIPTION, ChangeListManager.getInstance(project)) : null, - binaryShelvedPatches, + super(project, new UnshelvePatchDefaultExecutor(project, changeList), Collections.emptyList(), ApplyPatchMode.UNSHELVE, patchFile, + null, getPredefinedChangeList(changeList, ChangeListManager.getInstance(project)), binaryShelvedPatches, hasNotAllSelectedChanges(project, changeList, preselectedChanges) ? newArrayList(preselectedChanges) : null, - changeList.DESCRIPTION, true); + getChangeListNameForUnshelve(changeList), true); } @Nullable diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaseSpec.java b/plugins/git4idea/src/git4idea/rebase/GitRebaseSpec.java index 5762dae75dcc..df44e33afa3e 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaseSpec.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaseSpec.java @@ -21,6 +21,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vcs.VcsBundle; import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.Hash; import git4idea.GitLocalBranch; @@ -156,7 +157,7 @@ public class GitRebaseSpec { @NotNull private static GitStashChangesSaver newSaver(@NotNull Project project, @NotNull ProgressIndicator indicator) { Git git = Git.getInstance(); - return new GitStashChangesSaver(project, git, indicator, "Uncommitted changes before rebase"); + return new GitStashChangesSaver(project, git, indicator, VcsBundle.message("stash.changes.message", "rebase")); } @NotNull diff --git a/plugins/git4idea/src/git4idea/stash/GitShelveChangesSaver.java b/plugins/git4idea/src/git4idea/stash/GitShelveChangesSaver.java index 9f6e1103cbce..8af96cbc1727 100644 --- a/plugins/git4idea/src/git4idea/stash/GitShelveChangesSaver.java +++ b/plugins/git4idea/src/git4idea/stash/GitShelveChangesSaver.java @@ -33,6 +33,8 @@ import org.jetbrains.annotations.NotNull; import java.util.*; +import static com.intellij.openapi.vcs.changes.ChangeListUtil.createSystemShelvedChangeListName; + public class GitShelveChangesSaver extends GitChangesSaver { private static final Logger LOG = Logger.getInstance(GitShelveChangesSaver.class); @@ -66,9 +68,10 @@ public class GitShelveChangesSaver extends GitChangesSaver { for (Collection changeCollection : map.values()) { changes.addAll(changeCollection); } - if (! changes.isEmpty()) { - final ShelvedChangeList list = GitShelveUtils.shelveChanges(myProject, myShelveManager, changes, - myStashMessage + " [" + entry.getKey() + "]", exceptions, false, true); + if (!changes.isEmpty()) { + final ShelvedChangeList list = GitShelveUtils + .shelveChanges(myProject, myShelveManager, changes, createSystemShelvedChangeListName(myStashMessage, entry.getKey()), exceptions, + false, true); myShelvedLists.put(entry.getKey(), list); } } diff --git a/plugins/git4idea/src/git4idea/util/GitPreservingProcess.java b/plugins/git4idea/src/git4idea/util/GitPreservingProcess.java index 39172a698ec7..56e03cbb758a 100644 --- a/plugins/git4idea/src/git4idea/util/GitPreservingProcess.java +++ b/plugins/git4idea/src/git4idea/util/GitPreservingProcess.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Clock; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.VcsNotifier; import com.intellij.openapi.vcs.history.VcsRevisionNumber; @@ -74,8 +75,8 @@ public class GitPreservingProcess { myDestinationName = destinationName; myProgressIndicator = indicator; myOperation = operation; - myStashMessage = String.format("Uncommitted changes before %s at %s", StringUtil.capitalize(myOperationTitle), - DateFormatUtil.formatDateTime(Clock.getTime())); + myStashMessage = VcsBundle.message("stash.changes.message", StringUtil.capitalize(myOperationTitle)) + + " at " +DateFormatUtil.formatDateTime(Clock.getTime()); mySaver = configureSaver(saveMethod); } diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LocalChangesPromptTask.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LocalChangesPromptTask.java index 66de4ef71e16..c5b6f6875e8c 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LocalChangesPromptTask.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/integrate/LocalChangesPromptTask.java @@ -21,6 +21,7 @@ import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangeListManager; +import com.intellij.openapi.vcs.changes.ChangeListUtil; import com.intellij.openapi.vcs.changes.LocalChangeList; import com.intellij.openapi.vcs.changes.shelf.ShelveChangesManager; import com.intellij.util.FilePathByPathComparator; @@ -39,6 +40,7 @@ import java.util.Set; import static com.intellij.openapi.application.ApplicationManager.getApplication; import static com.intellij.openapi.util.Conditions.alwaysTrue; import static com.intellij.openapi.util.text.StringUtil.isEmptyOrSpaces; +import static com.intellij.openapi.vcs.VcsBundle.message; import static com.intellij.openapi.vcs.changes.ChangesUtil.*; import static com.intellij.util.containers.ContainerUtil.sorted; import static java.util.stream.Collectors.toSet; @@ -108,7 +110,8 @@ public class LocalChangesPromptTask extends BaseMergeTask { ShelveChangesManager shelveManager = ShelveChangesManager.getInstance(myMergeContext.getProject()); for (Map.Entry> entry : intersection.getChangesByLists().entrySet()) { - String shelfName = intersection.getComment(entry.getKey()) + " (auto shelve before merge)"; + String shelfName = ChangeListUtil + .createSystemShelvedChangeListName(message("stash.changes.message", "merge"), intersection.getComment(entry.getKey())); shelveManager.shelveChanges(entry.getValue(), shelfName, true, true); } From 31868deae5644d536a9baf51f7879b27274302f3 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Mon, 26 Jun 2017 16:37:41 +0300 Subject: [PATCH 19/93] [vcs]: IDEA-172389 suggest a unique changelist name by default --- .../openapi/vcs/changes/ui/NewEditChangelistPanel.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/NewEditChangelistPanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/NewEditChangelistPanel.java index 914901aec04a..16f5bba547c9 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/NewEditChangelistPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/NewEditChangelistPanel.java @@ -30,6 +30,7 @@ import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.ui.*; import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.text.UniqueNameGenerator; import com.intellij.util.ui.JBUI; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; @@ -62,7 +63,9 @@ public abstract class NewEditChangelistPanel extends JPanel { ComponentWithTextFieldWrapper componentWithTextField = createComponentWithTextField(project); myNameTextField = componentWithTextField.getEditorTextField(); myNameTextField.setOneLineMode(true); - myNameTextField.setText("New changelist"); + String generateUniqueName = UniqueNameGenerator + .generateUniqueName("New changelist", "", "", " (", ")", s -> ChangeListManager.getInstance(myProject).findChangeList(s) == null); + myNameTextField.setText(generateUniqueName); myNameTextField.selectAll(); add(componentWithTextField.myComponent, gb); nameLabel.setLabelFor(myNameTextField); From 759790f63cd9aacecad9f15d1a146ce7d66160ea Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Mon, 26 Jun 2017 20:26:21 +0300 Subject: [PATCH 20/93] [vcs]: provide setDefaultChangelist method with name as a parameter --- .../openapi/vcs/changes/ChangeListModification.java | 2 ++ .../openapi/vcs/changes/ChangeListManagerImpl.java | 9 +++++++-- .../testFramework/vcs/MockChangeListManager.java | 5 +++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangeListModification.java b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangeListModification.java index 31bad2ed1340..7c043c937732 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangeListModification.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangeListModification.java @@ -20,6 +20,8 @@ import org.jetbrains.annotations.Nullable; public interface ChangeListModification { LocalChangeList addChangeList(@NotNull String name, @Nullable final String comment); + + void setDefaultChangeList(@NotNull String name); void setDefaultChangeList(@NotNull LocalChangeList list); void removeChangeList(final String name); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java index 4c3556c8a674..25b6c2cdc70d 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangeListManagerImpl.java @@ -904,15 +904,20 @@ public class ChangeListManagerImpl extends ChangeListManagerEx implements Projec } @Override - public void setDefaultChangeList(@NotNull final LocalChangeList list) { + public void setDefaultChangeList(@NotNull String name) { ApplicationManager.getApplication().runReadAction(() -> { synchronized (myDataLock) { - myModifier.setDefault(list.getName()); + myModifier.setDefault(name); } }); myChangesViewManager.scheduleRefresh(); } + @Override + public void setDefaultChangeList(@NotNull final LocalChangeList list) { + setDefaultChangeList(list.getName()); + } + @NotNull @Override public LocalChangeList getDefaultChangeList() { diff --git a/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/MockChangeListManager.java b/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/MockChangeListManager.java index 6f89d4acb78e..30a7bc17a8ae 100644 --- a/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/MockChangeListManager.java +++ b/platform/vcs-impl/testSrc/com/intellij/testFramework/vcs/MockChangeListManager.java @@ -332,6 +332,11 @@ public class MockChangeListManager extends ChangeListManagerEx { return changeList; } + @Override + public void setDefaultChangeList(@NotNull String name) { + throw new UnsupportedOperationException(); + } + @Override public void setDefaultChangeList(@NotNull LocalChangeList list) { myActiveChangeList = list; From 89c0cd140efd3bacdd66a20e0260b9adb0bb6510 Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Mon, 26 Jun 2017 20:28:17 +0300 Subject: [PATCH 21/93] [vcs]: do not use cached changelist value while editing * IDEA-174855 edit changelist looses changes; * IDEA-133289 Set Active Changelist is not working well; * remove useless checks; --- .../vcs/changes/ui/EditChangelistDialog.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/EditChangelistDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/EditChangelistDialog.java index 2175f5f85df3..353ea00adec2 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/EditChangelistDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/EditChangelistDialog.java @@ -19,6 +19,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.changes.ChangeListManager; import com.intellij.openapi.vcs.changes.LocalChangeList; @@ -69,20 +70,19 @@ public class EditChangelistDialog extends DialogWrapper { return; } - if (!Comparing.equal(oldName, myPanel.getChangeListName(), true) || !Comparing.equal(oldComment, myPanel.getDescription(), true)) { - final ChangeListManager clManager = ChangeListManager.getInstance(myProject); + final ChangeListManager clManager = ChangeListManager.getInstance(myProject); - final String newName = myPanel.getChangeListName(); - if (! myList.getName().equals(newName)) { - clManager.editName(myList.getName(), newName); - } - final String newDescription = myPanel.getDescription(); - if (! myList.getComment().equals(newDescription)) { - clManager.editComment(myList.getName(), newDescription); - } + final String newDescription = myPanel.getDescription(); + if (!StringUtil.equals(oldComment, newDescription)) { + clManager.editComment(oldName, newDescription); + } + + final String newName = myPanel.getChangeListName(); + if (!StringUtil.equals(oldName, newName)) { + clManager.editName(oldName, newName); } if (!myList.isDefault() && myPanel.getMakeActiveCheckBox().isSelected()) { - ChangeListManager.getInstance(myProject).setDefaultChangeList(myList); + clManager.setDefaultChangeList(newName); } myPanel.changelistCreatedOrChanged(myList); super.doOKAction(); From 743afced9f98528ece12efe6029e68490de0d9b7 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 27 Jun 2017 18:32:05 +0200 Subject: [PATCH 22/93] slowCheck: add some basic flakiness detection --- slowCheck/src/slowCheck/Generator.java | 6 +- .../src/slowCheck/PropertyFalsified.java | 60 +++++++++++++++++-- slowCheck/test/slowCheck/ExceptionTest.java | 51 ++++++++++++++++ slowCheck/test/slowCheck/GeneratorTest.java | 30 +--------- .../slowCheck/PropertyCheckerTestCase.java | 32 ++++++++++ 5 files changed, 143 insertions(+), 36 deletions(-) create mode 100644 slowCheck/test/slowCheck/ExceptionTest.java create mode 100644 slowCheck/test/slowCheck/PropertyCheckerTestCase.java diff --git a/slowCheck/src/slowCheck/Generator.java b/slowCheck/src/slowCheck/Generator.java index d11922d9d021..492c7dc03d40 100644 --- a/slowCheck/src/slowCheck/Generator.java +++ b/slowCheck/src/slowCheck/Generator.java @@ -34,7 +34,11 @@ public final class Generator { } public Generator map(@NotNull Function fun) { - return from(data -> fun.apply(generateUnstructured(data))); + return from(data -> fun.apply(myFunction.apply(data))); + } + + public Generator flatMap(@NotNull Function> fun) { + return from(data -> fun.apply(generateValue(data)).generateValue(data)); } public Generator noShrink() { diff --git a/slowCheck/src/slowCheck/PropertyFalsified.java b/slowCheck/src/slowCheck/PropertyFalsified.java index b2298def84c7..75334dfcb8a7 100644 --- a/slowCheck/src/slowCheck/PropertyFalsified.java +++ b/slowCheck/src/slowCheck/PropertyFalsified.java @@ -1,5 +1,9 @@ package slowCheck; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; import java.util.function.Supplier; /** @@ -7,19 +11,63 @@ import java.util.function.Supplier; */ @SuppressWarnings("ExceptionClassNameDoesntEndWithException") public class PropertyFalsified extends RuntimeException { + static final String FAILURE_REASON_HAS_CHANGED_DURING_MINIMIZATION = "!!! FAILURE REASON HAS CHANGED DURING MINIMIZATION !!!"; + private final long seed; private final PropertyFailure failure; private final Supplier data; - public PropertyFalsified(int seed, PropertyFailure failure, Supplier data) { - super("Falsified on " + failure.getMinimalCounterexample().getExampleValue() + "\n" + - (failure.getTotalMinimizationStepCount() > 0 - ? "Minimized in " + failure.getTotalMinimizationStepCount() + " steps\n" - : "") + - "Seed=" + seed, failure.getMinimalCounterexample().getExceptionCause()); + PropertyFalsified(long seed, PropertyFailure failure, Supplier data) { + super(failure.getMinimalCounterexample().getExceptionCause()); + this.seed = seed; this.failure = failure; this.data = data; } + @Override + public String getMessage() { + int minimizationStepCount = failure.getTotalMinimizationStepCount(); + String msg = "Falsified on " + failure.getMinimalCounterexample().getExampleValue() + "\n" + + (minimizationStepCount > 0 ? "Minimized in " + minimizationStepCount + " steps\n" : "") + + "Seed=" + seed; + Throwable first = failure.getFirstCounterExample().getExceptionCause(); + if (exceptionsDiffer(first, failure.getMinimalCounterexample().getExceptionCause())) { + msg += "\n " + FAILURE_REASON_HAS_CHANGED_DURING_MINIMIZATION; + if (first != null) { + msg += "\n Initial exception: " + printStackTrace(first) + "\n==========================\n"; + } else { + msg += "\n Initially property was falsified without exceptions\n"; + } + } + return msg; + } + + private static boolean exceptionsDiffer(Throwable e1, Throwable e2) { + if (e1 == null && e2 == null) return false; + if ((e1 == null) != (e2 == null)) return true; + if (!e1.getClass().equals(e2.getClass())) return true; + + return !getUserTrace(e1).equals(getUserTrace(e2)); + } + + private static List getUserTrace(Throwable e) { + List result = new ArrayList<>(); + for (StackTraceElement element : e.getStackTrace()) { + String s = element.toString(); + if (s.startsWith("slowCheck.CounterExampleImpl.checkProperty")) { + break; + } + result.add(s); + } + return result; + } + + private static String printStackTrace(Throwable e) { + StringWriter stringWriter = new StringWriter(); + PrintWriter writer = new PrintWriter(stringWriter); + e.printStackTrace(writer); + return stringWriter.getBuffer().toString(); + } + public PropertyFailure getFailure() { return failure; } diff --git a/slowCheck/test/slowCheck/ExceptionTest.java b/slowCheck/test/slowCheck/ExceptionTest.java new file mode 100644 index 000000000000..6c876fc6cc84 --- /dev/null +++ b/slowCheck/test/slowCheck/ExceptionTest.java @@ -0,0 +1,51 @@ +package slowCheck; + +import static slowCheck.Generator.integers; + +/** + * @author peter + */ +public class ExceptionTest extends PropertyCheckerTestCase { + + public void testFailureReasonUnchanged() { + try { + PropertyChecker.forAll(ourTestSettings, integers(), i -> { + throw new AssertionError("fail"); + }); + fail(); + } + catch (PropertyFalsified e) { + assertFalse(e.getMessage().contains(PropertyFalsified.FAILURE_REASON_HAS_CHANGED_DURING_MINIMIZATION)); + } + } + + public void testFailureReasonChangedExceptionClass() { + try { + PropertyChecker.forAll(ourTestSettings, integers(), i -> { + throw (i == 0 ? new RuntimeException("fail") : new IllegalArgumentException("fail")); + }); + fail(); + } + catch (PropertyFalsified e) { + assertTrue(e.getMessage().contains(PropertyFalsified.FAILURE_REASON_HAS_CHANGED_DURING_MINIMIZATION)); + } + } + + public void testFailureReasonChangedExceptionTrace() { + try { + PropertyChecker.forAll(ourTestSettings, integers(), i -> { + if (i == 0) { + throw new AssertionError("fail"); + } + else { + throw new AssertionError("fail2"); + } + }); + fail(); + } + catch (PropertyFalsified e) { + assertTrue(e.getMessage().contains(PropertyFalsified.FAILURE_REASON_HAS_CHANGED_DURING_MINIMIZATION)); + } + } + +} diff --git a/slowCheck/test/slowCheck/GeneratorTest.java b/slowCheck/test/slowCheck/GeneratorTest.java index beca7deede24..b8be3046acde 100644 --- a/slowCheck/test/slowCheck/GeneratorTest.java +++ b/slowCheck/test/slowCheck/GeneratorTest.java @@ -1,12 +1,9 @@ package slowCheck; -import junit.framework.TestCase; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.function.Predicate; import java.util.stream.Collectors; import static slowCheck.Generator.*; @@ -14,8 +11,7 @@ import static slowCheck.Generator.*; /** * @author peter */ -public class GeneratorTest extends TestCase { - private static final CheckerSettings ourTestSettings = CheckerSettings.DEFAULT_SETTINGS.withSeed(0); +public class GeneratorTest extends PropertyCheckerTestCase { public void testMod() { checkFalsified(integers(), @@ -75,12 +71,6 @@ public class GeneratorTest extends TestCase { return true; } - public void testPropertyThrowsException() { - checkFalsified(integers(), p -> { - throw new AssertionError(p); - }, 1); - } - public void testSuchThat() { PropertyChecker.forAll(integers().suchThat(i -> i < 0), i -> i < 0); } @@ -145,22 +135,4 @@ public class GeneratorTest extends TestCase { assertEquals(1, failure.getMinimalCounterexample().getExampleValue().size()); } - private PropertyFailure checkFalsified(Generator generator, Predicate predicate, int minimizationSteps) { - try { - PropertyChecker.forAll(ourTestSettings, generator, predicate); - throw new AssertionError("Can't falsify " + getName()); - } - catch (PropertyFalsified e) { - //noinspection unchecked - PropertyFailure failure = (PropertyFailure)e.getFailure(); - - System.out.println(" " + getName()); - System.out.println("Value: " + e.getBreakingValue()); - System.out.println("Data: " + e.getData()); - assertEquals(minimizationSteps, failure.getTotalMinimizationStepCount()); - assertEquals(e.getBreakingValue(), generator.generateUnstructured(e.getData())); - - return failure; - } - } } diff --git a/slowCheck/test/slowCheck/PropertyCheckerTestCase.java b/slowCheck/test/slowCheck/PropertyCheckerTestCase.java new file mode 100644 index 000000000000..7f1dc2d5b70f --- /dev/null +++ b/slowCheck/test/slowCheck/PropertyCheckerTestCase.java @@ -0,0 +1,32 @@ +package slowCheck; + +import junit.framework.TestCase; + +import java.util.function.Predicate; + +/** + * @author peter + */ +abstract class PropertyCheckerTestCase extends TestCase { + protected static final CheckerSettings ourTestSettings = CheckerSettings.DEFAULT_SETTINGS.withSeed(0); + + protected PropertyFailure checkFalsified(Generator generator, Predicate predicate, int minimizationSteps) { + try { + PropertyChecker.forAll(ourTestSettings, generator, predicate); + throw new AssertionError("Can't falsify " + getName()); + } + catch (PropertyFalsified e) { + //noinspection unchecked + PropertyFailure failure = (PropertyFailure)e.getFailure(); + + System.out.println(" " + getName()); + System.out.println("Value: " + e.getBreakingValue()); + System.out.println("Data: " + e.getData()); + assertEquals(minimizationSteps, failure.getTotalMinimizationStepCount()); + assertEquals(e.getBreakingValue(), generator.generateUnstructured(e.getData())); + + return failure; + } + } + +} From 4275cad0dc016762114d7bc86da3c20edb766d9a Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 29 Jun 2017 14:26:58 +0200 Subject: [PATCH 23/93] PsiIndexConsistencyTest: don't use keywords in class names --- .../com/intellij/java/propertyBased/PsiIndexConsistencyTest.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/java/java-tests/testSrc/com/intellij/java/propertyBased/PsiIndexConsistencyTest.kt b/java/java-tests/testSrc/com/intellij/java/propertyBased/PsiIndexConsistencyTest.kt index c6403e603d38..6d4249e42810 100644 --- a/java/java-tests/testSrc/com/intellij/java/propertyBased/PsiIndexConsistencyTest.kt +++ b/java/java-tests/testSrc/com/intellij/java/propertyBased/PsiIndexConsistencyTest.kt @@ -16,6 +16,7 @@ package com.intellij.java.propertyBased import com.intellij.java.propertyBased.PsiIndexConsistencyTest.Action.* +import com.intellij.lang.java.lexer.JavaLexer import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.vfs.VfsUtil @@ -55,7 +56,7 @@ class PsiIndexConsistencyTest: LightCodeInsightFixtureTestCase() { 10 to Generator.sampledFrom(*RefKind.values()).map { LoadRef(it) }, 10 to Generator.sampledFrom(*RefKind.values()).map { ClearRef(it) }, 5 to Generator.booleans().map { ChangeLanguageLevel(if (it) LanguageLevel.HIGHEST else LanguageLevel.JDK_1_3) }, - 5 to Generator.from { data -> TextChange(Generator.asciiIdentifiers().generateValue(data), + 5 to Generator.from { data -> TextChange(Generator.asciiIdentifiers().suchThat { !JavaLexer.isKeyword(it, LanguageLevel.HIGHEST) }.generateValue(data), Generator.booleans().generateValue(data), Generator.booleans().generateValue(data)) } )) From 59d17d978782e8196c6e175328ef98698a50fbfa Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 29 Jun 2017 14:47:10 +0200 Subject: [PATCH 24/93] restore plugin compatibility EA-101009 - CNFE: PluginClassLoader.loadClass --- .../junit/TestClassConfigurationProducer.java | 3 +- .../TestMethodConfigurationProducer.java | 3 +- ...actTestNGInClassConfigurationProducer.java | 31 +++++++++++++++++++ .../TestNGInClassConfigurationProducer.java | 6 +++- 4 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGInClassConfigurationProducer.java diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java index 7356713ead28..277606f50fd5 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClassConfigurationProducer.java @@ -17,8 +17,9 @@ package com.intellij.execution.junit; import com.intellij.execution.testframework.AbstractInClassConfigurationProducer; +//to be deleted in 2018 @Deprecated -public class TestClassConfigurationProducer extends AbstractInClassConfigurationProducer { +public class TestClassConfigurationProducer extends AbstractInClassConfigurationProducer { public TestClassConfigurationProducer() { super(JUnitConfigurationType.getInstance()); } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java index c6a3dde66362..eda64f393577 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethodConfigurationProducer.java @@ -17,8 +17,9 @@ package com.intellij.execution.junit; import com.intellij.execution.testframework.AbstractInClassConfigurationProducer; +//to be delete in 2018 @Deprecated -public class TestMethodConfigurationProducer extends AbstractInClassConfigurationProducer { +public class TestMethodConfigurationProducer extends AbstractInClassConfigurationProducer { public TestMethodConfigurationProducer() { super(JUnitConfigurationType.getInstance()); } diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGInClassConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGInClassConfigurationProducer.java new file mode 100644 index 000000000000..a41412ca4a6b --- /dev/null +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/AbstractTestNGInClassConfigurationProducer.java @@ -0,0 +1,31 @@ +/* + * Copyright 2000-2017 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.theoryinpractice.testng.configuration; + +import com.intellij.execution.configurations.ConfigurationType; + +//to be delete in 2018 +@Deprecated +public class AbstractTestNGInClassConfigurationProducer extends TestNGInClassConfigurationProducer { + @Deprecated + public AbstractTestNGInClassConfigurationProducer() { + } + + @Deprecated + public AbstractTestNGInClassConfigurationProducer(ConfigurationType configurationType) { + super(configurationType); + } +} diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java index 16a785f99aff..d54f1a69d128 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGInClassConfigurationProducer.java @@ -26,7 +26,11 @@ import org.jetbrains.annotations.NotNull; public class TestNGInClassConfigurationProducer extends TestNGConfigurationProducer { private TestNGInClassConfigurationProducerDelegate myDelegate = new TestNGInClassConfigurationProducerDelegate(TestNGConfigurationType.getInstance()); protected TestNGInClassConfigurationProducer() { - super(TestNGConfigurationType.getInstance()); + this(TestNGConfigurationType.getInstance()); + } + + protected TestNGInClassConfigurationProducer(final ConfigurationType configurationType) { + super(configurationType); } @Override From 8736d04a7a14616f77b2be7d4a148d22c30cc983 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 28 Jun 2017 14:35:31 +0300 Subject: [PATCH 25/93] cleanup --- .../search/JavaOverridingMethodsSearcher.java | 12 +++++-- .../openapi/vfs/VirtualFileVisitor.java | 8 ++--- .../src/com/intellij/util/AbstractQuery.java | 1 + .../src/com/intellij/util/ExecutorsQuery.java | 5 +-- .../core-api/src/com/intellij/util/Query.java | 2 +- .../com/intellij/psi/util/PsiUtilBase.java | 34 ++++++++----------- 6 files changed, 30 insertions(+), 32 deletions(-) diff --git a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java index 6a1200c75ba7..04d9123f57d6 100644 --- a/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java +++ b/java/java-indexing-impl/src/com/intellij/psi/impl/search/JavaOverridingMethodsSearcher.java @@ -53,9 +53,11 @@ public class JavaOverridingMethodsSearcher implements QueryExecutor file.getFileType() == JavaFileType.INSTANCE)) { - return processLocalScope((LocalSearchScope)searchScope, method, project, consumer); + if (searchScope instanceof LocalSearchScope) { + VirtualFile[] files = ((LocalSearchScope)searchScope).getVirtualFiles(); + if (isJavaOnlyScope(files)) { + return processLocalScope((LocalSearchScope)searchScope, method, project, consumer); + } } Iterable cached = HighlightingCaches.getInstance(project).OVERRIDING_METHODS.get(method); @@ -79,6 +81,10 @@ public class JavaOverridingMethodsSearcher implements QueryExecutor file.getFileType() == JavaFileType.INSTANCE); + } + private static boolean processLocalScope(@NotNull LocalSearchScope searchScope, @NotNull PsiMethod method, @NotNull Project project, diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileVisitor.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileVisitor.java index 686404162c83..2ac10887d7f5 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileVisitor.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFileVisitor.java @@ -82,13 +82,13 @@ public abstract class VirtualFileVisitor { private boolean myFollowSymLinks = true; - private boolean mySkipRoot = false; + private boolean mySkipRoot; private int myDepthLimit = -1; private Map> myVisitedTargets; - private int myLevel = 0; - private Stack myValueStack = null; - private T myValue = null; + private int myLevel; + private Stack myValueStack; + private T myValue; protected VirtualFileVisitor(@NotNull Option... options) { for (Option option : options) { diff --git a/platform/core-api/src/com/intellij/util/AbstractQuery.java b/platform/core-api/src/com/intellij/util/AbstractQuery.java index 8f55163dcb6a..1589ceaae4e7 100644 --- a/platform/core-api/src/com/intellij/util/AbstractQuery.java +++ b/platform/core-api/src/com/intellij/util/AbstractQuery.java @@ -42,6 +42,7 @@ public abstract class AbstractQuery implements Query { return result; } + @NotNull @Override public Iterator iterator() { assertNotProcessing(); diff --git a/platform/core-api/src/com/intellij/util/ExecutorsQuery.java b/platform/core-api/src/com/intellij/util/ExecutorsQuery.java index fda929cc77ab..91ee040fb5d8 100644 --- a/platform/core-api/src/com/intellij/util/ExecutorsQuery.java +++ b/platform/core-api/src/com/intellij/util/ExecutorsQuery.java @@ -46,10 +46,7 @@ public final class ExecutorsQuery extends AbstractQuery extends Iterable { /** - * Get all of the results in the {@link java.util.Collection} + * Get all of the results in the {@link Collection} * @return results in a collection or empty collection if no results found. */ @NotNull diff --git a/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java b/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java index 827cce9db74d..1052ba973f20 100644 --- a/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java +++ b/platform/lang-api/src/com/intellij/psi/util/PsiUtilBase.java @@ -39,13 +39,12 @@ import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; import java.awt.*; import java.util.Comparator; public class PsiUtilBase extends PsiUtilCore implements PsiEditorUtil { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.util.PsiUtilBase"); - public static final Comparator LANGUAGE_COMPARATOR = (o1, o2) -> o1.getID().compareTo(o2.getID()); + public static final Comparator LANGUAGE_COMPARATOR = Comparator.comparing(Language::getID); public static boolean isUnderPsiRoot(PsiFile root, PsiElement element) { PsiFile containingFile = element.getContainingFile(); @@ -74,10 +73,7 @@ public class PsiUtilBase extends PsiUtilCore implements PsiEditorUtil { Language lang = findLanguageFromElement(elt); if (caret.hasSelection()) { - final Language rangeLanguage = evaluateLanguageInRange(caret.getSelectionStart(), caret.getSelectionEnd(), file); - if (rangeLanguage == null) return file.getLanguage(); - - lang = rangeLanguage; + lang = evaluateLanguageInRange(caret.getSelectionStart(), caret.getSelectionEnd(), file); } return narrowLanguage(lang, file.getLanguage()); @@ -152,8 +148,8 @@ public class PsiUtilBase extends PsiUtilCore implements PsiEditorUtil { return narrowLanguage(lang, file.getLanguage()); } - @Nullable - public static Language evaluateLanguageInRange(final int start, final int end, @NotNull PsiFile file) { + @NotNull + private static Language evaluateLanguageInRange(final int start, final int end, @NotNull PsiFile file) { PsiElement elt = getElementAtOffset(file, start); TextRange selectionRange = new TextRange(start, end); @@ -195,7 +191,7 @@ public class PsiUtilBase extends PsiUtilCore implements PsiEditorUtil { * *

S7jk=xv>$K#vrYZ+B2?+6Nn3h&8~uTIdnyxq)%I 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 Uh->#K$tcNPFnYSG145VNe{K7g`Tzg` diff --git a/lib/src/asm-src.zip b/lib/src/asm-src.zip index 427668e85d249ff9fc9962dce21673d5669dd69f..60b1005fcfb463c893f5046c8534d3557b1f1472 100644 GIT binary patch delta 187956 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