From c2256d62033210970541f6a9072b46dc542f5d06 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 12 Nov 2009 11:21:59 +0300 Subject: [PATCH 01/19] suggest an appropriate name for archive artifacts created from exploded --- .../com/intellij/packaging/artifacts/ArtifactTemplate.java | 6 ++++++ .../artifacts/ArtifactsStructureConfigurable.java | 7 +++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java index 1b35071bb41d..342ceb5b7462 100644 --- a/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java +++ b/java/compiler/openapi/src/com/intellij/packaging/artifacts/ArtifactTemplate.java @@ -22,7 +22,13 @@ import org.jetbrains.annotations.NotNull; * @author nik */ public abstract class ArtifactTemplate { + public abstract String getPresentableName(); public abstract CompositePackagingElement createRootElement(@NotNull String artifactName); + + @NotNull + public String suggestArtifactName() { + return "unnamed"; + } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java index 093d8b6ec6ff..ba8911c93c32 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactsStructureConfigurable.java @@ -34,7 +34,6 @@ import com.intellij.openapi.ui.MasterDetailsStateService; import com.intellij.packaging.artifacts.*; import com.intellij.packaging.elements.CompositePackagingElement; import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,7 +48,6 @@ import java.util.*; storages = {@Storage(id = "other", file = "$WORKSPACE_FILE$")} ) public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { - @NonNls private static final String DEFAULT_ARTIFACT_NAME = "unnamed"; private ArtifactsStructureConfigurableContextImpl myPackagingEditorContext; private ArtifactEditorSettings myDefaultSettings = new ArtifactEditorSettings(); @@ -172,10 +170,11 @@ public class ArtifactsStructureConfigurable extends BaseStructureConfigurable { } private void addArtifact(@NotNull ArtifactType type, @NotNull ArtifactTemplate artifactTemplate) { - String name = DEFAULT_ARTIFACT_NAME; + final String baseName = artifactTemplate.suggestArtifactName(); + String name = baseName; int i = 2; while (myPackagingEditorContext.getArtifactModel().findArtifact(name) != null) { - name = DEFAULT_ARTIFACT_NAME + i; + name = baseName + i; i++; } final ModifiableArtifact artifact = myPackagingEditorContext.getOrCreateModifiableArtifactModel().addArtifact(name, type, artifactTemplate.createRootElement(name)); From a40aeaaf25bd6abf1eaf403b0bd6390bbf1473bf Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 12 Nov 2009 12:33:13 +0300 Subject: [PATCH 02/19] correctly handle module pointers if modifable model is disposed --- .../module/impl/ModulePointerManagerImpl.java | 29 ++++++++++++++----- .../intellij/module/ModulePointerTest.java | 14 +++++++++ 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java index eba14d81259d..9380777413e4 100644 --- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModulePointerManagerImpl.java @@ -16,11 +16,13 @@ package com.intellij.openapi.module.impl; import com.intellij.ProjectTopics; +import com.intellij.openapi.Disposable; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModulePointer; import com.intellij.openapi.module.ModulePointerManager; import com.intellij.openapi.project.ModuleAdapter; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Disposer; import java.util.HashMap; import java.util.Map; @@ -38,11 +40,7 @@ public class ModulePointerManagerImpl extends ModulePointerManager { project.getMessageBus().connect().subscribe(ProjectTopics.MODULES, new ModuleAdapter() { @Override public void beforeModuleRemoved(Project project, Module module) { - final ModulePointerImpl pointer = myPointers.remove(module); - if (pointer != null) { - pointer.moduleRemoved(module); - myUnresolved.put(pointer.getModuleName(), pointer); - } + unregisterPointer(module); } @Override @@ -50,18 +48,35 @@ public class ModulePointerManagerImpl extends ModulePointerManager { final ModulePointerImpl pointer = myUnresolved.remove(module.getName()); if (pointer != null) { pointer.moduleAdded(module); - myPointers.put(module, pointer); + registerPointer(module, pointer); } } }); } + private void registerPointer(final Module module, final ModulePointerImpl pointer) { + myPointers.put(module, pointer); + Disposer.register(module, new Disposable() { + public void dispose() { + unregisterPointer(module); + } + }); + } + + private void unregisterPointer(Module module) { + final ModulePointerImpl pointer = myPointers.remove(module); + if (pointer != null) { + pointer.moduleRemoved(module); + myUnresolved.put(pointer.getModuleName(), pointer); + } + } + @Override public ModulePointer create(Module module) { ModulePointerImpl pointer = myPointers.get(module); if (pointer == null) { pointer = new ModulePointerImpl(module); - myPointers.put(module, pointer); + registerPointer(module, pointer); } return pointer; } diff --git a/platform/lang-impl/testSrc/com/intellij/module/ModulePointerTest.java b/platform/lang-impl/testSrc/com/intellij/module/ModulePointerTest.java index d6e2449422cb..a05e17a2d2a2 100644 --- a/platform/lang-impl/testSrc/com/intellij/module/ModulePointerTest.java +++ b/platform/lang-impl/testSrc/com/intellij/module/ModulePointerTest.java @@ -60,6 +60,20 @@ public class ModulePointerTest extends PlatformTestCase { assertEquals("xyz", pointer.getModuleName()); } + public void testDisposePointerFromUncommitedModifiableModel() throws Exception { + final ModifiableModuleModel modifiableModel = getModuleManager().getModifiableModel(); + final Module module = modifiableModel.newModule(myProject.getBaseDir().getPath() + "/xxx.iml", EmptyModuleType.getInstance()); + final ModulePointer pointer = getPointerManager().create(module); + + assertSame(module, pointer.getModule()); + assertEquals("xxx", pointer.getModuleName()); + + modifiableModel.dispose(); + + assertNull(pointer.getModule()); + assertEquals("xxx", pointer.getModuleName()); + } + private ModuleManager getModuleManager() { return ModuleManager.getInstance(myProject); } From 0bd4b6127db4561f05b051a8c19b7780b5f4b040 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 12 Nov 2009 13:00:36 +0300 Subject: [PATCH 03/19] typo (IDEADEV-41328) --- .../execution/configurations/UnknownConfigurationType.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/lang-api/src/com/intellij/execution/configurations/UnknownConfigurationType.java b/platform/lang-api/src/com/intellij/execution/configurations/UnknownConfigurationType.java index 515a6ffbf2ed..b4c7a4a1a2a1 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/UnknownConfigurationType.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/UnknownConfigurationType.java @@ -37,7 +37,7 @@ public class UnknownConfigurationType implements ConfigurationType { } public String getConfigurationTypeDescription() { - return "Configuration which cannot be loaded due to some resons"; + return "Configuration which cannot be loaded due to some reasons"; } public Icon getIcon() { From fcdb4b7ded9e3baacc2a83d5fba959de234b0c63 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 12 Nov 2009 13:05:54 +0300 Subject: [PATCH 04/19] renames and inline --- .../ProcessingItemsBuilderContext.java | 88 ------------------- ...rtifactsProcessingItemsBuilderContext.java | 62 +++++++++++-- .../IncrementalArtifactsCompiler.java | 2 +- 3 files changed, 56 insertions(+), 96 deletions(-) delete mode 100644 java/compiler/impl/src/com/intellij/compiler/impl/packagingCompiler/ProcessingItemsBuilderContext.java diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/packagingCompiler/ProcessingItemsBuilderContext.java b/java/compiler/impl/src/com/intellij/compiler/impl/packagingCompiler/ProcessingItemsBuilderContext.java deleted file mode 100644 index 010f33754cac..000000000000 --- a/java/compiler/impl/src/com/intellij/compiler/impl/packagingCompiler/ProcessingItemsBuilderContext.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.intellij.compiler.impl.packagingCompiler; - -import com.intellij.openapi.compiler.CompileContext; -import com.intellij.openapi.compiler.FileProcessingCompiler; -import com.intellij.openapi.util.MultiValuesMap; -import com.intellij.openapi.vfs.VirtualFile; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.*; - -/** - * @author nik - */ -public abstract class ProcessingItemsBuilderContext { - protected final Map myItemsBySource; - private final Map mySourceByOutput; - private final MultiValuesMap myJarsByPath; - private final CompileContext myCompileContext; - - public ProcessingItemsBuilderContext(final CompileContext compileContext) { - myCompileContext = compileContext; - myItemsBySource = new HashMap(); - mySourceByOutput = new HashMap(); - myJarsByPath = new MultiValuesMap(); - } - - public abstract Item[] getProcessingItems(); - - public boolean checkOutputPath(final String outputPath, final VirtualFile sourceFile) { - VirtualFile old = mySourceByOutput.get(outputPath); - if (old == null) { - mySourceByOutput.put(outputPath, sourceFile); - return true; - } - //todo[nik] show warning? - return false; - } - - public Item getItemBySource(VirtualFile source) { - return myItemsBySource.get(source); - } - - public void registerJarFile(@NotNull JarInfo jarInfo, @NotNull String outputPath) { - myJarsByPath.put(outputPath, jarInfo); - } - - @Nullable - public Collection getJarInfos(String outputPath) { - return myJarsByPath.get(outputPath); - } - - @Nullable - public VirtualFile getSourceByOutput(String outputPath) { - return mySourceByOutput.get(outputPath); - } - - public CompileContext getCompileContext() { - return myCompileContext; - } - - public Item getOrCreateProcessingItem(VirtualFile sourceFile) { - Item item = myItemsBySource.get(sourceFile); - if (item == null) { - item = createProcessingItem(sourceFile); - myItemsBySource.put(sourceFile, item); - } - return item; - } - - protected abstract Item createProcessingItem(VirtualFile sourceFile); -} diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsProcessingItemsBuilderContext.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsProcessingItemsBuilderContext.java index 75138c8eab1a..0d84470b3953 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsProcessingItemsBuilderContext.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsProcessingItemsBuilderContext.java @@ -17,22 +17,33 @@ package com.intellij.packaging.impl.compiler; import com.intellij.compiler.impl.packagingCompiler.DestinationInfo; import com.intellij.compiler.impl.packagingCompiler.ExplodedDestinationInfo; -import com.intellij.compiler.impl.packagingCompiler.ProcessingItemsBuilderContext; +import com.intellij.compiler.impl.packagingCompiler.JarInfo; import com.intellij.openapi.compiler.CompileContext; +import com.intellij.openapi.util.MultiValuesMap; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.packaging.elements.ArtifactIncrementalCompilerContext; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Collection; +import java.util.HashMap; +import java.util.Map; /** * @author nik */ -public class ArtifactsProcessingItemsBuilderContext extends ProcessingItemsBuilderContext implements ArtifactIncrementalCompilerContext { +public class ArtifactsProcessingItemsBuilderContext implements ArtifactIncrementalCompilerContext { private boolean myCollectingEnabledItems; + protected final Map myItemsBySource; + private final Map mySourceByOutput; + private final MultiValuesMap myJarsByPath; + private final CompileContext myCompileContext; public ArtifactsProcessingItemsBuilderContext(CompileContext compileContext) { - super(compileContext); + myCompileContext = compileContext; + myItemsBySource = new HashMap(); + mySourceByOutput = new HashMap(); + myJarsByPath = new MultiValuesMap(); } public boolean addDestination(@NotNull VirtualFile sourceFile, @NotNull DestinationInfo destinationInfo) { @@ -47,10 +58,6 @@ public class ArtifactsProcessingItemsBuilderContext extends ProcessingItemsBuild return false; } - protected ArtifactPackagingProcessingItem createProcessingItem(VirtualFile sourceFile) { - return new ArtifactPackagingProcessingItem(sourceFile); - } - public ArtifactPackagingProcessingItem[] getProcessingItems() { final Collection processingItems = myItemsBySource.values(); return processingItems.toArray(new ArtifactPackagingProcessingItem[processingItems.size()]); @@ -59,4 +66,45 @@ public class ArtifactsProcessingItemsBuilderContext extends ProcessingItemsBuild public void setCollectingEnabledItems(boolean collectingEnabledItems) { myCollectingEnabledItems = collectingEnabledItems; } + + public boolean checkOutputPath(final String outputPath, final VirtualFile sourceFile) { + VirtualFile old = mySourceByOutput.get(outputPath); + if (old == null) { + mySourceByOutput.put(outputPath, sourceFile); + return true; + } + //todo[nik] show warning? + return false; + } + + public ArtifactPackagingProcessingItem getItemBySource(VirtualFile source) { + return myItemsBySource.get(source); + } + + public void registerJarFile(@NotNull JarInfo jarInfo, @NotNull String outputPath) { + myJarsByPath.put(outputPath, jarInfo); + } + + @Nullable + public Collection getJarInfos(String outputPath) { + return myJarsByPath.get(outputPath); + } + + @Nullable + public VirtualFile getSourceByOutput(String outputPath) { + return mySourceByOutput.get(outputPath); + } + + public CompileContext getCompileContext() { + return myCompileContext; + } + + public ArtifactPackagingProcessingItem getOrCreateProcessingItem(VirtualFile sourceFile) { + ArtifactPackagingProcessingItem item = myItemsBySource.get(sourceFile); + if (item == null) { + item = new ArtifactPackagingProcessingItem(sourceFile); + myItemsBySource.put(sourceFile, item); + } + return item; + } } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java index ccbd35d4276f..d2137abde3c0 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/IncrementalArtifactsCompiler.java @@ -316,7 +316,7 @@ public class IncrementalArtifactsCompiler implements PackagingCompiler { public void processOutdatedItem(final CompileContext context, final String url, @Nullable final ValidityState state) { } - protected boolean collectFilesToDelete(final CompileContext context, final ArtifactPackagingProcessingItem[] allProcessingItems) { + private boolean collectFilesToDelete(final CompileContext context, final ArtifactPackagingProcessingItem[] allProcessingItems) { List filesToDelete = new ArrayList(); Set outputPaths = createPathsHashSet(); for (ArtifactPackagingProcessingItem item : allProcessingItems) { From 3806c34ea30881d027afac0c4de9e476d5904353 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Thu, 12 Nov 2009 13:13:19 +0300 Subject: [PATCH 05/19] move PsiViewer settings declaration to PlatformExtensions --- platform/platform-resources/src/META-INF/PlatformExtensions.xml | 2 ++ resources/src/META-INF/IdeaPlugin.xml | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/platform-resources/src/META-INF/PlatformExtensions.xml b/platform/platform-resources/src/META-INF/PlatformExtensions.xml index e768027835bf..5251823f8810 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensions.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensions.xml @@ -88,6 +88,8 @@ serviceImplementation="com.intellij.featureStatistics.ProductivityFeaturesRegistryImpl"/> + diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml index dac264652e6a..4101d1fb3478 100644 --- a/resources/src/META-INF/IdeaPlugin.xml +++ b/resources/src/META-INF/IdeaPlugin.xml @@ -295,8 +295,6 @@ - From 1b85bbc7d7bcab677077012ec4704f1fc21fe85e Mon Sep 17 00:00:00 2001 From: Alexey Gopachenko Date: Thu, 12 Nov 2009 12:50:18 +0300 Subject: [PATCH 06/19] Avoid creating duplicate strings if no format but params passed --- platform/util/src/com/intellij/CommonBundle.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/CommonBundle.java b/platform/util/src/com/intellij/CommonBundle.java index 98a303bc0387..e64c62028df4 100644 --- a/platform/util/src/com/intellij/CommonBundle.java +++ b/platform/util/src/com/intellij/CommonBundle.java @@ -75,7 +75,7 @@ public class CommonBundle { value = UIUtil.replaceMnemonicAmpersand(value); - if (params.length > 0) { + if (params.length > 0 && value.indexOf('{')>=0) { return MessageFormat.format(value, params); } From e6fe0e2d207301e65f810424cdb3c07f040922c6 Mon Sep 17 00:00:00 2001 From: Alexey Gopachenko Date: Thu, 12 Nov 2009 12:55:45 +0300 Subject: [PATCH 07/19] Avoid creating multiple fixes on batch runs --- .../inspections/SpellCheckingInspection.java | 15 +++++++++------ .../quickfixes/AcceptWordAsCorrect.java | 6 +++--- .../util/SpellCheckerBundle.properties | 3 ++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java index 081366965736..26ef6f4abb65 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java @@ -52,6 +52,7 @@ import java.util.Map; public class SpellCheckingInspection extends LocalInspectionTool { public static final String SPELL_CHECKING_INSPECTION_TOOL_NAME = "SpellCheckingInspection"; + private static final AcceptWordAsCorrect BATCH_ACCEPT_FIX = new AcceptWordAsCorrect(); @Nls @NotNull @@ -187,10 +188,10 @@ public class SpellCheckingInspection extends LocalInspectionTool { } } - final AcceptWordAsCorrect acceptWordAsCorrect = new AcceptWordAsCorrect(); + final AcceptWordAsCorrect acceptWordAsCorrect = isOnTheFly ? BATCH_ACCEPT_FIX : new AcceptWordAsCorrect(); fixes.add(acceptWordAsCorrect); - final ProblemDescriptor problemDescriptor = createProblemDescriptor(token, holder, textRange, fixes); + final ProblemDescriptor problemDescriptor = createProblemDescriptor(token, holder, textRange, fixes, isOnTheFly); holder.registerProblem(problemDescriptor); } @@ -198,10 +199,10 @@ public class SpellCheckingInspection extends LocalInspectionTool { private static ProblemDescriptor createProblemDescriptor(Token token, ProblemsHolder holder, - TextRange textRange, Collection fixes) { + TextRange textRange, Collection fixes, boolean onTheFly) { //TODO: these descriptions eat LOTS of HEAP on batch run - need either to make them constant or evaluate template dynamically // ( add something like #text substitution) - final String defaultDescription = SpellCheckerBundle.message("word.0.1.is.misspelled"); + final String defaultDescription = SpellCheckerBundle.message("typo.in"); final String tokenDescription = token.getDescription(); final String description = tokenDescription == null ? defaultDescription : tokenDescription; final TextRange highlightRange = TextRange.from(token.getOffset() + textRange.getStartOffset(), textRange.getLength()); @@ -211,8 +212,10 @@ public class SpellCheckingInspection extends LocalInspectionTool { final ProblemDescriptor problemDescriptor = holder.getManager() .createProblemDescriptor(token.getElement(), highlightRange, description, ProblemHighlightType.GENERIC_ERROR_OR_WARNING, holder.isOnTheFly(), quickFixes); - for (SpellCheckerQuickFix fix : fixes) { - fix.setDescriptor(problemDescriptor); + if(onTheFly) { + for (SpellCheckerQuickFix fix : fixes) { + fix.setDescriptor(problemDescriptor); + } } return problemDescriptor; } diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/AcceptWordAsCorrect.java b/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/AcceptWordAsCorrect.java index 72abfe39b5e4..49a61e4fd8a2 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/AcceptWordAsCorrect.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/quickfixes/AcceptWordAsCorrect.java @@ -16,11 +16,9 @@ package com.intellij.spellchecker.quickfixes; import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ex.ProblemDescriptorImpl; import com.intellij.codeInspection.ui.ProblemDescriptionNode; import com.intellij.openapi.actionSystem.Anchor; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.TextRange; import com.intellij.spellchecker.SpellCheckerManager; import com.intellij.spellchecker.util.SpellCheckerBundle; import org.jetbrains.annotations.NotNull; @@ -36,7 +34,9 @@ public class AcceptWordAsCorrect implements SpellCheckerQuickFix { @NotNull public String getName() { - return SpellCheckerBundle.message("add.0.to.dictionary", ProblemDescriptionNode.extractHighlightedText(myProblemDescriptor, myProblemDescriptor.getPsiElement())); + return myProblemDescriptor!=null ? SpellCheckerBundle.message("add.0.to.dictionary", ProblemDescriptionNode.extractHighlightedText(myProblemDescriptor, myProblemDescriptor.getPsiElement())) + : SpellCheckerBundle.message("add.to.dictionary") + ; } @NotNull diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties b/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties index 402c812191a7..c89e3aa53463 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties +++ b/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties @@ -5,8 +5,9 @@ rename.to=Typo: Rename to... spelling=Spelling spellchecking.inspection.name=Typo comments.with.mistakes=Comments with mistakes -word.0.1.is.misspelled=Typo: In word '#ref' +typo.int=Typo: In word '#ref' add.0.to.dictionary=Typo: Accept ''{0}'' as correct +add.to.dictionary=Add to dictionary class.name.with.mistakes=Class name with mistakes method.name.with.mistakes=Method name with mistakes field.name.with.mistakes=Field name with mistakes From ce95b320bb844cf9c2fabf07441d8afff62f4f20 Mon Sep 17 00:00:00 2001 From: Alexey Gopachenko Date: Thu, 12 Nov 2009 13:25:05 +0300 Subject: [PATCH 08/19] typo --- .../spellchecker/inspections/SpellCheckingInspection.java | 2 +- .../intellij/spellchecker/util/SpellCheckerBundle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java index 26ef6f4abb65..6899a21c89e1 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java @@ -202,7 +202,7 @@ public class SpellCheckingInspection extends LocalInspectionTool { TextRange textRange, Collection fixes, boolean onTheFly) { //TODO: these descriptions eat LOTS of HEAP on batch run - need either to make them constant or evaluate template dynamically // ( add something like #text substitution) - final String defaultDescription = SpellCheckerBundle.message("typo.in"); + final String defaultDescription = SpellCheckerBundle.message("typo.in.word.ref"); final String tokenDescription = token.getDescription(); final String description = tokenDescription == null ? defaultDescription : tokenDescription; final TextRange highlightRange = TextRange.from(token.getOffset() + textRange.getStartOffset(), textRange.getLength()); diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties b/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties index c89e3aa53463..7859eea82dc7 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties +++ b/plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties @@ -5,7 +5,7 @@ rename.to=Typo: Rename to... spelling=Spelling spellchecking.inspection.name=Typo comments.with.mistakes=Comments with mistakes -typo.int=Typo: In word '#ref' +typo.in.word.ref=Typo: In word '#ref' add.0.to.dictionary=Typo: Accept ''{0}'' as correct add.to.dictionary=Add to dictionary class.name.with.mistakes=Class name with mistakes From b06445e71b99289674dae62f716cbbfbf70f44e2 Mon Sep 17 00:00:00 2001 From: Alexey Gopachenko Date: Thu, 12 Nov 2009 13:29:16 +0300 Subject: [PATCH 09/19] typo --- .../spellchecker/inspections/SpellCheckingInspection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java index 6899a21c89e1..3aa278bd53d7 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/SpellCheckingInspection.java @@ -188,7 +188,7 @@ public class SpellCheckingInspection extends LocalInspectionTool { } } - final AcceptWordAsCorrect acceptWordAsCorrect = isOnTheFly ? BATCH_ACCEPT_FIX : new AcceptWordAsCorrect(); + final AcceptWordAsCorrect acceptWordAsCorrect = isOnTheFly ? new AcceptWordAsCorrect() : BATCH_ACCEPT_FIX; fixes.add(acceptWordAsCorrect); final ProblemDescriptor problemDescriptor = createProblemDescriptor(token, holder, textRange, fixes, isOnTheFly); From d7bab6a338d91b539ed6b8ed957ca082beab9780 Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Thu, 12 Nov 2009 13:35:18 +0300 Subject: [PATCH 10/19] IDEADEV-23282 Improve Ctrl-Q color preview --- .../src/messages/XmlBundle.properties | 2 +- .../xml/util/ColorSampleLookupValue.java | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/platform/platform-resources-en/src/messages/XmlBundle.properties b/platform/platform-resources-en/src/messages/XmlBundle.properties index 0def3e305bcc..da7f5bcc334a 100644 --- a/platform/platform-resources-en/src/messages/XmlBundle.properties +++ b/platform/platform-resources-en/src/messages/XmlBundle.properties @@ -40,7 +40,7 @@ choose.color.in.color.lookup=choose color... # color lookup color.name=Color name:\\  {0} color.rgb=Color RGB:\\  {0} -color.preview=Color preview:\\  {0} +color.preview=
Color preview:\\ {0}
xml.schema.validation.attr.not.allowed.with.ref=Attribute {0} is not allowed here when element reference is used unescaped.xml.character=Unescaped xml character unescaped.xml.character.fix.message=Escape {0} diff --git a/xml/impl/src/com/intellij/xml/util/ColorSampleLookupValue.java b/xml/impl/src/com/intellij/xml/util/ColorSampleLookupValue.java index 2864fe2cac89..79437b767dec 100644 --- a/xml/impl/src/com/intellij/xml/util/ColorSampleLookupValue.java +++ b/xml/impl/src/com/intellij/xml/util/ColorSampleLookupValue.java @@ -368,26 +368,33 @@ public class ColorSampleLookupValue implements LookupValueWithUIHint, DeferredUs final Color colorFromElement = UserColorLookup.getColorFromElement(currentElement); if (colorFromElement != null) { - final String code = Integer.toHexString(colorFromElement.getRGB()).substring(2); - final String text = currentElement.getText(); + addColorPreviewAndCodeToLookup(colorFromElement, currentElement.getText(), buf); + } + } - if (text.startsWith("#")) { - final String colorName = getColorNameForHexCode(text); + public static void addColorPreviewAndCodeToLookup(final Color color, final String value, final StringBuilder buf) { + if (color == null) return; + + final String code = Integer.toHexString(color.getRGB()).substring(2); + + if (value != null) { + if (value.startsWith("#")) { + final String colorName = getColorNameForHexCode(value); if (colorName != null) { buf.append(XmlBundle.message("color.name", colorName)).append(BR); } } else { - final String hexValue = getHexCodeForColorName(text); + final String hexValue = getHexCodeForColorName(value); if (hexValue != null) { buf.append(XmlBundle.message("color.rgb", hexValue.substring(1))).append(BR); } } - String colorBox = "   "; - - buf.append(XmlBundle.message("color.preview", colorBox)).append(BR); } + + String colorBox = "
"; + buf.append(XmlBundle.message("color.preview", colorBox)).append(BR); } } From d0f869ac59e0a2390a44e431097d221f121651fe Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 10 Nov 2009 17:30:26 +0300 Subject: [PATCH 11/19] notnull,cleanup --- .../com/intellij/pom/event/PomModelEvent.java | 1 + .../src/com/intellij/mock/MockPsiManager.java | 17 +++++++------ .../intellij/pom/core/impl/PomModelImpl.java | 3 ++- .../com/intellij/psi/impl/PsiManagerEx.java | 17 +++++++------ .../com/intellij/psi/impl/PsiManagerImpl.java | 20 +++++++++------ .../intellij/pom/xml/impl/XmlAspectImpl.java | 25 +++++++++++-------- 6 files changed, 49 insertions(+), 34 deletions(-) diff --git a/platform/lang-api/src/com/intellij/pom/event/PomModelEvent.java b/platform/lang-api/src/com/intellij/pom/event/PomModelEvent.java index e7a657b7d453..2697ed849cd6 100644 --- a/platform/lang-api/src/com/intellij/pom/event/PomModelEvent.java +++ b/platform/lang-api/src/com/intellij/pom/event/PomModelEvent.java @@ -29,6 +29,7 @@ public class PomModelEvent extends EventObject { super(source); } + @NotNull public Set getChangedAspects() { if (myChangeSets != null) { return myChangeSets.keySet(); diff --git a/platform/lang-impl/src/com/intellij/mock/MockPsiManager.java b/platform/lang-impl/src/com/intellij/mock/MockPsiManager.java index 355de602a751..fa0729b5e5ae 100644 --- a/platform/lang-impl/src/com/intellij/mock/MockPsiManager.java +++ b/platform/lang-impl/src/com/intellij/mock/MockPsiManager.java @@ -200,7 +200,7 @@ public class MockPsiManager extends PsiManagerEx { return false; } - public boolean isAssertOnFileLoading(VirtualFile file) { + public boolean isAssertOnFileLoading(@NotNull VirtualFile file) { return false; } @@ -212,6 +212,7 @@ public class MockPsiManager extends PsiManagerEx { throw new UnsupportedOperationException("physicalChange is not implemented"); // TODO } + @NotNull public ResolveCache getResolveCache() { if (myResolveCache == null) { myResolveCache = new ResolveCache(this); @@ -219,19 +220,20 @@ public class MockPsiManager extends PsiManagerEx { return myResolveCache; } - public void registerRunnableToRunOnChange(Runnable runnable) { + public void registerRunnableToRunOnChange(@NotNull Runnable runnable) { } - public void registerWeakRunnableToRunOnChange(Runnable runnable) { + public void registerWeakRunnableToRunOnChange(@NotNull Runnable runnable) { } - public void registerRunnableToRunOnAnyChange(Runnable runnable) { + public void registerRunnableToRunOnAnyChange(@NotNull Runnable runnable) { } - public void registerRunnableToRunAfterAnyChange(Runnable runnable) { + public void registerRunnableToRunAfterAnyChange(@NotNull Runnable runnable) { throw new UnsupportedOperationException("Method registerRunnableToRunAfterAnyChange is not yet implemented in " + getClass().getName()); } + @NotNull public FileManager getFileManager() { if (myMockFileManager == null) { myMockFileManager = new MockFileManager(this); @@ -239,12 +241,13 @@ public class MockPsiManager extends PsiManagerEx { return myMockFileManager; } - public void invalidateFile(final PsiFile file) { + public void invalidateFile(@NotNull final PsiFile file) { } - public void beforeChildRemoval(final PsiTreeChangeEventImpl event) { + public void beforeChildRemoval(@NotNull final PsiTreeChangeEventImpl event) { } + @NotNull public CacheManager getCacheManager() { return myCompositeCacheManager; } diff --git a/platform/lang-impl/src/com/intellij/pom/core/impl/PomModelImpl.java b/platform/lang-impl/src/com/intellij/pom/core/impl/PomModelImpl.java index 125e8f0f9f79..c446a34f3f8a 100644 --- a/platform/lang-impl/src/com/intellij/pom/core/impl/PomModelImpl.java +++ b/platform/lang-impl/src/com/intellij/pom/core/impl/PomModelImpl.java @@ -43,9 +43,10 @@ import com.intellij.psi.impl.source.tree.TreeElement; import com.intellij.psi.impl.source.tree.TreeUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.Stack; import com.intellij.util.lang.CompoundRuntimeException; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.*; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java index b3232e34c8c3..33aee0ed8398 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java @@ -32,28 +32,31 @@ import java.util.List; public abstract class PsiManagerEx extends PsiManager { public abstract boolean isBatchFilesProcessingMode(); - public abstract boolean isAssertOnFileLoading(VirtualFile file); + public abstract boolean isAssertOnFileLoading(@NotNull VirtualFile file); public abstract void nonPhysicalChange(); public abstract void physicalChange(); + @NotNull public abstract ResolveCache getResolveCache(); - public abstract void registerRunnableToRunOnChange(Runnable runnable); + public abstract void registerRunnableToRunOnChange(@NotNull Runnable runnable); - public abstract void registerWeakRunnableToRunOnChange(Runnable runnable); + public abstract void registerWeakRunnableToRunOnChange(@NotNull Runnable runnable); - public abstract void registerRunnableToRunOnAnyChange(Runnable runnable); + public abstract void registerRunnableToRunOnAnyChange(@NotNull Runnable runnable); - public abstract void registerRunnableToRunAfterAnyChange(Runnable runnable); + public abstract void registerRunnableToRunAfterAnyChange(@NotNull Runnable runnable); + @NotNull public abstract FileManager getFileManager(); - public abstract void invalidateFile(PsiFile file); + public abstract void invalidateFile(@NotNull PsiFile file); - public abstract void beforeChildRemoval(final PsiTreeChangeEventImpl event); + public abstract void beforeChildRemoval(@NotNull PsiTreeChangeEventImpl event); + @NotNull public abstract CacheManager getCacheManager(); @NotNull diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java index 45cd4492b405..303509152983 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java @@ -42,7 +42,6 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileFilter; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; -import static com.intellij.psi.impl.PsiTreeChangeEventImpl.PsiEventType.*; import com.intellij.psi.impl.cache.CacheManager; import com.intellij.psi.impl.cache.impl.CacheUtil; import com.intellij.psi.impl.cache.impl.CompositeCacheManager; @@ -70,6 +69,8 @@ import java.lang.ref.WeakReference; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; +import static com.intellij.psi.impl.PsiTreeChangeEventImpl.PsiEventType.*; + public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.PsiManagerImpl"); @@ -306,7 +307,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { myAssertOnFileLoadingFilter = filter; } - public boolean isAssertOnFileLoading(VirtualFile file) { + public boolean isAssertOnFileLoading(@NotNull VirtualFile file) { return myAssertOnFileLoadingFilter.accept(file); } @@ -315,10 +316,12 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { return myProject; } + @NotNull public FileManager getFileManager() { return myFileManager; } + @NotNull public CacheManager getCacheManager() { if (myIsDisposed) { LOG.error("Project is already disposed."); @@ -331,6 +334,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { return CodeStyleManager.getInstance(myProject); } + @NotNull public ResolveCache getResolveCache() { ProgressManager.checkCanceled(); // We hope this method is being called often enough to cancel daemon processes smoothly return myResolveCache; @@ -389,7 +393,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { } - public void invalidateFile(PsiFile file) { + public void invalidateFile(@NotNull PsiFile file) { if (myIsDisposed) { LOG.error("Disposed PsiManager calls invalidateFile!"); } @@ -431,7 +435,7 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { fireEvent(event); } - public void beforeChildRemoval(PsiTreeChangeEventImpl event) { + public void beforeChildRemoval(@NotNull PsiTreeChangeEventImpl event) { event.setCode(BEFORE_CHILD_REMOVAL); if (LOG.isDebugEnabled()) { LOG.debug( @@ -649,19 +653,19 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { } } - public void registerRunnableToRunOnChange(Runnable runnable) { + public void registerRunnableToRunOnChange(@NotNull Runnable runnable) { myRunnablesOnChange.add(runnable); } - public void registerWeakRunnableToRunOnChange(Runnable runnable) { + public void registerWeakRunnableToRunOnChange(@NotNull Runnable runnable) { myWeakRunnablesOnChange.add(new WeakReference(runnable)); } - public void registerRunnableToRunOnAnyChange(Runnable runnable) { // includes non-physical changes + public void registerRunnableToRunOnAnyChange(@NotNull Runnable runnable) { // includes non-physical changes myRunnablesOnAnyChange.add(runnable); } - public void registerRunnableToRunAfterAnyChange(Runnable runnable) { // includes non-physical changes + public void registerRunnableToRunAfterAnyChange(@NotNull Runnable runnable) { // includes non-physical changes myRunnablesAfterAnyChange.add(runnable); } diff --git a/xml/impl/src/com/intellij/pom/xml/impl/XmlAspectImpl.java b/xml/impl/src/com/intellij/pom/xml/impl/XmlAspectImpl.java index a92f6023c5e9..6249e859d98a 100644 --- a/xml/impl/src/com/intellij/pom/xml/impl/XmlAspectImpl.java +++ b/xml/impl/src/com/intellij/pom/xml/impl/XmlAspectImpl.java @@ -61,8 +61,7 @@ public class XmlAspectImpl implements XmlAspect { final ASTNode[] changedElements = changeSet.getChangedElements(); final CharTable table = ((FileElement)changeSet.getRootElement()).getCharTable(); - for (int i = 0; i < changedElements.length; i++) { - ASTNode changedElement = changedElements[i]; + for (ASTNode changedElement : changedElements) { TreeChange changesByElement = changeSet.getChangesByElement(changedElement); PsiElement psiElement = null; while (changedElement != null && (psiElement = changedElement.getPsi()) == null) { @@ -73,12 +72,13 @@ public class XmlAspectImpl implements XmlAspect { changesByElement.addChange(changedElement, changeInfo); changedElement = parent; } - if(changedElement == null) continue; + if (changedElement == null) continue; final TreeChange finalChangedElement = changesByElement; psiElement.accept(new XmlElementVisitor() { TreeChange myChange = finalChangedElement; - @Override public void visitElement(PsiElement element) { + @Override + public void visitElement(PsiElement element) { final ASTNode child = element.getNode(); final ASTNode treeParent = child.getTreeParent(); if (treeParent == null) return; @@ -92,12 +92,12 @@ public class XmlAspectImpl implements XmlAspect { parent.accept(this); } - @Override public void visitXmlAttribute(XmlAttribute attribute) { + @Override + public void visitXmlAttribute(XmlAttribute attribute) { final ASTNode[] affectedChildren = myChange.getAffectedChildren(); String oldName = null; String oldValue = null; - for (int j = 0; j < affectedChildren.length; j++) { - final ASTNode treeElement = affectedChildren[j]; + for (final ASTNode treeElement : affectedChildren) { final ChangeInfo changeByChild = myChange.getChangeByChild(treeElement); final int changeType = changeByChild.getChangeType(); if (treeElement.getElementType() == XmlTokenType.XML_NAME) { @@ -129,7 +129,8 @@ public class XmlAspectImpl implements XmlAspect { } } - @Override public void visitXmlTag(XmlTag tag) { + @Override + public void visitXmlTag(XmlTag tag) { ASTNode[] affectedChildren = shortenChange(myChange.getAffectedChildren(), changeSet); for (final ASTNode treeElement : affectedChildren) { @@ -164,7 +165,7 @@ public class XmlAspectImpl implements XmlAspect { switch (changeType) { case ChangeInfo.ADD: - xmlChangeSet.add(new XmlTagChildAddImpl(tag, (XmlTagChild) element)); + xmlChangeSet.add(new XmlTagChildAddImpl(tag, (XmlTagChild)element)); break; case ChangeInfo.REMOVED: treeElement.putUserData(CharTable.CHAR_TABLE_KEY, table); @@ -186,12 +187,14 @@ public class XmlAspectImpl implements XmlAspect { } } - @Override public void visitXmlDocument(XmlDocument document) { + @Override + public void visitXmlDocument(XmlDocument document) { xmlChangeSet.clear(); xmlChangeSet.add(new XmlDocumentChangedImpl(document)); } - @Override public void visitFile(PsiFile file) { + @Override + public void visitFile(PsiFile file) { final XmlDocument document = ((XmlFile)file).getDocument(); if (document != null) { From d55c0365cf991ffcddb6de1a8e4ec9f4054b4133 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 10 Nov 2009 17:31:00 +0300 Subject: [PATCH 12/19] cleanup --- .../ide/util/gotoByName/ChooseByNameBase.java | 37 +++++++------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java index 4effb07d9ee2..99ded366c539 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ChooseByNameBase.java @@ -96,7 +96,7 @@ public abstract class ChooseByNameBase{ private final ListUpdater myListUpdater = new ListUpdater(); - private boolean myListIsUpToDate = false; + private volatile boolean myListIsUpToDate = false; protected boolean myDisposedFlag = false; private ActionCallback myPosponedOkAction; @@ -141,13 +141,6 @@ public abstract class ChooseByNameBase{ myContext = new WeakReference(context); } - /** - * @return get tool area - */ - public JComponent getToolArea() { - return myToolArea; - } - /** * Set tool area. The method may be called only before invoke. * @param toolArea a tool area component @@ -167,10 +160,6 @@ public abstract class ChooseByNameBase{ JBPopup myHint = null; boolean myFocusRequested = false; - JPanelProvider(LayoutManager mgr) { - super(mgr); - } - JPanelProvider() { } @@ -607,11 +596,12 @@ public abstract class ChooseByNameBase{ private final Object myRebuildMutex = new Object (); protected void rebuildList(final int pos, final int delay, final Runnable postRunnable, final ModalityState modalityState) { + ApplicationManager.getApplication().assertIsDispatchThread(); myListIsUpToDate = false; myAlarm.cancelAllRequests(); myListUpdater.cancelAll(); - tryToCancel(); + cancelCalcElementsThread(); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { final String text = myTextField.getText(); @@ -643,10 +633,9 @@ public abstract class ChooseByNameBase{ } }; - tryToCancel(); + cancelCalcElementsThread(); - myCalcElementsThread = new CalcElementsThread(text, myCheckBox.isSelected(), callback, modalityState); - myCalcElementsThread.setCanCancel(postRunnable == null); + myCalcElementsThread = new CalcElementsThread(text, myCheckBox.isSelected(), callback, modalityState, postRunnable == null); ApplicationManager.getApplication().executeOnPooledThread(myCalcElementsThread); } }; @@ -661,7 +650,7 @@ public abstract class ChooseByNameBase{ }, modalityState); } - private void tryToCancel() { + private void cancelCalcElementsThread() { if (myCalcElementsThread != null) { myCalcElementsThread.cancel(); myCalcElementsThread = null; @@ -743,6 +732,7 @@ public abstract class ChooseByNameBase{ return bestPosition; } + @NonNls protected String statisticsContext() { return "choose_by_name#"+myModel.getPromptText()+"#"+ myCheckBox.isSelected() + "#" + myTextField.getText(); } @@ -1053,13 +1043,14 @@ public abstract class ChooseByNameBase{ private Set myElements = null; private volatile boolean myCancelled = false; - private boolean myCanCancel = true; + private final boolean myCanCancel; - private CalcElementsThread(String pattern, boolean checkboxState, CalcElementsCallback callback, ModalityState modalityState) { + private CalcElementsThread(String pattern, boolean checkboxState, CalcElementsCallback callback, ModalityState modalityState, boolean canCancel) { myPattern = pattern; myCheckboxState = checkboxState; myCallback = callback; myModalityState = modalityState; + myCanCancel = canCancel; } private final Alarm myShowCardAlarm = new Alarm(); @@ -1073,7 +1064,9 @@ public abstract class ChooseByNameBase{ ensureNamesLoaded(myCheckboxState); addElementsByPattern(elements, myPattern); for (Object elem : elements) { - if (myCancelled) break; + if (myCancelled) { + break; + } if (elem instanceof PsiElement) { final PsiElement psiElement = (PsiElement)elem; psiElement.isWritable(); // That will cache writable flag in VirtualFile. Taking the action here makes it canceleable. @@ -1121,10 +1114,6 @@ public abstract class ChooseByNameBase{ }, delay, myModalityState); } - public void setCanCancel(boolean canCancel) { - myCanCancel = canCancel; - } - private void addElementsByPattern(Set elementsArray, String pattern) { String namePattern = getNamePattern(pattern); String qualifierPattern = getQualifierPattern(pattern); From bfedfc65df042653222ff25156dd4e320fbc2c6f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 13:15:53 +0300 Subject: [PATCH 13/19] subtle NPE in injected: for all isPhysical() calls wait for injected PSI being treeMerged --- .../injected/editor/EditorWindow.java | 25 ++++++++++--------- .../injected/InjectedFileViewProvider.java | 24 ++++++++++++++---- .../tree/injected/MultiHostRegistrarImpl.java | 21 +++++++--------- 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java index 46058099b351..744750164e2d 100644 --- a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java +++ b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java @@ -69,18 +69,22 @@ public class EditorWindow implements EditorEx, UserDataHolderEx { public static Editor create(@NotNull final DocumentWindowImpl documentRange, @NotNull final EditorImpl editor, @NotNull final PsiFile injectedFile) { assert documentRange.isValid(); assert injectedFile.isValid(); - for (EditorWindow editorWindow : allEditors) { - if (editorWindow.getDocument() == documentRange && editorWindow.getDelegate() == editor) { - editorWindow.myInjectedFile = injectedFile; - if (editorWindow.isValid()) { - return editorWindow; + EditorWindow window; + synchronized (allEditors) { + for (EditorWindow editorWindow : allEditors) { + if (editorWindow.getDocument() == documentRange && editorWindow.getDelegate() == editor) { + editorWindow.myInjectedFile = injectedFile; + if (editorWindow.isValid()) { + return editorWindow; + } + } + if (editorWindow.getDocument().areRangesEqual(documentRange)) { + int i = 0; } } - if (editorWindow.getDocument().areRangesEqual(documentRange)) { - int i = 0; - } + window = new EditorWindow(documentRange, editor, injectedFile, documentRange.isOneLine()); + allEditors.add(window); } - EditorWindow window = new EditorWindow(documentRange, editor, injectedFile, documentRange.isOneLine()); assert window.isValid(); return window; } @@ -94,9 +98,6 @@ public class EditorWindow implements EditorEx, UserDataHolderEx { mySelectionModelDelegate = new SelectionModelWindow(myDelegate, myDocumentWindow,this); myMarkupModelDelegate = new MarkupModelWindow((MarkupModelEx)myDelegate.getMarkupModel(), myDocumentWindow); myFoldingModelWindow = new FoldingModelWindow((FoldingModelEx)delegate.getFoldingModel(), documentWindow); - - //disposeInvalidEditors(); - allEditors.add(this); } public static void disposeInvalidEditors() { diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java index 8c7aae50b26a..21b997b27ff4 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java @@ -37,11 +37,12 @@ import java.util.List; * @author cdr */ class InjectedFileViewProvider extends SingleRootFileViewProvider { + private final Object LOCK = new Object(); private Place myShreds; private Project myProject; private final Object myLock = new Object(); private final DocumentWindow myDocumentWindow; - private volatile boolean physical = true; + private boolean physical = true; InjectedFileViewProvider(@NotNull PsiManager psiManager, @NotNull VirtualFileWindow virtualFile, @@ -141,15 +142,28 @@ class InjectedFileViewProvider extends SingleRootFileViewProvider { @Override public boolean isEventSystemEnabled() { - return physical; + if (LOCK == null) return true; // hack to avoid NPE when this method called from super class constructor + synchronized (LOCK) { + return physical; + } } @Override public boolean isPhysical() { - return physical; + synchronized (LOCK) { + return physical; + } } - public void setPhysical(boolean physical) { - this.physical = physical; + public void performNonPhysically(Runnable runnable) { + synchronized (LOCK) { + physical = false; + try { + runnable.run(); + } + finally { + physical = true; + } + } } } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java index c9c16028ab26..29436af56b84 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java @@ -366,7 +366,7 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar { for (int i = injected.size()-1; i>=0; i--) { DocumentWindowImpl oldDocument = (DocumentWindowImpl)injected.get(i); - PsiFileImpl oldFile = (PsiFileImpl)documentManager.getCachedPsiFile(oldDocument); + final PsiFileImpl oldFile = (PsiFileImpl)documentManager.getCachedPsiFile(oldDocument); FileViewProvider viewProvider; if (oldFile == null || @@ -380,8 +380,8 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar { } InjectedFileViewProvider oldViewProvider = (InjectedFileViewProvider)viewProvider; - ASTNode injectedNode = injectedPsi.getNode(); - ASTNode oldFileNode = oldFile.getNode(); + final ASTNode injectedNode = injectedPsi.getNode(); + final ASTNode oldFileNode = oldFile.getNode(); assert injectedNode != null : "New node is null"; assert oldFileNode != null : "Old node is null"; if (oldDocument.areRangesEqual(documentWindow)) { @@ -392,15 +392,12 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar { } oldFile.putUserData(FileContextUtil.INJECTED_IN_ELEMENT, injectedPsi.getUserData(FileContextUtil.INJECTED_IN_ELEMENT)); - try { - assert shreds.isValid(); - oldViewProvider.setPhysical(false); //do not fire events now - BlockSupportImpl.mergeTrees(oldFile, oldFileNode, injectedNode); - oldFile.subtreeChanged(); - } - finally { - oldViewProvider.setPhysical(true); - } + assert shreds.isValid(); + oldViewProvider.performNonPhysically(new Runnable() { + public void run() { + BlockSupportImpl.mergeTrees(oldFile, oldFileNode, injectedNode); + } + }); assert shreds.isValid(); return oldFile; From 2aaa8edef94dd1a8d415e0fba03496ff9a134dda Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 14:11:54 +0300 Subject: [PATCH 14/19] cleanup --- .../com/intellij/facet/impl/ui/FacetEditorImpl.java | 5 +---- .../intellij/openapi/projectRoots/ui/SdkEditor.java | 5 +---- .../roots/ui/configuration/ClasspathEditor.java | 5 ++--- .../options/colors/ColorAndFontOptions.java | 5 +---- .../impl/AllFileTemplatesConfigurable.java | 5 +---- .../com/intellij/openapi/roots/impl/RootModelImpl.java | 5 +---- .../src/com/intellij/openapi/ui/LoadingDecorator.java | 5 +---- .../src/com/intellij/ui/tabs/impl/JBTabsTest.java | 6 ++---- .../openapi/application/impl/ApplicationImpl.java | 10 +--------- .../openapi/diff/impl/mergeTool/MergeTool.java | 6 ++---- .../src/com/intellij/testFramework/UsefulTestCase.java | 5 +---- 11 files changed, 14 insertions(+), 48 deletions(-) diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetEditorImpl.java b/java/idea-ui/src/com/intellij/facet/impl/ui/FacetEditorImpl.java index bf7bc13dd854..78af4b89e87b 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/FacetEditorImpl.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/FacetEditorImpl.java @@ -49,10 +49,7 @@ public class FacetEditorImpl extends UnnamedConfigurableGroup implements Unnamed private final FacetEditorContext myContext; private final Set myVisitedTabs = new HashSet(); private int mySelectedTabIndex = 0; - private Disposable myDisposable = new Disposable() { - public void dispose() { - } - }; + private final Disposable myDisposable = Disposer.newDisposable(); public FacetEditorImpl(final FacetEditorContext context, final FacetConfiguration configuration) { myContext = context; diff --git a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java index 524ff348127f..3896faf53c4e 100644 --- a/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/projectRoots/ui/SdkEditor.java @@ -83,10 +83,7 @@ public class SdkEditor implements Configurable, Place.Navigator { private String myInitialPath; private final History myHistory; - private Disposable myDisposable = new Disposable() { - public void dispose() { - } - }; + private Disposable myDisposable = Disposer.newDisposable(); public SdkEditor(NotifiableSdkModel sdkModel, History history, final ProjectJdkImpl sdk) { mySdkModel = sdkModel; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java index 1ee12dd5e8df..237fbcd40c41 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathEditor.java @@ -26,6 +26,7 @@ import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.roots.OrderEntry; import com.intellij.openapi.roots.impl.storage.ClasspathStorage; import com.intellij.openapi.roots.impl.storage.ClasspathStorageProvider; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.OrderPanelListener; import org.jetbrains.annotations.NotNull; @@ -52,9 +53,7 @@ public class ClasspathEditor extends ModuleElementsEditor implements ModuleRootL public ClasspathEditor(final ModuleConfigurationState state) { super(state); - final Disposable disposable = new Disposable() { - public void dispose() {} - }; + final Disposable disposable = Disposer.newDisposable(); state.getProject().getMessageBus().connect(disposable).subscribe(ProjectTopics.PROJECT_ROOTS, this); registerDisposable(disposable); diff --git a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java index 2391a4777a01..ed4d563790f9 100644 --- a/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java +++ b/platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java @@ -87,10 +87,7 @@ public class ColorAndFontOptions extends SearchableConfigurable.Parent.Abstract private boolean myApplyCompleted = false; private boolean myDisposeCompleted = false; - private final Disposable myDisposable = new Disposable() { - public void dispose() { - } - }; + private final Disposable myDisposable = Disposer.newDisposable(); public boolean isModified() { boolean listModified = isSchemeListModified(); diff --git a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java index 4052aeefe251..945bb7f0ca43 100644 --- a/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java +++ b/platform/lang-impl/src/com/intellij/ide/fileTemplates/impl/AllFileTemplatesConfigurable.java @@ -165,10 +165,7 @@ public class AllFileTemplatesConfigurable implements SearchableConfigurable { } public JComponent createComponent() { - myUIDisposable = new Disposable() { - public void dispose() { - } - }; + myUIDisposable = Disposer.newDisposable(); myTemplatesList = new FileTemplateTabAsList(TEMPLATES_TITLE) { public void onTemplateSelected() { onListSelectionChanged(); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java index d7c8ea7966e6..6f178d0b70b4 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/RootModelImpl.java @@ -87,10 +87,7 @@ public class RootModelImpl implements ModifiableRootModel { @NonNls private static final String ROOT_ELEMENT = "root"; private final ProjectRootManagerImpl myProjectRootManager; // have to register all child disposables using this fake object since all clients call just ModifiableModel.dispose() - private final Disposable myDisposable = new Disposable() { - public void dispose() { - } - }; + private final Disposable myDisposable = Disposer.newDisposable(); RootModelImpl(ModuleRootManagerImpl moduleRootManager, ProjectRootManagerImpl projectRootManager, VirtualFilePointerManager filePointerManager) { myModuleRootManager = moduleRootManager; diff --git a/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.java b/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.java index f744385e69ba..c5d9f288ed25 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/LoadingDecorator.java @@ -234,10 +234,7 @@ public class LoadingDecorator { final JPanel content = new JPanel(new BorderLayout()); - final LoadingDecorator loadingTree = new LoadingDecorator(new JComboBox(), new Disposable() { - public void dispose() { - } - }, -1); + final LoadingDecorator loadingTree = new LoadingDecorator(new JComboBox(), Disposer.newDisposable(), -1); content.add(loadingTree.getComponent(), BorderLayout.CENTER); diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsTest.java b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsTest.java index ad214134718e..ddf1a0014e19 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsTest.java +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsTest.java @@ -17,6 +17,7 @@ package com.intellij.ui.tabs.impl; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.IconLoader; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.tabs.JBTabsPosition; @@ -43,10 +44,7 @@ public class JBTabsTest { final JFrame frame = new JFrame(); frame.getContentPane().setLayout(new BorderLayout(0, 0)); final int[] count = new int[1]; - final JBTabsImpl tabs = new JBTabsImpl(null, null, null, new Disposable() { - public void dispose() { - } - }); + final JBTabsImpl tabs = new JBTabsImpl(null, null, null, Disposer.newDisposable()); tabs.setTestMode(true); diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 5121ae474673..3d8504e5d5f7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -195,15 +195,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application } if (!isUnitTestMode && !isHeadless) { - Disposer.register(this, new Disposable() { - public void dispose() { - } - - @Override - public String toString() { - return "[ui]"; - } - }, "ui"); + Disposer.register(this, Disposer.newDisposable(), "ui"); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeTool.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeTool.java index 7a81ca08cd79..9cca40be277a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/mergeTool/MergeTool.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diff.impl.FrameWrapper; import com.intellij.openapi.diff.impl.incrementalMerge.ui.MergePanel2; import com.intellij.openapi.ui.DialogBuilder; import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.Disposer; public class MergeTool implements DiffTool { public void show(DiffRequest data) { @@ -47,10 +48,7 @@ public class MergeTool implements DiffTool { DialogBuilder builder = new DialogBuilder(data.getProject()); builder.setDimensionServiceKey(data.getGroupKey()); builder.setTitle(data.getWindowTitle()); - Disposable parent = new Disposable() { - public void dispose() { - } - }; + Disposable parent = Disposer.newDisposable(); builder.addDisposable(parent); MergePanel2 mergePanel = createMergeComponent(data, builder, parent); builder.setCenterPanel(mergePanel.getComponent()); diff --git a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java index 50722c7febaf..fbd95b004b39 100644 --- a/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/UsefulTestCase.java @@ -55,10 +55,7 @@ import java.util.*; * @author peter */ public abstract class UsefulTestCase extends TestCase { - protected final Disposable myTestRootDisposable = new Disposable() { - public void dispose() { - } - }; + protected final Disposable myTestRootDisposable = Disposer.newDisposable(); private static final String DEFAULT_SETTINGS_EXTERNALIZED; private static CodeStyleSettings myOldCodeStyleSettings; From f6e9c5662806cfe4983d16595dbe1dadcea40211 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 14:41:02 +0300 Subject: [PATCH 15/19] cleanup: toArray() -> toStringArray --- .../intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java | 3 ++- RegExpSupport/test/test/RegExpCompletionTest.java | 5 +++-- .../impl/src/com/intellij/compiler/RmicSettings.java | 3 ++- .../intellij/compiler/ant/PropertyFileGeneratorImpl.java | 3 ++- .../intellij/compiler/impl/rmiCompiler/RmicCompiler.java | 3 ++- .../src/com/intellij/compiler/ant/ChunkBuildExtension.java | 3 ++- .../codeInsight/completion/JavaCompletionUtil.java | 4 ++-- .../intention/impl/CreateFieldFromParameterAction.java | 3 ++- .../template/macro/SuggestVariableNameMacro.java | 3 ++- .../src/com/intellij/psi/impl/compiled/ClsStubBuilder.java | 2 +- .../psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java | 3 ++- .../codeInsight/daemon/impl/TrafficLightRenderer.java | 5 +++-- .../profile/codeInspection/ui/actions/AddScopeAction.java | 4 ++-- .../refactoring/safeDelete/SafeDeleteProcessor.java | 3 ++- .../src/com/intellij/refactoring/ui/ConflictsDialog.java | 2 +- .../intellij/ui/tabs/FileColorConfigurationEditDialog.java | 3 ++- .../com/intellij/dependencies/SearchCyclesTest.java | 2 +- .../intellij/openapi/fileChooser/FileSaverDescriptor.java | 3 ++- .../src/com/intellij/openapi/fileTypes/NativeFileType.java | 3 ++- .../openapi/vfs/impl/VirtualFilePointerContainerImpl.java | 2 +- .../com/intellij/openapi/vfs/impl/win32/Win32Kernel.java | 3 ++- .../openapi/vfs/newvfs/persistent/PersistentFS.java | 2 +- .../src/com/intellij/usages/impl/UsageViewManagerImpl.java | 3 ++- .../src/com/intellij/openapi/util/text/LineTokenizer.java | 2 +- platform/util/src/com/intellij/util/EnvironmentUtil.java | 2 +- .../vcs-api/src/com/intellij/openapi/vcs/VcsException.java | 3 ++- .../vcs/changes/committed/ColumnFilteringStrategy.java | 3 ++- .../changes/conflicts/ChangelistConflictConfigurable.java | 3 ++- .../openapi/vcs/changes/ui/IgnoreUnversionedDialog.java | 3 ++- .../src/com/intellij/openapi/vcs/ex/RangesBuilder.java | 3 ++- .../plugins/intelliLang/inject/InjectedLanguage.java | 3 ++- .../pattern/compiler/impl/PatternValidationCompiler.java | 2 +- .../com/intellij/lang/ant/config/execution/AntMessage.java | 3 ++- .../lang/ant/config/impl/ExecuteCompositeTargetEvent.java | 3 ++- .../com/intellij/lang/ant/psi/impl/AntPropertyImpl.java | 4 ++-- .../cvsSupport2/application/CvsEntriesManager.java | 3 ++- .../src/inspections/RegistrationProblemsInspection.java | 3 ++- .../src/inspections/quickfix/CreateHtmlDescriptionFix.java | 3 ++- plugins/devkit/src/projectRoots/IdeaJdk.java | 4 ++-- plugins/git4idea/src/git4idea/config/GitVcsSettings.java | 3 ++- plugins/git4idea/src/git4idea/merge/GitPullDialog.java | 3 ++- .../plugins/groovy/actions/GroovyTemplatesFactory.java | 3 ++- .../generate/constructors/ConstructorGenerateHandler.java | 3 ++- .../plugins/groovy/annotator/intentions/QuickfixUtil.java | 5 +++-- .../annotator/intentions/dynamic/DynamicManagerImpl.java | 3 ++- .../plugins/groovy/debugger/GroovyCodeFragmentFactory.java | 5 +++-- .../plugins/groovy/doc/GroovyDocGenerationPanel.java | 3 ++- .../groovy/gotoclass/GroovyGoToSymbolContributor.java | 3 ++- .../groovy/lang/documentation/GroovyPresentationUtil.java | 3 ++- .../expressions/CompleteReferenceExpression.java | 2 +- .../psi/impl/statements/typedef/GrTypeDefinitionImpl.java | 4 ++-- .../lang/psi/impl/synthetic/GrDynamicImplicitMethod.java | 5 +++-- .../groovy/lang/psi/impl/types/GrTypeParameterImpl.java | 3 ++- .../psi/stubs/elements/GrTypeDefinitionElementType.java | 3 ++- .../lang/resolve/noncode/ImmutableAnnotationProcessor.java | 4 ++-- .../plugins/groovy/lang/stubs/GroovyShortNamesCache.java | 6 +++--- .../groovy/refactoring/GroovyNameSuggestionUtil.java | 3 ++- .../refactoring/extractMethod/ExtractMethodUtil.java | 2 +- .../org/jetbrains/idea/maven/importing/FacetImporter.java | 3 ++- .../idea/maven/importing/MavenProjectImporter.java | 3 ++- .../idea/maven/utils/MavenGotoSettingsFileContibutor.java | 3 ++- .../org/jetbrains/idea/maven/MavenImportingTestCase.java | 3 ++- plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java | 4 ++-- .../org/jetbrains/idea/svn/actions/MarkResolvedAction.java | 3 ++- .../testng/configuration/browser/GroupList.java | 3 ++- .../testng/inspection/DependsOnGroupsInspection.java | 3 ++- .../intellij/uiDesigner/inspections/AssignMnemonicFix.java | 3 ++- .../propertyInspector/editors/BindingEditor.java | 7 ++++--- .../editors/string/StringEditorDialog.java | 3 ++- .../uiDesigner/radComponents/LayoutManagerRegistry.java | 3 ++- .../intellij/uiDesigner/radComponents/RadButtonGroup.java | 3 ++- .../intellij/uiDesigner/snapShooter/SnapShooterDaemon.java | 3 ++- .../src/com/intellij/uiDesigner/wizard/Generator.java | 3 ++- .../lang/xpath/xslt/impl/XsltChooseByNameContributor.java | 3 ++- .../intellij/plugins/xpathView/ui/AddNamespaceDialog.java | 5 +++-- .../impl/analysis/CreateNSDeclarationIntentionFix.java | 2 +- .../xmlbeans/GenerateInstanceDocumentFromSchemaAction.java | 3 ++- .../xmlbeans/GenerateInstanceDocumentFromSchemaDialog.java | 3 ++- .../xmlbeans/GenerateSchemaFromInstanceDocumentAction.java | 3 ++- .../xmlbeans/GenerateSchemaFromInstanceDocumentDialog.java | 3 ++- .../xml/impl/schema/XmlAttributeDescriptorImpl.java | 2 +- xml/openapi/src/com/intellij/xml/util/XmlTagUtil.java | 3 ++- 82 files changed, 161 insertions(+), 99 deletions(-) diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java index 6cb87dccc707..b4b9cfe87dd1 100644 --- a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java +++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpPropertyImpl.java @@ -22,6 +22,7 @@ import com.intellij.lang.ASTNode; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; +import com.intellij.util.ArrayUtil; import com.intellij.util.Icons; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Nullable; @@ -188,7 +189,7 @@ public class RegExpPropertyImpl extends RegExpElementImpl implements RegExpPrope } } } - UNICODE_BLOCKS = unicodeBlocks.toArray(new String[unicodeBlocks.size()]); + UNICODE_BLOCKS = ArrayUtil.toStringArray(unicodeBlocks); } public static final String[][] PROPERTY_NAMES = { { "Cn", "UNASSIGNED" }, diff --git a/RegExpSupport/test/test/RegExpCompletionTest.java b/RegExpSupport/test/test/RegExpCompletionTest.java index d0b0a2e2c7e1..c58c1ab94282 100644 --- a/RegExpSupport/test/test/RegExpCompletionTest.java +++ b/RegExpSupport/test/test/RegExpCompletionTest.java @@ -17,6 +17,7 @@ package test; import com.intellij.openapi.application.PathManager; import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; +import com.intellij.util.ArrayUtil; import org.intellij.lang.regexp.psi.impl.RegExpPropertyImpl; import java.io.File; @@ -54,7 +55,7 @@ public class RegExpCompletionTest extends CodeInsightFixtureTestCase { for (String[] stringArray : RegExpPropertyImpl.PROPERTY_NAMES) { nameList.add("p{" + stringArray[0] + "}"); } - myFixture.testCompletionVariants(getInputDataFileName(getTestName(true)), nameList.toArray(new String[nameList.size()])); + myFixture.testCompletionVariants(getInputDataFileName(getTestName(true)), ArrayUtil.toStringArray(nameList)); } public void testPropertyVariants() throws Throwable { @@ -62,7 +63,7 @@ public class RegExpCompletionTest extends CodeInsightFixtureTestCase { for (String[] stringArray : RegExpPropertyImpl.PROPERTY_NAMES) { nameList.add("{" + stringArray[0] + "}"); } - myFixture.testCompletionVariants(getInputDataFileName(getTestName(true)), nameList.toArray(new String[nameList.size()])); + myFixture.testCompletionVariants(getInputDataFileName(getTestName(true)), ArrayUtil.toStringArray(nameList)); } public void testPropertyAlpha() throws Throwable { diff --git a/java/compiler/impl/src/com/intellij/compiler/RmicSettings.java b/java/compiler/impl/src/com/intellij/compiler/RmicSettings.java index 244e4b68b506..adc68d0b3e93 100644 --- a/java/compiler/impl/src/com/intellij/compiler/RmicSettings.java +++ b/java/compiler/impl/src/com/intellij/compiler/RmicSettings.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.DefaultJDOMExternalizer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.util.ArrayUtil; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -91,7 +92,7 @@ public class RmicSettings implements PersistentStateComponent { } options.add(token); } - return options.toArray(new String[options.size()]); + return ArrayUtil.toStringArray(options); } public static RmicSettings getInstance(Project project) { diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/PropertyFileGeneratorImpl.java b/java/compiler/impl/src/com/intellij/compiler/ant/PropertyFileGeneratorImpl.java index e83ae3bdd6aa..ab93b32dbe35 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/PropertyFileGeneratorImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/PropertyFileGeneratorImpl.java @@ -22,6 +22,7 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; +import com.intellij.util.ArrayUtil; import java.io.File; import java.io.IOException; @@ -54,7 +55,7 @@ public class PropertyFileGeneratorImpl extends PropertyFileGenerator { final PathMacros pathMacros = PathMacros.getInstance(); final Set macroNamesSet = pathMacros.getUserMacroNames(); if (macroNamesSet.size() > 0) { - final String[] macroNames = macroNamesSet.toArray(new String[macroNamesSet.size()]); + final String[] macroNames = ArrayUtil.toStringArray(macroNamesSet); Arrays.sort(macroNames); for (final String macroName : macroNames) { addProperty(BuildProperties.getPathMacroProperty(macroName), pathMacros.getValue(macroName)); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/rmiCompiler/RmicCompiler.java b/java/compiler/impl/src/com/intellij/compiler/impl/rmiCompiler/RmicCompiler.java index 9df8e1541241..7f468f2d3da1 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/rmiCompiler/RmicCompiler.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/rmiCompiler/RmicCompiler.java @@ -39,6 +39,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.util.PathUtil; import com.intellij.util.StringBuilderSpinAllocator; import org.jetbrains.annotations.NonNls; @@ -301,7 +302,7 @@ public class RmicCompiler implements ClassPostProcessingCompiler{ for (RmicProcessingItem item : items) { commandLine.add(item.getClassQName()); } - return commandLine.toArray(new String[commandLine.size()]); + return ArrayUtil.toStringArray(commandLine); } @NotNull diff --git a/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java b/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java index 48bba0f43159..fb2592366f11 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java @@ -21,6 +21,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -76,7 +77,7 @@ public abstract class ChunkBuildExtension { if (allTargets.isEmpty()) { allTargets.add(BuildProperties.getCompileTargetName(chunk.getName())); } - return allTargets.toArray(new String[allTargets.size()]); + return ArrayUtil.toStringArray(allTargets); } public static void process(CompositeGenerator generator, ModuleChunk chunk, GenerationOptions genOptions) { 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 7dba0984fba8..b26faef44ac0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -270,7 +270,7 @@ public class JavaCompletionUtil { } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } private static void tunePreferencePolicy(final List list, final SuggestedNameInfo suggestedNameInfo) { @@ -319,7 +319,7 @@ public class JavaCompletionUtil { newSuggestions.add(suggestion); } } - return newSuggestions.toArray(new String[newSuggestions.size()]); + return ArrayUtil.toStringArray(newSuggestions); } static int getOverlap(final String propertyName, final String prefix) { diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateFieldFromParameterAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateFieldFromParameterAction.java index 724c7e531bb1..ccfb73a23796 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateFieldFromParameterAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateFieldFromParameterAction.java @@ -35,6 +35,7 @@ import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -151,7 +152,7 @@ public class CreateFieldFromParameterAction implements IntentionAction { else { namesList.add(0, defaultName); } - names = namesList.toArray(new String[namesList.size()]); + names = ArrayUtil.toStringArray(namesList); boolean myBeFinal = method.isConstructor(); CreateFieldFromParameterDialog dialog = new CreateFieldFromParameterDialog( diff --git a/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java b/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java index 9b38bcf9d35c..10cbf9420e20 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/macro/SuggestVariableNameMacro.java @@ -27,6 +27,7 @@ import com.intellij.psi.PsiVariable; import java.util.Arrays; import java.util.LinkedList; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; public class SuggestVariableNameMacro implements Macro { @@ -88,7 +89,7 @@ public class SuggestVariableNameMacro implements Macro { } } - return (String[]) namesList.toArray(new String[namesList.size()]); + return (String[])ArrayUtil.toStringArray(namesList); } } diff --git a/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java b/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java index 7ee585d4867e..fbdcfd040a32 100644 --- a/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java +++ b/java/java-impl/src/com/intellij/psi/impl/compiled/ClsStubBuilder.java @@ -424,7 +424,7 @@ public class ClsStubBuilder { } if (parsedViaGenericSignature && throwables != null) { - return throwables.toArray(new String[throwables.size()]); + return ArrayUtil.toStringArray(throwables); } else { String[] converted = ArrayUtil.newStringArray(exceptions.length); diff --git a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java index c6559dfd1a1e..0798658ad3c3 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/PsiDocMethodOrFieldRef.java @@ -31,6 +31,7 @@ import com.intellij.psi.scope.PsiScopeProcessor; import com.intellij.psi.scope.processor.FilterScopeProcessor; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.CharTable; import com.intellij.util.IncorrectOperationException; import com.intellij.util.SmartList; @@ -182,7 +183,7 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo } } - return types.toArray(new String[types.size()]); + return ArrayUtil.toStringArray(types); } @Nullable diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java index 0453391a9732..aa603832d71e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/TrafficLightRenderer.java @@ -28,6 +28,7 @@ import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiFile; import com.intellij.ui.LayeredIcon; +import com.intellij.util.ArrayUtil; import com.intellij.util.ui.EmptyIcon; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -102,8 +103,8 @@ public class TrafficLightRenderer implements ErrorStripeRenderer { } } DaemonCodeAnalyzerStatus status = new DaemonCodeAnalyzerStatus(); - status.noInspectionRoots = noInspectionRoots.isEmpty() ? null : noInspectionRoots.toArray(new String[noInspectionRoots.size()]); - status.noHighlightingRoots = noHighlightingRoots.isEmpty() ? null : noHighlightingRoots.toArray(new String[noHighlightingRoots.size()]); + status.noInspectionRoots = noInspectionRoots.isEmpty() ? null : ArrayUtil.toStringArray(noInspectionRoots); + status.noHighlightingRoots = noHighlightingRoots.isEmpty() ? null : ArrayUtil.toStringArray(noHighlightingRoots); final SeverityRegistrar severityRegistrar = SeverityRegistrar.getInstance(myProject); status.errorCount = new int[severityRegistrar.getSeveritiesCount()]; diff --git a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java index c6ac67f224f6..ccbf7926ae83 100644 --- a/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java +++ b/platform/lang-impl/src/com/intellij/profile/codeInspection/ui/actions/AddScopeAction.java @@ -34,6 +34,7 @@ import com.intellij.profile.codeInspection.ui.InspectionConfigTreeNode; import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; import com.intellij.ui.treeStructure.Tree; +import com.intellij.util.ArrayUtil; import com.intellij.util.Icons; import javax.swing.tree.DefaultTreeModel; @@ -77,8 +78,7 @@ public abstract class AddScopeAction extends AnAction { final InspectionProfileEntry tool = descriptor.getTool(); //copy final List availableScopes = getAvailableScopes(descriptor, project); - final int idx = Messages.showChooseDialog(myTree, "Scope:", "Choose Scope", - availableScopes.toArray(new String[availableScopes.size()]), availableScopes.get(0), Messages.getQuestionIcon()); + final int idx = Messages.showChooseDialog(myTree, "Scope:", "Choose Scope", ArrayUtil.toStringArray(availableScopes), availableScopes.get(0), Messages.getQuestionIcon()); if (idx == -1) return; final NamedScope chosenScope = NamedScopesHolder.getScope(project, availableScopes.get(idx)); final ScopeToolState scopeToolState = getSelectedProfile().addScope(tool, chosenScope, diff --git a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java index 1180a8d798cd..6ff420c02420 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java +++ b/platform/lang-impl/src/com/intellij/refactoring/safeDelete/SafeDeleteProcessor.java @@ -43,6 +43,7 @@ import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; import com.intellij.usageView.UsageViewUtil; import com.intellij.usages.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.Processor; import com.intellij.util.containers.HashMap; @@ -173,7 +174,7 @@ public class SafeDeleteProcessor extends BaseRefactoringProcessor { throw new ConflictsInTestsException(conflicts); } else { - UnsafeUsagesDialog dialog = new UnsafeUsagesDialog(conflicts.toArray(new String[conflicts.size()]), myProject); + UnsafeUsagesDialog dialog = new UnsafeUsagesDialog(ArrayUtil.toStringArray(conflicts), myProject); dialog.show(); if (!dialog.isOK()) { final int exitCode = dialog.getExitCode(); diff --git a/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java b/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java index 32778e1dcca5..7aac82f5272b 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/ui/ConflictsDialog.java @@ -59,7 +59,7 @@ public class ConflictsDialog extends DialogWrapper{ for (String conflict : conflictDescriptions.values()) { conflicts.add(conflict); } - myConflictDescriptions = conflicts.toArray(new String[conflicts.size()]); + myConflictDescriptions = ArrayUtil.toStringArray(conflicts); myElementConflictDescription = conflictDescriptions; setTitle(RefactoringBundle.message("problems.detected.title")); setOKButtonText(RefactoringBundle.message("continue.button")); diff --git a/platform/lang-impl/src/com/intellij/ui/tabs/FileColorConfigurationEditDialog.java b/platform/lang-impl/src/com/intellij/ui/tabs/FileColorConfigurationEditDialog.java index 0e31bccfc52a..27c596f0a4a7 100644 --- a/platform/lang-impl/src/com/intellij/ui/tabs/FileColorConfigurationEditDialog.java +++ b/platform/lang-impl/src/com/intellij/ui/tabs/FileColorConfigurationEditDialog.java @@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.NamedScopeManager; import com.intellij.psi.search.scope.packageSet.NamedScopesHolder; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.HashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -71,7 +72,7 @@ public class FileColorConfigurationEditDialog extends DialogWrapper { } } - myScopeComboBox = new JComboBox(scopeNames.toArray(new String[scopeNames.size()])); + myScopeComboBox = new JComboBox(ArrayUtil.toStringArray(scopeNames)); myScopeComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { updateOKButton(); diff --git a/platform/lang-impl/testSrc/com/intellij/dependencies/SearchCyclesTest.java b/platform/lang-impl/testSrc/com/intellij/dependencies/SearchCyclesTest.java index 5f099a8053ce..446b45909e99 100644 --- a/platform/lang-impl/testSrc/com/intellij/dependencies/SearchCyclesTest.java +++ b/platform/lang-impl/testSrc/com/intellij/dependencies/SearchCyclesTest.java @@ -151,7 +151,7 @@ public class SearchCyclesTest extends TestCase{ private static void checkResult(String[][] expected, Set> cycles){ assertEquals(expected.length, cycles.size()); for (List strings : cycles) { - assertTrue(findInMatrix(expected, strings.toArray(new String[strings.size()])) > -1); + assertTrue(findInMatrix(expected, ArrayUtil.toStringArray(strings)) > -1); } } diff --git a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileSaverDescriptor.java b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileSaverDescriptor.java index ebcf30238c78..a5b7fc9ac345 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileChooser/FileSaverDescriptor.java +++ b/platform/platform-api/src/com/intellij/openapi/fileChooser/FileSaverDescriptor.java @@ -17,6 +17,7 @@ package com.intellij.openapi.fileChooser; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -61,6 +62,6 @@ public class FileSaverDescriptor extends FileChooserDescriptor implements Clonea * @return accepted file extentions */ public String[] getFileExtentions() { - return extentions.toArray(new String[extentions.size()]); + return ArrayUtil.toStringArray(extentions); } } diff --git a/platform/platform-api/src/com/intellij/openapi/fileTypes/NativeFileType.java b/platform/platform-api/src/com/intellij/openapi/fileTypes/NativeFileType.java index 3543d1f1e907..63054d33e92a 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileTypes/NativeFileType.java +++ b/platform/platform-api/src/com/intellij/openapi/fileTypes/NativeFileType.java @@ -18,6 +18,7 @@ package com.intellij.openapi.fileTypes; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -86,7 +87,7 @@ public class NativeFileType implements FileType { } commands.add(file.getPath()); try { - Runtime.getRuntime().exec(commands.toArray(new String[commands.size()])); + Runtime.getRuntime().exec(ArrayUtil.toStringArray(commands)); } catch (IOException e) { return false; diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java index 4d8c4ca8bfd0..e516be41d7a2 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/VirtualFilePointerContainerImpl.java @@ -160,7 +160,7 @@ public class VirtualFilePointerContainerImpl implements VirtualFilePointerContai for (VirtualFilePointer smartVirtualFilePointer : myList) { result.add(smartVirtualFilePointer.getUrl()); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } private VirtualFile[] myCachedFiles; diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java index bad5d66e9c16..0b0e39dacc0a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.vfs.impl.win32; +import com.intellij.util.ArrayUtil; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.Pointer; @@ -87,7 +88,7 @@ public class Win32Kernel { finally { myKernel.FindClose(hFind); } - return list.toArray(new String[list.size()]); + return ArrayUtil.toStringArray(list); } public boolean exists(String path) { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java index 5d41c364693e..c5485df7a5b5 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java @@ -153,7 +153,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { Set allNamesSet = new LinkedHashSet((currentNames.length + delegateNames.length) * 2); allNamesSet.addAll(Arrays.asList(currentNames)); allNamesSet.addAll(Arrays.asList(delegateNames)); - names = allNamesSet.toArray(new String[allNamesSet.size()]); + names = ArrayUtil.toStringArray(allNamesSet); } final int[] childrenIds = ArrayUtil.newIntArray(names.length); diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java index c6ad2ec5445d..a3dc057b5ea0 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewManagerImpl.java @@ -43,6 +43,7 @@ import com.intellij.ui.content.Content; import com.intellij.usageView.UsageViewBundle; import com.intellij.usages.*; import com.intellij.usages.rules.PsiElementUsage; +import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import com.intellij.util.ui.RangeBlinker; import com.intellij.xml.util.XmlStringUtil; @@ -344,7 +345,7 @@ public class UsageViewManagerImpl extends UsageViewManager { } int option = Messages.showDialog(myProject, message, UsageViewBundle.message("dialog.title.information"), - titles.toArray(new String[titles.size()]), 0, Messages.getInformationIcon()); + ArrayUtil.toStringArray(titles), 0, Messages.getInformationIcon()); if (option > 0) { notFoundActions.get(option - 1).actionPerformed(new ActionEvent(this, 0, titles.get(option))); diff --git a/platform/util/src/com/intellij/openapi/util/text/LineTokenizer.java b/platform/util/src/com/intellij/openapi/util/text/LineTokenizer.java index 8948242bd840..ef44d545b40a 100644 --- a/platform/util/src/com/intellij/openapi/util/text/LineTokenizer.java +++ b/platform/util/src/com/intellij/openapi/util/text/LineTokenizer.java @@ -57,7 +57,7 @@ public class LineTokenizer { if (!skipLastEmptyLine && stringEdnsWithSeparator(tokenizer)) lines.add(""); - return lines.toArray(new String[lines.size()]); + return ArrayUtil.toStringArray(lines); } public static int calcLineCount(final CharSequence chars, final boolean skipLastEmptyLine) { diff --git a/platform/util/src/com/intellij/util/EnvironmentUtil.java b/platform/util/src/com/intellij/util/EnvironmentUtil.java index d97f519c4c8a..154dc077e339 100644 --- a/platform/util/src/com/intellij/util/EnvironmentUtil.java +++ b/platform/util/src/com/intellij/util/EnvironmentUtil.java @@ -63,7 +63,7 @@ public class EnvironmentUtil { result.add(envName + "=" + enviromentProperties.get(envName)); } } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } private static synchronized List getProcEnvironment() { diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsException.java b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsException.java index c7f08867cff1..76f54a1bc6fa 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/VcsException.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/VcsException.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import java.util.Collection; import java.util.Collections; @@ -60,7 +61,7 @@ public class VcsException extends Exception { } public String[] getMessages() { - return myMessages.toArray(new String[myMessages.size()]); + return ArrayUtil.toStringArray(myMessages); } public VcsException setIsWarning(boolean warning) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ColumnFilteringStrategy.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ColumnFilteringStrategy.java index e84760c6c36f..f97df916144a 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ColumnFilteringStrategy.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/committed/ColumnFilteringStrategy.java @@ -21,6 +21,7 @@ import com.intellij.openapi.vcs.VcsBundle; import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; import com.intellij.ui.ColoredListCellRenderer; import com.intellij.ui.SimpleTextAttributes; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -98,7 +99,7 @@ public class ColumnFilteringStrategy extends JPanel implements ChangeListFilteri values.add(myColumn.getValue(ReceivedChangeList.unwrap(changeList)).toString()); } } - final String[] valueArray = values.toArray(new String[values.size()]); + final String[] valueArray = ArrayUtil.toStringArray(values); myValueList.setModel(new AbstractListModel() { public int getSize() { return valueArray.length+1; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/conflicts/ChangelistConflictConfigurable.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/conflicts/ChangelistConflictConfigurable.java index ff0e027f2276..193241b2aa87 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/conflicts/ChangelistConflictConfigurable.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/conflicts/ChangelistConflictConfigurable.java @@ -21,6 +21,7 @@ import com.intellij.openapi.options.binding.BindControl; import com.intellij.openapi.options.binding.BindableConfigurable; import com.intellij.openapi.options.binding.ControlBinder; import com.intellij.openapi.vcs.changes.ChangeListManagerImpl; +import com.intellij.util.ArrayUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.Nls; @@ -83,7 +84,7 @@ public class ChangelistConflictConfigurable extends BindableConfigurable impleme public void reset() { super.reset(); Collection conflicts = myConflictTracker.getIgnoredConflicts(); - myIgnoredFiles.setListData(conflicts.toArray(new String[conflicts.size()])); + myIgnoredFiles.setListData(ArrayUtil.toStringArray(conflicts)); myClearButton.setEnabled(!conflicts.isEmpty()); UIUtil.setEnabled(myOptionsPanel, myEnableCheckBox.isSelected(), true); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java index c10e40e2e455..37600d93fda3 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/IgnoreUnversionedDialog.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vcs.changes.*; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.DocumentAdapter; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -171,7 +172,7 @@ public class IgnoreUnversionedDialog extends DialogWrapper { } } if (extensions.size() > 0) { - final String[] extensionArray = extensions.toArray(new String[extensions.size()]); + final String[] extensionArray = ArrayUtil.toStringArray(extensions); myIgnoreMaskTextField.setText("*." + extensionArray [0]); } else { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/RangesBuilder.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/RangesBuilder.java index c7169a0ee095..f64ea80bf5fd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/RangesBuilder.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/ex/RangesBuilder.java @@ -17,6 +17,7 @@ package com.intellij.openapi.vcs.ex; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; +import com.intellij.util.ArrayUtil; import com.intellij.util.diff.Diff; import java.util.ArrayList; @@ -67,7 +68,7 @@ public class RangesBuilder { } } - Diff.Change ch = Diff.buildChanges(upToDate.toArray(new String[upToDate.size()]), current.toArray(new String[current.size()])); + Diff.Change ch = Diff.buildChanges(ArrayUtil.toStringArray(upToDate), ArrayUtil.toStringArray(current)); while (ch != null) { diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectedLanguage.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectedLanguage.java index f6dadded8d69..4f4d4ac963a1 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectedLanguage.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/InjectedLanguage.java @@ -18,6 +18,7 @@ package org.intellij.plugins.intelliLang.inject; import com.intellij.lang.*; import com.intellij.psi.templateLanguages.TemplateLanguage; import com.intellij.openapi.fileTypes.FileTypes; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -86,7 +87,7 @@ public final class InjectedLanguage { initLanguageCache(); } final Set keys = ourLanguageCache.keySet(); - return keys.toArray(new String[keys.size()]); + return ArrayUtil.toStringArray(keys); } } diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java index 99e558004d07..d2f9f66459be 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/pattern/compiler/impl/PatternValidationCompiler.java @@ -78,7 +78,7 @@ public class PatternValidationCompiler extends AnnotationBasedInstrumentingCompi myAnnotations.put(patternAnnotation.first, null); final Set names = myAnnotations.keySet(); - return names.toArray(new String[names.size()]); + return ArrayUtil.toStringArray(names); } } diff --git a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntMessage.java b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntMessage.java index c5c9995a185b..8c7784620684 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/execution/AntMessage.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/execution/AntMessage.java @@ -16,6 +16,7 @@ package com.intellij.lang.ant.config.execution; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.util.StringBuilderSpinAllocator; import java.util.ArrayList; @@ -42,7 +43,7 @@ final class AntMessage { while (tokenizer.hasMoreTokens()) { lines.add(tokenizer.nextToken()); } - myTextLines = lines.toArray(new String[lines.size()]); + myTextLines = ArrayUtil.toStringArray(lines); } public AntMessage(AntBuildMessageView.MessageType type, int priority, String[] lines, VirtualFile file, int line, int column) { diff --git a/plugins/ant/src/com/intellij/lang/ant/config/impl/ExecuteCompositeTargetEvent.java b/plugins/ant/src/com/intellij/lang/ant/config/impl/ExecuteCompositeTargetEvent.java index 853d6c55f124..09e4e69f26c5 100644 --- a/plugins/ant/src/com/intellij/lang/ant/config/impl/ExecuteCompositeTargetEvent.java +++ b/plugins/ant/src/com/intellij/lang/ant/config/impl/ExecuteCompositeTargetEvent.java @@ -18,6 +18,7 @@ package com.intellij.lang.ant.config.impl; import com.intellij.lang.ant.config.ExecutionEvent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.InvalidDataException; +import com.intellij.util.ArrayUtil; import com.intellij.util.StringBuilderSpinAllocator; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -44,7 +45,7 @@ public final class ExecuteCompositeTargetEvent extends ExecutionEvent { while (tokenizer.hasMoreTokens()) { targetNames.add(tokenizer.nextToken().trim()); } - myTargetNames = targetNames.toArray(new String[targetNames.size()]); + myTargetNames = ArrayUtil.toStringArray(targetNames); myPresentableName = compositeName; } diff --git a/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntPropertyImpl.java b/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntPropertyImpl.java index ac373b1dd9a7..5617d379736f 100644 --- a/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntPropertyImpl.java +++ b/plugins/ant/src/com/intellij/lang/ant/psi/impl/AntPropertyImpl.java @@ -390,7 +390,7 @@ public class AntPropertyImpl extends AntTaskImpl implements AntProperty { } } } - return strings.toArray(new String[strings.size()]); + return ArrayUtil.toStringArray(strings); } finally { StringSetSpinAllocator.dispose(strings); @@ -404,7 +404,7 @@ public class AntPropertyImpl extends AntTaskImpl implements AntProperty { for (final String prefix : getAntFile().getEnvironmentPrefixes()) { strings.add(prefix + sourceName); } - return strings.toArray(new String[strings.size()]); + return ArrayUtil.toStringArray(strings); } finally { StringSetSpinAllocator.dispose(strings); diff --git a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/CvsEntriesManager.java b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/CvsEntriesManager.java index 3ef022176d4d..b4912864b40b 100644 --- a/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/CvsEntriesManager.java +++ b/plugins/cvs/cvs-plugin/src/com/intellij/cvsSupport2/application/CvsEntriesManager.java @@ -33,6 +33,7 @@ import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.vcs.FileStatusManager; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; @@ -353,7 +354,7 @@ public class CvsEntriesManager extends VirtualFileAdapter { private void ensureFilesCached() { String[] paths; synchronized (myFilesToRefresh) { - paths = myFilesToRefresh.toArray(new String[myFilesToRefresh.size()]); + paths = ArrayUtil.toStringArray(myFilesToRefresh); myFilesToRefresh.clear(); } for (String path : paths) { diff --git a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java index c6e79a0493a0..ef47c1015aa7 100644 --- a/plugins/devkit/src/inspections/RegistrationProblemsInspection.java +++ b/plugins/devkit/src/inspections/RegistrationProblemsInspection.java @@ -25,6 +25,7 @@ import com.intellij.openapi.actionSystem.AnAction; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.xml.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -301,7 +302,7 @@ public class RegistrationProblemsInspection extends DevKitInspectionBase { names.add(fqn + "#" + moduleType); } } - return names.toArray(new String[names.size()]); + return ArrayUtil.toStringArray(names); } } return new String[]{ fqn }; diff --git a/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java b/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java index 4c447de39f36..4853ac231fbe 100644 --- a/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java +++ b/plugins/devkit/src/inspections/quickfix/CreateHtmlDescriptionFix.java @@ -36,6 +36,7 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.devkit.DevKitBundle; @@ -87,7 +88,7 @@ public class CreateHtmlDescriptionFix implements LocalQuickFix, Iconable { for (VirtualFile file : roots) { options.add(file.getPresentableUrl() + File.separator + DESCRIPTIONS_FOLDER + File.separator + myFilename); } - final JList files = new JList(options.toArray(new String[options.size()])); + final JList files = new JList(ArrayUtil.toStringArray(options)); final PopupChooserBuilder builder = JBPopupFactory.getInstance().createListPopupBuilder(files); final JBPopup popup = builder.setTitle(DevKitBundle.message("select.target.location.of.description", myFilename)).setItemChoosenCallback(new Runnable() { public void run() { diff --git a/plugins/devkit/src/projectRoots/IdeaJdk.java b/plugins/devkit/src/projectRoots/IdeaJdk.java index 589af3a32359..3a20c535ca63 100644 --- a/plugins/devkit/src/projectRoots/IdeaJdk.java +++ b/plugins/devkit/src/projectRoots/IdeaJdk.java @@ -31,6 +31,7 @@ import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.util.ArrayUtil; import com.intellij.util.cls.BytePointer; import com.intellij.util.cls.ClsFormatException; import com.intellij.util.cls.ClsUtil; @@ -219,8 +220,7 @@ public class IdeaJdk extends SdkType implements JavaSdkType { } final int choice = Messages - .showChooseDialog("Select Java SDK to be used as IDEA internal platform", - "Select internal Java platform", javaSdks.toArray(new String[javaSdks.size()]), javaSdks.get(0), Messages.getQuestionIcon()); + .showChooseDialog("Select Java SDK to be used as IDEA internal platform", "Select internal Java platform", ArrayUtil.toStringArray(javaSdks), javaSdks.get(0), Messages.getQuestionIcon()); if (choice != -1) { final String name = javaSdks.get(choice); diff --git a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java index cd05fe91b9ed..87d9adca947e 100644 --- a/plugins/git4idea/src/git4idea/config/GitVcsSettings.java +++ b/plugins/git4idea/src/git4idea/config/GitVcsSettings.java @@ -24,6 +24,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.SystemInfo; +import com.intellij.util.ArrayUtil; import com.intellij.util.xmlb.XmlSerializerUtil; import org.jetbrains.annotations.NonNls; @@ -111,7 +112,7 @@ public class GitVcsSettings implements PersistentStateComponent authors.removeLast(); } authors.addFirst(author); - PREVIOUS_COMMIT_AUTHORS = authors.toArray(new String[authors.size()]); + PREVIOUS_COMMIT_AUTHORS = ArrayUtil.toStringArray(authors); } /** diff --git a/plugins/git4idea/src/git4idea/merge/GitPullDialog.java b/plugins/git4idea/src/git4idea/merge/GitPullDialog.java index 2e3f5945cec4..f87ac516f8dd 100644 --- a/plugins/git4idea/src/git4idea/merge/GitPullDialog.java +++ b/plugins/git4idea/src/git4idea/merge/GitPullDialog.java @@ -21,6 +21,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.DocumentAdapter; +import com.intellij.util.ArrayUtil; import git4idea.GitRemote; import git4idea.GitVcs; import git4idea.commands.GitHandler; @@ -214,7 +215,7 @@ public class GitPullDialog extends DialogWrapper { h.addParameters("-v"); h.addParameters(getRemote()); final List markedBranches = myBranchChooser.getMarkedElements(); - h.addParameters(markedBranches.toArray(new String[markedBranches.size()])); + h.addParameters(ArrayUtil.toStringArray(markedBranches)); return h; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/GroovyTemplatesFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/GroovyTemplatesFactory.java index 7670ba7a97f4..228fbddfeb83 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/GroovyTemplatesFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/GroovyTemplatesFactory.java @@ -21,6 +21,7 @@ import com.intellij.openapi.fileTypes.FileTypeManager; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFileFactory; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.plugins.groovy.GroovyBundle; @@ -103,6 +104,6 @@ public class GroovyTemplatesFactory implements FileTemplateGroupDescriptorFactor } public String[] getCustomTemplates() { - return myCustomTemplates.toArray(new String[myCustomTemplates.size()]); + return ArrayUtil.toStringArray(myCustomTemplates); } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/ConstructorGenerateHandler.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/ConstructorGenerateHandler.java index fad374f7c97b..45dd61030793 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/ConstructorGenerateHandler.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/actions/generate/constructors/ConstructorGenerateHandler.java @@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.actions.generate.constructors; import com.intellij.codeInsight.generation.*; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -100,7 +101,7 @@ public class ConstructorGenerateHandler extends GenerateConstructorHandler { parametersNames.add(parameter.getName()); } - final String[] paramNames = parametersNames.toArray(new String[parametersNames.size()]); + final String[] paramNames = ArrayUtil.toStringArray(parametersNames); assert constructorName != null; grConstructor = GroovyPsiElementFactory.getInstance(aClass.getProject()).createConstructorFromText(constructorName, null, paramNames, body); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/QuickfixUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/QuickfixUtil.java index b9849b603cce..76a77e901217 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/QuickfixUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/QuickfixUtil.java @@ -30,6 +30,7 @@ import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTypesUtil; +import com.intellij.util.ArrayUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; @@ -160,7 +161,7 @@ public class QuickfixUtil { result.add(type); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } public static String[] getArgumentsNames(List listOfPairs) { @@ -170,7 +171,7 @@ public class QuickfixUtil { result.add(name); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } public static String shortenType(String typeText) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicManagerImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicManagerImpl.java index 3bb16e1f945a..9184413df5fa 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicManagerImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/DynamicManagerImpl.java @@ -26,6 +26,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.wm.ToolWindow; import com.intellij.psi.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.tree.TreeUtil; @@ -229,7 +230,7 @@ public class DynamicManagerImpl extends DynamicManager { result.add(propertyElement.getName()); } } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } @Nullable diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java index 1e84abe8d2d6..8a64c4a3af45 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/debugger/GroovyCodeFragmentFactory.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.containers.HashSet; import org.jetbrains.plugins.groovy.GroovyFileType; import org.jetbrains.plugins.groovy.debugger.fragments.GroovyCodeFragment; @@ -165,8 +166,8 @@ public class GroovyCodeFragmentFactory implements CodeFragmentFactory { text = toEval.getText(); - String[] names = namesList.toArray(new String[namesList.size()]); - String[] vals = valList.toArray(new String[valList.size()]); + String[] names = ArrayUtil.toStringArray(namesList); + String[] vals = ArrayUtil.toStringArray(valList); PsiClass contextClass = PsiUtil.getContextClass(context); boolean isStatic = isStaticContext(context); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/doc/GroovyDocGenerationPanel.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/doc/GroovyDocGenerationPanel.java index 276dbd76e7b5..7fc086466679 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/doc/GroovyDocGenerationPanel.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/doc/GroovyDocGenerationPanel.java @@ -24,6 +24,7 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.NonFocusableCheckBox; import com.intellij.ui.ScrollPaneFactory; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.doc.actions.GroovyDocAddPackageAction; import org.jetbrains.plugins.groovy.doc.actions.GroovyDocReducePackageAction; @@ -171,7 +172,7 @@ private static String[] toStringArray(final DefaultListModel model) { result.add((String)o); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } public JPanel getPanel() { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gotoclass/GroovyGoToSymbolContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gotoclass/GroovyGoToSymbolContributor.java index 93ac73684da7..e66196a3cf2d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gotoclass/GroovyGoToSymbolContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gotoclass/GroovyGoToSymbolContributor.java @@ -20,6 +20,7 @@ import com.intellij.navigation.NavigationItem; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.stubs.StubIndex; +import com.intellij.util.ArrayUtil; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotationMethodNameIndex; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrFieldNameIndex; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrMethodNameIndex; @@ -40,7 +41,7 @@ public class GroovyGoToSymbolContributor implements ChooseByNameContributor { symbols.addAll(StubIndex.getInstance().getAllKeys(GrFieldNameIndex.KEY, project)); symbols.addAll(StubIndex.getInstance().getAllKeys(GrMethodNameIndex.KEY, project)); symbols.addAll(StubIndex.getInstance().getAllKeys(GrAnnotationMethodNameIndex.KEY, project)); - return symbols.toArray(new String[symbols.size()]); + return ArrayUtil.toStringArray(symbols); } public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/documentation/GroovyPresentationUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/documentation/GroovyPresentationUtil.java index 27d9b8a9d750..17aaa9e18853 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/documentation/GroovyPresentationUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/documentation/GroovyPresentationUtil.java @@ -15,6 +15,7 @@ */ package org.jetbrains.plugins.groovy.lang.documentation; +import com.intellij.util.ArrayUtil; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; @@ -79,7 +80,7 @@ public class GroovyPresentationUtil { if (!structural.isEmpty()) { builder.append("."); - String[] array = structural.toArray(new String[structural.size()]); + String[] array = ArrayUtil.toStringArray(structural); if (array.length> 1) builder.append("["); for (int i = 0; i < array.length; i++) { if (i > 0) builder.append(", "); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/CompleteReferenceExpression.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/CompleteReferenceExpression.java index 79165b3d4d94..ffbe24d8458b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/CompleteReferenceExpression.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/CompleteReferenceExpression.java @@ -329,7 +329,7 @@ public class CompleteReferenceExpression { final PsiElement scope = PsiTreeUtil.getParentOfType(refExpr, GrMember.class, GroovyFileBase.class); Set result = new LinkedHashSet(); addVariantsWithSameQualifier(scope, refExpr, qualifier, result); - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } private static void addVariantsWithSameQualifier(PsiElement element, diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java index 893584941d54..118ff640db9e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/typedef/GrTypeDefinitionImpl.java @@ -184,7 +184,7 @@ public abstract class GrTypeDefinitionImpl extends GroovyBaseElementImpl classNames = StubIndex.getInstance().getAllKeys(GrShortClassNameIndex.KEY, myProject); Collection scriptNames = StubIndex.getInstance().getAllKeys(GrScriptClassNameIndex.KEY, myProject); classNames.addAll(scriptNames); - return classNames.toArray(new String[classNames.size()]); + return ArrayUtil.toStringArray(classNames); } @@ -148,7 +148,7 @@ public class GroovyShortNamesCache extends PsiShortNamesCache { public String[] getAllMethodNames() { Collection keys = StubIndex.getInstance().getAllKeys(GrMethodNameIndex.KEY, myProject); keys.addAll(StubIndex.getInstance().getAllKeys(GrAnnotationMethodNameIndex.KEY, myProject)); - return keys.toArray(new String[keys.size()]); + return ArrayUtil.toStringArray(keys); } public void getAllMethodNames(@NotNull HashSet set) { @@ -165,7 +165,7 @@ public class GroovyShortNamesCache extends PsiShortNamesCache { @NotNull public String[] getAllFieldNames() { Collection fields = StubIndex.getInstance().getAllKeys(GrFieldNameIndex.KEY, myProject); - return fields.toArray(new String[fields.size()]); + return ArrayUtil.toStringArray(fields); } public void getAllFieldNames(@NotNull HashSet set) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/GroovyNameSuggestionUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/GroovyNameSuggestionUtil.java index 086eec97bbad..5e4b22685a3d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/GroovyNameSuggestionUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/GroovyNameSuggestionUtil.java @@ -22,6 +22,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.util.PsiTypesUtil; import com.intellij.psi.util.TypeConversionUtil; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; @@ -62,7 +63,7 @@ public class GroovyNameSuggestionUtil { if (possibleNames.size() == 0) { possibleNames.add(validator.validateName("var", true)); } - return possibleNames.toArray(new String[possibleNames.size()]); + return ArrayUtil.toStringArray(possibleNames); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extractMethod/ExtractMethodUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extractMethod/ExtractMethodUtil.java index 48f1a4e46a8d..84b041283049 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extractMethod/ExtractMethodUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/extractMethod/ExtractMethodUtil.java @@ -285,7 +285,7 @@ public class ExtractMethodUtil { i++; } } - return params.toArray(new String[params.size()]); + return ArrayUtil.toStringArray(params); } static String getTypeString(ExtractMethodInfoHelper helper, boolean forPresentation) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/FacetImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/FacetImporter.java index 4651c80e3d2a..3977af7d044f 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/FacetImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/FacetImporter.java @@ -19,6 +19,7 @@ import com.intellij.facet.*; import com.intellij.facet.impl.autodetecting.FacetAutodetectingManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.PathUtil; import org.jdom.Element; import org.jetbrains.idea.maven.project.*; @@ -153,7 +154,7 @@ public abstract class FacetImporter elements = new ArrayList(); elements.add(p.getBuildDirectory()); Collections.addAll(elements, subFoldersAndFile); - return makePath(p, elements.toArray(new String[elements.size()])); + return makePath(p, ArrayUtil.toStringArray(elements)); } protected String makePath(MavenProject p, String... elements) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java index 88d8f9b71db9..8c45bee635a9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenProjectImporter.java @@ -32,6 +32,7 @@ import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.util.Function; import com.intellij.util.containers.Stack; import gnu.trove.THashMap; @@ -500,7 +501,7 @@ public class MavenProjectImporter { return; } - myModuleModel.setModuleGroupPath(module, groups.isEmpty() ? null : groups.toArray(new String[groups.size()])); + myModuleModel.setModuleGroupPath(module, groups.isEmpty() ? null : ArrayUtil.toStringArray(groups)); } public void leave(MavenProject each) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenGotoSettingsFileContibutor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenGotoSettingsFileContibutor.java index e88815f479bb..8f85811c785e 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenGotoSettingsFileContibutor.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenGotoSettingsFileContibutor.java @@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; +import com.intellij.util.ArrayUtil; import gnu.trove.THashSet; import org.jetbrains.idea.maven.project.MavenProjectsManager; @@ -35,7 +36,7 @@ public class MavenGotoSettingsFileContibutor implements ChooseByNameContributor, for (VirtualFile each : getSettingsFiles(project)) { result.add(each.getName()); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java index 0b13a8d89153..4177a87dbbdd 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java @@ -35,6 +35,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.util.PathUtil; import org.jetbrains.idea.maven.project.MavenException; import org.jetbrains.idea.maven.project.MavenProjectsManager; @@ -185,7 +186,7 @@ public abstract class MavenImportingTestCase extends MavenTestCase { private void assertModuleLibDepPath(LibraryOrderEntry lib, OrderRootType type, List paths) { if (paths == null) return; - assertUnorderedElementsAreEqual(lib.getUrls(type), paths.toArray(new String[paths.size()])); + assertUnorderedElementsAreEqual(lib.getUrls(type), ArrayUtil.toStringArray(paths)); } protected void assertModuleLibDepScope(String moduleName, String depName, DependencyScope scope) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java index efd05d956d97..0e18a44a0f03 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java @@ -201,7 +201,7 @@ public class SvnUtil { ProgressManager.getInstance().runProcessWithProgressSynchronously(command, SvnBundle.message("progress.title.lock.files"), false, project); if (!failedLocks.isEmpty()) { - String[] failedFiles = failedLocks.toArray(new String[failedLocks.size()]); + String[] failedFiles = ArrayUtil.toStringArray(failedLocks); List exceptions = new ArrayList(); for (String file : failedFiles) { @@ -265,7 +265,7 @@ public class SvnUtil { ProgressManager.getInstance().runProcessWithProgressSynchronously(command, SvnBundle.message("progress.title.unlock.files"), false, project); if (!failedUnlocks.isEmpty()) { - String[] failedFiles = failedUnlocks.toArray(new String[failedUnlocks.size()]); + String[] failedFiles = ArrayUtil.toStringArray(failedUnlocks); List exceptions = new ArrayList(); for (String file : failedFiles) { diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/MarkResolvedAction.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/MarkResolvedAction.java index e87f40755d45..59cce972387e 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/MarkResolvedAction.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/actions/MarkResolvedAction.java @@ -27,6 +27,7 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.changes.VcsDirtyScopeManager; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.idea.svn.SvnBundle; import org.jetbrains.idea.svn.SvnStatusUtil; @@ -75,7 +76,7 @@ public class MarkResolvedAction extends BasicAction { Messages.showInfoMessage(project, SvnBundle.message("message.text.no.conflicts.found"), SvnBundle.message("message.title.no.conflicts.found")); return; } - String[] pathsArray = paths.toArray(new String[paths.size()]); + String[] pathsArray = ArrayUtil.toStringArray(paths); SelectFilesDialog dialog = new SelectFilesDialog(project, SvnBundle.message("label.select.files.and.directories.to.mark.resolved"), SvnBundle.message("dialog.title.mark.resolved"), SvnBundle.message("action.name.mark.resolved"), pathsArray, "vcs.subversion.resolve" diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/GroupList.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/GroupList.java index 27cc347d4eb2..eec60740df42 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/GroupList.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/browser/GroupList.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiClass; import com.intellij.ui.ListScrollingUtil; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SortedListModel; +import com.intellij.util.ArrayUtil; import com.theoryinpractice.testng.util.TestNGUtil; import javax.swing.*; @@ -43,7 +44,7 @@ public class GroupList extends JPanel }); list = new JList(model); Set groups = TestNGUtil.getAnnotationValues("groups", classes); - String[] array = groups.toArray(new String[groups.size()]); + String[] array = ArrayUtil.toStringArray(groups); Arrays.sort(array); model.addAll(array); add(ScrollPaneFactory.createScrollPane(list)); diff --git a/plugins/testng/src/com/theoryinpractice/testng/inspection/DependsOnGroupsInspection.java b/plugins/testng/src/com/theoryinpractice/testng/inspection/DependsOnGroupsInspection.java index e4eb7986a54b..3c37abc01856 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/inspection/DependsOnGroupsInspection.java +++ b/plugins/testng/src/com/theoryinpractice/testng/inspection/DependsOnGroupsInspection.java @@ -29,6 +29,7 @@ import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiNameValuePair; import com.intellij.ui.DocumentAdapter; +import com.intellij.util.ArrayUtil; import com.theoryinpractice.testng.util.TestNGUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -80,7 +81,7 @@ public class DependsOnGroupsInspection extends BaseJavaLocalInspectionTool { public JComponent createOptionsPanel() { final LabeledComponent definedGroups = new LabeledComponent(); definedGroups.setText("&Defined Groups"); - final JTextField textField = new JTextField(StringUtil.join(groups.toArray(new String[groups.size()]), ",")); + final JTextField textField = new JTextField(StringUtil.join(ArrayUtil.toStringArray(groups), ",")); textField.getDocument().addDocumentListener(new DocumentAdapter() { protected void textChanged(final DocumentEvent e) { groups.clear(); diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/inspections/AssignMnemonicFix.java b/plugins/ui-designer/src/com/intellij/uiDesigner/inspections/AssignMnemonicFix.java index 21f066578d6a..5199f93a0c2e 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/inspections/AssignMnemonicFix.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/inspections/AssignMnemonicFix.java @@ -30,6 +30,7 @@ import com.intellij.uiDesigner.propertyInspector.properties.IntroStringProperty; import com.intellij.uiDesigner.quickFixes.QuickFix; import com.intellij.uiDesigner.radComponents.RadComponent; import com.intellij.uiDesigner.radComponents.RadContainer; +import com.intellij.util.ArrayUtil; import java.util.ArrayList; @@ -111,6 +112,6 @@ public class AssignMnemonicFix extends QuickFix { if (variants.size() == 0) { variants.add(value); } - return variants.toArray(new String[variants.size()]); + return ArrayUtil.toStringArray(variants); } } diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java index e4757904e033..c2d23088a6f3 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/BindingEditor.java @@ -32,6 +32,7 @@ import com.intellij.uiDesigner.radComponents.RadComponent; import com.intellij.uiDesigner.radComponents.RadErrorComponent; import com.intellij.uiDesigner.radComponents.RadHSpacer; import com.intellij.uiDesigner.radComponents.RadVSpacer; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import javax.swing.*; @@ -84,12 +85,12 @@ public final class BindingEditor extends ComboBoxPropertyEditor { final IRootContainer root = FormEditingUtil.getRoot(component); final String className = root.getClassToBind(); if (className == null) { - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } final PsiClass aClass = FormEditingUtil.findClassToBind(component.getModule(), className); if (aClass == null) { - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } final PsiField[] fields = aClass.getFields(); @@ -145,7 +146,7 @@ public final class BindingEditor extends ComboBoxPropertyEditor { } } - final String[] names = result.toArray(new String[result.size()]); + final String[] names = ArrayUtil.toStringArray(result); Arrays.sort(names); return names; } diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditorDialog.java b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditorDialog.java index 8d326be9df76..f3d3d5df40de 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditorDialog.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/propertyInspector/editors/string/StringEditorDialog.java @@ -51,6 +51,7 @@ import com.intellij.uiDesigner.binding.FormReferenceProvider; import com.intellij.uiDesigner.compiler.AsmCodeGenerator; import com.intellij.uiDesigner.designSurface.GuiEditor; import com.intellij.uiDesigner.lw.StringDescriptor; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.Processor; import org.jetbrains.annotations.NonNls; @@ -352,7 +353,7 @@ public final class StringEditorDialog extends DialogWrapper{ myDefaultBundleInitialized = true; Set bundleNames = FormEditingUtil.collectUsedBundleNames(myEditor.getRootContainer()); if (bundleNames.size() > 0) { - myTfBundleName.setText(bundleNames.toArray(new String[bundleNames.size()]) [0]); + myTfBundleName.setText(ArrayUtil.toStringArray(bundleNames)[0]); } } CardLayout cardLayout = (CardLayout) myCardHolder.getLayout(); diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/LayoutManagerRegistry.java b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/LayoutManagerRegistry.java index f98043d597f8..0071a2b87a39 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/LayoutManagerRegistry.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/LayoutManagerRegistry.java @@ -19,6 +19,7 @@ package com.intellij.uiDesigner.radComponents; import com.intellij.uiDesigner.UIFormXmlConstants; import com.intellij.uiDesigner.GuiDesignerConfiguration; import com.intellij.openapi.project.Project; +import com.intellij.util.ArrayUtil; import com.jgoodies.forms.layout.FormLayout; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -73,7 +74,7 @@ public class LayoutManagerRegistry { } } Collections.sort(layoutManagerNames); - return layoutManagerNames.toArray(new String[layoutManagerNames.size()]); + return ArrayUtil.toStringArray(layoutManagerNames); } public static String getLayoutManagerDisplayName(String name) { diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadButtonGroup.java b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadButtonGroup.java index c7b01aec8d96..34cf97bcc963 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadButtonGroup.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/radComponents/RadButtonGroup.java @@ -18,6 +18,7 @@ package com.intellij.uiDesigner.radComponents; import com.intellij.uiDesigner.XmlWriter; import com.intellij.uiDesigner.UIFormXmlConstants; import com.intellij.uiDesigner.lw.IButtonGroup; +import com.intellij.util.ArrayUtil; import java.util.ArrayList; import java.util.List; @@ -84,7 +85,7 @@ public class RadButtonGroup implements IButtonGroup { } public String[] getComponentIds() { - return myComponentIds.toArray(new String[myComponentIds.size()]); + return ArrayUtil.toStringArray(myComponentIds); } public boolean isEmpty() { diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/SnapShooterDaemon.java b/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/SnapShooterDaemon.java index 1cb9304ea95a..6334cfb4b026 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/SnapShooterDaemon.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/snapShooter/SnapShooterDaemon.java @@ -20,6 +20,7 @@ import com.intellij.openapi.vfs.CharsetToolkit; import com.intellij.uiDesigner.XmlWriter; import com.intellij.uiDesigner.radComponents.RadComponent; import com.intellij.uiDesigner.radComponents.RadRootContainer; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import javax.accessibility.AccessibleContext; @@ -128,7 +129,7 @@ public class SnapShooterDaemon implements Runnable { getChildText(child)); result.add(rc.toProtocolString()); } - return result.toArray(new String[result.size()]); + return ArrayUtil.toStringArray(result); } private static String getLayoutManagerClass(final Component component) { diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/wizard/Generator.java b/plugins/ui-designer/src/com/intellij/uiDesigner/wizard/Generator.java index 610f6cb668ee..e39864c71e15 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/wizard/Generator.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/wizard/Generator.java @@ -41,6 +41,7 @@ import com.intellij.uiDesigner.compiler.AlienFormFileException; import com.intellij.uiDesigner.compiler.Utils; import com.intellij.uiDesigner.lw.LwComponent; import com.intellij.uiDesigner.lw.LwRootContainer; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -475,7 +476,7 @@ public final class Generator { property2fqClassName.put(binding.myBeanProperty.myName, propertyClassName); } - generateBean(beanClass, properties.toArray(new String[properties.size()]), property2fqClassName); + generateBean(beanClass, ArrayUtil.toStringArray(properties), property2fqClassName); return beanClass; } diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChooseByNameContributor.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChooseByNameContributor.java index 2628cafec4df..e1b6444a6951 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChooseByNameContributor.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/impl/XsltChooseByNameContributor.java @@ -18,13 +18,14 @@ package org.intellij.lang.xpath.xslt.impl; import com.intellij.navigation.ChooseByNameContributor; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.project.Project; +import com.intellij.util.ArrayUtil; import java.util.Collection; class XsltChooseByNameContributor implements ChooseByNameContributor { public String[] getNames(Project project, boolean includeNonProjectItems) { final Collection symbols = XsltSymbolIndex.getSymbolNames(project, includeNonProjectItems); - return symbols.toArray(new String[symbols.size()]); + return ArrayUtil.toStringArray(symbols); } public NavigationItem[] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) { diff --git a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/AddNamespaceDialog.java b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/AddNamespaceDialog.java index 1508ccc553f3..88a807d8f3dd 100644 --- a/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/AddNamespaceDialog.java +++ b/plugins/xpath/xpath-view/src/org/intellij/plugins/xpathView/ui/AddNamespaceDialog.java @@ -20,6 +20,7 @@ import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.ui.DocumentAdapter; +import com.intellij.util.ArrayUtil; import javax.swing.*; import javax.swing.event.DocumentEvent; @@ -46,12 +47,12 @@ public class AddNamespaceDialog extends DialogWrapper { myIcon.setText(null); myIcon.setIcon(Messages.getQuestionIcon()); - myURI.setModel(new DefaultComboBoxModel(uriList.toArray(new String[uriList.size()]))); + myURI.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(uriList))); myURI.setSelectedItem(""); myURI.setEditable(mode == Mode.EDITABLE || mode == Mode.URI_EDITABLE); addUpdateListener(myURI); - myPrefix.setModel(new DefaultComboBoxModel(unresolvedPrefixes.toArray(new String[unresolvedPrefixes.size()]))); + myPrefix.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(unresolvedPrefixes))); myPrefix.setEditable(mode == Mode.EDITABLE || mode == Mode.PREFIX_EDITABLE); if (unresolvedPrefixes.size() == 1) { myPrefix.setSelectedItem(unresolvedPrefixes.iterator().next()); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java index b2d986e6126f..41f392ac4da8 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/CreateNSDeclarationIntentionFix.java @@ -197,7 +197,7 @@ public class CreateNSDeclarationIntentionFix implements HintAction, LocalQuickFi private static boolean checkIfGivenXmlHasTheseWords(final String name, final XmlFile tldFileByUri) { if (name == null || name.length() == 0) return true; final List list = StringUtil.getWordsIn(name); - final String[] words = list.toArray(new String[list.size()]); + final String[] words = ArrayUtil.toStringArray(list); final boolean[] wordsFound = new boolean[words.length]; final int[] wordsFoundCount = new int[1]; diff --git a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java index e1de1b4f8ba0..58576150b025 100644 --- a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java +++ b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaAction.java @@ -28,6 +28,7 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiManager; import com.intellij.psi.xml.XmlFile; +import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlBundle; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; @@ -129,7 +130,7 @@ public class GenerateInstanceDocumentFromSchemaAction extends AnAction { parameters.add("-name"); parameters.add(dialog.getElementName()); - String xml = Xsd2InstanceUtils.generate(parameters.toArray(new String[parameters.size()])); + String xml = Xsd2InstanceUtils.generate(ArrayUtil.toStringArray(parameters)); final VirtualFile baseDirForCreatedInstanceDocument1 = relativeFileDir; diff --git a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaDialog.java b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaDialog.java index f980bbf17664..3ddd31936db3 100644 --- a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaDialog.java +++ b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateInstanceDocumentFromSchemaDialog.java @@ -26,6 +26,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; +import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlBundle; import com.intellij.xml.XmlElementDescriptor; import org.jetbrains.annotations.Nullable; @@ -140,7 +141,7 @@ public class GenerateInstanceDocumentFromSchemaDialog extends DialogWrapper { } public void configureComboBox(JComboBox combo, List lastValues) { // without -editor.selectAll- no focus - combo.setModel(new DefaultComboBoxModel(lastValues.toArray(new String[lastValues.size()]))); + combo.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(lastValues))); } private void updateFile() { diff --git a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java index e4055797f72a..62bdcb7b177a 100644 --- a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java +++ b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentAction.java @@ -28,6 +28,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlBundle; import org.apache.xmlbeans.impl.inst2xsd.Inst2Xsd; import org.jetbrains.annotations.NonNls; @@ -136,7 +137,7 @@ public class GenerateSchemaFromInstanceDocumentAction extends AnAction { }); } - Inst2Xsd.main(parameters.toArray(new String[parameters.size()])); + Inst2Xsd.main(ArrayUtil.toStringArray(parameters)); if (expectedSchemaFile.exists()) { final boolean renamed = expectedSchemaFile.renameTo(xsd); if (! renamed) { diff --git a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentDialog.java b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentDialog.java index 08e703816edd..10c7294ef28b 100644 --- a/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentDialog.java +++ b/xml/impl/src/com/intellij/xml/actions/xmlbeans/GenerateSchemaFromInstanceDocumentDialog.java @@ -20,6 +20,7 @@ import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.xml.XmlBundle; import javax.swing.*; @@ -102,7 +103,7 @@ public class GenerateSchemaFromInstanceDocumentDialog extends DialogWrapper { } public static void configureComboBox(JComboBox combo, List lastValues) { - combo.setModel(new DefaultComboBoxModel(lastValues.toArray(new String[lastValues.size()]))); + combo.setModel(new DefaultComboBoxModel(ArrayUtil.toStringArray(lastValues))); if (combo.getItemCount() != 0) { combo.setSelectedIndex(0); combo.getEditor().selectAll(); diff --git a/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java b/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java index d3145cfcb3dd..281ba5a99b6a 100644 --- a/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java +++ b/xml/impl/src/com/intellij/xml/impl/schema/XmlAttributeDescriptorImpl.java @@ -180,7 +180,7 @@ public class XmlAttributeDescriptorImpl extends BasicXmlAttributeDescriptor impl final boolean exaustive = XmlUtil.collectEnumerationValues(declaration, variants); if (variants.size() > 0) { - return new EnumerationData(variants.toArray(new String[variants.size()]), exaustive); + return new EnumerationData(ArrayUtil.toStringArray(variants), exaustive); } return null; } diff --git a/xml/openapi/src/com/intellij/xml/util/XmlTagUtil.java b/xml/openapi/src/com/intellij/xml/util/XmlTagUtil.java index 243cc03d4f11..30f7998f6078 100644 --- a/xml/openapi/src/com/intellij/xml/util/XmlTagUtil.java +++ b/xml/openapi/src/com/intellij/xml/util/XmlTagUtil.java @@ -22,6 +22,7 @@ import com.intellij.psi.xml.XmlToken; import com.intellij.psi.xml.XmlTokenType; import com.intellij.psi.xml.XmlTagValue; import com.intellij.openapi.util.TextRange; +import com.intellij.util.ArrayUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -94,7 +95,7 @@ public class XmlTagUtil extends XmlTagUtilBase { public static String[] getCharacterEntityNames() { Set strings = ourCharacterEntities.keySet(); - return strings.toArray(new String[strings.size()]); + return ArrayUtil.toStringArray(strings); } public static Character getCharacterByEntityName(String entityName) { From 3f71f9173c516983437dc9a2b8f675a36bea4d35 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 17:19:01 +0300 Subject: [PATCH 16/19] exception --- .../intelliLang/inject/config/ui/ValueRegExpAnnotator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java index e3f33d9e5474..2db97ef0c5fe 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/inject/config/ui/ValueRegExpAnnotator.java @@ -39,7 +39,7 @@ public class ValueRegExpAnnotator implements Annotator { LanguageAnnotators.INSTANCE.addExplicitExtension(RegExpLanguage.INSTANCE, new ValueRegExpAnnotator()); } - private ValueRegExpAnnotator() { + public ValueRegExpAnnotator() { } public void annotate(PsiElement psiElement, AnnotationHolder holder) { From 65a1786da61966e30ca9dd3b88c0f8e50415794c Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 17:41:50 +0300 Subject: [PATCH 17/19] folding for injected does not appear first time you open a file --- .../completion/LightCompletionTestCase.java | 2 +- .../lang/folding/FoldingDescriptor.java | 1 - .../daemon/impl/InjectedCodeFoldingPass.java | 60 +++++++++++++++++++ .../impl/InjectedCodeFoldingPassFactory.java | 49 +++++++++++++++ .../folding/impl/FoldingUpdate.java | 54 ++++++++++++----- .../impl/UpdateFoldRegionsOperation.java | 43 +++++++------ .../src/componentSets/Lang.xml | 4 ++ 7 files changed, 179 insertions(+), 34 deletions(-) create mode 100755 platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPass.java create mode 100755 platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPassFactory.java diff --git a/java/testFramework/src/com/intellij/codeInsight/completion/LightCompletionTestCase.java b/java/testFramework/src/com/intellij/codeInsight/completion/LightCompletionTestCase.java index 20eb56b37d5c..7dba8dd0e162 100644 --- a/java/testFramework/src/com/intellij/codeInsight/completion/LightCompletionTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/completion/LightCompletionTestCase.java @@ -71,7 +71,7 @@ public abstract class LightCompletionTestCase extends LightCodeInsightTestCase { protected void testByCount(int finalCount, @NonNls String... values) { if (myItems == null) { - assertEquals(0, finalCount); + assertEquals(finalCount, 0); return; } int index = 0; diff --git a/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java b/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java index 0f3cba885084..87b2333e277d 100644 --- a/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java +++ b/platform/lang-api/src/com/intellij/lang/folding/FoldingDescriptor.java @@ -118,5 +118,4 @@ public class FoldingDescriptor { } return null; } - } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPass.java new file mode 100755 index 000000000000..a2bc456e2bd2 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPass.java @@ -0,0 +1,60 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.codeInsight.daemon.impl; + +import com.intellij.codeHighlighting.TextEditorHighlightingPass; +import com.intellij.codeInsight.folding.impl.FoldingUpdate; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.openapi.project.DumbAware; +import com.intellij.openapi.project.IndexNotReadyException; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; + +class InjectedCodeFoldingPass extends TextEditorHighlightingPass implements DumbAware { + private Runnable myRunnable; + private final Editor myEditor; + private final PsiFile myFile; + + InjectedCodeFoldingPass(@NotNull Project project, @NotNull Editor editor, @NotNull PsiFile file) { + super(project, editor.getDocument(), false); + myEditor = editor; + myFile = file; + } + + public void doCollectInformation(ProgressIndicator progress) { + Runnable runnable = FoldingUpdate.updateInjectedFoldRegions(myEditor, myFile); + synchronized (this) { + myRunnable = runnable; + } + } + + public void doApplyInformationToEditor() { + Runnable runnable; + synchronized (this) { + runnable = myRunnable; + } + if (runnable != null){ + try { + runnable.run(); + } + catch (IndexNotReadyException e) { + } + } + } +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPassFactory.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPassFactory.java new file mode 100755 index 000000000000..dd98f1a1519a --- /dev/null +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/InjectedCodeFoldingPassFactory.java @@ -0,0 +1,49 @@ +/* + * Copyright 2000-2009 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.intellij.codeInsight.daemon.impl; + +import com.intellij.codeHighlighting.Pass; +import com.intellij.codeHighlighting.TextEditorHighlightingPass; +import com.intellij.codeHighlighting.TextEditorHighlightingPassFactory; +import com.intellij.codeHighlighting.TextEditorHighlightingPassRegistrar; +import com.intellij.openapi.components.AbstractProjectComponent; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +/** + * @author cdr +*/ +public class InjectedCodeFoldingPassFactory extends AbstractProjectComponent implements TextEditorHighlightingPassFactory { + public InjectedCodeFoldingPassFactory(Project project, TextEditorHighlightingPassRegistrar highlightingPassRegistrar) { + super(project); + highlightingPassRegistrar.registerTextEditorHighlightingPass(this, new int[]{Pass.UPDATE_ALL}, null, false, -1); + } + + @NonNls + @NotNull + public String getComponentName() { + return "InjectedCodeFoldingPassFactory"; + } + + @NotNull + public TextEditorHighlightingPass createHighlightingPass(@NotNull PsiFile file, @NotNull final Editor editor) { + return new InjectedCodeFoldingPass(myProject, editor, file); + } +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java index 25716dc80a1c..5ef9445a3357 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java @@ -36,16 +36,16 @@ import java.util.Comparator; import java.util.List; import java.util.TreeMap; -class FoldingUpdate { +public class FoldingUpdate { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.folding.impl.FoldingUpdate"); private static final Key LAST_UPDATE_STAMP_KEY = Key.create("LAST_UPDATE_STAMP_KEY"); private static final Comparator COMPARE_BY_OFFSET = new Comparator() { - public int compare(PsiElement element, PsiElement element1) { - int startOffsetDiff = element.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset(); - return startOffsetDiff == 0 ? element.getTextRange().getEndOffset() - element1.getTextRange().getEndOffset() : startOffsetDiff; - } - }; + public int compare(PsiElement element, PsiElement element1) { + int startOffsetDiff = element.getTextRange().getStartOffset() - element1.getTextRange().getStartOffset(); + return startOffsetDiff == 0 ? element.getTextRange().getEndOffset() - element1.getTextRange().getEndOffset() : startOffsetDiff; + } + }; private FoldingUpdate() { } @@ -69,14 +69,7 @@ class FoldingUpdate { final TreeMap elementsToFoldMap = new TreeMap(COMPARE_BY_OFFSET); getFoldingsFor(file, document, elementsToFoldMap, quick); - List injectedDocuments = InjectedLanguageUtil.getCachedInjectedDocuments(file); - for (DocumentWindow injectedDocument : injectedDocuments) { - PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(injectedDocument); - if (psiFile == null || !psiFile.isValid() || !injectedDocument.isValid()) continue; - getFoldingsFor(psiFile, injectedDocument, elementsToFoldMap, quick); - } - - final Runnable operation = new UpdateFoldRegionsOperation(editor, elementsToFoldMap, applyDefaultState); + final Runnable operation = new UpdateFoldRegionsOperation(project, editor, elementsToFoldMap, applyDefaultState, false); return new Runnable() { public void run() { editor.getFoldingModel().runBatchFoldingOperationDoNotCollapseCaret(operation); @@ -87,6 +80,39 @@ class FoldingUpdate { }; } + private static final Key LAST_UPDATE_INJECTED_STAMP_KEY = Key.create("LAST_UPDATE_INJECTED_STAMP_KEY"); + @Nullable + public static Runnable updateInjectedFoldRegions(@NotNull final Editor editor, @NotNull PsiFile file) { + if (file instanceof PsiCompiledElement) return null; + ApplicationManager.getApplication().assertReadAccessAllowed(); + + final Project project = file.getProject(); + Document document = editor.getDocument(); + LOG.assertTrue(!PsiDocumentManager.getInstance(project).isUncommited(document)); + + final long timeStamp = document.getModificationStamp(); + Object lastTimeStamp = editor.getUserData(LAST_UPDATE_INJECTED_STAMP_KEY); + if (lastTimeStamp instanceof Long && ((Long)lastTimeStamp).longValue() == timeStamp) return null; + + final TreeMap elementsToFoldMap = new TreeMap(COMPARE_BY_OFFSET); + + List injectedDocuments = InjectedLanguageUtil.getCachedInjectedDocuments(file); + if (injectedDocuments.isEmpty()) return null; + for (DocumentWindow injectedDocument : injectedDocuments) { + PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(injectedDocument); + if (psiFile == null || !psiFile.isValid() || !injectedDocument.isValid()) continue; + getFoldingsFor(psiFile, injectedDocument, elementsToFoldMap, false); + } + + final Runnable operation = new UpdateFoldRegionsOperation(project, editor, elementsToFoldMap, false, true); + return new Runnable() { + public void run() { + editor.getFoldingModel().runBatchFoldingOperationDoNotCollapseCaret(operation); + editor.putUserData(LAST_UPDATE_INJECTED_STAMP_KEY, timeStamp); + } + }; + } + private static void getFoldingsFor(PsiFile file, Document document, TreeMap elementsToFoldMap, boolean quick) { final FileViewProvider viewProvider = file.getViewProvider(); for (final Language language : viewProvider.getLanguages()) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java index 939001b8b314..9cbca86e2040 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java @@ -17,34 +17,43 @@ package com.intellij.codeInsight.folding.impl; import com.intellij.lang.folding.FoldingDescriptor; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.FoldingGroup; import com.intellij.openapi.editor.ex.FoldingModelEx; import com.intellij.openapi.editor.impl.FoldRegionImpl; import com.intellij.openapi.progress.ProgressManager; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; -import static com.intellij.util.containers.CollectionFactory.arrayList; -import static com.intellij.util.containers.CollectionFactory.newTroveMap; +import com.intellij.psi.PsiFile; import com.intellij.util.containers.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; +import static com.intellij.util.containers.CollectionFactory.arrayList; +import static com.intellij.util.containers.CollectionFactory.newTroveMap; + /** * @author cdr */ class UpdateFoldRegionsOperation implements Runnable { + private final Project myProject; private final Editor myEditor; private final boolean myApplyDefaultState; private final TreeMap myElementsToFoldMap; + private final boolean myForInjected; - UpdateFoldRegionsOperation(Editor editor, TreeMap elementsToFoldMap, boolean applyDefaultState) { + UpdateFoldRegionsOperation(Project project, Editor editor, TreeMap elementsToFoldMap, boolean applyDefaultState, + boolean forInjected) { + myProject = project; myEditor = editor; myApplyDefaultState = applyDefaultState; myElementsToFoldMap = elementsToFoldMap; + myForInjected = forInjected; } public void run() { @@ -63,14 +72,8 @@ class UpdateFoldRegionsOperation implements Runnable { private static void applyExpandStatus(List newRegions, Map shouldExpand, Map groupExpand) { for (final FoldRegion region : newRegions) { - final Boolean expanded; final FoldingGroup group = region.getGroup(); - if (group != null) { - expanded = groupExpand.get(group); - } - else { - expanded = shouldExpand.get(region); - } + final Boolean expanded = group == null ? shouldExpand.get(region) : groupExpand.get(group); if (expanded != null) { region.setExpanded(expanded.booleanValue()); @@ -121,8 +124,14 @@ class UpdateFoldRegionsOperation implements Runnable { private void removeInvalidRegions(EditorFoldingInfo info, FoldingModelEx foldingModel, HashMap rangeToExpandStatusMap) { List toRemove = arrayList(); + InjectedLanguageManager injectedManager = InjectedLanguageManager.getInstance(myProject); for (FoldRegion region : foldingModel.getAllFoldRegions()) { PsiElement element = info.getPsiElement(region); + if (element != null) { + PsiFile containingFile = element.getContainingFile(); + boolean isInjected = injectedManager.isInjectedFragment(containingFile); + if (isInjected != myForInjected) continue; + } if (element != null && myElementsToFoldMap.containsKey(element)) { final FoldingDescriptor descriptor = myElementsToFoldMap.get(element); TextRange range = descriptor.getRange(); @@ -141,15 +150,13 @@ class UpdateFoldRegionsOperation implements Runnable { myElementsToFoldMap.remove(element); } } + else if (region.isValid() && info.isLightRegion(region)) { + boolean isExpanded = region.isExpanded(); + rangeToExpandStatusMap.put(new TextRange(region.getStartOffset(), region.getEndOffset()), + isExpanded ? Boolean.TRUE : Boolean.FALSE); + } else { - if (region.isValid() && info.isLightRegion(region)) { - boolean isExpanded = region.isExpanded(); - rangeToExpandStatusMap.put(new TextRange(region.getStartOffset(), region.getEndOffset()), - isExpanded ? Boolean.TRUE : Boolean.FALSE); - } - else { - toRemove.add(region); - } + toRemove.add(region); } } diff --git a/platform/platform-resources/src/componentSets/Lang.xml b/platform/platform-resources/src/componentSets/Lang.xml index 3e34154708fd..e36f71acfced 100644 --- a/platform/platform-resources/src/componentSets/Lang.xml +++ b/platform/platform-resources/src/componentSets/Lang.xml @@ -151,6 +151,10 @@ com.intellij.codeInsight.daemon.impl.CodeFoldingPassFactory + + com.intellij.codeInsight.daemon.impl.InjectedCodeFoldingPassFactory + + com.intellij.codeInsight.daemon.impl.LocalInspectionsPassFactory From 53d02b7e77dfe390fe90cbff0088031491e5929b Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 11 Nov 2009 18:30:02 +0300 Subject: [PATCH 18/19] diagnostics --- platform/lang-api/src/com/intellij/psi/WalkingState.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/lang-api/src/com/intellij/psi/WalkingState.java b/platform/lang-api/src/com/intellij/psi/WalkingState.java index 88c4c98b2f29..d62136f48552 100644 --- a/platform/lang-api/src/com/intellij/psi/WalkingState.java +++ b/platform/lang-api/src/com/intellij/psi/WalkingState.java @@ -57,8 +57,8 @@ public abstract class WalkingState { T parent = myWalker.getParent(element); T next = myWalker.getNextSibling(element); visit(element); - assert myWalker.getNextSibling(element) == next; - assert myWalker.getParent(element) == parent; + assert myWalker.getNextSibling(element) == next : "Next sibling of the element '"+element+"' changed. Was: "+next+"; Now:"+myWalker.getNextSibling(element)+"; Root:"+root; + assert myWalker.getParent(element) == parent : "Parent of the element '"+element+"' changed. Was: "+parent+"; Now:"+myWalker.getParent(element)+"; Root:"+root; } } From be473e27d9bedc42e397cb762806969cea677ad3 Mon Sep 17 00:00:00 2001 From: "Kirill.Safonov" Date: Thu, 12 Nov 2009 14:18:28 +0300 Subject: [PATCH 19/19] JS push down: improvements + tests --- .../src/com/intellij/refactoring/actions/PushDownAction.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/refactoring/actions/PushDownAction.java b/platform/lang-impl/src/com/intellij/refactoring/actions/PushDownAction.java index 4352c9ebd21c..5fab549848d1 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/actions/PushDownAction.java +++ b/platform/lang-impl/src/com/intellij/refactoring/actions/PushDownAction.java @@ -28,6 +28,11 @@ import com.intellij.refactoring.lang.ElementsHandler; public class PushDownAction extends BaseRefactoringAction { + + public PushDownAction() { + setInjectedContext(true); + } + public boolean isAvailableInEditorOnly() { return false; }