From 31185c6576c575911c59f8fdf5a75396daf37b4b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 2 Dec 2024 17:10:47 +0100 Subject: [PATCH] Propagate @Unmodifiable to enable data-flow inspection to analyze more code GitOrigin-RevId: 288358515ebebd840b45244cd3d5b251385ff1b8 --- .../openapi/compiler/util/InspectionValidatorWrapper.java | 2 ++ .../ui/properties/ElementWithManifestPropertiesPanel.java | 2 ++ .../src/com/intellij/compiler/ModuleCompilerUtil.java | 1 + .../com/intellij/debugger/engine/PositionManagerImpl.java | 2 ++ .../debugger/jdi/ThreadGroupReferenceProxyImpl.java | 3 +++ .../com/intellij/debugger/jdi/VirtualMachineProxyImpl.java | 1 + .../agent/MemoryAgentPathsToClosestGCRootsProvider.java | 2 ++ .../java/debugger/JavaDebuggerEditorsProvider.java | 1 + .../openapi/src/com/intellij/debugger/PositionManager.java | 2 ++ .../execution/scratch/JavaScratchPositionManager.java | 2 ++ .../ui/configuration/LibraryJavaSourceRootDetector.java | 2 ++ .../intellij/codeInsight/intention/QuickFixFactory.java | 1 + .../com/intellij/codeInspection/reference/RefMethod.java | 1 + .../intellij/codeInspection/reference/RefOverridable.java | 2 ++ .../dataFlow/inference/ContractInferenceInterpreter.java | 1 + .../dataFlow/jvm/transfer/EnterFinallyTrap.java | 3 +++ .../dataFlow/jvm/transfer/InsideFinallyTrap.java | 2 ++ .../dataFlow/jvm/transfer/InsideInlinedBlockTrap.java | 3 ++- .../dataFlow/jvm/transfer/TryCatchAllTrap.java | 2 ++ ...uspiciousInvocationHandlerImplementationInspection.java | 2 ++ .../src/com/siyeh/ig/jdk/VarargParameterInspection.java | 2 ++ .../codeInsight/MakeInferredAnnotationExplicit.java | 1 + .../codeInsight/completion/JavaCompletionUtil.java | 1 + .../codeInsight/completion/JavaConstructorCallElement.java | 1 + .../intellij/codeInsight/completion/StreamConversion.java | 1 + .../completion/scope/JavaCompletionProcessor.java | 6 ++---- .../codeInsight/daemon/impl/quickfix/ImportClassFix.java | 2 ++ .../codeInsight/generation/GenerateEqualsHandler.java | 2 ++ .../codeInsight/generation/OverrideImplementUtil.java | 1 + .../intention/impl/config/QuickFixFactoryImpl.java | 1 + .../intellij/find/findUsages/JavaFindUsagesHandler.java | 2 ++ .../ide/JavaLanguageCodeStyleSettingsProvider.java | 2 ++ .../ide/projectView/impl/nodes/PackageViewProjectNode.java | 2 ++ .../com/intellij/javadoc/JavadocGeneratorRunProfile.java | 3 +++ .../src/com/intellij/lang/java/JavaFocusModeProvider.java | 2 ++ .../intellij/openapi/projectRoots/impl/JavaSdkImpl.java | 2 ++ .../com/intellij/spi/psi/SPIClassProvidersElementList.java | 2 ++ .../siyeh/ig/fixes/CreateEnumMissingSwitchBranchesFix.java | 3 ++- .../ig/fixes/CreateMissingBooleanPrimitiveBranchesFix.java | 3 ++- .../CreateMissingDeconstructionRecordClassBranchesFix.java | 3 ++- .../com/siyeh/ig/fixes/CreateMissingSwitchBranchesFix.java | 2 +- .../fixes/CreateSealedClassMissingSwitchBranchesFix.java | 2 +- .../src/com/siyeh/ig/format/StringFormatUsageSearcher.java | 3 +++ .../com/siyeh/ig/migration/IfCanBeSwitchInspection.java | 2 ++ .../com/siyeh/ig/psiutils/CreateSwitchBranchesUtil.java | 3 ++- .../lang/jvm/annotation/JvmAnnotationArrayValue.java | 2 ++ .../src/com/intellij/lang/jvm/util/JvmUtil.java | 2 ++ .../src/com/intellij/psi/PsiAnnotationAttributeValues.java | 2 ++ java/java-psi-api/src/com/intellij/psi/PsiClass.java | 3 +++ .../src/com/intellij/psi/util/PropertyUtilBase.java | 1 + .../src/com/intellij/psi/impl/PsiClassImplUtil.java | 2 ++ .../src/com/intellij/psi/impl/compiled/ClsClassImpl.java | 3 +++ .../intellij/psi/impl/compiled/ClsTypeParameterImpl.java | 3 +++ .../com/intellij/psi/impl/light/AbstractLightClass.java | 3 +++ .../src/com/intellij/psi/impl/light/LightPsiClassBase.java | 3 +++ .../src/com/intellij/psi/impl/source/PsiClassImpl.java | 3 +++ .../com/intellij/psi/impl/source/PsiImplicitClassImpl.java | 3 +++ .../intellij/psi/impl/source/PsiJShellRootClassImpl.java | 3 +++ .../psi/impl/source/tree/java/PsiCatchSectionImpl.java | 2 ++ .../psi/impl/source/tree/java/PsiTypeParameterImpl.java | 3 +++ .../structureView/impl/java/JavaLambdaNodeProvider.java | 2 ++ .../src/org/jetbrains/lang/manifest/psi/Header.java | 2 ++ .../src/org/jetbrains/lang/manifest/psi/ManifestFile.java | 3 +++ .../org/jetbrains/lang/manifest/psi/impl/HeaderImpl.java | 2 ++ .../jetbrains/lang/manifest/psi/impl/ManifestFileImpl.java | 3 +++ .../codeInsight/daemon/DaemonAnalyzerTestCase.java | 4 ++++ .../codeInsight/daemon/LightDaemonAnalyzerTestCase.java | 4 ++++ .../codeInsight/daemon/quickFix/LightQuickFixTestCase.java | 5 +++++ .../codeInsight/daemon/quickFix/QuickFixTestCase.java | 3 +++ .../intellij/debugger/mockJDI/types/MockPsiClassType.java | 1 + .../typeMigration/rules/TypeConversionRuleUtil.java | 2 ++ .../intention/CustomizableIntentionActionDelegate.java | 2 ++ .../src/com/intellij/codeInsight/lookup/Lookup.java | 1 + .../codeInsight/lookup/LookupElementDecorator.java | 2 ++ .../intellij/codeInspection/InspectionProfileEntry.java | 1 + .../com/intellij/codeInspection/LocalInspectionTool.java | 2 ++ .../com/intellij/codeInspection/ex/QuickFixWrapper.java | 2 ++ .../intellij/openapi/vfs/newvfs/FileSystemInterface.java | 2 ++ .../codeInsight/lookup/CachingComparingClassifier.java | 2 ++ .../dataFlow/value/DfaControlTransferValue.java | 2 ++ .../src/com/intellij/lang/PerFileMappingsBase.java | 1 + .../src/com/intellij/lang/PerFileMappingsEx.java | 2 ++ .../reference/impl/providers/FileReferenceHelper.java | 1 + .../resolve/reference/impl/providers/FileReferenceSet.java | 3 +++ .../psi/impl/source/tree/injected/DocumentWindowImpl.java | 1 + .../source/tree/injected/InjectedLanguageManagerImpl.java | 6 ++---- .../src/com/intellij/injected/editor/DocumentWindow.java | 2 ++ .../intellij/lang/injection/InjectedLanguageManager.java | 6 ++---- .../intellij/psi/search/DelegatingGlobalSearchScope.java | 2 ++ .../com/intellij/psi/search/GlobalAndLocalUnionScope.java | 2 ++ .../src/com/intellij/psi/search/GlobalSearchScope.java | 1 + .../src/com/intellij/psi/search/IntersectionScope.java | 2 ++ .../core-api/src/com/intellij/psi/util/PsiTreeUtil.java | 1 + platform/core-api/src/com/intellij/util/PathsList.java | 3 +++ .../src/com/intellij/util/graph/GraphAlgorithms.java | 2 ++ .../src/com/intellij/psi/stubs/ObjectStubTree.java | 2 ++ .../core-impl/src/com/intellij/psi/stubs/StubTree.java | 1 + .../com/intellij/util/graph/impl/GraphAlgorithmsImpl.java | 2 ++ platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java | 1 + .../com/intellij/ide/util/treeView/AbstractTreeNode.java | 1 + .../com/intellij/ide/util/treeView/smartTree/Grouper.java | 2 ++ .../intellij/ide/util/treeView/smartTree/NodeProvider.java | 2 ++ .../src/com/intellij/ui/switcher/QuickActionProvider.java | 2 ++ .../intellij/ide/script/IdeScriptEngineManagerImpl.java | 2 ++ .../src/com/intellij/psi/search/IndexPatternOptimizer.java | 2 ++ .../codeStyle/properties/CommaSeparatedValuesAccessor.java | 2 ++ .../codeStyle/properties/ValueListPropertyAccessor.java | 2 ++ .../codeInsight/completion/ml/ContextFeatureProvider.java | 2 ++ .../codeInsight/completion/ml/ElementFeatureProvider.java | 2 ++ .../intellij/execution/actions/ConfigurationContext.java | 2 ++ .../intellij/execution/actions/PreferredProducerFind.java | 1 + .../src/com/intellij/openapi/projectRoots/SdkType.java | 1 + .../options/codeStyle/CodeStyleSchemesModel.java | 1 + .../codeInsight/daemon/impl/DaemonTooltipRenderer.java | 2 ++ .../daemon/impl/focusMode/FocusModeProvider.java | 2 ++ .../com/intellij/codeInsight/lookup/impl/LookupImpl.java | 1 + .../codeInsight/template/impl/ListTemplatesHandler.java | 2 ++ .../codeInsight/template/impl/TemplateManagerImpl.java | 2 ++ .../src/com/intellij/ide/actions/CopyReferenceAction.java | 2 ++ .../src/com/intellij/ide/actions/GotoFileItemProvider.java | 1 + .../src/com/intellij/ide/actions/WeighingActionGroup.java | 2 ++ .../runAnything/RunAnythingRunConfigurationProvider.java | 2 ++ .../runAnything/activity/RunAnythingProviderBase.java | 1 + .../activity/RunAnythingRecentProjectProvider.java | 2 ++ .../searcheverywhere/SearchEverywhereManagerImpl.java | 2 ++ .../ide/actions/searcheverywhere/SearchEverywhereUI.java | 2 ++ .../ide/extensionResources/ExtensionsRootType.java | 2 ++ .../src/com/intellij/ide/scopeView/ScopeViewTreeModel.java | 2 ++ .../intellij/openapi/roots/libraries/ui/RootDetector.java | 2 ++ .../documentation/SymbolDocumentationTargetProvider.java | 2 ++ .../platform/templates/ArchivedProjectTemplate.java | 2 ++ .../codeStyle/autodetect/IndentOptionsDetectorImpl.java | 2 ++ .../reference/impl/providers/JarFileReferenceHelper.java | 2 ++ .../reference/impl/providers/PsiFileReferenceHelper.java | 1 + .../com/intellij/psi/search/IndexPatternOptimizerImpl.java | 2 ++ .../refactoring/rename/RenamePsiFileProcessor.java | 3 ++- .../lvcs-impl/src/com/intellij/history/core/Paths.java | 3 +++ .../intellij/openapi/actionSystem/ActionGroupWrapper.java | 2 ++ .../src/com/intellij/openapi/ui/SimpleToolWindowPanel.java | 3 +++ .../src/com/intellij/openapi/ui/popup/JBPopupFactory.java | 2 ++ .../intellij/execution/wsl/WslDistributionDescriptor.java | 2 ++ .../externalDependencies/ExternalDependenciesManager.java | 2 ++ .../impl/ExternalDependenciesManagerImpl.java | 2 ++ .../com/intellij/ide/actions/SettingsEntryPointGroup.java | 2 ++ .../src/com/intellij/ide/actions/ToggleToolbarAction.java | 2 ++ .../lightEdit/menuBar/LightEditRecentFileActionGroup.java | 2 ++ .../intellij/openapi/editor/actions/ContentChooser.java | 2 ++ .../openapi/vfs/impl/local/LocalFileSystemImpl.java | 1 + .../openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java | 2 ++ .../src/com/intellij/ui/ColorPickerListenerFactory.java | 2 ++ .../src/com/intellij/ui/popup/PopupFactoryImpl.java | 2 ++ .../src/com/intellij/ui/tree/AsyncTreeModel.java | 2 ++ .../com/intellij/util/net/ssl/CertificateTreeBuilder.java | 1 + .../intellij/execution/configurations/ParametersList.java | 2 ++ .../com/intellij/execution/configurations/ParamsGroup.java | 2 ++ .../configurations/PathEnvironmentVariableUtil.java | 1 + .../src/com/intellij/openapi/roots/impl/RootIndex.java | 1 + .../refactoring/rename/RenamePsiElementProcessorBase.java | 2 ++ .../remoteServer/util/CloudServerRuntimeInstance.java | 2 ++ .../testframework/sm/SMTestRunnerConnectionUtil.java | 4 ++++ .../execution/testframework/sm/runner/SMTestProxy.java | 2 ++ .../internal/statistic/utils/StatisticsRecorderUtil.java | 1 + .../structuralsearch/plugin/ui/ConfigurationManager.java | 1 + .../src/com/intellij/tasks/TaskManager.java | 4 ++++ .../com/intellij/tasks/context/WorkingContextManager.java | 1 + .../src/com/intellij/tasks/impl/TaskManagerImpl.java | 4 ++++ .../core/src/com/intellij/TestCaseLoader.java | 1 + .../src/com/intellij/editor/TodoItemsTestCase.java | 2 ++ .../src/com/intellij/openapi/util/io/IoTestUtil.java | 2 ++ .../testFramework/fixtures/CodeInsightTestFixture.java | 2 ++ .../fixtures/impl/CodeInsightTestFixtureImpl.java | 5 +++++ .../testFramework/src/com/intellij/ui/IconTestUtil.java | 1 + .../com/intellij/execution/testframework/SourceScope.java | 2 ++ .../src/com/intellij/usages/impl/UsageViewImpl.java | 1 + .../src/com/intellij/usages/impl/rules/ActiveRules.java | 2 ++ .../intellij/util/containers/FilteredTraverserBase.java | 2 ++ .../src/com/intellij/util/containers/ObjectIntHashMap.java | 2 ++ .../src/com/intellij/util/containers/ObjectIntMap.java | 2 ++ platform/util/ui/src/com/intellij/ui/TableUtil.java | 3 +++ .../src/com/intellij/openapi/vcs/changes/ChangesUtil.java | 2 ++ .../xdebugger/evaluation/XDebuggerEditorsProvider.java | 2 ++ .../xdebugger/impl/settings/DebuggerConfigurable.java | 7 +++---- .../org/intellij/plugins/intelliLang/Configuration.java | 1 + .../lang/properties/structureView/GroupByWordPrefixes.java | 2 ++ .../lang/properties/editor/ResourceBundleEditor.java | 3 +++ .../editor/ResourceBundleStructureViewComponent.java | 2 ++ .../debugger/streams/psi/impl/JavaStreamChainBuilder.java | 2 ++ .../intellij/debugger/streams/trace/IntermediateState.java | 2 ++ .../com/intellij/debugger/streams/ui/TraceController.java | 2 ++ .../debugger/streams/ui/impl/TraceControllerImpl.java | 2 ++ 190 files changed, 375 insertions(+), 24 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/openapi/compiler/util/InspectionValidatorWrapper.java b/java/compiler/impl/src/com/intellij/openapi/compiler/util/InspectionValidatorWrapper.java index d5112ae893a9..a088961813e1 100644 --- a/java/compiler/impl/src/com/intellij/openapi/compiler/util/InspectionValidatorWrapper.java +++ b/java/compiler/impl/src/com/intellij/openapi/compiler/util/InspectionValidatorWrapper.java @@ -34,6 +34,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.DataInput; import java.io.IOException; @@ -79,6 +80,7 @@ public class InspectionValidatorWrapper implements Validator { return ourCompilationThreads.get().booleanValue(); } + @Unmodifiable private static List runInspectionOnFile(@NotNull PsiFile file, @NotNull LocalInspectionTool inspectionTool) { InspectionManager inspectionManager = InspectionManager.getInstance(file.getProject()); GlobalInspectionContext context = inspectionManager.createNewGlobalContext(); diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/ui/properties/ElementWithManifestPropertiesPanel.java b/java/compiler/impl/src/com/intellij/packaging/impl/ui/properties/ElementWithManifestPropertiesPanel.java index bbae692761ee..1cacadb2cff4 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/ui/properties/ElementWithManifestPropertiesPanel.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/ui/properties/ElementWithManifestPropertiesPanel.java @@ -17,6 +17,7 @@ import com.intellij.packaging.ui.PackagingElementPropertiesPanel; import com.intellij.ui.DocumentAdapter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -144,6 +145,7 @@ public abstract class ElementWithManifestPropertiesPanel getConfiguredClasspath() { return StringUtil.split(myClasspathField.getText(), " "); } diff --git a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java index e2ab72cb57d2..713f61451f27 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ModuleCompilerUtil.java @@ -70,6 +70,7 @@ public final class ModuleCompilerUtil { })); } + @Unmodifiable public static @NotNull List> computeSourceSetCycles(@NotNull ModulesProvider provider) { Graph graph = createModuleSourceDependenciesGraph(provider); Collection> chunks = GraphAlgorithms.getInstance().computeStronglyConnectedComponents(graph); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java index fb450c7d8474..de4721aa0d07 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/PositionManagerImpl.java @@ -40,6 +40,7 @@ import com.sun.jdi.request.ClassPrepareRequest; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import org.jetbrains.org.objectweb.asm.Opcodes; import java.util.*; @@ -429,6 +430,7 @@ public class PositionManagerImpl implements PositionManager, MultiRequestPositio @Override @NotNull + @Unmodifiable public List getAllClasses(@NotNull final SourcePosition position) throws NoDataException { Set lineClasses = ReadAction.compute(() -> getLineClasses(position.getFile(), position.getLine())); return ContainerUtil.flatMap(lineClasses, aClass -> getClassReferences(aClass, position)); diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/ThreadGroupReferenceProxyImpl.java b/java/debugger/impl/src/com/intellij/debugger/jdi/ThreadGroupReferenceProxyImpl.java index 7ea0cd849d99..662b968ffd5e 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/ThreadGroupReferenceProxyImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/ThreadGroupReferenceProxyImpl.java @@ -10,6 +10,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.util.containers.ContainerUtil; import com.sun.jdi.ThreadGroupReference; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -59,10 +60,12 @@ public class ThreadGroupReferenceProxyImpl extends ObjectReferenceProxyImpl impl getThreadGroupReference().resume(); } + @Unmodifiable public List threads() { return ContainerUtil.map(getThreadGroupReference().threads(), getVirtualMachineProxy()::getThreadReferenceProxy); } + @Unmodifiable public List threadGroups() { return ContainerUtil.map(getThreadGroupReference().threadGroups(), getVirtualMachineProxy()::getThreadGroupReferenceProxy); } diff --git a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java index bc4fbc727306..f22152d43e40 100644 --- a/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java @@ -254,6 +254,7 @@ public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy { /** * @return a list of threadGroupProxies */ + @Unmodifiable public List topLevelThreadGroups() { return ContainerUtil.map(getVirtualMachine().topLevelThreadGroups(), this::getThreadGroupReferenceProxy); } diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/agent/MemoryAgentPathsToClosestGCRootsProvider.java b/java/debugger/impl/src/com/intellij/debugger/memory/agent/MemoryAgentPathsToClosestGCRootsProvider.java index 2515a8440f5a..7ba987582087 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/agent/MemoryAgentPathsToClosestGCRootsProvider.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/agent/MemoryAgentPathsToClosestGCRootsProvider.java @@ -8,6 +8,7 @@ import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.openapi.util.registry.Registry; import com.sun.jdi.ObjectReference; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.HashMap; import java.util.List; @@ -29,6 +30,7 @@ public class MemoryAgentPathsToClosestGCRootsProvider implements ReferringObject @NotNull @Override + @Unmodifiable public List getReferringObjects(@NotNull EvaluationContextImpl evaluationContext, @NotNull ObjectReference value, long limit) throws EvaluateException { diff --git a/java/debugger/impl/src/org/jetbrains/java/debugger/JavaDebuggerEditorsProvider.java b/java/debugger/impl/src/org/jetbrains/java/debugger/JavaDebuggerEditorsProvider.java index 61daf69c58f4..fb8146aceadc 100644 --- a/java/debugger/impl/src/org/jetbrains/java/debugger/JavaDebuggerEditorsProvider.java +++ b/java/debugger/impl/src/org/jetbrains/java/debugger/JavaDebuggerEditorsProvider.java @@ -50,6 +50,7 @@ public class JavaDebuggerEditorsProvider extends XDebuggerEditorsProviderBase { @NotNull @Override + @Unmodifiable public Collection getSupportedLanguages(@NotNull Project project, @Nullable XSourcePosition sourcePosition) { if (sourcePosition != null) { return getSupportedLanguages(getContextElement(sourcePosition.getFile(), sourcePosition.getOffset(), project)); diff --git a/java/debugger/openapi/src/com/intellij/debugger/PositionManager.java b/java/debugger/openapi/src/com/intellij/debugger/PositionManager.java index 706ca8496adf..06ee04962970 100644 --- a/java/debugger/openapi/src/com/intellij/debugger/PositionManager.java +++ b/java/debugger/openapi/src/com/intellij/debugger/PositionManager.java @@ -23,6 +23,7 @@ import com.sun.jdi.ReferenceType; import com.sun.jdi.request.ClassPrepareRequest; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; import java.util.Set; @@ -54,6 +55,7 @@ public interface PositionManager { * @see com.intellij.debugger.engine.jdi.VirtualMachineProxy#classesByName */ @NotNull + @Unmodifiable List getAllClasses(@NotNull SourcePosition classPosition) throws NoDataException; /** diff --git a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchPositionManager.java b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchPositionManager.java index ca53bbacb2d7..b446b9e06f05 100644 --- a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchPositionManager.java +++ b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchPositionManager.java @@ -18,6 +18,7 @@ import com.sun.jdi.ReferenceType; import com.sun.jdi.request.ClassPrepareRequest; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -49,6 +50,7 @@ public class JavaScratchPositionManager extends PositionManagerImpl{ @NotNull @Override + @Unmodifiable public List getAllClasses(@NotNull SourcePosition position) throws NoDataException { checkPosition(position); return super.getAllClasses(position); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java index cf3b4c50ec36..aabfcec66f67 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/LibraryJavaSourceRootDetector.java @@ -20,6 +20,7 @@ import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.ui.RootDetector; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -30,6 +31,7 @@ public final class LibraryJavaSourceRootDetector extends RootDetector { @NotNull @Override + @Unmodifiable public Collection detectRoots(@NotNull VirtualFile rootCandidate, @NotNull ProgressIndicator progressIndicator) { return JavaVfsSourceRootDetectionUtil.suggestRoots(rootCandidate, progressIndicator); diff --git a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java index 4fdd76364c07..2c650848cffc 100644 --- a/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java +++ b/java/java-analysis-api/src/com/intellij/codeInsight/intention/QuickFixFactory.java @@ -430,6 +430,7 @@ public abstract class QuickFixFactory { public abstract IntentionAction createNotIterableForEachLoopFix(@NotNull PsiExpression expression); @NotNull + @Unmodifiable public abstract List createAddAnnotationAttributeNameFixes(@NotNull PsiNameValuePair pair); @NotNull diff --git a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefMethod.java b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefMethod.java index 01c6f8086c1b..956679a391f5 100644 --- a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefMethod.java +++ b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefMethod.java @@ -169,6 +169,7 @@ public interface RefMethod extends RefJavaElement, RefOverridable { @NotNull @Override + @Unmodifiable default Collection getDerivedReferences() { return getDerivedMethods(); } diff --git a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefOverridable.java b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefOverridable.java index 1efa0ebfd207..3fa2187ee71a 100644 --- a/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefOverridable.java +++ b/java/java-analysis-api/src/com/intellij/codeInspection/reference/RefOverridable.java @@ -2,6 +2,7 @@ package com.intellij.codeInspection.reference; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -13,6 +14,7 @@ public interface RefOverridable extends RefJavaElement { * @return the collection of derived references, e.g. RefMethod may contain at least RefMethod, RefFunctionalExpression as derived reference, * RefFunctionalExpression contains nothing. */ + @Unmodifiable @NotNull Collection getDerivedReferences(); /** diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inference/ContractInferenceInterpreter.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inference/ContractInferenceInterpreter.java index 773805518e24..1a75204cd899 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inference/ContractInferenceInterpreter.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/inference/ContractInferenceInterpreter.java @@ -264,6 +264,7 @@ class ContractInferenceInterpreter { } @NotNull + @Unmodifiable private List visitPolyadic(List states, @NotNull LighterASTNode expr) { if (firstChildOfType(myTree, expr, JavaTokenType.PLUS) != null) { return asPreContracts(ContainerUtil.map(states, s -> new StandardMethodContract(s, returnNotNull()))); diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/EnterFinallyTrap.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/EnterFinallyTrap.java index fd4df8e4fd00..a5092e34180d 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/EnterFinallyTrap.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/EnterFinallyTrap.java @@ -10,6 +10,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiResourceList; import com.intellij.util.containers.FList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.List; @@ -34,6 +35,7 @@ public class EnterFinallyTrap implements DfaControlTransferValue.Trap { } @Override + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, DfaControlTransferValue.@NotNull TransferTarget target, @@ -68,6 +70,7 @@ public class EnterFinallyTrap implements DfaControlTransferValue.Trap { } @Override + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, DfaControlTransferValue.@NotNull TransferTarget target, diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideFinallyTrap.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideFinallyTrap.java index dbfe32ca42b8..9657a8eaaec0 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideFinallyTrap.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideFinallyTrap.java @@ -9,6 +9,7 @@ import com.intellij.codeInspection.dataFlow.value.DfaValue; import com.intellij.psi.PsiElement; import com.intellij.util.containers.FList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -20,6 +21,7 @@ public class InsideFinallyTrap implements DfaControlTransferValue.Trap { } @Override + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, DfaControlTransferValue.@NotNull TransferTarget target, diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideInlinedBlockTrap.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideInlinedBlockTrap.java index ce5d4150e129..1994a460df99 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideInlinedBlockTrap.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/InsideInlinedBlockTrap.java @@ -6,10 +6,10 @@ import com.intellij.codeInspection.dataFlow.lang.ir.DfaInstructionState; import com.intellij.codeInspection.dataFlow.memory.DfaMemoryState; import com.intellij.codeInspection.dataFlow.value.DfaControlTransferValue; import com.intellij.codeInspection.dataFlow.value.DfaValue; -import com.intellij.psi.PsiCodeBlock; import com.intellij.psi.PsiElement; import com.intellij.util.containers.FList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -21,6 +21,7 @@ public class InsideInlinedBlockTrap implements DfaControlTransferValue.Trap { } @Override + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, DfaControlTransferValue.@NotNull TransferTarget target, diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/TryCatchAllTrap.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/TryCatchAllTrap.java index ca9f47943d69..67b33518ea6a 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/TryCatchAllTrap.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/jvm/transfer/TryCatchAllTrap.java @@ -9,6 +9,7 @@ import com.intellij.codeInspection.dataFlow.value.DfaControlTransferValue; import com.intellij.psi.PsiElement; import com.intellij.util.containers.FList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -22,6 +23,7 @@ public class TryCatchAllTrap implements DfaControlTransferValue.Trap { } @Override + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, DfaControlTransferValue.@NotNull TransferTarget target, diff --git a/java/java-analysis-impl/src/com/siyeh/ig/bugs/SuspiciousInvocationHandlerImplementationInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/bugs/SuspiciousInvocationHandlerImplementationInspection.java index dcda9b8eaed7..d9ebcd76d5da 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/bugs/SuspiciousInvocationHandlerImplementationInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/bugs/SuspiciousInvocationHandlerImplementationInspection.java @@ -34,6 +34,7 @@ import one.util.streamex.EntryStream; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -187,6 +188,7 @@ public final class SuspiciousInvocationHandlerImplementationInspection extends A } @Override + @Unmodifiable protected @NotNull List createInitialInstructionStates(@NotNull PsiElement psiBlock, @NotNull Collection memStates, @NotNull ControlFlow flow) { diff --git a/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java b/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java index f18c2ba77c6e..cbc95639dcd2 100644 --- a/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java +++ b/java/java-analysis-impl/src/com/siyeh/ig/jdk/VarargParameterInspection.java @@ -34,6 +34,7 @@ import com.siyeh.ig.psiutils.CommentTracker; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.Collection; @@ -91,6 +92,7 @@ public final class VarargParameterInspection extends BaseInspection { } @NotNull + @Unmodifiable private static List getReferences(@NotNull PsiMethod method) { if (IntentionPreviewUtils.isIntentionPreviewActive()) { return SyntaxTraverser.psiTraverser(method.getContainingFile()) diff --git a/java/java-impl/src/com/intellij/codeInsight/MakeInferredAnnotationExplicit.java b/java/java-impl/src/com/intellij/codeInsight/MakeInferredAnnotationExplicit.java index b79b7d589dd8..df1c733e340b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/MakeInferredAnnotationExplicit.java +++ b/java/java-impl/src/com/intellij/codeInsight/MakeInferredAnnotationExplicit.java @@ -160,6 +160,7 @@ public final class MakeInferredAnnotationExplicit extends BaseIntentionAction { () -> doMakeAnnotationExplicit(project, owner, annotations)), file); } + @Unmodifiable private @NotNull List getAnnotationsToAdd(@NotNull PsiModifierListOwner owner) { List allAnnotations = StreamEx.of(InferredAnnotationsManager.getInstance(owner.getProject()).findInferredAnnotations(owner)) .remove(DefaultInferredAnnotationProvider::isExperimentalInferredAnnotation) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 6d53a2d39061..a671227ad111 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -567,6 +567,7 @@ public final class JavaCompletionUtil { return false; } + @Unmodifiable static @NotNull Iterable createLookupElements(@NotNull CompletionElement completionElement, @NotNull PsiJavaReference reference) { Object completion = completionElement.getElement(); assert !(completion instanceof LookupElement); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaConstructorCallElement.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaConstructorCallElement.java index b1a3fff76700..5b33a8dbe2a8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaConstructorCallElement.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaConstructorCallElement.java @@ -162,6 +162,7 @@ public final class JavaConstructorCallElement extends LookupElementDecorator wrap(@NotNull JavaPsiClassReferenceElement classItem, @NotNull PsiElement position) { PsiClass psiClass = classItem.getObject(); return wrap(classItem, psiClass, position, () -> JavaPsiFacade.getElementFactory(psiClass.getProject()).createType(psiClass, PsiSubstitutor.EMPTY)); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StreamConversion.java b/java/java-impl/src/com/intellij/codeInsight/completion/StreamConversion.java index 0bb152ce6b49..8d0892b01dd2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/StreamConversion.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/StreamConversion.java @@ -32,6 +32,7 @@ import static com.intellij.psi.CommonClassNames.*; final class StreamConversion { + @Unmodifiable static List addToStreamConversion(PsiReferenceExpression ref, CompletionParameters parameters) { PsiExpression qualifier = ref.getQualifierExpression(); if (qualifier == null) return Collections.emptyList(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java index 7412ec603336..827da0ab6e51 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java @@ -28,10 +28,7 @@ import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.containers.ContainerUtil; import com.siyeh.ig.psiutils.SealedUtils; import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; import java.util.*; @@ -351,6 +348,7 @@ public final class JavaCompletionProcessor implements PsiScopeProcessor, Element } } + @Unmodifiable public Iterable getResults() { if (mySecondRateResults.size() == myResults.size()) { return mySecondRateResults; diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java index 94424be9c17e..87dfdfe78702 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java @@ -15,6 +15,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -129,6 +130,7 @@ public class ImportClassFix extends ImportClassFixBase filterByContext(@NotNull Collection candidates, @NotNull PsiJavaCodeReferenceElement referenceElement) { if (referenceElement instanceof PsiReferenceExpression) { return Collections.emptyList(); diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHandler.java index 284694ca8256..722a1a246e00 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHandler.java @@ -16,6 +16,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -115,6 +116,7 @@ public class GenerateEqualsHandler extends GenerateMembersHandlerBase { } @Override + @Unmodifiable protected @NotNull List generateMemberPrototypes(PsiClass aClass, ClassMember[] originalMembers) { final boolean useInstanceofToCheckParameterType = CodeInsightSettings.getInstance().USE_INSTANCEOF_ON_EQUALS_PARAMETER; final boolean useAccessors = CodeInsightSettings.getInstance().USE_ACCESSORS_IN_EQUALS_HASHCODE; diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index 99f873029a3e..d0b5f81dc4c1 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -269,6 +269,7 @@ public final class OverrideImplementUtil extends OverrideImplementExploreUtil { } } + @Unmodifiable public static @NotNull List> overrideOrImplementMethods(@NotNull PsiClass aClass, @NotNull Collection candidates, boolean toCopyJavaDoc, diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java index e7a4e3dd7869..0965d7bfd091 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/config/QuickFixFactoryImpl.java @@ -779,6 +779,7 @@ public final class QuickFixFactoryImpl extends QuickFixFactory { } @Override + @Unmodifiable public @NotNull List createAddAnnotationAttributeNameFixes(@NotNull PsiNameValuePair pair) { return AddAnnotationAttributeNameFix.createFixes(pair); } diff --git a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java index 93950e45b795..6bd1ec9decad 100644 --- a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java +++ b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java @@ -31,6 +31,7 @@ import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -217,6 +218,7 @@ public class JavaFindUsagesHandler extends FindUsagesHandler { } @Override + @Unmodifiable public @NotNull Collection findReferencesToHighlight(final @NotNull PsiElement target, final @NotNull SearchScope searchScope) { if (target instanceof PsiMethod) { Set superTargets = new LinkedHashSet<>(); diff --git a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java index 17e71f67caa2..8d9fe8339325 100644 --- a/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java +++ b/java/java-impl/src/com/intellij/ide/JavaLanguageCodeStyleSettingsProvider.java @@ -19,6 +19,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.LocalTimeCounter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.lang.reflect.Field; import java.util.Collections; @@ -491,6 +492,7 @@ public final class JavaLanguageCodeStyleSettingsProvider extends LanguageCodeSty } @Override + @Unmodifiable protected List parseString(@NotNull String string) { return CodeStylePropertiesUtil.getValueList(string); } diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java index e29412d9fa2e..3a7703076d46 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java @@ -14,6 +14,7 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.PsiPackage; import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -41,6 +42,7 @@ public class PackageViewProjectNode extends AbstractProjectNode { } @Override + @Unmodifiable public @NotNull Collection> getChildren() { if (getSettings().isShowModules()) { return modulesAndGroups(moduleDescriptions(myProject)); diff --git a/java/java-impl/src/com/intellij/javadoc/JavadocGeneratorRunProfile.java b/java/java-impl/src/com/intellij/javadoc/JavadocGeneratorRunProfile.java index d5e8dfc9f1d1..65b7b8125749 100644 --- a/java/java-impl/src/com/intellij/javadoc/JavadocGeneratorRunProfile.java +++ b/java/java-impl/src/com/intellij/javadoc/JavadocGeneratorRunProfile.java @@ -40,6 +40,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.SmartHashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.io.*; @@ -329,6 +330,7 @@ public final class JavadocGeneratorRunProfile implements ModuleRunProfile { return argsFile; } + @Unmodifiable private @NotNull List findSourceRoots(@NotNull Set modules) { OrderEnumerator sourcePathEnumerator = ProjectRootManager.getInstance(myProject).orderEntries(modules); if (!myConfiguration.OPTION_INCLUDE_LIBS) { @@ -340,6 +342,7 @@ public final class JavadocGeneratorRunProfile implements ModuleRunProfile { return sourcePathEnumerator.getSourcePathsList().getRootDirs(); } + @Unmodifiable private @NotNull List findClassRoots(@NotNull Set modules, @NotNull Sdk jdk) { OrderEnumerator classPathEnumerator = ProjectRootManager.getInstance(myProject).orderEntries(modules).withoutModuleSourceEntries(); if (jdk.getSdkType() instanceof JavaSdk) { diff --git a/java/java-impl/src/com/intellij/lang/java/JavaFocusModeProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaFocusModeProvider.java index 69ce255501e5..af2fc07b0c78 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaFocusModeProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaFocusModeProvider.java @@ -5,11 +5,13 @@ import com.intellij.codeInsight.daemon.impl.focusMode.FocusModeProvider; import com.intellij.openapi.util.Segment; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; public final class JavaFocusModeProvider implements FocusModeProvider { @Override + @Unmodifiable public @NotNull List calcFocusZones(@NotNull PsiFile file) { return SyntaxTraverser.psiTraverser(file) .postOrderDfsTraversal() diff --git a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java index d714dca3ecb6..aedca15aa8a1 100644 --- a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java +++ b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java @@ -46,6 +46,7 @@ import org.jdom.Element; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import org.jetbrains.concurrency.Promise; import org.jetbrains.jps.model.java.JdkVersionDetector; import org.jetbrains.jps.model.java.impl.JavaSdkUtil; @@ -493,6 +494,7 @@ public final class JavaSdkImpl extends JavaSdk { * Tries to load the list of modules in the JDK from the 'release' file. Returns null if the 'release' file is not there * or doesn't contain the expected information. */ + @Unmodifiable private static @Nullable List readModulesFromReleaseFile(@NotNull Path jrtBaseDir) { try (InputStream stream = Files.newInputStream(jrtBaseDir.resolve("release"))) { Properties p = new Properties(); diff --git a/java/java-impl/src/com/intellij/spi/psi/SPIClassProvidersElementList.java b/java/java-impl/src/com/intellij/spi/psi/SPIClassProvidersElementList.java index 3d244fd222fc..28e81d0a7fb5 100644 --- a/java/java-impl/src/com/intellij/spi/psi/SPIClassProvidersElementList.java +++ b/java/java-impl/src/com/intellij/spi/psi/SPIClassProvidersElementList.java @@ -19,6 +19,7 @@ import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; import com.intellij.spi.parsing.SPIElementTypes; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -27,6 +28,7 @@ public class SPIClassProvidersElementList extends ASTWrapperPsiElement { super(node); } + @Unmodifiable public List getElements() { return findChildrenByType(SPIElementTypes.PROVIDER); } diff --git a/java/java-impl/src/com/siyeh/ig/fixes/CreateEnumMissingSwitchBranchesFix.java b/java/java-impl/src/com/siyeh/ig/fixes/CreateEnumMissingSwitchBranchesFix.java index ed7fc2dcb466..fc31b8570dc5 100644 --- a/java/java-impl/src/com/siyeh/ig/fixes/CreateEnumMissingSwitchBranchesFix.java +++ b/java/java-impl/src/com/siyeh/ig/fixes/CreateEnumMissingSwitchBranchesFix.java @@ -8,6 +8,7 @@ import com.siyeh.ig.psiutils.SwitchUtils; import one.util.streamex.StreamEx; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; import java.util.Set; @@ -29,7 +30,7 @@ public final class CreateEnumMissingSwitchBranchesFix extends CreateMissingSwitc } @Override - protected @NotNull Function> getCaseExtractor() { + protected @NotNull Function> getCaseExtractor() { return label -> ContainerUtil.map(SwitchUtils.findEnumConstants(label), PsiEnumConstant::getName); } } diff --git a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingBooleanPrimitiveBranchesFix.java b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingBooleanPrimitiveBranchesFix.java index e94cf576f24e..63a83402e915 100644 --- a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingBooleanPrimitiveBranchesFix.java +++ b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingBooleanPrimitiveBranchesFix.java @@ -10,6 +10,7 @@ import com.siyeh.ig.psiutils.SwitchUtils; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.function.Function; @@ -72,7 +73,7 @@ public final class CreateMissingBooleanPrimitiveBranchesFix extends CreateMissin } @Override - protected @NotNull Function> getCaseExtractor() { + protected @NotNull Function> getCaseExtractor() { return label -> { PsiCaseLabelElementList list = label.getCaseLabelElementList(); if (list == null) return Collections.emptyList(); diff --git a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingDeconstructionRecordClassBranchesFix.java b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingDeconstructionRecordClassBranchesFix.java index 013bbe96b219..ab4d88e08f16 100644 --- a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingDeconstructionRecordClassBranchesFix.java +++ b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingDeconstructionRecordClassBranchesFix.java @@ -14,6 +14,7 @@ import com.siyeh.ig.psiutils.VariableNameGenerator; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.function.Function; @@ -48,7 +49,7 @@ public final class CreateMissingDeconstructionRecordClassBranchesFix extends Cre } @Override - protected @NotNull Function> getCaseExtractor() { + protected @NotNull Function> getCaseExtractor() { return label -> { PsiCaseLabelElementList list = label.getCaseLabelElementList(); if (list == null) return Collections.emptyList(); diff --git a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingSwitchBranchesFix.java b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingSwitchBranchesFix.java index 34c01ace41c6..024969e13256 100644 --- a/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingSwitchBranchesFix.java +++ b/java/java-impl/src/com/siyeh/ig/fixes/CreateMissingSwitchBranchesFix.java @@ -50,5 +50,5 @@ public abstract class CreateMissingSwitchBranchesFix extends BaseSwitchFix { @Unmodifiable protected abstract @NotNull List getAllNames(@NotNull PsiClass aClass, @NotNull PsiSwitchBlock switchBlock); - protected abstract @NotNull Function> getCaseExtractor(); + protected abstract @NotNull Function> getCaseExtractor(); } diff --git a/java/java-impl/src/com/siyeh/ig/fixes/CreateSealedClassMissingSwitchBranchesFix.java b/java/java-impl/src/com/siyeh/ig/fixes/CreateSealedClassMissingSwitchBranchesFix.java index aaba084371d8..040f78f61f72 100644 --- a/java/java-impl/src/com/siyeh/ig/fixes/CreateSealedClassMissingSwitchBranchesFix.java +++ b/java/java-impl/src/com/siyeh/ig/fixes/CreateSealedClassMissingSwitchBranchesFix.java @@ -88,7 +88,7 @@ public class CreateSealedClassMissingSwitchBranchesFix extends CreateMissingSwit } @Override - protected @NotNull Function> getCaseExtractor() { + protected @NotNull Function> getCaseExtractor() { return label -> { PsiCaseLabelElementList list = label.getCaseLabelElementList(); if (list == null) return Collections.emptyList(); diff --git a/java/java-impl/src/com/siyeh/ig/format/StringFormatUsageSearcher.java b/java/java-impl/src/com/siyeh/ig/format/StringFormatUsageSearcher.java index 24846ab0e9fd..e6ebee71e4d6 100644 --- a/java/java-impl/src/com/siyeh/ig/format/StringFormatUsageSearcher.java +++ b/java/java-impl/src/com/siyeh/ig/format/StringFormatUsageSearcher.java @@ -9,12 +9,14 @@ import com.intellij.psi.PsiLiteralExpression; import com.intellij.psi.SyntaxTraverser; import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; public final class StringFormatUsageSearcher implements UsageSearcher { @Override + @Unmodifiable public @NotNull Collection collectImmediateResults(@NotNull UsageSearchParameters parameters) { SearchTarget target = parameters.getTarget(); if (target instanceof StringFormatSymbolReferenceProvider.JavaFormatArgumentSymbol symbol) { @@ -26,6 +28,7 @@ public final class StringFormatUsageSearcher implements UsageSearcher { return List.of(); } + @Unmodifiable private static @NotNull List getFormatUsages(@NotNull Symbol symbol, @NotNull PsiExpression expression, @NotNull PsiExpression arg, diff --git a/java/java-impl/src/com/siyeh/ig/migration/IfCanBeSwitchInspection.java b/java/java-impl/src/com/siyeh/ig/migration/IfCanBeSwitchInspection.java index cd9d260e9768..17ab4892f279 100644 --- a/java/java-impl/src/com/siyeh/ig/migration/IfCanBeSwitchInspection.java +++ b/java/java-impl/src/com/siyeh/ig/migration/IfCanBeSwitchInspection.java @@ -35,6 +35,7 @@ import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -242,6 +243,7 @@ public final class IfCanBeSwitchInspection extends BaseInspection { } } + @Unmodifiable private static @NotNull List getRelatesCastExpressions(PsiElement expression, PsiInstanceOfExpression targetInstanceOf) { return SyntaxTraverser.psiTraverser(expression) .filter(PsiTypeCastExpression.class) diff --git a/java/java-impl/src/com/siyeh/ig/psiutils/CreateSwitchBranchesUtil.java b/java/java-impl/src/com/siyeh/ig/psiutils/CreateSwitchBranchesUtil.java index c2dfbcbc6457..f97eaa0a2ddf 100644 --- a/java/java-impl/src/com/siyeh/ig/psiutils/CreateSwitchBranchesUtil.java +++ b/java/java-impl/src/com/siyeh/ig/psiutils/CreateSwitchBranchesUtil.java @@ -54,10 +54,11 @@ public final class CreateSwitchBranchesUtil { * thus some kind of normalization could be necessary. * @return a list of created branches */ + @Unmodifiable public static List createMissingBranches(@NotNull PsiSwitchBlock switchBlock, @NotNull List allNames, @NotNull @Unmodifiable Collection missingNames, - @NotNull Function> caseExtractor) { + @NotNull Function> caseExtractor) { final JavaCodeStyleManager javaCodeStyleManager = JavaCodeStyleManager.getInstance(switchBlock.getProject()); boolean isRuleBasedFormat = SwitchUtils.isRuleFormatSwitch(switchBlock); final PsiCodeBlock body = switchBlock.getBody(); diff --git a/java/java-psi-api/src/com/intellij/lang/jvm/annotation/JvmAnnotationArrayValue.java b/java/java-psi-api/src/com/intellij/lang/jvm/annotation/JvmAnnotationArrayValue.java index 69c8298c9168..677b263ae700 100644 --- a/java/java-psi-api/src/com/intellij/lang/jvm/annotation/JvmAnnotationArrayValue.java +++ b/java/java-psi-api/src/com/intellij/lang/jvm/annotation/JvmAnnotationArrayValue.java @@ -2,6 +2,7 @@ package com.intellij.lang.jvm.annotation; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -11,5 +12,6 @@ import java.util.List; public interface JvmAnnotationArrayValue extends JvmAnnotationAttributeValue { @NotNull + @Unmodifiable List getValues(); } diff --git a/java/java-psi-api/src/com/intellij/lang/jvm/util/JvmUtil.java b/java/java-psi-api/src/com/intellij/lang/jvm/util/JvmUtil.java index 1f987c1b7f23..ac7d06f208f4 100644 --- a/java/java-psi-api/src/com/intellij/lang/jvm/util/JvmUtil.java +++ b/java/java-psi-api/src/com/intellij/lang/jvm/util/JvmUtil.java @@ -10,6 +10,7 @@ import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import static com.intellij.util.containers.ContainerUtil.mapNotNull; @@ -21,6 +22,7 @@ public final class JvmUtil { private JvmUtil() {} @NotNull + @Unmodifiable static Iterable resolveClasses(JvmReferenceType @NotNull [] types) { return mapNotNull(types, JvmUtil::resolveClass); } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiAnnotationAttributeValues.java b/java/java-psi-api/src/com/intellij/psi/PsiAnnotationAttributeValues.java index 3d31f206fbe5..defb099de3e2 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiAnnotationAttributeValues.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiAnnotationAttributeValues.java @@ -7,6 +7,7 @@ import com.intellij.lang.jvm.JvmEnumField; import com.intellij.lang.jvm.annotation.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -99,6 +100,7 @@ class PsiAnnotationArrayValue extends PsiAnnotationAttributeValue getValues() { return map(myElement.getInitializers(), PsiJvmConversionHelper::getAnnotationAttributeValue); } diff --git a/java/java-psi-api/src/com/intellij/psi/PsiClass.java b/java/java-psi-api/src/com/intellij/psi/PsiClass.java index fc9008b7bcbf..57ce01bc5edf 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiClass.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiClass.java @@ -13,6 +13,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -273,6 +274,7 @@ public interface PsiClass * @return the found methods and their substitutors, or an empty list if no methods are found. */ @NotNull + @Unmodifiable List> findMethodsAndTheirSubstitutorsByName(@NonNls @NotNull String name, boolean checkBases); /** @@ -282,6 +284,7 @@ public interface PsiClass * @return the list of methods and their substitutors */ @NotNull + @Unmodifiable List> getAllMethodsAndTheirSubstitutors(); /** diff --git a/java/java-psi-api/src/com/intellij/psi/util/PropertyUtilBase.java b/java/java-psi-api/src/com/intellij/psi/util/PropertyUtilBase.java index 9518ec6fdb9d..9c3cc00ec26c 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/PropertyUtilBase.java +++ b/java/java-psi-api/src/com/intellij/psi/util/PropertyUtilBase.java @@ -167,6 +167,7 @@ public class PropertyUtilBase { } @NotNull + @Unmodifiable public static List getAccessors(@NotNull final PsiClass psiClass, final String propertyName) { return getAccessors(psiClass, propertyName, false, ONLY_PUBLIC); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java index 6bdef5c53c0c..b42068fb44be 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiClassImplUtil.java @@ -159,6 +159,7 @@ public final class PsiClassImplUtil { : ContainerUtil.filter(type.getMembers(aClass), member -> name.equals(member.getName())); } + @Unmodifiable public static @NotNull List> getAllWithSubstitutorsByMap(@NotNull PsiClass aClass, @NotNull MemberType type) { return withSubstitutors(aClass, getMap(aClass).getAllMembers(type, null)); } @@ -923,6 +924,7 @@ public final class PsiClassImplUtil { return resolved; } + @Unmodifiable public static @NotNull List> findMethodsAndTheirSubstitutorsByName(@NotNull PsiClass psiClass, @NotNull String name, boolean checkBases) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsClassImpl.java index 43ea64cd5101..a0f1ead52b42 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsClassImpl.java @@ -31,6 +31,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.*; @@ -269,11 +270,13 @@ public class ClsClassImpl extends ClsMemberImpl> implements PsiE } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java index f28f32dd9be0..db871cb1ea5b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsTypeParameterImpl.java @@ -21,6 +21,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.Collection; @@ -85,11 +86,13 @@ public class ClsTypeParameterImpl extends ClsRepositoryPsiElement> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/AbstractLightClass.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/AbstractLightClass.java index 5923de148f9f..81ab87faa25e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/AbstractLightClass.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/AbstractLightClass.java @@ -14,6 +14,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -206,11 +207,13 @@ public abstract class AbstractLightClass extends LightElement implements PsiClas } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NonNls @NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightPsiClassBase.java b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightPsiClassBase.java index 63f3adddafbc..98cbb4a26cf3 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/light/LightPsiClassBase.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/light/LightPsiClassBase.java @@ -16,6 +16,7 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -152,11 +153,13 @@ public abstract class LightPsiClassBase extends LightElement implements PsiClass } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NonNls @NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java index f65ac4a6ca4f..54a17d44b65e 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiClassImpl.java @@ -29,6 +29,7 @@ import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.*; @@ -361,11 +362,13 @@ public class PsiClassImpl extends JavaStubPsiElement> implements } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImplicitClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImplicitClassImpl.java index aa9134dc2140..bc87a2dde06d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImplicitClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImplicitClassImpl.java @@ -22,6 +22,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.Arrays; @@ -172,11 +173,13 @@ public class PsiImplicitClassImpl extends JavaStubPsiElement> im } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJShellRootClassImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJShellRootClassImpl.java index cc3130113ccc..c9c2d9833deb 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJShellRootClassImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiJShellRootClassImpl.java @@ -16,6 +16,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -179,11 +180,13 @@ public class PsiJShellRootClassImpl extends ASTWrapperPsiElement implements PsiJ } @Override + @Unmodifiable public @NotNull List> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCatchSectionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCatchSectionImpl.java index 82b38afe029d..f99330721ec8 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCatchSectionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiCatchSectionImpl.java @@ -20,6 +20,7 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.Collection; @@ -67,6 +68,7 @@ public class PsiCatchSectionImpl extends CompositePsiElement implements PsiCatch ); } + @Unmodifiable private List computePreciseCatchTypes(final @Nullable PsiParameter parameter) { if (parameter == null) { return ContainerUtil.emptyList(); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTypeParameterImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTypeParameterImpl.java index 8f4628ac1ebd..5a586565b07a 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTypeParameterImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiTypeParameterImpl.java @@ -21,6 +21,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.Collection; @@ -86,11 +87,13 @@ public class PsiTypeParameterImpl extends JavaStubPsiElement> findMethodsAndTheirSubstitutorsByName(@NotNull String name, boolean checkBases) { return PsiClassImplUtil.findMethodsAndTheirSubstitutorsByName(this, name, checkBases); } @Override + @Unmodifiable public @NotNull List> getAllMethodsAndTheirSubstitutors() { return PsiClassImplUtil.getAllWithSubstitutorsByMap(this, PsiClassImplUtil.MemberType.METHOD); } diff --git a/java/java-structure-view/src/com/intellij/ide/structureView/impl/java/JavaLambdaNodeProvider.java b/java/java-structure-view/src/com/intellij/ide/structureView/impl/java/JavaLambdaNodeProvider.java index 8f49764570cb..3e35c694e074 100644 --- a/java/java-structure-view/src/com/intellij/ide/structureView/impl/java/JavaLambdaNodeProvider.java +++ b/java/java-structure-view/src/com/intellij/ide/structureView/impl/java/JavaLambdaNodeProvider.java @@ -18,6 +18,7 @@ import com.intellij.psi.PsiMember; import com.intellij.psi.SyntaxTraverser; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -28,6 +29,7 @@ public class JavaLambdaNodeProvider implements FileStructureNodeProvider provideNodes(@NotNull TreeElement node) { if (!(node instanceof PsiTreeElementBase)) { return Collections.emptyList(); diff --git a/java/manifest/src/org/jetbrains/lang/manifest/psi/Header.java b/java/manifest/src/org/jetbrains/lang/manifest/psi/Header.java index 9528a7710759..516770dc9d67 100644 --- a/java/manifest/src/org/jetbrains/lang/manifest/psi/Header.java +++ b/java/manifest/src/org/jetbrains/lang/manifest/psi/Header.java @@ -27,6 +27,7 @@ package org.jetbrains.lang.manifest.psi; import com.intellij.psi.PsiNamedElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -51,5 +52,6 @@ public interface Header extends PsiNamedElement { * Returns a list of all header value elements. */ @NotNull + @Unmodifiable List getHeaderValues(); } diff --git a/java/manifest/src/org/jetbrains/lang/manifest/psi/ManifestFile.java b/java/manifest/src/org/jetbrains/lang/manifest/psi/ManifestFile.java index a262859a491b..085fe5ed00cf 100644 --- a/java/manifest/src/org/jetbrains/lang/manifest/psi/ManifestFile.java +++ b/java/manifest/src/org/jetbrains/lang/manifest/psi/ManifestFile.java @@ -27,6 +27,7 @@ package org.jetbrains.lang.manifest.psi; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -38,6 +39,7 @@ public interface ManifestFile extends PsiFile { * Returns all sections of the file. */ @NotNull + @Unmodifiable List
getSections(); /** @@ -50,6 +52,7 @@ public interface ManifestFile extends PsiFile { * Returns all headers from the main section in this file. */ @NotNull + @Unmodifiable List
getHeaders(); /** diff --git a/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/HeaderImpl.java b/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/HeaderImpl.java index e14bb985cba2..9b021b02af4c 100644 --- a/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/HeaderImpl.java +++ b/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/HeaderImpl.java @@ -32,6 +32,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import org.jetbrains.lang.manifest.psi.*; import java.util.List; @@ -72,6 +73,7 @@ public class HeaderImpl extends ASTWrapperPsiElement implements Header { @NotNull @Override + @Unmodifiable public List getHeaderValues() { return PsiTreeUtil.getChildrenOfTypeAsList(this, HeaderValue.class); } diff --git a/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/ManifestFileImpl.java b/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/ManifestFileImpl.java index dc65fb85dcb0..953616058032 100644 --- a/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/ManifestFileImpl.java +++ b/java/manifest/src/org/jetbrains/lang/manifest/psi/impl/ManifestFileImpl.java @@ -30,6 +30,7 @@ import com.intellij.psi.FileViewProvider; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import org.jetbrains.lang.manifest.ManifestFileType; import org.jetbrains.lang.manifest.ManifestLanguage; import org.jetbrains.lang.manifest.psi.Header; @@ -54,6 +55,7 @@ public class ManifestFileImpl extends PsiFileBase implements ManifestFile { @NotNull @Override + @Unmodifiable public List
getSections() { return PsiTreeUtil.getChildrenOfTypeAsList(this, Section.class); } @@ -66,6 +68,7 @@ public class ManifestFileImpl extends PsiFileBase implements ManifestFile { @NotNull @Override + @Unmodifiable public List
getHeaders() { return PsiTreeUtil.getChildrenOfTypeAsList(getFirstChild(), Header.class); } diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java index 897b9986f7f2..1ceb70937802 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java @@ -214,6 +214,7 @@ public abstract class DaemonAnalyzerTestCase extends JavaCodeInsightTestCase { } @NotNull + @Unmodifiable protected Collection doDoTest(boolean checkWarnings, boolean checkInfos) { return doDoTest(checkWarnings, checkInfos, false); } @@ -282,16 +283,19 @@ public abstract class DaemonAnalyzerTestCase extends JavaCodeInsightTestCase { } @NotNull + @Unmodifiable protected final List highlightErrors() { return doHighlighting(HighlightSeverity.ERROR); } @NotNull + @Unmodifiable protected final List doHighlighting(@NotNull HighlightSeverity minSeverity) { return filter(doHighlighting(), minSeverity); } @NotNull + @Unmodifiable protected final List doHighlighting() { PsiDocumentManager.getInstance(myProject).commitAllDocuments(); diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java index 088fa64b179c..e0de606ab72a 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/LightDaemonAnalyzerTestCase.java @@ -23,6 +23,7 @@ import it.unimi.dsi.fastutil.ints.IntList; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -120,11 +121,13 @@ public abstract class LightDaemonAnalyzerTestCase extends LightJavaCodeInsightTe } @NotNull + @Unmodifiable protected List highlightErrors() { return doHighlighting(HighlightSeverity.ERROR); } @NotNull + @Unmodifiable protected List doHighlighting() { PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); @@ -150,6 +153,7 @@ public abstract class LightDaemonAnalyzerTestCase extends LightJavaCodeInsightTe return annotatedWith(DaemonAnalyzerTestCase.CanChangeDocumentDuringHighlighting.class); } + @Unmodifiable protected List doHighlighting(HighlightSeverity minSeverity) { return DaemonAnalyzerTestCase.filter(doHighlighting(), minSeverity); } diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/LightQuickFixTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/LightQuickFixTestCase.java index 1d71ee26719e..324144614232 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/LightQuickFixTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/LightQuickFixTestCase.java @@ -28,6 +28,7 @@ import com.intellij.util.ui.UIUtil; import one.util.streamex.StreamEx; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.io.File; import java.nio.charset.StandardCharsets; @@ -315,12 +316,14 @@ public abstract class LightQuickFixTestCase extends LightDaemonAnalyzerTestCase @NotNull @Override + @Unmodifiable public List doHighlighting() { return LightQuickFixTestCase.this.doHighlighting(); } @NotNull @Override + @Unmodifiable public List getAvailableActions() { return LightQuickFixTestCase.this.getAvailableActions(); } @@ -347,12 +350,14 @@ public abstract class LightQuickFixTestCase extends LightDaemonAnalyzerTestCase }; } + @Unmodifiable protected List getAvailableActions() { doHighlighting(); return getAvailableActions(getEditor(), getFile()); } @NotNull + @Unmodifiable public static List getAvailableActions(@NotNull Editor editor, @NotNull PsiFile file) { return CodeInsightTestFixtureImpl.getAvailableIntentions(editor, file); } diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/QuickFixTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/QuickFixTestCase.java index f53236ebf45e..f8654cfa2ebf 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/QuickFixTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/QuickFixTestCase.java @@ -20,6 +20,7 @@ import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -57,9 +58,11 @@ public interface QuickFixTestCase { void checkPreviewAndInvoke(@NotNull IntentionAction action, @NotNull String previewFilePath); @NotNull + @Unmodifiable List doHighlighting(); @NotNull + @Unmodifiable List getAvailableActions(); void bringRealEditorBack(); diff --git a/java/testFramework/src/com/intellij/debugger/mockJDI/types/MockPsiClassType.java b/java/testFramework/src/com/intellij/debugger/mockJDI/types/MockPsiClassType.java index d4ad3682593f..2c3cc4f70a6d 100644 --- a/java/testFramework/src/com/intellij/debugger/mockJDI/types/MockPsiClassType.java +++ b/java/testFramework/src/com/intellij/debugger/mockJDI/types/MockPsiClassType.java @@ -31,6 +31,7 @@ public class MockPsiClassType extends MockPsiReferenceType implements ClassType } @Override + @Unmodifiable public List allInterfaces() { return interfaces(); } diff --git a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/TypeConversionRuleUtil.java b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/TypeConversionRuleUtil.java index 407c04db41f5..178ecfc36e2d 100644 --- a/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/TypeConversionRuleUtil.java +++ b/java/typeMigration/src/com/intellij/refactoring/typeMigration/rules/TypeConversionRuleUtil.java @@ -6,11 +6,13 @@ import com.intellij.psi.controlFlow.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; final class TypeConversionRuleUtil { + @Unmodifiable static List getVariablesToMakeFinal(@NotNull PsiExpression expression) { final ControlFlow controlFlow; try { diff --git a/platform/analysis-api/src/com/intellij/codeInsight/intention/CustomizableIntentionActionDelegate.java b/platform/analysis-api/src/com/intellij/codeInsight/intention/CustomizableIntentionActionDelegate.java index a53d45410f84..8b2dd1bce35b 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/intention/CustomizableIntentionActionDelegate.java +++ b/platform/analysis-api/src/com/intellij/codeInsight/intention/CustomizableIntentionActionDelegate.java @@ -4,6 +4,7 @@ package com.intellij.codeInsight.intention; import com.intellij.openapi.editor.Editor; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -49,6 +50,7 @@ public interface CustomizableIntentionActionDelegate extends IntentionActionDele } @Override + @Unmodifiable default @NotNull List getRangesToHighlight(@NotNull Editor editor, @NotNull PsiFile file) { IntentionAction action = IntentionActionDelegate.unwrap(getDelegate()); if (action instanceof CustomizableIntentionAction) { diff --git a/platform/analysis-api/src/com/intellij/codeInsight/lookup/Lookup.java b/platform/analysis-api/src/com/intellij/codeInsight/lookup/Lookup.java index a76d18942d23..49771dd838c9 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/lookup/Lookup.java +++ b/platform/analysis-api/src/com/intellij/codeInsight/lookup/Lookup.java @@ -92,5 +92,6 @@ public interface Lookup { boolean isSelectionTouched(); + @Unmodifiable List getAdvertisements(); } diff --git a/platform/analysis-api/src/com/intellij/codeInsight/lookup/LookupElementDecorator.java b/platform/analysis-api/src/com/intellij/codeInsight/lookup/LookupElementDecorator.java index a5834946a069..bb8954d7fc3f 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/lookup/LookupElementDecorator.java +++ b/platform/analysis-api/src/com/intellij/codeInsight/lookup/LookupElementDecorator.java @@ -7,6 +7,7 @@ import com.intellij.openapi.util.ClassConditionKey; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Set; @@ -42,6 +43,7 @@ public abstract class LookupElementDecorator extends Lo } @Override + @Unmodifiable public Set getAllLookupStrings() { return myDelegate.getAllLookupStrings(); } diff --git a/platform/analysis-api/src/com/intellij/codeInspection/InspectionProfileEntry.java b/platform/analysis-api/src/com/intellij/codeInspection/InspectionProfileEntry.java index 2b01f98a3212..59c99108d54b 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/InspectionProfileEntry.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/InspectionProfileEntry.java @@ -198,6 +198,7 @@ public abstract class InspectionProfileEntry implements BatchSuppressableTool, O return alternativeId != null && !alternativeId.equals(toolId) && suppressor.isSuppressedFor(element, alternativeId); } + @Unmodifiable public static @NotNull Collection getSuppressors(@NotNull PsiElement element) { PsiFile file = element.getContainingFile(); if (file == null) { diff --git a/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java b/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java index f2e760b997b3..5b73b1c6d9a8 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/LocalInspectionTool.java @@ -9,6 +9,7 @@ import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Arrays; import java.util.List; @@ -214,6 +215,7 @@ public abstract class LocalInspectionTool extends InspectionProfileEntry impleme public void inspectionFinished(@NotNull LocalInspectionToolSession session, @NotNull ProblemsHolder problemsHolder) { } + @Unmodifiable public @NotNull List processFile(@NotNull PsiFile file, @NotNull InspectionManager manager) { return manager.defaultProcessFile(this, file); } diff --git a/platform/analysis-api/src/com/intellij/codeInspection/ex/QuickFixWrapper.java b/platform/analysis-api/src/com/intellij/codeInspection/ex/QuickFixWrapper.java index 3ba2df9f1183..7024d31f8697 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/ex/QuickFixWrapper.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/ex/QuickFixWrapper.java @@ -28,6 +28,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -236,6 +237,7 @@ public final class QuickFixWrapper implements IntentionAction, PriorityAction, C } @Override + @Unmodifiable public @NotNull List<@NotNull RangeToHighlight> getRangesToHighlight(@NotNull Editor editor, @NotNull PsiFile file) { return myFix.getRangesToHighlight(file.getProject(), myDescriptor); } diff --git a/platform/analysis-api/src/com/intellij/openapi/vfs/newvfs/FileSystemInterface.java b/platform/analysis-api/src/com/intellij/openapi/vfs/newvfs/FileSystemInterface.java index e978797869d1..669439d8bf05 100644 --- a/platform/analysis-api/src/com/intellij/openapi/vfs/newvfs/FileSystemInterface.java +++ b/platform/analysis-api/src/com/intellij/openapi/vfs/newvfs/FileSystemInterface.java @@ -4,6 +4,7 @@ package com.intellij.openapi.vfs.newvfs; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.IOException; import java.io.InputStream; @@ -34,6 +35,7 @@ public interface FileSystemInterface { * Returns all virtual files under which the given path is known in the VFS, starting with virtual file for the passed path. * Please note, that it is guaranteed to find all aliases only if path is canonical. */ + @Unmodifiable default @NotNull Iterable<@NotNull VirtualFile> findCachedFilesForPath(@NotNull String path) { return Collections.emptyList(); } diff --git a/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CachingComparingClassifier.java b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CachingComparingClassifier.java index 2bc85ba0a6ac..e2f4d28a13f9 100644 --- a/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CachingComparingClassifier.java +++ b/platform/analysis-impl/src/com/intellij/codeInsight/lookup/CachingComparingClassifier.java @@ -10,6 +10,7 @@ import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.IdentityHashMap; import java.util.List; @@ -64,6 +65,7 @@ public class CachingComparingClassifier extends ComparingClassifier> getSortingWeights(@NotNull Iterable items, @NotNull ProcessingContext context) { checkPrefixChanged(context); return super.getSortingWeights(items, context); diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaControlTransferValue.java b/platform/analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaControlTransferValue.java index ba22360a6744..e586c215b22d 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaControlTransferValue.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaControlTransferValue.java @@ -60,10 +60,12 @@ public final class DfaControlTransferValue extends DfaValue { return indices.toIntArray(); } + @Unmodifiable public @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter) { return dispatch(state, interpreter, target, traps); } + @Unmodifiable public static @NotNull List dispatch(@NotNull DfaMemoryState state, @NotNull DataFlowInterpreter interpreter, @NotNull TransferTarget target, diff --git a/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsBase.java b/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsBase.java index 2b5109f26893..713b3bc96b25 100644 --- a/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsBase.java +++ b/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsBase.java @@ -63,6 +63,7 @@ public abstract class PerFileMappingsBase implements PersistentStateComponent protected @Nullable Project getProject() { return myProject; } @Override + @Unmodifiable public @NotNull Map getMappings() { synchronized (myMappings) { ensureStateLoaded(); diff --git a/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsEx.java b/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsEx.java index a39783c49039..bc26dca31828 100644 --- a/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsEx.java +++ b/platform/analysis-impl/src/com/intellij/lang/PerFileMappingsEx.java @@ -5,6 +5,7 @@ package com.intellij.lang; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Map; @@ -14,6 +15,7 @@ import java.util.Map; public interface PerFileMappingsEx extends PerFileMappings { @NotNull + @Unmodifiable Map getMappings(); void setMappings(@NotNull Map mappings); diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceHelper.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceHelper.java index d8bcbf8c0534..a7b761e8540a 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceHelper.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceHelper.java @@ -65,6 +65,7 @@ public abstract class FileReferenceHelper { * * @return roots, which could be used as the start resolution context. */ + @Unmodifiable public @NotNull Collection getRoots(@NotNull Module module, @NotNull VirtualFile hostFile) { return getRoots(module); } diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java index 3136460c2c27..aa4cfe3ad6f9 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java @@ -400,6 +400,7 @@ public class FileReferenceSet implements FileReferenceSetParameters { /** * Finds file target contexts, locations where users can create a file. Includes only local file directory items. */ + @Unmodifiable public Collection getTargetContexts() { PsiFile file = getContainingFile(); if (file == null) return emptyList(); @@ -462,6 +463,7 @@ public class FileReferenceSet implements FileReferenceSetParameters { return null; } + @Unmodifiable private @NotNull Collection getTargetContextByFile(@NotNull PsiFile file) { boolean absolutePathReference = isAbsolutePathReference(); @@ -589,6 +591,7 @@ public class FileReferenceSet implements FileReferenceSetParameters { return new ArrayList<>(result); } + @Unmodifiable protected @NotNull Collection toFileSystemItems(VirtualFile... files) { return toFileSystemItems(Arrays.asList(files)); } diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java index aeff759577d7..17a7e9d575aa 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/DocumentWindowImpl.java @@ -289,6 +289,7 @@ class DocumentWindowImpl extends UserDataHolderBase implements Disposable, Docum } @Override + @Unmodifiable public @NotNull Collection<@NotNull StringOperation> prepareReplaceString(int startOffset, int endOffset, @NotNull CharSequence s) { if (isOneLine()) { s = StringUtil.replace(s.toString(), "\n", ""); diff --git a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java index 5634a7fcd7ec..c850bb25fa6b 100644 --- a/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java +++ b/platform/analysis-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java @@ -30,10 +30,7 @@ import com.intellij.util.ObjectUtils; import com.intellij.util.Processor; import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; +import org.jetbrains.annotations.*; import java.util.*; @@ -367,6 +364,7 @@ public final class InjectedLanguageManagerImpl extends InjectedLanguageManager i } @Override + @Unmodifiable public @NotNull List getCachedInjectedDocumentsInRange(@NotNull PsiFile hostPsiFile, @NotNull TextRange range) { return InjectedLanguageUtilBase.getCachedInjectedDocumentsInRange(hostPsiFile, range); } diff --git a/platform/core-api/src/com/intellij/injected/editor/DocumentWindow.java b/platform/core-api/src/com/intellij/injected/editor/DocumentWindow.java index 242095c37c2e..8f0474d7a2bb 100644 --- a/platform/core-api/src/com/intellij/injected/editor/DocumentWindow.java +++ b/platform/core-api/src/com/intellij/injected/editor/DocumentWindow.java @@ -7,6 +7,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.util.text.StringOperation; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -53,5 +54,6 @@ public interface DocumentWindow extends Document { *

* This method doesn't modify the host document. */ + @Unmodifiable @NotNull Collection<@NotNull StringOperation> prepareReplaceString(int startOffset, int endOffset, @NotNull CharSequence s); } diff --git a/platform/core-api/src/com/intellij/lang/injection/InjectedLanguageManager.java b/platform/core-api/src/com/intellij/lang/injection/InjectedLanguageManager.java index a0f3f630bfd1..96d5be3e7b38 100644 --- a/platform/core-api/src/com/intellij/lang/injection/InjectedLanguageManager.java +++ b/platform/core-api/src/com/intellij/lang/injection/InjectedLanguageManager.java @@ -13,10 +13,7 @@ import com.intellij.psi.FileViewProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiLanguageInjectionHost; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; +import org.jetbrains.annotations.*; import java.util.List; @@ -92,6 +89,7 @@ public abstract class InjectedLanguageManager { public abstract PsiFile getTopLevelFile(@NotNull PsiElement element); + @Unmodifiable public abstract @NotNull List getCachedInjectedDocumentsInRange(@NotNull PsiFile hostPsiFile, @NotNull TextRange range); public abstract void enumerate(@NotNull PsiElement host, @NotNull PsiLanguageInjectionHost.InjectedPsiVisitor visitor); diff --git a/platform/core-api/src/com/intellij/psi/search/DelegatingGlobalSearchScope.java b/platform/core-api/src/com/intellij/psi/search/DelegatingGlobalSearchScope.java index c316e38a332d..40df443151b2 100644 --- a/platform/core-api/src/com/intellij/psi/search/DelegatingGlobalSearchScope.java +++ b/platform/core-api/src/com/intellij/psi/search/DelegatingGlobalSearchScope.java @@ -8,6 +8,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.Arrays; @@ -66,6 +67,7 @@ public class DelegatingGlobalSearchScope extends GlobalSearchScope { } @Override + @Unmodifiable public @NotNull Collection getUnloadedModulesBelongingToScope() { return getDelegate().getUnloadedModulesBelongingToScope(); } diff --git a/platform/core-api/src/com/intellij/psi/search/GlobalAndLocalUnionScope.java b/platform/core-api/src/com/intellij/psi/search/GlobalAndLocalUnionScope.java index 4874dfe71c2d..7e31bd3fef7d 100644 --- a/platform/core-api/src/com/intellij/psi/search/GlobalAndLocalUnionScope.java +++ b/platform/core-api/src/com/intellij/psi/search/GlobalAndLocalUnionScope.java @@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -41,6 +42,7 @@ class GlobalAndLocalUnionScope extends GlobalSearchScope { } @Override + @Unmodifiable public @NotNull Collection getUnloadedModulesBelongingToScope() { return myMyGlobalScope.getUnloadedModulesBelongingToScope(); } diff --git a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java index 2453880f5dc9..348dcafa4ad3 100644 --- a/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java +++ b/platform/core-api/src/com/intellij/psi/search/GlobalSearchScope.java @@ -72,6 +72,7 @@ public abstract class GlobalSearchScope extends SearchScope implements ProjectAw * Returns descriptions of unloaded modules whose content might be included in this scope if they had been loaded. Actually, search in * unloaded modules isn't performed, so this method is used to determine whether a warning about possible missing results should be shown. */ + @Unmodifiable public @NotNull Collection getUnloadedModulesBelongingToScope() { return Collections.emptySet(); } diff --git a/platform/core-api/src/com/intellij/psi/search/IntersectionScope.java b/platform/core-api/src/com/intellij/psi/search/IntersectionScope.java index ed58dbb8d513..18279ef28e1e 100644 --- a/platform/core-api/src/com/intellij/psi/search/IntersectionScope.java +++ b/platform/core-api/src/com/intellij/psi/search/IntersectionScope.java @@ -11,6 +11,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Arrays; import java.util.Collection; @@ -75,6 +76,7 @@ final class IntersectionScope extends GlobalSearchScope implements VirtualFileEn } @Override + @Unmodifiable public @NotNull Collection getUnloadedModulesBelongingToScope() { return ContainerUtil.intersection(myScope1.getUnloadedModulesBelongingToScope(), myScope2.getUnloadedModulesBelongingToScope()); } diff --git a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java index d42385c54061..a5cb65f9b473 100644 --- a/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java +++ b/platform/core-api/src/com/intellij/psi/util/PsiTreeUtil.java @@ -888,6 +888,7 @@ public class PsiTreeUtil { @SafeVarargs @Contract(pure = true) + @Unmodifiable public static @NotNull Collection collectElementsOfType(@Nullable PsiElement element, @NotNull Class @NotNull ... classes) { return findChildrenOfAnyType(element, false, classes); diff --git a/platform/core-api/src/com/intellij/util/PathsList.java b/platform/core-api/src/com/intellij/util/PathsList.java index 0b9523b0cc82..2882b4a969af 100644 --- a/platform/core-api/src/com/intellij/util/PathsList.java +++ b/platform/core-api/src/com/intellij/util/PathsList.java @@ -11,6 +11,7 @@ import com.intellij.util.containers.JBIterable; import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.File; import java.util.*; @@ -148,6 +149,7 @@ public final class PathsList { /** * @return {@link VirtualFile}s on local file system (returns jars as files). */ + @Unmodifiable public List getVirtualFiles() { return JBIterable.from(getPathList()).filterMap(PATH_TO_LOCAL_VFILE).toList(); } @@ -155,6 +157,7 @@ public final class PathsList { /** * @return The same as {@link #getVirtualFiles()} but returns jars as {@code JarFileSystem} roots. */ + @Unmodifiable public List getRootDirs() { return JBIterable.from(getPathList()).filterMap(PATH_TO_DIR).toList(); } diff --git a/platform/core-api/src/com/intellij/util/graph/GraphAlgorithms.java b/platform/core-api/src/com/intellij/util/graph/GraphAlgorithms.java index 3cfdd19f30b5..cb4d0cc4d67c 100644 --- a/platform/core-api/src/com/intellij/util/graph/GraphAlgorithms.java +++ b/platform/core-api/src/com/intellij/util/graph/GraphAlgorithms.java @@ -6,6 +6,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.util.Chunk; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.List; @@ -17,6 +18,7 @@ public abstract class GraphAlgorithms { return ApplicationManager.getApplication().getService(GraphAlgorithms.class); } + @Unmodifiable public abstract @NotNull Collection findNodesWhichBelongToAnyPathBetweenTwoNodes( @NotNull Graph graph, @NotNull Node start, diff --git a/platform/core-impl/src/com/intellij/psi/stubs/ObjectStubTree.java b/platform/core-impl/src/com/intellij/psi/stubs/ObjectStubTree.java index e5c8401f01b3..206a0876a2fc 100644 --- a/platform/core-impl/src/com/intellij/psi/stubs/ObjectStubTree.java +++ b/platform/core-impl/src/com/intellij/psi/stubs/ObjectStubTree.java @@ -34,6 +34,7 @@ public class ObjectStubTree { return myRoot; } + @Unmodifiable public @NotNull List getPlainList() { return myPlainList; } @@ -59,6 +60,7 @@ public class ObjectStubTree { return sink.getResult(); } + @Unmodifiable protected @NotNull List enumerateStubs(@NotNull Stub root) { List result = new ArrayList<>(); //noinspection rawtypes,unchecked diff --git a/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java b/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java index f762e954e9a3..bf9bd6427db4 100644 --- a/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java +++ b/platform/core-impl/src/com/intellij/psi/stubs/StubTree.java @@ -24,6 +24,7 @@ public class StubTree extends ObjectStubTree> { } @Override + @Unmodifiable protected @NotNull List> enumerateStubs(@NotNull Stub root) { return ((StubBase)root).myStubList.finalizeLoadingStage().toPlainList(); } diff --git a/platform/core-impl/src/com/intellij/util/graph/impl/GraphAlgorithmsImpl.java b/platform/core-impl/src/com/intellij/util/graph/impl/GraphAlgorithmsImpl.java index c93fe76469ec..407c06c34c86 100644 --- a/platform/core-impl/src/com/intellij/util/graph/impl/GraphAlgorithmsImpl.java +++ b/platform/core-impl/src/com/intellij/util/graph/impl/GraphAlgorithmsImpl.java @@ -8,6 +8,7 @@ import com.intellij.util.graph.*; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.function.Consumer; @@ -16,6 +17,7 @@ import java.util.function.Consumer; public final class GraphAlgorithmsImpl extends GraphAlgorithms { @Override + @Unmodifiable public @NotNull Collection findNodesWhichBelongToAnyPathBetweenTwoNodes( @NotNull Graph graph, @NotNull Node start, diff --git a/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java b/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java index afd034d60dac..19f8cf0b0ceb 100644 --- a/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java +++ b/platform/dvcs-impl/src/com/intellij/dvcs/DvcsUtil.java @@ -75,6 +75,7 @@ public final class DvcsUtil { }; @NotNull + @Unmodifiable public static List sortVirtualFilesByPresentation(@NotNull Collection virtualFiles) { return ContainerUtil.sorted(virtualFiles, VIRTUAL_FILE_PRESENTATION_COMPARATOR); } diff --git a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java index 6ded47ddc084..c24b799371e0 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java +++ b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/AbstractTreeNode.java @@ -42,6 +42,7 @@ public abstract class AbstractTreeNode extends PresentableNodeDescriptor> getChildren(); protected boolean hasProblemFileBeneath() { diff --git a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/Grouper.java b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/Grouper.java index 25e38005dc4c..83b6c6eb2792 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/Grouper.java +++ b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/Grouper.java @@ -3,6 +3,7 @@ package com.intellij.ide.util.treeView.smartTree; import com.intellij.ide.util.treeView.AbstractTreeNode; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -24,5 +25,6 @@ public interface Grouper extends TreeAction { * @return the collection of groups */ @NotNull + @Unmodifiable Collection group(@NotNull AbstractTreeNode parent, @NotNull Collection children); } diff --git a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/NodeProvider.java b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/NodeProvider.java index d8b105ce4f3f..7706b87c91d9 100644 --- a/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/NodeProvider.java +++ b/platform/editor-ui-api/src/com/intellij/ide/util/treeView/smartTree/NodeProvider.java @@ -3,6 +3,7 @@ package com.intellij.ide.util.treeView.smartTree; import com.intellij.openapi.project.PossiblyDumbAware; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -17,5 +18,6 @@ public interface NodeProvider extends TreeAction, Possibl * @return a collection of additional children for the specified node */ @NotNull + @Unmodifiable Collection provideNodes(@NotNull TreeElement node); } diff --git a/platform/editor-ui-api/src/com/intellij/ui/switcher/QuickActionProvider.java b/platform/editor-ui-api/src/com/intellij/ui/switcher/QuickActionProvider.java index 24438621869d..b54174fa4976 100644 --- a/platform/editor-ui-api/src/com/intellij/ui/switcher/QuickActionProvider.java +++ b/platform/editor-ui-api/src/com/intellij/ui/switcher/QuickActionProvider.java @@ -20,6 +20,7 @@ import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.util.NlsActions; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.List; @@ -28,6 +29,7 @@ public interface QuickActionProvider { DataKey KEY = DataKey.create("QuickActionProvider"); @NotNull + @Unmodifiable List getActions(boolean originalProvider); default boolean isCycleRoot() { return false; } diff --git a/platform/ide-core-impl/src/com/intellij/ide/script/IdeScriptEngineManagerImpl.java b/platform/ide-core-impl/src/com/intellij/ide/script/IdeScriptEngineManagerImpl.java index 846a46788007..1b6c72d92b16 100644 --- a/platform/ide-core-impl/src/com/intellij/ide/script/IdeScriptEngineManagerImpl.java +++ b/platform/ide-core-impl/src/com/intellij/ide/script/IdeScriptEngineManagerImpl.java @@ -20,6 +20,7 @@ import com.intellij.util.containers.JBIterable; import com.intellij.util.ui.EDT; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.script.ScriptEngine; import javax.script.ScriptEngineFactory; @@ -370,6 +371,7 @@ final class IdeScriptEngineManagerImpl extends IdeScriptEngineManager { } // used by kotlin engine + @Unmodifiable public @NotNull List getUrls() { return JBIterable.of(PluginManagerCore.getPlugins()) .map(PluginDescriptor::getClassLoader) diff --git a/platform/indexing-api/src/com/intellij/psi/search/IndexPatternOptimizer.java b/platform/indexing-api/src/com/intellij/psi/search/IndexPatternOptimizer.java index b8cd1089e1d6..adfa21927932 100644 --- a/platform/indexing-api/src/com/intellij/psi/search/IndexPatternOptimizer.java +++ b/platform/indexing-api/src/com/intellij/psi/search/IndexPatternOptimizer.java @@ -4,6 +4,7 @@ package com.intellij.psi.search; import com.intellij.openapi.application.ApplicationManager; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -14,5 +15,6 @@ public interface IndexPatternOptimizer { return ApplicationManager.getApplication().getService(IndexPatternOptimizer.class); } + @Unmodifiable @NotNull List extractStringsToFind(@NotNull String regexp); } diff --git a/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/CommaSeparatedValuesAccessor.java b/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/CommaSeparatedValuesAccessor.java index 15a068ecd380..0578f7fc6e83 100644 --- a/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/CommaSeparatedValuesAccessor.java +++ b/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/CommaSeparatedValuesAccessor.java @@ -3,6 +3,7 @@ package com.intellij.application.options.codeStyle.properties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.lang.reflect.Field; import java.util.List; @@ -21,6 +22,7 @@ public class CommaSeparatedValuesAccessor extends ValueListPropertyAccessor toExternal(@NotNull String value) { return getValueList(value); } diff --git a/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/ValueListPropertyAccessor.java b/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/ValueListPropertyAccessor.java index 84b1a8392f11..a21c2b7dca9c 100644 --- a/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/ValueListPropertyAccessor.java +++ b/platform/lang-api/src/com/intellij/application/options/codeStyle/properties/ValueListPropertyAccessor.java @@ -3,6 +3,7 @@ package com.intellij.application.options.codeStyle.properties; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.lang.reflect.Field; import java.util.List; @@ -21,6 +22,7 @@ public abstract class ValueListPropertyAccessor extends CodeStyleFieldAccesso protected abstract @NotNull List toExternal(@NotNull T value); @Override + @Unmodifiable protected @Nullable List parseString(@NotNull String string) { return getValueList(string); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ContextFeatureProvider.java b/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ContextFeatureProvider.java index f928f8f34538..bf0c5626db0e 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ContextFeatureProvider.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ContextFeatureProvider.java @@ -6,6 +6,7 @@ import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -24,6 +25,7 @@ import java.util.Map; public interface ContextFeatureProvider { LanguageExtension EP_NAME = new LanguageExtension<>("com.intellij.completion.ml.contextFeatures"); + @Unmodifiable static @NotNull List forLanguage(@NotNull Language language) { return EP_NAME.allForLanguageOrAny(language); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ElementFeatureProvider.java b/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ElementFeatureProvider.java index d4fb96e3f78e..41ee38a02751 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ElementFeatureProvider.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/ml/ElementFeatureProvider.java @@ -8,6 +8,7 @@ import com.intellij.lang.LanguageExtension; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; import java.util.Map; @@ -25,6 +26,7 @@ import java.util.Map; public interface ElementFeatureProvider { LanguageExtension EP_NAME = new LanguageExtension<>("com.intellij.completion.ml.elementFeatures"); + @Unmodifiable static @NotNull List forLanguage(Language language) { return EP_NAME.allForLanguageOrAny(language); } diff --git a/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java b/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java index 1d526fd41cfa..cd2a96e91a6c 100644 --- a/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java +++ b/platform/lang-api/src/com/intellij/execution/actions/ConfigurationContext.java @@ -30,6 +30,7 @@ import com.intellij.psi.PsiManager; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.Collections; @@ -422,6 +423,7 @@ public class ConfigurationContext { /** * The same as {@link #getConfigurationsFromContext()} but this method doesn't search among existing run configurations */ + @Unmodifiable public @Nullable List createConfigurationsFromContext() { // At the moment of writing, caching is not needed here, the result is cached outside. return PreferredProducerFind.getConfigurationsFromContext(myLocation, this, true, false); diff --git a/platform/lang-api/src/com/intellij/execution/actions/PreferredProducerFind.java b/platform/lang-api/src/com/intellij/execution/actions/PreferredProducerFind.java index c2c88d0e6e20..e28b51c0d034 100644 --- a/platform/lang-api/src/com/intellij/execution/actions/PreferredProducerFind.java +++ b/platform/lang-api/src/com/intellij/execution/actions/PreferredProducerFind.java @@ -87,6 +87,7 @@ final class PreferredProducerFind { * @param preferExisting if true then {@link RunConfigurationProducer#findOrCreateConfigurationFromContext(ConfigurationContext)} will be used; * if false then {@link RunConfigurationProducer#createConfigurationFromContext(ConfigurationContext)} will be used. */ + @Unmodifiable public static @Nullable List getConfigurationsFromContext(Location location, @NotNull ConfigurationContext context, boolean strict, diff --git a/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java b/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java index d584e86bdbd9..6698867387ea 100644 --- a/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java +++ b/platform/lang-core/src/com/intellij/openapi/projectRoots/SdkType.java @@ -98,6 +98,7 @@ public abstract class SdkType implements SdkTypeId { * for possible interruption request. It is not recommended to call this method from a ETD thread. See * an alternative {@link #suggestHomePath()} method for EDT-friendly calls. */ + @Unmodifiable public @NotNull Collection suggestHomePaths(@Nullable Project project) { return suggestHomePaths(); } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesModel.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesModel.java index 53487f424289..398d21de0db0 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesModel.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSchemesModel.java @@ -349,6 +349,7 @@ public final class CodeStyleSchemesModel implements SchemesModel getOverridingModifiers() { return ContainerUtil.filter( diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipRenderer.java index a394d049041a..2ba9e43ffcb3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonTooltipRenderer.java @@ -16,6 +16,7 @@ import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.awt.*; import java.util.List; @@ -65,6 +66,7 @@ class DaemonTooltipRenderer extends LineTooltipRenderer { return super.dressDescription(editor, tooltipText, true); } + @Unmodifiable protected @NotNull List<@Tooltip String> getProblems(@NotNull @Tooltip String tooltipText) { return StringUtil.split(UIUtil.getHtmlBody(new Html(tooltipText).setKeepFont(true)), UIUtil.BORDER_LINE); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/focusMode/FocusModeProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/focusMode/FocusModeProvider.java index eedc31e3f675..0a06b19fc10b 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/focusMode/FocusModeProvider.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/focusMode/FocusModeProvider.java @@ -5,6 +5,7 @@ import com.intellij.openapi.util.Segment; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -18,5 +19,6 @@ public interface FocusModeProvider { * @see com.intellij.openapi.fileEditor.impl.text.FocusModePassFactory#calcFocusZones(PsiFile) */ @NotNull + @Unmodifiable List calcFocusZones(@NotNull PsiFile file); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java index b4cffbc49331..9bd391d321fa 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java @@ -1184,6 +1184,7 @@ public class LookupImpl extends LightweightHint implements LookupEx, Disposable, @Override + @Unmodifiable public List getAdvertisements() { return myAdComponent.getAdvertisements(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java index 908432ba43ac..f302d2fae130 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/ListTemplatesHandler.java @@ -28,6 +28,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.regex.Pattern; @@ -162,6 +163,7 @@ public final class ListTemplatesHandler implements CodeInsightActionHandler { private static LiveTemplateLookupElement createTemplateElement(final TemplateImpl template) { return new LiveTemplateLookupElementImpl(template, false) { @Override + @Unmodifiable public Set getAllLookupStrings() { String description = template.getDescription(); if (description == null) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java index f88ab4928dec..fde44ff89aa7 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java @@ -31,6 +31,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; import java.util.concurrent.ConcurrentMap; @@ -483,6 +484,7 @@ public final class TemplateManagerImpl extends TemplateManager implements Dispos } } + @Unmodifiable public static @NotNull List getAllContextTypes() { return TemplateContextTypes.getAllContextTypes(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java b/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java index 5a71c38b0796..0b8805a633ec 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CopyReferenceAction.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiFileSystemItem; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; @@ -89,6 +90,7 @@ public class CopyReferenceAction extends DumbAwareAction { return ActionUpdateThread.BGT; } + @Unmodifiable protected @NotNull List getPsiElements(DataContext dataContext, Editor editor) { return getElementsToCopy(editor, dataContext); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/GotoFileItemProvider.java b/platform/lang-impl/src/com/intellij/ide/actions/GotoFileItemProvider.java index f88f6648c0b2..f1234d7d2b0e 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/GotoFileItemProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/GotoFileItemProvider.java @@ -239,6 +239,7 @@ public class GotoFileItemProvider extends DefaultChooseByNameItemProvider { }).append(dirs); } + @Unmodifiable private @NotNull Iterable> getItemsForNames(@NotNull GlobalSearchScope scope, @NotNull List matchResults, @NotNull Function indexResult) { diff --git a/platform/lang-impl/src/com/intellij/ide/actions/WeighingActionGroup.java b/platform/lang-impl/src/com/intellij/ide/actions/WeighingActionGroup.java index 0df2f522f9a5..e5b2e15650a9 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/WeighingActionGroup.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/WeighingActionGroup.java @@ -22,6 +22,7 @@ import com.intellij.util.ObjectUtils; import com.intellij.util.containers.JBIterable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -52,6 +53,7 @@ abstract class WeighingActionGroup extends ActionGroup implements ActionWithDele } @Override + @Unmodifiable public @NotNull List<@NotNull AnAction> postProcessVisibleChildren(@NotNull AnActionEvent e, @NotNull List visibleChildren) { LinkedHashSet heaviest = null; diff --git a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingRunConfigurationProvider.java b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingRunConfigurationProvider.java index 8cd38b21b075..163b5c9e2d1b 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingRunConfigurationProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/RunAnythingRunConfigurationProvider.java @@ -13,6 +13,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.FList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.Comparator; @@ -53,6 +54,7 @@ public final class RunAnythingRunConfigurationProvider extends com.intellij.ide. } @Override + @Unmodifiable public @NotNull List getExecutionContexts(@NotNull DataContext dataContext) { return ContainerUtil.emptyList(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingProviderBase.java b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingProviderBase.java index 55a6421fe85e..f3368948773b 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingProviderBase.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingProviderBase.java @@ -74,6 +74,7 @@ public abstract class RunAnythingProviderBase implements RunAnythingProvider< } @Override + @Unmodifiable public @NotNull List getExecutionContexts(@NotNull DataContext dataContext) { return RunAnythingChooseContextAction.Companion.allContexts(RunAnythingUtil.fetchProject(dataContext)); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingRecentProjectProvider.java b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingRecentProjectProvider.java index 338df4133318..fce40f6bb2af 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingRecentProjectProvider.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/runAnything/activity/RunAnythingRecentProjectProvider.java @@ -15,6 +15,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.Collection; @@ -75,6 +76,7 @@ public final class RunAnythingRecentProjectProvider extends RunAnythingAnActionP } @Override + @Unmodifiable public @NotNull List getExecutionContexts(@NotNull DataContext dataContext) { return ContainerUtil.emptyList(); } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereManagerImpl.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereManagerImpl.java index 9dce91fa4c5b..2a94c9b205da 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereManagerImpl.java @@ -33,6 +33,7 @@ import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.awt.*; @@ -366,6 +367,7 @@ public final class SearchEverywhereManagerImpl implements SearchEverywhereManage searchField.selectAll(); } @NotNull + @Unmodifiable List getHistoryItems() { if (!isShown()) return ContainerUtil.emptyList(); diff --git a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java index 789cc576511e..70e68fa85ac6 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/searcheverywhere/SearchEverywhereUI.java @@ -401,6 +401,7 @@ public final class SearchEverywhereUI extends BigPopupUI implements UiDataProvid } } + @Unmodifiable private @NotNull List getRightActions(@NotNull List> contributors) { for (SearchEverywhereContributor contributor : contributors) { if (!Objects.equals(getSelectedTabID(), contributor.getSearchProviderId()) || @@ -536,6 +537,7 @@ public final class SearchEverywhereUI extends BigPopupUI implements UiDataProvid .collect(Collectors.toList()); } + @Unmodifiable public List getFoundElementsInfo() { return myListModel.getFoundElementsInfo(); } diff --git a/platform/lang-impl/src/com/intellij/ide/extensionResources/ExtensionsRootType.java b/platform/lang-impl/src/com/intellij/ide/extensionResources/ExtensionsRootType.java index dfdaa72916a5..0fb3c0e8e744 100644 --- a/platform/lang-impl/src/com/intellij/ide/extensionResources/ExtensionsRootType.java +++ b/platform/lang-impl/src/com/intellij/ide/extensionResources/ExtensionsRootType.java @@ -18,6 +18,7 @@ import com.intellij.util.io.DigestUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.File; import java.io.IOException; @@ -175,6 +176,7 @@ public final class ExtensionsRootType extends RootType { return ScratchFileService.getInstance().getRootPath(this) + '/' + pluginId.getIdString() + (Strings.isEmpty(path) ? "" : '/' + path); } + @Unmodifiable private static @NotNull List getBundledResourceUrls(@NotNull PluginId pluginId, @NotNull String path) throws IOException { // search in enabled plugins only IdeaPluginDescriptorImpl plugin = (IdeaPluginDescriptorImpl)PluginManager.getInstance().findEnabledPlugin(pluginId); diff --git a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewTreeModel.java b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewTreeModel.java index 9af5c71d2ab5..6b6ff5c38572 100644 --- a/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewTreeModel.java +++ b/platform/lang-impl/src/com/intellij/ide/scopeView/ScopeViewTreeModel.java @@ -73,6 +73,7 @@ import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.tree.TreeModelAdapter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.event.TreeModelEvent; @@ -1179,6 +1180,7 @@ final class ScopeViewTreeModel extends BaseTreeModel> implem return manager != null && manager.hasModuleGroups(); } + @Unmodifiable private static @NotNull List getModuleNameAsList(@NotNull Module module, boolean split) { String name = module.getName(); Project project = module.isDisposed() ? null : module.getProject(); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/RootDetector.java b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/RootDetector.java index 644d3d414b71..69063a4c94b6 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/RootDetector.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/libraries/ui/RootDetector.java @@ -5,6 +5,7 @@ import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; @@ -44,5 +45,6 @@ public abstract class RootDetector { * @param progressIndicator can be used to show information about the progress and to abort searching if process is cancelled * @return suitable roots */ + @Unmodifiable public abstract @NotNull Collection detectRoots(@NotNull VirtualFile rootCandidate, @NotNull ProgressIndicator progressIndicator); } diff --git a/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java b/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java index bf993dc2af77..39d2f84d95f9 100644 --- a/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java +++ b/platform/lang-impl/src/com/intellij/platform/backend/documentation/SymbolDocumentationTargetProvider.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.ApiStatus.Internal; import org.jetbrains.annotations.ApiStatus.OverrideOnly; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -53,6 +54,7 @@ public interface SymbolDocumentationTargetProvider { */ @RequiresReadLock @RequiresBackgroundThread + @Unmodifiable default @NotNull List documentationTargets(@NotNull Project project, @NotNull Symbol symbol) { return createMaybeSingletonList(documentationTarget(project, symbol)); } diff --git a/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java b/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java index 85287fe8fc86..d41361b9b011 100644 --- a/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java +++ b/platform/lang-impl/src/com/intellij/platform/templates/ArchivedProjectTemplate.java @@ -18,6 +18,7 @@ import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.io.File; @@ -113,6 +114,7 @@ public abstract class ArchivedProjectTemplate implements ProjectTemplate { myInputFields = getFields(element); } + @Unmodifiable private static List> getFields(Element templateElement) { return ContainerUtil .mapNotNull(templateElement.getChildren(INPUT_FIELD), element -> { diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java index cd6101fb4f86..9cb8a8c90395 100644 --- a/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/autodetect/IndentOptionsDetectorImpl.java @@ -19,6 +19,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettings; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -66,6 +67,7 @@ public final class IndentOptionsDetectorImpl implements IndentOptionsDetector { return indentOptions; } + @Unmodifiable private @Nullable List calcLineIndentInfo(@Nullable ProgressIndicator indicator) { if (myDocument.getLineCount() < 3 || isFileBigToDetect()) { return null; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JarFileReferenceHelper.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JarFileReferenceHelper.java index 23f74f60bb56..d4f9782f15d6 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JarFileReferenceHelper.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JarFileReferenceHelper.java @@ -9,6 +9,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFileSystemItem; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.Collections; @@ -25,6 +26,7 @@ public final class JarFileReferenceHelper extends FileReferenceHelper { } @Override + @Unmodifiable public @NotNull Collection getRoots(@NotNull Module module) { return PsiFileReferenceHelper.getContextsForScope(module.getProject(), "", module.getModuleWithDependenciesScope()); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiFileReferenceHelper.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiFileReferenceHelper.java index c8addc1e4565..cd5d66f3efe5 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiFileReferenceHelper.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/PsiFileReferenceHelper.java @@ -62,6 +62,7 @@ public class PsiFileReferenceHelper extends FileReferenceHelper { } @Override + @Unmodifiable public @NotNull Collection getTargetContexts(@NotNull Project project, @NotNull VirtualFile file, boolean isAbsoluteReference) { List contexts; if (isAbsoluteReference) { diff --git a/platform/lang-impl/src/com/intellij/psi/search/IndexPatternOptimizerImpl.java b/platform/lang-impl/src/com/intellij/psi/search/IndexPatternOptimizerImpl.java index 8dd5b883c3b6..c98787c83a6e 100644 --- a/platform/lang-impl/src/com/intellij/psi/search/IndexPatternOptimizerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/search/IndexPatternOptimizerImpl.java @@ -9,6 +9,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.PlatformUtils; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -18,6 +19,7 @@ import static java.util.Collections.singletonList; @ApiStatus.Internal public final class IndexPatternOptimizerImpl implements IndexPatternOptimizer { @Override + @Unmodifiable public @NotNull List extractStringsToFind(@NotNull String regexp) { // short circuit for known built-in patterns, no need to spin up RegExp parser and its elements if ("\\btodo\\b.*".equals(regexp)) return singletonList("todo"); diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenamePsiFileProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenamePsiFileProcessor.java index df2404b39c55..932f74946fc6 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenamePsiFileProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenamePsiFileProcessor.java @@ -9,8 +9,8 @@ import com.intellij.psi.PsiFileSystemItem; import com.intellij.psi.PsiReference; import com.intellij.psi.search.SearchScope; import com.intellij.refactoring.RefactoringSettings; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.Collections; @@ -34,6 +34,7 @@ public class RenamePsiFileProcessor extends RenamePsiElementProcessor { } @Override + @Unmodifiable public @NotNull Collection findReferences(@NotNull PsiElement element, @NotNull SearchScope searchScope, boolean searchInCommentsAndStrings) { diff --git a/platform/lvcs-impl/src/com/intellij/history/core/Paths.java b/platform/lvcs-impl/src/com/intellij/history/core/Paths.java index 501f3f2d861f..1c8adaee243b 100644 --- a/platform/lvcs-impl/src/com/intellij/history/core/Paths.java +++ b/platform/lvcs-impl/src/com/intellij/history/core/Paths.java @@ -13,6 +13,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -61,6 +62,7 @@ public final class Paths { return path.substring(1); } + @Unmodifiable public static Iterable split(String path) { String root = FileUtil.extractRootPath(path); if (root == null) return splitInner(path); @@ -72,6 +74,7 @@ public final class Paths { return ContainerUtil.concat(Collections.singletonList(root), tail); } + @Unmodifiable private static @NotNull List splitInner(String path) { if (path.isEmpty()) return Collections.emptyList(); int s = 0; diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionGroupWrapper.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionGroupWrapper.java index 6613c00f7937..d7b2723ea12a 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionGroupWrapper.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/ActionGroupWrapper.java @@ -3,6 +3,7 @@ package com.intellij.openapi.actionSystem; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -60,6 +61,7 @@ public class ActionGroupWrapper extends ActionGroup implements ActionWithDelegat } @Override + @Unmodifiable public @NotNull List postProcessVisibleChildren(@NotNull AnActionEvent e, @NotNull List visibleChildren) { return myDelegate.postProcessVisibleChildren(e, visibleChildren); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java b/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java index 6bcbf2526209..5dfb23ac9752 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/SimpleToolWindowPanel.java @@ -14,6 +14,7 @@ import com.intellij.util.ui.UIUtil; import kotlin.Unit; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.awt.*; @@ -152,6 +153,7 @@ public class SimpleToolWindowPanel extends JBPanelWithEmptyText implements Quick } @Override + @Unmodifiable public @NotNull List getActions(boolean originalProvider) { return collectActions(myToolbar); } @@ -204,6 +206,7 @@ public class SimpleToolWindowPanel extends JBPanelWithEmptyText implements Quick } } + @Unmodifiable public static @NotNull List collectActions(@Nullable JComponent component) { return UIUtil.uiTraverser(component).traverse() .filter(ActionToolbar.class) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java index 7c17577a29fa..b879cfcc3e05 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/popup/JBPopupFactory.java @@ -18,6 +18,7 @@ import com.intellij.ui.awt.RelativePoint; import com.intellij.util.ui.Html; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.event.HyperlinkListener; @@ -383,6 +384,7 @@ public abstract class JBPopupFactory { public abstract Point getCenterOf(JComponent container, JComponent content); + @Unmodifiable public abstract @NotNull List getChildPopups(@NotNull Component parent); public abstract boolean isPopupActive(); diff --git a/platform/platform-impl/src/com/intellij/execution/wsl/WslDistributionDescriptor.java b/platform/platform-impl/src/com/intellij/execution/wsl/WslDistributionDescriptor.java index aa0b2489abe2..d468e68a7953 100644 --- a/platform/platform-impl/src/com/intellij/execution/wsl/WslDistributionDescriptor.java +++ b/platform/platform-impl/src/com/intellij/execution/wsl/WslDistributionDescriptor.java @@ -21,6 +21,7 @@ import com.intellij.util.TimeoutUtil; import com.intellij.util.xmlb.annotations.Tag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.nio.file.Path; import java.util.List; @@ -186,6 +187,7 @@ final class WslDistributionDescriptor { return pwdOutputLines.get(0).trim(); } + @Unmodifiable private @Nullable List readWslOutput(@NotNull WSLCommandLineOptions options, @NotNull GeneralCommandLine commandLine, @Nullable ProgressIndicator pi) { diff --git a/platform/platform-impl/src/com/intellij/externalDependencies/ExternalDependenciesManager.java b/platform/platform-impl/src/com/intellij/externalDependencies/ExternalDependenciesManager.java index 25623429ab63..45ae516df95a 100644 --- a/platform/platform-impl/src/com/intellij/externalDependencies/ExternalDependenciesManager.java +++ b/platform/platform-impl/src/com/intellij/externalDependencies/ExternalDependenciesManager.java @@ -3,6 +3,7 @@ package com.intellij.externalDependencies; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -15,6 +16,7 @@ public abstract class ExternalDependenciesManager { return project.getService(ExternalDependenciesManager.class); } + @Unmodifiable public abstract @NotNull List getDependencies(@NotNull Class aClass); public abstract @NotNull List getAllDependencies(); diff --git a/platform/platform-impl/src/com/intellij/externalDependencies/impl/ExternalDependenciesManagerImpl.java b/platform/platform-impl/src/com/intellij/externalDependencies/impl/ExternalDependenciesManagerImpl.java index 5c1b71b4262e..a0bd9fda464b 100644 --- a/platform/platform-impl/src/com/intellij/externalDependencies/impl/ExternalDependenciesManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/externalDependencies/impl/ExternalDependenciesManagerImpl.java @@ -16,6 +16,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xmlb.annotations.Property; import com.intellij.util.xmlb.annotations.XCollection; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.Collections; @@ -40,6 +41,7 @@ public final class ExternalDependenciesManagerImpl extends ExternalDependenciesM private final List myDependencies = new ArrayList<>(); @Override + @Unmodifiable public @NotNull List getDependencies(@NotNull Class aClass) { return ContainerUtil.filterIsInstance(myDependencies, aClass); } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/SettingsEntryPointGroup.java b/platform/platform-impl/src/com/intellij/ide/actions/SettingsEntryPointGroup.java index 1557c4293b63..36f8b6216b28 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/SettingsEntryPointGroup.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/SettingsEntryPointGroup.java @@ -6,6 +6,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DefaultActionGroup; import com.intellij.openapi.actionSystem.Presentation; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -14,6 +15,7 @@ import java.util.List; */ final class SettingsEntryPointGroup extends DefaultActionGroup { @Override + @Unmodifiable public @NotNull List postProcessVisibleChildren(@NotNull AnActionEvent e, @NotNull List visibleChildren) { for (AnAction child : visibleChildren) { diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ToggleToolbarAction.java b/platform/platform-impl/src/com/intellij/ide/actions/ToggleToolbarAction.java index c92cace90c1e..9caf4da64ff9 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ToggleToolbarAction.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ToggleToolbarAction.java @@ -22,6 +22,7 @@ import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.awt.*; @@ -247,6 +248,7 @@ public final class ToggleToolbarAction extends ToggleAction implements DumbAware return result.toArray(EMPTY_ARRAY); } + @Unmodifiable private @NotNull List collectActionGroups() { ContentManager contentManager = myToolWindow.getContentManagerIfCreated(); Content selectedContent = contentManager == null ? null : contentManager.getSelectedContent(); diff --git a/platform/platform-impl/src/com/intellij/ide/lightEdit/menuBar/LightEditRecentFileActionGroup.java b/platform/platform-impl/src/com/intellij/ide/lightEdit/menuBar/LightEditRecentFileActionGroup.java index 634a0cd3d8e6..f2b25c855ef6 100644 --- a/platform/platform-impl/src/com/intellij/ide/lightEdit/menuBar/LightEditRecentFileActionGroup.java +++ b/platform/platform-impl/src/com/intellij/ide/lightEdit/menuBar/LightEditRecentFileActionGroup.java @@ -19,6 +19,7 @@ import com.intellij.util.IconUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.Arrays; @@ -55,6 +56,7 @@ final class LightEditRecentFileActionGroup extends ActionGroup implements DumbAw return actions.toArray(AnAction.EMPTY_ARRAY); } + @Unmodifiable private static @NotNull List getRecentFiles(@NotNull Project project) { List historyFiles = EditorHistoryManager.getInstance(project).getFileList(); LinkedHashSet result = new LinkedHashSet<>(historyFiles); diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java b/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java index 4d76b57d3161..db4cd09ed720 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/actions/ContentChooser.java @@ -33,6 +33,7 @@ import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.event.ListSelectionEvent; @@ -325,6 +326,7 @@ public abstract class ContentChooser extends DialogWrapper { updateViewerForSelection(); } + @Unmodifiable public @NotNull List getSelectedContents() { return JBIterable.from(myList.getSelectedValuesList()).map(o -> myAllContents.get(o.index)).toList(); } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemImpl.java index f723169f6cc8..74e0aff2ad86 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemImpl.java @@ -167,6 +167,7 @@ public class LocalFileSystemImpl extends LocalFileSystemBase implements Disposab } @Override + @Unmodifiable public @NotNull Iterable<@NotNull VirtualFile> findCachedFilesForPath(@NotNull String path) { return ContainerUtil.mapNotNull(getAliasedPaths(path), path1 -> findFileByPathIfCached(path1)); } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java index d29984d08190..2ad79e3d0744 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java @@ -38,6 +38,7 @@ import it.unimi.dsi.fastutil.ints.IntSet; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.File; import java.io.IOException; @@ -824,6 +825,7 @@ public class VirtualDirectoryImpl extends VirtualFileSystemEntry { myData.setAllChildrenLoaded(); } + @Unmodifiable public @NotNull List getSuspiciousNames() { return myData.getAdoptedNames(); } diff --git a/platform/platform-impl/src/com/intellij/ui/ColorPickerListenerFactory.java b/platform/platform-impl/src/com/intellij/ui/ColorPickerListenerFactory.java index c50b5a593d22..f0dc3b94fad1 100644 --- a/platform/platform-impl/src/com/intellij/ui/ColorPickerListenerFactory.java +++ b/platform/platform-impl/src/com/intellij/ui/ColorPickerListenerFactory.java @@ -7,6 +7,7 @@ import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -14,6 +15,7 @@ public abstract class ColorPickerListenerFactory { private static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.colorPickerListenerFactory"); + @Unmodifiable public static @NotNull List createListenersFor(@Nullable PsiElement element) { List listeners = null; for (ColorPickerListenerFactory factory : EP_NAME.getExtensions()) { diff --git a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java index cbd8441328be..b5fea6e86f31 100644 --- a/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/popup/PopupFactoryImpl.java @@ -44,6 +44,7 @@ import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.event.HyperlinkListener; @@ -638,6 +639,7 @@ public class PopupFactoryImpl extends JBPopupFactory { } @Override + @Unmodifiable public @NotNull List getChildPopups(@NotNull Component component) { return AbstractPopup.getChildPopups(component); } diff --git a/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java b/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java index dc0a07e3554e..f74c65db5e77 100644 --- a/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java +++ b/platform/platform-impl/src/com/intellij/ui/tree/AsyncTreeModel.java @@ -253,6 +253,7 @@ public final class AsyncTreeModel extends AbstractTreeModel if (visitor.visitThread() == TreeVisitor.VisitThread.BGT) { return new BgtTreeWalker<>(visitor, background, foreground, node -> node.object) { @Override + @Unmodifiable protected @Nullable Collection getChildren(@NotNull AsyncTreeModel.Node node) { return getChildrenForWalker(node, this, allowLoading); } @@ -261,6 +262,7 @@ public final class AsyncTreeModel extends AbstractTreeModel else { return new AbstractTreeWalker<>(visitor, node -> node.object) { @Override + @Unmodifiable protected @Nullable Collection getChildren(@NotNull Node node) { return getChildrenForWalker(node, this, allowLoading); } diff --git a/platform/platform-impl/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java b/platform/platform-impl/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java index 7707f414ec64..a872dfd4b255 100644 --- a/platform/platform-impl/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java +++ b/platform/platform-impl/src/com/intellij/util/net/ssl/CertificateTreeBuilder.java @@ -132,6 +132,7 @@ public final class CertificateTreeBuilder implements Disposable { return certificates.isEmpty() ? null : certificates.iterator().next(); } + @Unmodifiable public @NotNull List getCertificatesByOrganization(@NotNull String organizationName) { Collection wrappers = myCertificates.get(organizationName); return extract(wrappers); diff --git a/platform/platform-util-io/src/com/intellij/execution/configurations/ParametersList.java b/platform/platform-util-io/src/com/intellij/execution/configurations/ParametersList.java index f4c4d2e91aea..748e4d3224cc 100644 --- a/platform/platform-util-io/src/com/intellij/execution/configurations/ParametersList.java +++ b/platform/platform-util-io/src/com/intellij/execution/configurations/ParametersList.java @@ -89,6 +89,7 @@ public final class ParametersList implements Cloneable { } @NotNull + @Unmodifiable public List getList() { if (myGroups.isEmpty()) { return getLocalParameters(); @@ -196,6 +197,7 @@ public final class ParametersList implements Cloneable { } @NotNull + @Unmodifiable public List getParameters() { return getLocalParameters(); } diff --git a/platform/platform-util-io/src/com/intellij/execution/configurations/ParamsGroup.java b/platform/platform-util-io/src/com/intellij/execution/configurations/ParamsGroup.java index d64639be192e..1cc299856919 100644 --- a/platform/platform-util-io/src/com/intellij/execution/configurations/ParamsGroup.java +++ b/platform/platform-util-io/src/com/intellij/execution/configurations/ParamsGroup.java @@ -2,6 +2,7 @@ package com.intellij.execution.configurations; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -58,6 +59,7 @@ public final class ParamsGroup implements Cloneable { addParameters(ParametersList.parse(parametersString)); } + @Unmodifiable public List getParameters() { return myParamList.getList(); } diff --git a/platform/platform-util-io/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java b/platform/platform-util-io/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java index 76a980a3095f..283309db70f2 100644 --- a/platform/platform-util-io/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java +++ b/platform/platform-util-io/src/com/intellij/execution/configurations/PathEnvironmentVariableUtil.java @@ -109,6 +109,7 @@ public final class PathEnvironmentVariableUtil { } @NotNull + @Unmodifiable public static List getPathDirs(@NotNull String pathEnvVarValue) { return StringUtil.split(pathEnvVarValue, File.pathSeparator, true, true); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java index 05c5a429c2e7..862346b76f30 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java @@ -340,6 +340,7 @@ class RootIndex { myCache = new SynchronizedSLRUCache<>(cacheSize, cacheSize) { @NotNull @Override + @Unmodifiable public List createValue(@NotNull VirtualFile key) { return collectOrderEntries(key); } diff --git a/platform/refactoring/src/com/intellij/refactoring/rename/RenamePsiElementProcessorBase.java b/platform/refactoring/src/com/intellij/refactoring/rename/RenamePsiElementProcessorBase.java index 3c0626663589..cd850164c56a 100644 --- a/platform/refactoring/src/com/intellij/refactoring/rename/RenamePsiElementProcessorBase.java +++ b/platform/refactoring/src/com/intellij/refactoring/rename/RenamePsiElementProcessorBase.java @@ -63,6 +63,7 @@ public abstract class RenamePsiElementProcessorBase { /** @deprecated use {@link RenamePsiElementProcessor#findReferences(PsiElement, SearchScope, boolean)} instead */ @Deprecated @NotNull + @Unmodifiable public Collection findReferences(@NotNull PsiElement element, boolean searchInCommentsAndStrings) { return findReferences(element, GlobalSearchScope.projectScope(element.getProject()), searchInCommentsAndStrings); } @@ -70,6 +71,7 @@ public abstract class RenamePsiElementProcessorBase { /** @deprecated use {@link RenamePsiElementProcessor#findReferences(PsiElement, SearchScope, boolean)} instead */ @Deprecated @NotNull + @Unmodifiable public Collection findReferences(@NotNull PsiElement element) { return findReferences(element, GlobalSearchScope.projectScope(element.getProject()), false); } diff --git a/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudServerRuntimeInstance.java b/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudServerRuntimeInstance.java index 92b5a6fffd53..3ea9b1599970 100644 --- a/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudServerRuntimeInstance.java +++ b/platform/remote-servers/impl/src/com/intellij/remoteServer/util/CloudServerRuntimeInstance.java @@ -13,6 +13,7 @@ import com.intellij.remoteServer.runtime.deployment.ServerRuntimeInstance; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.io.File; import java.util.Collections; @@ -109,6 +110,7 @@ public abstract class CloudServerRuntimeInstance }, callback); } + @Unmodifiable protected List getApplications() throws ServerRuntimeException { return getAgentTaskExecutor().execute(() -> { CloudRemoteApplication[] applications = getAgent().getApplications(); diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/SMTestRunnerConnectionUtil.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/SMTestRunnerConnectionUtil.java index 27a58cc3f581..f5a64f37c82e 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/SMTestRunnerConnectionUtil.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/SMTestRunnerConnectionUtil.java @@ -25,6 +25,7 @@ import com.intellij.testIntegration.TestLocationProvider; import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -228,12 +229,14 @@ public final class SMTestRunnerConnectionUtil { @NotNull @Override + @Unmodifiable public List getLocation(@NotNull String protocol, @NotNull String path, @NotNull Project project, @NotNull GlobalSearchScope scope) { return getLocation(protocol, path, null, project, scope); } @NotNull @Override + @Unmodifiable public List getLocation(@NotNull String protocol, @NotNull String path, @Nullable String metainfo, @@ -252,6 +255,7 @@ public final class SMTestRunnerConnectionUtil { @NotNull @Override + @Unmodifiable public List getLocation(@NotNull String stacktraceLine, @NotNull Project project, @NotNull GlobalSearchScope scope) { return myLocator.getLocation(stacktraceLine, project, scope); } diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java index 3e379c82d147..ca76236e57d8 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java @@ -39,6 +39,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import java.util.*; @@ -809,6 +810,7 @@ public class SMTestProxy extends AbstractTestProxy implements Navigatable { @NotNull @Override + @Unmodifiable public List getDiffViewerProviders() { AbstractState state = myState; if (state instanceof CompoundTestFailedState) { diff --git a/platform/statistics/src/com/intellij/internal/statistic/utils/StatisticsRecorderUtil.java b/platform/statistics/src/com/intellij/internal/statistic/utils/StatisticsRecorderUtil.java index 0a60dba88bcb..58c1ca59c779 100644 --- a/platform/statistics/src/com/intellij/internal/statistic/utils/StatisticsRecorderUtil.java +++ b/platform/statistics/src/com/intellij/internal/statistic/utils/StatisticsRecorderUtil.java @@ -28,6 +28,7 @@ public final class StatisticsRecorderUtil { } @NotNull + @Unmodifiable public static List getRecordersInTestMode() { if (isAnyTestModeEnabled()) { if (isFusInternalTestMode()) { diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java index f7a94421b9ab..8d76c41bd46a 100644 --- a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java +++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/ConfigurationManager.java @@ -176,6 +176,7 @@ public class ConfigurationManager implements PersistentStateComponent { /** * @return the names of all configurations, both user defined, from the project and built in. */ + @Unmodifiable public List getAllConfigurationNames() { return ContainerUtil.map(getAllConfigurations(), c -> c.getRefName()); } diff --git a/platform/tasks-platform-api/src/com/intellij/tasks/TaskManager.java b/platform/tasks-platform-api/src/com/intellij/tasks/TaskManager.java index 3bed2fdeef83..94dda3823e2b 100644 --- a/platform/tasks-platform-api/src/com/intellij/tasks/TaskManager.java +++ b/platform/tasks-platform-api/src/com/intellij/tasks/TaskManager.java @@ -35,8 +35,10 @@ public abstract class TaskManager { * @return up-to-date issues retrieved from repositories * @see #getCachedIssues() */ + @Unmodifiable public abstract List getIssues(@Nullable String query); + @Unmodifiable public abstract List getIssues(@Nullable String query, boolean forceRequest); /** @@ -65,11 +67,13 @@ public abstract class TaskManager { * * @return cached issues. */ + @Unmodifiable public abstract List getCachedIssues(); @Unmodifiable public abstract List getCachedIssues(final boolean withClosed); + @Unmodifiable public abstract List getLocalTasks(); @Unmodifiable diff --git a/platform/tasks-platform-impl/src/com/intellij/tasks/context/WorkingContextManager.java b/platform/tasks-platform-impl/src/com/intellij/tasks/context/WorkingContextManager.java index fd1487d5b402..37780243d0d4 100644 --- a/platform/tasks-platform-impl/src/com/intellij/tasks/context/WorkingContextManager.java +++ b/platform/tasks-platform-impl/src/com/intellij/tasks/context/WorkingContextManager.java @@ -193,6 +193,7 @@ public final class WorkingContextManager { return false; } + @Unmodifiable public List getContextHistory() { return getContextHistory(CONTEXT_ZIP_POSTFIX); } diff --git a/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java b/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java index b81a47c7e0ed..453ab3f2c3eb 100644 --- a/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java +++ b/platform/tasks-platform-impl/src/com/intellij/tasks/impl/TaskManagerImpl.java @@ -228,11 +228,13 @@ public final class TaskManagerImpl extends TaskManager implements PersistentStat @NotNull @Override + @Unmodifiable public List getIssues(@Nullable final String query) { return getIssues(query, true); } @Override + @Unmodifiable public List getIssues(@Nullable final String query, final boolean forceRequest) { return getIssues(query, 0, 50, true, new EmptyProgressIndicator(), forceRequest); } @@ -254,6 +256,7 @@ public final class TaskManagerImpl extends TaskManager implements PersistentStat } @Override + @Unmodifiable public List getCachedIssues() { return getCachedIssues(true); } @@ -288,6 +291,7 @@ public final class TaskManagerImpl extends TaskManager implements PersistentStat } @Override + @Unmodifiable public List getLocalTasks() { return getLocalTasks(true); } diff --git a/platform/testFramework/core/src/com/intellij/TestCaseLoader.java b/platform/testFramework/core/src/com/intellij/TestCaseLoader.java index b90292471a43..e0f9bd1180a1 100644 --- a/platform/testFramework/core/src/com/intellij/TestCaseLoader.java +++ b/platform/testFramework/core/src/com/intellij/TestCaseLoader.java @@ -269,6 +269,7 @@ public class TestCaseLoader { } } + @Unmodifiable private static List getTestGroups() { return StringUtil.split(System.getProperty("intellij.build.test.groups", System.getProperty("idea.test.group", "")).trim(), ";"); } diff --git a/platform/testFramework/src/com/intellij/editor/TodoItemsTestCase.java b/platform/testFramework/src/com/intellij/editor/TodoItemsTestCase.java index 2838a9cd7850..ae060c1f3f82 100644 --- a/platform/testFramework/src/com/intellij/editor/TodoItemsTestCase.java +++ b/platform/testFramework/src/com/intellij/editor/TodoItemsTestCase.java @@ -33,6 +33,7 @@ import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.indexing.FileBasedIndexEx; import com.intellij.util.indexing.StorageException; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.List; @@ -58,6 +59,7 @@ public abstract class TodoItemsTestCase extends LightPlatformCodeInsightTestCase } @NotNull + @Unmodifiable protected List doHighlighting() { PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); diff --git a/platform/testFramework/src/com/intellij/openapi/util/io/IoTestUtil.java b/platform/testFramework/src/com/intellij/openapi/util/io/IoTestUtil.java index 20e133d29bce..532f62e7b899 100644 --- a/platform/testFramework/src/com/intellij/openapi/util/io/IoTestUtil.java +++ b/platform/testFramework/src/com/intellij/openapi/util/io/IoTestUtil.java @@ -15,6 +15,7 @@ import com.intellij.testFramework.UsefulTestCase; import com.intellij.util.io.SuperUserStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import org.junit.AssumptionViolatedException; import java.io.*; @@ -352,6 +353,7 @@ public final class IoTestUtil { return "\\\\127.0.0.1\\" + localPath.charAt(0) + '$' + localPath.substring(2); } + @Unmodifiable public static @NotNull List<@NotNull String> enumerateWslDistributions() { assertTrue(SystemInfo.isWin10OrNewer); try { diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java index 718148518731..12d8b51ca0ac 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java @@ -615,6 +615,7 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { Document getDocument(@NotNull PsiFile file); @NotNull + @Unmodifiable List findAllGutters(@NotNull @TestDataFile String filePath); @Unmodifiable @@ -827,6 +828,7 @@ public interface CodeInsightTestFixture extends IdeaProjectTestFixture { * @return a list of the breadcrumbs in the order from the topmost element crumb to the deepest. */ @NotNull + @Unmodifiable List getBreadcrumbsAtCaret(); void saveText(@NotNull VirtualFile file, @NotNull String text); diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index 9b9b34ac2b0e..c993f807bdf7 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -234,6 +234,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig renderers.add(renderer); } + @Unmodifiable private static @NotNull List removeDuplicatedRangesForInjected(@NotNull List infos) { infos = new ArrayList<>(infos); infos.sort((o1, o2) -> { @@ -257,6 +258,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @NotNull @TestOnly + @Unmodifiable public static List instantiateAndRun(@NotNull PsiFile file, @NotNull Editor editor, int @NotNull [] toIgnore, @@ -351,6 +353,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @NotNull @TestOnly + @Unmodifiable public static List getAvailableIntentions(@NotNull Editor editor, @NotNull PsiFile file) { IdeaTestExecutionPolicy current = IdeaTestExecutionPolicy.current(); if (current != null) { @@ -1203,6 +1206,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override @NotNull + @Unmodifiable public List findAllGutters(@NotNull String filePath) { configureByFilesInner(filePath); return findAllGutters(); @@ -2209,6 +2213,7 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @NotNull @Override + @Unmodifiable public List getBreadcrumbsAtCaret() { return myEditorTestFixture.getBreadcrumbsAtCaret(); } diff --git a/platform/testFramework/src/com/intellij/ui/IconTestUtil.java b/platform/testFramework/src/com/intellij/ui/IconTestUtil.java index 239c3c288feb..c49ecbe2b8cf 100644 --- a/platform/testFramework/src/com/intellij/ui/IconTestUtil.java +++ b/platform/testFramework/src/com/intellij/ui/IconTestUtil.java @@ -64,6 +64,7 @@ public final class IconTestUtil { } @NotNull + @Unmodifiable public static List renderDeferredIcon(Icon icon) { icon.paintIcon(new JLabel(), createMockGraphics(), 0, 0); // force to eval TimeoutUtil.sleep(1000); // give chance to evaluate diff --git a/platform/testRunner/src/com/intellij/execution/testframework/SourceScope.java b/platform/testRunner/src/com/intellij/execution/testframework/SourceScope.java index 3fc67f3afe9c..fc0405d8903c 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/SourceScope.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/SourceScope.java @@ -11,6 +11,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.graph.Graph; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -174,6 +175,7 @@ public abstract class SourceScope { @NotNull @Override + @Unmodifiable public Collection getUnloadedModulesBelongingToScope() { return myMainScope.getUnloadedModulesBelongingToScope(); } diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewImpl.java index 4871f0a21269..18e9dd213995 100644 --- a/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewImpl.java +++ b/platform/usageView-impl/src/com/intellij/usages/impl/UsageViewImpl.java @@ -1877,6 +1877,7 @@ public class UsageViewImpl implements UsageViewEx { return new HashSet<>(allUsagesRecursive(selectedNodes())); } + @Unmodifiable private static @NotNull List<@NotNull Usage> allUsagesRecursive(@NotNull List selection) { return TreeUtil.treeNodeTraverser(null).withRoots(selection).traverse() .filterMap(o -> o instanceof UsageNode ? ((UsageNode)o).getUsage() : null).toList(); diff --git a/platform/usageView-impl/src/com/intellij/usages/impl/rules/ActiveRules.java b/platform/usageView-impl/src/com/intellij/usages/impl/rules/ActiveRules.java index 568c869ee388..013d0f75a05a 100644 --- a/platform/usageView-impl/src/com/intellij/usages/impl/rules/ActiveRules.java +++ b/platform/usageView-impl/src/com/intellij/usages/impl/rules/ActiveRules.java @@ -11,6 +11,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.ArrayList; import java.util.List; @@ -127,6 +128,7 @@ public final class ActiveRules { @Override @NotNull + @Unmodifiable public List getParentGroupsFor(@NotNull Usage usage, UsageTarget @NotNull [] targets) { return myGroupingRule.getParentGroupsFor(usage, targets); } diff --git a/platform/util/src/com/intellij/util/containers/FilteredTraverserBase.java b/platform/util/src/com/intellij/util/containers/FilteredTraverserBase.java index f57eb2bb2e0b..883a63c88329 100644 --- a/platform/util/src/com/intellij/util/containers/FilteredTraverserBase.java +++ b/platform/util/src/com/intellij/util/containers/FilteredTraverserBase.java @@ -8,6 +8,7 @@ import com.intellij.util.Functions; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.WeakHashMap; import java.util.*; @@ -258,6 +259,7 @@ public abstract class FilteredTraverserBase toList() { return traverse().toList(); } diff --git a/platform/util/src/com/intellij/util/containers/ObjectIntHashMap.java b/platform/util/src/com/intellij/util/containers/ObjectIntHashMap.java index 2ee441a6fb8d..e048056eb50a 100644 --- a/platform/util/src/com/intellij/util/containers/ObjectIntHashMap.java +++ b/platform/util/src/com/intellij/util/containers/ObjectIntHashMap.java @@ -5,6 +5,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Set; @@ -81,6 +82,7 @@ public final class ObjectIntHashMap implements ObjectIntMap { } @Override + @Unmodifiable public @NotNull Iterable> entries() { return ContainerUtil.map(myMap.object2IntEntrySet(), e-> new IntEntry(e)); } diff --git a/platform/util/src/com/intellij/util/containers/ObjectIntMap.java b/platform/util/src/com/intellij/util/containers/ObjectIntMap.java index 42ed67098663..19977a3ad7be 100644 --- a/platform/util/src/com/intellij/util/containers/ObjectIntMap.java +++ b/platform/util/src/com/intellij/util/containers/ObjectIntMap.java @@ -14,6 +14,7 @@ package com.intellij.util.containers; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.Set; @@ -52,5 +53,6 @@ public interface ObjectIntMap { } @NotNull + @Unmodifiable Iterable> entries(); } diff --git a/platform/util/ui/src/com/intellij/ui/TableUtil.java b/platform/util/ui/src/com/intellij/ui/TableUtil.java index f8b26b72c05d..89b1f9a21f37 100644 --- a/platform/util/ui/src/com/intellij/ui/TableUtil.java +++ b/platform/util/ui/src/com/intellij/ui/TableUtil.java @@ -6,6 +6,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ItemRemovable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.table.*; @@ -21,6 +22,7 @@ public final class TableUtil { boolean isOperationApplyable(@NotNull TableModel model, int row); } + @Unmodifiable public static @NotNull List removeSelectedItems(@NotNull JTable table) { return removeSelectedItems(table, null); } @@ -53,6 +55,7 @@ public final class TableUtil { table.scrollRectToVisible(new Rectangle(selectPoint, new Dimension(minCellRect.width / 2,allHeight))); } + @Unmodifiable public static @NotNull List removeSelectedItems(@NotNull JTable table, @Nullable ItemChecker applyable) { final TableModel model = table.getModel(); if (!(model instanceof ItemRemovable itemRemovable)) { diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java index 285c5be72609..45aeb7680dc6 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/changes/ChangesUtil.java @@ -101,10 +101,12 @@ public final class ChangesUtil { return ProjectLevelVcsManager.getInstance(project).getVcsFor(VcsUtil.getFilePath(file)); } + @Unmodifiable public static @NotNull List getPaths(@NotNull Collection changes) { return iteratePaths(changes).toList(); } + @Unmodifiable public static @NotNull List getIoFilesFromChanges(@NotNull Collection changes) { return iteratePaths(changes) .map(FilePath::getIOFile) diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEditorsProvider.java b/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEditorsProvider.java index 93a7d604e379..8193bb0c81f3 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEditorsProvider.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/evaluation/XDebuggerEditorsProvider.java @@ -13,6 +13,7 @@ import com.intellij.xdebugger.XSourcePosition; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collection; import java.util.Collections; @@ -42,6 +43,7 @@ public abstract class XDebuggerEditorsProvider { public void afterEditorCreated(@Nullable Editor editor) {} @NotNull + @Unmodifiable public Collection getSupportedLanguages(@NotNull Project project, @Nullable XSourcePosition sourcePosition) { FileType type = getFileType(); return type instanceof LanguageFileType ? Collections.singleton(((LanguageFileType)type).getLanguage()) : Collections.emptyList(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java index 2dbe0f3cd399..045895123041 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java @@ -11,10 +11,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.XDebuggerBundle; import com.intellij.xdebugger.settings.DebuggerConfigurableProvider; import com.intellij.xdebugger.settings.DebuggerSettingsCategory; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.*; import javax.swing.*; import java.util.Arrays; @@ -157,10 +154,12 @@ public class DebuggerConfigurable implements SearchableConfigurable.Parent { return "project.propDebugger"; } + @Unmodifiable static @NotNull List getConfigurables(@NotNull DebuggerSettingsCategory category) { return getConfigurables(category, DebuggerConfigurableProvider.EXTENSION_POINT.getExtensionList()); } + @Unmodifiable private static @NotNull List getConfigurables(@NotNull DebuggerSettingsCategory category, List providers) { List configurables = null; diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java index 01802b98c42a..b4ea4f508c67 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/Configuration.java @@ -219,6 +219,7 @@ public class Configuration extends SimpleModificationTracker implements Persiste super.invokeAfterReload(runnable); } + @Unmodifiable public List getOwnInjections(final String injectorId) { return super.getInjections(injectorId); } diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java index 2ca0d256a442..43f27f576b48 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java @@ -16,6 +16,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -38,6 +39,7 @@ public class GroupByWordPrefixes implements Grouper, Sorter { @Override @NotNull + @Unmodifiable public Collection group(@NotNull AbstractTreeNode parent, @NotNull Collection children) { List keys = new ArrayList<>(); diff --git a/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java b/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java index 2f36eaa3b939..b6ae27f5b02a 100644 --- a/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java +++ b/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleEditor.java @@ -63,6 +63,7 @@ import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import javax.swing.*; import javax.swing.border.TitledBorder; @@ -598,6 +599,7 @@ public final class ResourceBundleEditor extends UserDataHolderBase implements Do } @NotNull + @Unmodifiable public Collection getSelectedElements() { return getSelectedNodes() .filter(AbstractTreeNode.class) @@ -607,6 +609,7 @@ public final class ResourceBundleEditor extends UserDataHolderBase implements Do } @NotNull + @Unmodifiable public Collection getSelectedObjects() { return getSelectedNodes() .filter(AbstractTreeNode.class) diff --git a/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java b/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java index 055106b828f3..f097f50efe4b 100644 --- a/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java +++ b/plugins/properties/properties-resource-bundle-editor/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewComponent.java @@ -30,6 +30,7 @@ import com.intellij.util.containers.JBIterable; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.awt.datatransfer.StringSelection; import java.util.ArrayList; @@ -131,6 +132,7 @@ public class ResourceBundleStructureViewComponent extends PropertiesGroupingStru }); } + @Unmodifiable private static @NotNull List getPsiElements(JBIterable selection) { return selection .filterMap(StructureViewComponent::unwrapWrapper) diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/psi/impl/JavaStreamChainBuilder.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/psi/impl/JavaStreamChainBuilder.java index 3f20f02ee89f..9a79143798d3 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/psi/impl/JavaStreamChainBuilder.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/psi/impl/JavaStreamChainBuilder.java @@ -11,6 +11,7 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.*; @@ -84,6 +85,7 @@ public class JavaStreamChainBuilder implements StreamChainBuilder { } @NotNull + @Unmodifiable private List buildChains(@NotNull List> chains, @NotNull PsiElement context) { return ContainerUtil.map(chains, x -> myChainTransformer.transform(x, context)); } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/IntermediateState.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/IntermediateState.java index 1da95d4b2e06..78b54331b258 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/IntermediateState.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/trace/IntermediateState.java @@ -4,6 +4,7 @@ package com.intellij.debugger.streams.trace; import com.intellij.util.containers.ContainerUtil; import com.sun.jdi.Value; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -16,6 +17,7 @@ public interface IntermediateState { List getTrace(); @NotNull + @Unmodifiable default List getRawValues() { return ContainerUtil.map(getTrace(), TraceElement::getValue); } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/TraceController.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/TraceController.java index 29435a229d20..e3106c207dfe 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/TraceController.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/TraceController.java @@ -6,6 +6,7 @@ import com.intellij.debugger.streams.wrapper.StreamCall; import com.sun.jdi.Value; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.List; @@ -14,6 +15,7 @@ import java.util.List; */ public interface TraceController extends ValuesHighlightingListener { @NotNull + @Unmodifiable List getValues(); @NotNull diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/TraceControllerImpl.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/TraceControllerImpl.java index 7448e2531bd2..dc56ccb5a012 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/TraceControllerImpl.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/TraceControllerImpl.java @@ -15,6 +15,7 @@ import com.intellij.openapi.util.Disposer; import com.sun.jdi.Value; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.Unmodifiable; import java.util.Collections; import java.util.List; @@ -61,6 +62,7 @@ public class TraceControllerImpl implements TraceController, Disposable { @NotNull @Override + @Unmodifiable public List getValues() { return myState.getRawValues(); }