diff --git a/.idea/modules.xml b/.idea/modules.xml index 82283e971251..f5a152e858e6 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -11,6 +11,7 @@ + @@ -35,11 +36,7 @@ - - - - @@ -51,7 +48,6 @@ - diff --git a/build/lib/gant/jps-sources.zip b/build/lib/gant/jps-sources.zip index 2015dd270d80..2ec496139390 100644 Binary files a/build/lib/gant/jps-sources.zip and b/build/lib/gant/jps-sources.zip differ diff --git a/build/lib/gant/lib/jps.jar b/build/lib/gant/lib/jps.jar index fff727864632..c59de9e1de98 100644 Binary files a/build/lib/gant/lib/jps.jar and b/build/lib/gant/lib/jps.jar differ diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant index cd56346c2752..f61a8bd91d7e 100644 --- a/build/scripts/layouts.gant +++ b/build/scripts/layouts.gant @@ -172,6 +172,9 @@ def layoutFull(String home, String targetDirectory) { layoutPlugin("SpellChecker", "spellchecker", "spellchecker-core") + layoutPlugin("RelaxNG-Support", "relaxng") { + fileset(dir: "$home/plugins/relaxng/lib", includes: "**/*.jar") + } layoutPlugin("maven") { jar("maven-facade-api.jar") { @@ -264,20 +267,18 @@ def layoutFull(String home, String targetDirectory) { dir("standardDsls") { fileset(dir: "$home/plugins/groovy/resources/standardDsls") } + dir("agent") { + fileset(dir: "${home}/plugins/groovy/hotswap") { + include(name: "gragent.jar") + } + } + fileset(dir: "$home/plugins/groovy/resources/conf") fileset(dir: "${home}/plugins/groovy/lib") } } - dir("Groovypp") { - dir("lib") { - jar("groovypp.jar") { - module("groovypp") - } - } - } - } } diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant index 82adc5aac3cf..8be15353d412 100644 --- a/build/scripts/utils.gant +++ b/build/scripts/utils.gant @@ -87,6 +87,4 @@ binding.setVariable("loadProject", { requireProperty("home", guessHome()) -project.stagePrinter = { String message -> - println "##teamcity[progressMessage '$message']" -} +project.builder.buildInfoPrinter = new org.jetbrains.jps.teamcity.TeamcityBuildInfoPrinter() diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java index ab3578fd67ee..641b3513e2d0 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java @@ -240,18 +240,18 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements catch (NoClassDefFoundError e) { // wrong JDK } + } - final BackendCompiler[] compilers = Extensions.getExtensions(BackendCompiler.EP_NAME, myProject); - final Set types = new HashSet(); - for (BackendCompiler compiler : compilers) { - myRegisteredCompilers.add(compiler); - types.addAll(compiler.getCompilableFileTypes()); - } + final BackendCompiler[] compilers = Extensions.getExtensions(BackendCompiler.EP_NAME, myProject); + final Set types = new HashSet(); + for (BackendCompiler compiler : compilers) { + myRegisteredCompilers.add(compiler); + types.addAll(compiler.getCompilableFileTypes()); + } - final CompilerManager compilerManager = CompilerManager.getInstance(myProject); - for (FileType type : types) { - compilerManager.addCompilableFileType(type); - } + final CompilerManager compilerManager = CompilerManager.getInstance(myProject); + for (FileType type : types) { + compilerManager.addCompilableFileType(type); } myDefaultJavaCompiler = JAVAC_EXTERNAL_BACKEND; diff --git a/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java b/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java index 6cc8ac059f34..291e06e25725 100644 --- a/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java +++ b/java/compiler/impl/src/com/intellij/compiler/actions/GenerateAntBuildAction.java @@ -35,6 +35,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -151,7 +152,7 @@ public class GenerateAntBuildAction extends CompileActionBase { generated = generateMultipleFileBuild(project, genOptions, filesToRefresh); } if (generated != null) { - _generated.addAll(Arrays.asList(generated)); + ContainerUtil.addAll(_generated, generated); } } catch (IOException e) { diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/GenerationOptionsImpl.java b/java/compiler/impl/src/com/intellij/compiler/ant/GenerationOptionsImpl.java index eb3d82ea1e22..bfa9141e1ced 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/GenerationOptionsImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/GenerationOptionsImpl.java @@ -28,6 +28,7 @@ import com.intellij.openapi.roots.CompilerModuleExtension; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.SystemInfo; import com.intellij.util.Chunk; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.graph.CachingSemiGraph; import com.intellij.util.graph.Graph; import com.intellij.util.graph.GraphGenerator; @@ -239,13 +240,13 @@ public class GenerationOptionsImpl extends GenerationOptions { final Collection nodes = moduleChunkGraph.getNodes(); final ModuleChunk[] moduleChunks = nodes.toArray(new ModuleChunk[nodes.size()]); for (ModuleChunk moduleChunk : moduleChunks) { - final Iterator depsIterator = moduleChunkGraph.getIn(moduleChunk); - List deps = new ArrayList(); - while (depsIterator.hasNext()) { - deps.add(depsIterator.next()); - } - moduleChunk.setDependentChunks(deps.toArray(new ModuleChunk[deps.size()])); - myCustomCompilers.addAll(Arrays.asList(moduleChunk.getCustomCompilers())); + final Iterator depsIterator = moduleChunkGraph.getIn(moduleChunk); + List deps = new ArrayList(); + while (depsIterator.hasNext()) { + deps.add(depsIterator.next()); + } + moduleChunk.setDependentChunks(deps.toArray(new ModuleChunk[deps.size()])); + ContainerUtil.addAll(myCustomCompilers, moduleChunk.getCustomCompilers()); } Arrays.sort(moduleChunks, new ChunksComparator()); if (generateSingleFile) { @@ -273,7 +274,7 @@ public class GenerationOptionsImpl extends GenerationOptions { final Sdk[] projectJdks = ProjectJdkTable.getInstance().getAllJdks(); myJdkUrls = new HashSet(); for (Sdk jdk : projectJdks) { - myJdkUrls.addAll(Arrays.asList(jdk.getRootProvider().getUrls(OrderRootType.CLASSES))); + ContainerUtil.addAll(myJdkUrls, jdk.getRootProvider().getUrls(OrderRootType.CLASSES)); } return myJdkUrls; } diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkClasspath.java b/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkClasspath.java index 203d7b0e9f9b..49dca1efd178 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkClasspath.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/ModuleChunkClasspath.java @@ -25,11 +25,11 @@ import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.OrderedSet; import gnu.trove.TObjectHashingStrategy; import java.io.File; -import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -232,7 +232,7 @@ public class ModuleChunkClasspath extends Path { final Set jdkUrls = options.getAllJdkUrls(); final OrderedSet urls = new OrderedSet(); - urls.addAll(Arrays.asList(extension.getOutputRootUrls(forTest))); + ContainerUtil.addAll(urls, extension.getOutputRootUrls(forTest)); urls.removeAll(jdkUrls); return ArrayUtil.toStringArray(urls); } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index a5794bcb8a06..b1f30cf4e2e5 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -97,6 +97,8 @@ import java.util.concurrent.TimeUnit; public class CompileDriver { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.CompileDriver"); + // to be used in tests only for debug output + public static boolean ourDebugMode = false; private final Project myProject; private final Map, Pair> myGenerationCompilerModuleToOutputDirMap; // [IntermediateOutputCompiler, Module] -> [ProductionSources, TestSources] @@ -1271,7 +1273,7 @@ public class CompileDriver { for (File outputDirectory : outputDirectories) { File[] files = outputDirectory.listFiles(); if (files != null) { - filesToDelete.addAll(Arrays.asList(files)); + ContainerUtil.addAll(filesToDelete, files); } } if (filesToDelete.size() > 0) { @@ -1558,12 +1560,20 @@ public class CompileDriver { if (toDelete.isEmpty() && toCompile.isEmpty()) { return false; } - if (LOG.isDebugEnabled()) { + if (LOG.isDebugEnabled() || ourDebugMode) { if (!toDelete.isEmpty()) { - LOG.debug("Found items to delete, compiler " + compiler.getDescription()); + final String message = "Found items to delete, compiler " + compiler.getDescription(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } if (!toCompile.isEmpty()) { - LOG.debug("Found items to compile, compiler " + compiler.getDescription()); + final String message = "Found items to compile, compiler " + compiler.getDescription(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } } throw new ExitException(ExitStatus.CANCELLED); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java index 2b8195fbe556..6a893e1db87d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompositeScope.java @@ -28,10 +28,14 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.UserDataHolderBase; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; public class CompositeScope extends UserDataHolderBase implements CompileScope{ private final List myScopes = new ArrayList(); @@ -65,7 +69,7 @@ public class CompositeScope extends UserDataHolderBase implements CompileScope{ for (CompileScope scope : myScopes) { final VirtualFile[] files = scope.getFiles(fileType, inSourceOnly); if (files.length > 0) { - allFiles.addAll(Arrays.asList(files)); + ContainerUtil.addAll(allFiles, files); } } return VfsUtil.toVirtualFileArray(allFiles); @@ -84,7 +88,7 @@ public class CompositeScope extends UserDataHolderBase implements CompileScope{ public Module[] getAffectedModules() { Set modules = new HashSet(); for (final CompileScope compileScope : myScopes) { - modules.addAll(Arrays.asList(compileScope.getAffectedModules())); + ContainerUtil.addAll(modules, compileScope.getAffectedModules()); } return modules.toArray(new Module[modules.size()]); } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java index a98dadb7d29d..f883024fdc71 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java @@ -48,6 +48,7 @@ import com.intellij.openapi.vfs.newvfs.ManagingFS; import com.intellij.openapi.vfs.newvfs.NewVirtualFile; import com.intellij.openapi.vfs.newvfs.persistent.FSRecords; import com.intellij.openapi.vfs.newvfs.persistent.PersistentFS; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.SLRUCache; import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.indexing.IndexInfrastructure; @@ -77,6 +78,7 @@ import java.util.*; public class TranslatingCompilerFilesMonitor implements ApplicationComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.TranslatingCompilerFilesMonitor"); + public static boolean ourDebugMode = false; @NonNls private static final String PATHS_TO_DELETE_FILENAME = "paths_to_delete.dat"; private static final String OUTPUT_ROOTS_FILENAME = "output_roots.dat"; @@ -159,11 +161,17 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { synchronized (mySourcesToRecompile) { final TIntHashSet pathsToRecompile = mySourcesToRecompile.get(projectId); if (_forceCompile || pathsToRecompile != null && !pathsToRecompile.isEmpty()) { + if (ourDebugMode) { + System.out.println("Analysing potentially recompilable files for " + compiler.getDescription()); + } while (scopeSrcIterator.hasNext()) { final VirtualFile file = scopeSrcIterator.next(); if (!file.isValid()) { - if (LOG.isDebugEnabled()) { + if (LOG.isDebugEnabled() || ourDebugMode) { LOG.debug("Skipping invalid file " + file.getPresentableUrl()); + if (ourDebugMode) { + System.out.println("\t SKIPPED(INVALID) " + file.getPresentableUrl()); + } } continue; } @@ -171,17 +179,38 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { if (_forceCompile) { if (compiler.isCompilableFile(file, context) && !configuration.isExcludedFromCompilation(file)) { toCompile.add(file); + if (ourDebugMode) { + System.out.println("\t INCLUDED " + file.getPresentableUrl()); + } selectedForRecompilation.add(file); if (pathsToRecompile == null || !pathsToRecompile.contains(fileId)) { addSourceForRecompilation(projectId, file, null); } } + else { + if (ourDebugMode) { + System.out.println("\t NOT COMPILABLE OR EXCLUDED " + file.getPresentableUrl()); + } + } } else if (pathsToRecompile.contains(fileId)) { if (compiler.isCompilableFile(file, context) && !configuration.isExcludedFromCompilation(file)) { toCompile.add(file); + if (ourDebugMode) { + System.out.println("\t INCLUDED " + file.getPresentableUrl()); + } selectedForRecompilation.add(file); } + else { + if (ourDebugMode) { + System.out.println("\t NOT COMPILABLE OR EXCLUDED " + file.getPresentableUrl()); + } + } + } + else { + if (ourDebugMode) { + System.out.println("\t NOT INCLUDED " + file.getPresentableUrl()); + } } } } @@ -211,11 +240,22 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { //noinspection UnnecessaryBoxing final File file = new File(outputPath); toDelete.add(new Trinity(file, classNamePair.getClassName(), Boolean.valueOf(sourcePresent))); - if (LOG.isDebugEnabled()) { - LOG.debug("Found file to delete: " + file); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "Found file to delete: " + file; + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } } else { + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "Found zombie entry marked for deletion: " + outputPath; + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } + } // must be gagbage entry, should cleanup zombieEntries.add(outputPath); } @@ -300,8 +340,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { final long fileStamp = file.getTimeStamp(); info.updateTimestamp(projectId, fileStamp); saveSourceInfo(file, info); - if (LOG.isDebugEnabled()) { - LOG.debug("Unschedule recompilation (successfully compiled) " + file.getPresentableUrl()); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "Unschedule recompilation (successfully compiled) " + file.getPresentableUrl(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } removeSourceForRecompilation(projectId, Math.abs(getFileId(file))); if ((fileStamp > compilationStartStamp && !((CompileContextEx)context).isGenerated(file)) || forceRecompile.contains(file)) { @@ -364,8 +408,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { final String outputPath = FileUtil.toSystemIndependentName(CompilerIOUtil.readString(is)); final String srcUrl = CompilerIOUtil.readString(is); final String className = CompilerIOUtil.readString(is); - if (LOG.isDebugEnabled()) { - LOG.debug("INIT path to delete: " + outputPath); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "INIT path to delete: " + outputPath; + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } map.put(outputPath, new SourceUrlClassNamePair(srcUrl, className)); } @@ -1069,7 +1117,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { { final Set newRoots = new HashSet(); - newRoots.addAll(Arrays.asList(rootsAfter)); + ContainerUtil.addAll(newRoots, rootsAfter); if (myRootsBefore != null) { newRoots.removeAll(Arrays.asList(myRootsBefore)); } @@ -1079,7 +1127,7 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { { final Set oldRoots = new HashSet(); if (myRootsBefore != null) { - oldRoots.addAll(Arrays.asList(myRootsBefore)); + ContainerUtil.addAll(oldRoots, myRootsBefore); } if (!oldRoots.isEmpty()) { oldRoots.removeAll(Arrays.asList(rootsAfter)); @@ -1135,8 +1183,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { public void beforeFileDeletion(final VirtualFileEvent event) { final VirtualFile eventFile = event.getFile(); - if (LOG.isDebugEnabled() && eventFile.isDirectory()) { - LOG.debug("Processing file deletion: " + eventFile.getPresentableUrl()); + if ((LOG.isDebugEnabled() && eventFile.isDirectory()) || ourDebugMode) { + final String message = "Processing file deletion: " + eventFile.getPresentableUrl(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } processRecursively(eventFile, true, new FileProcessor() { public void execute(final VirtualFile file) { @@ -1166,8 +1218,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { for (int projectId : projects.toArray()) { // mark associated outputs for deletion srcInfo.processOutputPaths(projectId, deletionProc); - if (LOG.isDebugEnabled()) { - LOG.debug("Unschedule recompilation because of deletion " + file.getPresentableUrl()); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "Unschedule recompilation because of deletion " + file.getPresentableUrl(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } removeSourceForRecompilation(projectId, Math.abs(getFileId(file))); } @@ -1268,8 +1324,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { mySourcesToRecompile.put(projectId, set); } alreadyMarked = !set.add(Math.abs(getFileId(srcFile))); - if (!alreadyMarked && LOG.isDebugEnabled()) { - LOG.debug("Scheduled recompilation " + srcFile.getPresentableUrl()); + if (!alreadyMarked && (LOG.isDebugEnabled() || ourDebugMode)) { + final String message = "Scheduled recompilation " + srcFile.getPresentableUrl(); + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } } @@ -1335,8 +1395,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { myOutputsToDelete.put(projectId, map); } map.put(outputPath, new SourceUrlClassNamePair(srcUrl, classname)); - if (LOG.isDebugEnabled()) { - LOG.debug("ADD path to delete: " + outputPath + "; source: " + srcUrl); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "ADD path to delete: " + outputPath + "; source: " + srcUrl; + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } } } @@ -1348,8 +1412,12 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { if (map != null) { final SourceUrlClassNamePair val = map.remove(outputPath); if (val != null) { - if (LOG.isDebugEnabled()) { - LOG.debug("REMOVE path to delete: " + outputPath); + if (LOG.isDebugEnabled() || ourDebugMode) { + final String message = "REMOVE path to delete: " + outputPath; + LOG.debug(message); + if (ourDebugMode) { + System.out.println(message); + } } if (map.isEmpty()) { myOutputsToDelete.remove(projectId); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java index d507c2b13dfb..6be70a82b991 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/ModuleChunk.java @@ -23,13 +23,20 @@ import com.intellij.openapi.module.LanguageLevelUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.*; +import com.intellij.openapi.roots.JdkOrderEntry; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.OrderEntry; +import com.intellij.openapi.roots.OrderEnumerator; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; -import com.intellij.util.*; +import com.intellij.util.Chunk; +import com.intellij.util.JarClasspathHelper; +import com.intellij.util.PathsList; +import com.intellij.util.StringBuilderSpinAllocator; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.OrderedSet; import gnu.trove.THashMap; import gnu.trove.TObjectHashingStrategy; @@ -178,7 +185,7 @@ public class ModuleChunk extends Chunk { final Set modules = getNodes(); Set roots = new HashSet(); for (final Module module : modules) { - roots.addAll(Arrays.asList(myContext.getSourceRoots(module))); + ContainerUtil.addAll(roots, myContext.getSourceRoots(module)); } return VfsUtil.toVirtualFileArray(roots); } 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 7b25a94add96..2589933927ff 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 @@ -43,6 +43,7 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import com.intellij.util.PathsList; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -182,7 +183,7 @@ public class RmicCompiler implements ClassPostProcessingCompiler{ } if (!dirItems.isEmpty()) { final RmicProcessingItem[] successfullyProcessed = invokeRmic(context, parserPool, pair.getFirst(), dirItems, pair.getSecond()); - processed.addAll(Arrays.asList(successfullyProcessed)); + ContainerUtil.addAll(processed, successfullyProcessed); } progressIndicator.setFraction(((double)processed.size()) / ((double)items.length)); } @@ -294,7 +295,7 @@ public class RmicCompiler implements ClassPostProcessingCompiler{ commandLine.add("-verbose"); - commandLine.addAll(Arrays.asList(RmicConfiguration.getSettings(module.getProject()).getOptions())); + ContainerUtil.addAll(commandLine, RmicConfiguration.getSettings(module.getProject()).getOptions()); commandLine.add("-classpath"); diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/LibraryElementType.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/LibraryElementType.java index 01a8b9d93ea1..b93546665a69 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/LibraryElementType.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/LibraryElementType.java @@ -25,11 +25,11 @@ import com.intellij.packaging.elements.ComplexPackagingElementType; import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.ui.ArtifactEditorContext; import com.intellij.util.Icons; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -65,8 +65,8 @@ public class LibraryElementType extends ComplexPackagingElementType getAllLibraries(ArtifactEditorContext context) { List libraries = new ArrayList(); - libraries.addAll(Arrays.asList(LibraryTablesRegistrar.getInstance().getLibraryTable().getLibraries())); - libraries.addAll(Arrays.asList(LibraryTablesRegistrar.getInstance().getLibraryTable(context.getProject()).getLibraries())); + ContainerUtil.addAll(libraries, LibraryTablesRegistrar.getInstance().getLibraryTable().getLibraries()); + ContainerUtil.addAll(libraries, LibraryTablesRegistrar.getInstance().getLibraryTable(context.getProject()).getLibraries()); return libraries; } 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 ec48ecd1c038..9693b333fe68 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ant/ChunkBuildExtension.java @@ -21,11 +21,11 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public abstract class ChunkBuildExtension { @@ -44,7 +44,7 @@ public abstract class ChunkBuildExtension { List allTargets = new ArrayList(); final ChunkBuildExtension[] extensions = Extensions.getRootArea().getExtensionPoint(EP_NAME).getExtensions(); for (ChunkBuildExtension extension : extensions) { - allTargets.addAll(Arrays.asList(extension.getTargets(chunk))); + ContainerUtil.addAll(allTargets, extension.getTargets(chunk)); } if (allTargets.isEmpty()) { allTargets.add(BuildProperties.getCompileTargetName(chunk.getName())); @@ -68,4 +68,4 @@ public abstract class ChunkBuildExtension { extension.generateProperties(propertyFileGenerator, project, genOptions); } } -} \ No newline at end of file +} diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTableModel.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTableModel.java index 544aed0ebd5b..b38a84bc96a6 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTableModel.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTableModel.java @@ -23,6 +23,7 @@ package com.intellij.debugger.ui.breakpoints; import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.openapi.project.Project; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ItemRemovable; import javax.swing.table.AbstractTableModel; @@ -46,7 +47,7 @@ public class BreakpointTableModel extends AbstractTableModel implements ItemRemo public final void setBreakpoints(Breakpoint[] breakpoints) { myBreakpoints.clear(); if (breakpoints != null) { - myBreakpoints.addAll(Arrays.asList(breakpoints)); + ContainerUtil.addAll(myBreakpoints, breakpoints); } fireTableDataChanged(); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTree.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTree.java index c68625244d33..397f6c37355c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTree.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointTree.java @@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project; import com.intellij.ui.*; import com.intellij.util.ArrayUtil; import com.intellij.util.Icons; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.Convertor; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; @@ -468,7 +469,7 @@ public class BreakpointTree extends CheckboxTree { public void setBreakpoints(Breakpoint[] breakpoints) { myBreakpoints.clear(); - myBreakpoints.addAll(Arrays.asList(breakpoints)); + ContainerUtil.addAll(myBreakpoints, breakpoints); rebuildTree(); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java index fc9334182d5e..9e535116ca3b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/MethodBreakpoint.java @@ -34,6 +34,7 @@ import com.intellij.debugger.impl.PositionUtil; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.markup.RangeHighlighter; +import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.IconLoader; @@ -331,8 +332,13 @@ public class MethodBreakpoint extends BreakpointWithHighlighter { new MethodDescriptor(); //noinspection HardCodedStringLiteral descriptor.methodName = method.isConstructor() ? "" : method.getName(); - descriptor.methodSignature = JVMNameUtil.getJVMSignature(method); - descriptor.isStatic = method.hasModifierProperty(PsiModifier.STATIC); + try { + descriptor.methodSignature = JVMNameUtil.getJVMSignature(method); + descriptor.isStatic = method.hasModifierProperty(PsiModifier.STATIC); + } + catch (IndexNotReadyException ignored) { + return null; + } descriptor.methodLine = document.getLineNumber(methodNameOffset); return descriptor; } diff --git a/java/execution/impl/src/com/intellij/execution/actions/AbstractRerunFailedTestsAction.java b/java/execution/impl/src/com/intellij/execution/actions/AbstractRerunFailedTestsAction.java index a74755cf4582..a51e039b7114 100644 --- a/java/execution/impl/src/com/intellij/execution/actions/AbstractRerunFailedTestsAction.java +++ b/java/execution/impl/src/com/intellij/execution/actions/AbstractRerunFailedTestsAction.java @@ -87,8 +87,8 @@ public class AbstractRerunFailedTestsAction extends AnAction { @NotNull protected List getFailedTests(Project project) { - List myAllTests = getModel().getRoot().getAllTests(); - return Filter.DEFECTIVE_LEAF.and(JavaAwareFilter.METHOD(project)).select(myAllTests); + final List myAllTests = getModel().getRoot().getAllTests(); + return Filter.FAILED_OR_INTERRUPTED.and(JavaAwareFilter.METHOD(project)).select(myAllTests); } public void actionPerformed(AnActionEvent e) { diff --git a/java/execution/impl/src/com/intellij/execution/junit/SegmentedInputStreamReader.java b/java/execution/impl/src/com/intellij/execution/junit/SegmentedInputStreamReader.java index 9baf6d283210..4370b10abfae 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/SegmentedInputStreamReader.java +++ b/java/execution/impl/src/com/intellij/execution/junit/SegmentedInputStreamReader.java @@ -40,9 +40,8 @@ public class SegmentedInputStreamReader extends Reader { } public int read(final char[] cbuf, final int off, final int len) throws IOException { - final int maxBytes = Math.min(len, myStream.available()); int bytesRead = 0; - while (bytesRead < maxBytes) { + while (ready() && bytesRead < len) { final int aChar = myStream.read(); if (aChar == -1) { return bytesRead == 0 ? -1 : bytesRead; diff --git a/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java b/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java index e46254a68ea1..58cae05339ba 100644 --- a/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java +++ b/java/execution/openapi/src/com/intellij/execution/configurations/JavaParameters.java @@ -21,10 +21,12 @@ import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.OrderEnumerator; +import com.intellij.openapi.roots.*; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.encoding.EncodingProjectManager; +import com.intellij.util.NotNullFunction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.nio.charset.Charset; @@ -64,8 +66,21 @@ public class JavaParameters extends SimpleJavaParameters { } setDefaultCharset(module.getProject()); - configureEnumerator(OrderEnumerator.orderEntries(module).runtimeOnly().recursively(), classPathType) - .classes().collectPaths(getClassPath()); + configureEnumerator(OrderEnumerator.orderEntries(module).runtimeOnly().recursively(), classPathType, jdk).collectPaths(getClassPath()); + } + + @Nullable + private static NotNullFunction computeRootProvider(int classPathType, final Sdk jdk) { + return (classPathType & JDK_ONLY) == 0 ? null : new NotNullFunction() { + @NotNull + @Override + public VirtualFile[] fun(OrderEntry orderEntry) { + if (orderEntry instanceof JdkOrderEntry) { + return jdk.getRootProvider().getFiles(OrderRootType.CLASSES); + } + return orderEntry.getFiles(OrderRootType.CLASSES); + } + }; } public void setDefaultCharset(final Project project) { @@ -102,17 +117,21 @@ public class JavaParameters extends SimpleJavaParameters { if ((classPathType & CLASSES_ONLY) == 0) { return; } - - configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly(), classPathType).classes().collectPaths(getClassPath()); + configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly(), classPathType, jdk).collectPaths(getClassPath()); } - private static OrderEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType) { + private static OrderRootsEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType, Sdk jdk) { if ((classPathType & JDK_ONLY) == 0) { enumerator = enumerator.withoutSdk(); } if ((classPathType & TESTS_ONLY) == 0) { enumerator = enumerator.productionOnly(); } - return enumerator; + OrderRootsEnumerator rootsEnumerator = enumerator.classes(); + final NotNullFunction provider = computeRootProvider(classPathType, jdk); + if (provider != null) { + rootsEnumerator = rootsEnumerator.usingCustomRootProvider(provider); + } + return rootsEnumerator; } } \ No newline at end of file diff --git a/java/execution/openapi/src/com/intellij/execution/configurations/RemoteConnection.java b/java/execution/openapi/src/com/intellij/execution/configurations/RemoteConnection.java index aeb8cf6c0d1f..a08efdc933e1 100644 --- a/java/execution/openapi/src/com/intellij/execution/configurations/RemoteConnection.java +++ b/java/execution/openapi/src/com/intellij/execution/configurations/RemoteConnection.java @@ -17,6 +17,9 @@ package com.intellij.execution.configurations; import org.jetbrains.annotations.NonNls; +import java.net.InetAddress; +import java.net.UnknownHostException; + public class RemoteConnection { private boolean myUseSockets; private boolean myServerMode; @@ -90,8 +93,18 @@ public class RemoteConnection { catch (NumberFormatException e) { } if (serverMode) { - result = "-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=" + - ((p == -1)? "..." : Integer.toString(p)) + + String localHostName = ":"; + try { + final InetAddress localAddress = InetAddress.getLocalHost(); + final String name = localAddress.getCanonicalHostName(); + if (name != null) { + localHostName = name + ":"; + } + } + catch (UnknownHostException e) { + } + result = "-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=" + localHostName + + ((p == -1)? "" : Integer.toString(p)) + ONTHROW + ",suspend=y" + ONUNCAUGHT; } else { diff --git a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/EnableAutodetectionWorker.java b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/EnableAutodetectionWorker.java index cf6117ba10a3..325db2644062 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/autodetecting/EnableAutodetectionWorker.java +++ b/java/idea-ui/src/com/intellij/facet/impl/autodetecting/EnableAutodetectionWorker.java @@ -21,11 +21,12 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ContentIterator; +import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.util.MultiValuesMap; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -84,7 +85,7 @@ public class EnableAutodetectionWorker { } if (moduleElements.isEmpty()) { - modulesToProcess.addAll(Arrays.asList(moduleManager.getModules())); + ContainerUtil.addAll(modulesToProcess, moduleManager.getModules()); } if (newElement != null) { Set toRemove = new THashSet(); diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java index 9db56d737dab..8b93138d0d22 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/FacetLibrariesValidatorImpl.java @@ -34,12 +34,12 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Processor; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -115,7 +115,7 @@ public class FacetLibrariesValidatorImpl extends FacetLibrariesValidator { rootModel.orderEntries().using(myContext.getModulesProvider()).recursively().librariesOnly().forEachLibrary(new Processor() { @Override public boolean process(Library library) { - roots.addAll(Arrays.asList(myContext.getLibrariesContainer().getLibraryFiles(library, OrderRootType.CLASSES))); + ContainerUtil.addAll(roots, myContext.getLibrariesContainer().getLibraryFiles(library, OrderRootType.CLASSES)); return true; } }); diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java index d8ac377ce2d6..dbac47342136 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionOptionsPanel.java @@ -34,16 +34,19 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.IdeBorderFactory; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author nik @@ -176,7 +179,7 @@ public class LibraryCompositionOptionsPanel { descriptor.setTitle(IdeBundle.message("file.chooser.select.paths.title")); descriptor.setDescription(IdeBundle.message("file.chooser.multiselect.description")); final VirtualFile[] files = FileChooser.chooseFiles(myAddJarsButton, descriptor, getBaseDirectory()); - myAddedJars.addAll(Arrays.asList(files)); + ContainerUtil.addAll(myAddedJars, files); updateAll(); } @@ -196,7 +199,7 @@ public class LibraryCompositionOptionsPanel { List roots = new ArrayList(); roots.addAll(myAddedJars); for (Library library : myUsedLibraries) { - roots.addAll(Arrays.asList(myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES))); + ContainerUtil.addAll(roots, myLibrariesContainer.getLibraryFiles(library, OrderRootType.CLASSES)); } RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = new RequiredLibrariesInfo(myLibraryCompositionSettings.getLibraryInfos()).checkLibraries( VfsUtil.toVirtualFileArray(roots), false); diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java index 43ab025dce27..4e9968ec4f11 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryCompositionSettings.java @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContaine import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -121,7 +122,7 @@ public class LibraryCompositionSettings { List roots = new ArrayList(); roots.addAll(myAddedJars); for (Library library : myUsedLibraries) { - roots.addAll(Arrays.asList(librariesContainer.getLibraryFiles(library, OrderRootType.CLASSES))); + ContainerUtil.addAll(roots, librariesContainer.getLibraryFiles(library, OrderRootType.CLASSES)); } VirtualFile[] jars = VfsUtil.toVirtualFileArray(roots); RequiredLibrariesInfo.RequiredClassesNotFoundInfo info = requiredLibraries.checkLibraries(jars, all); @@ -135,7 +136,7 @@ public class LibraryCompositionSettings { if (files.length != downloadingInfos.length) { return false; } - myAddedJars.addAll(Arrays.asList(files)); + ContainerUtil.addAll(myAddedJars, files); } } } diff --git a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java index 80c43063a480..cc92f53ef971 100644 --- a/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java +++ b/java/idea-ui/src/com/intellij/ide/util/frameworkSupport/AddFrameworkSupportDialog.java @@ -16,6 +16,7 @@ import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContaine import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -40,6 +41,7 @@ public class AddFrameworkSupportDialog extends DialogWrapper { return contentRootPath; } }); + Disposer.register(myDisposable, myAddSupportPanel); init(); } diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java index 6f14d1bb0e5b..729972d24cdf 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java @@ -26,8 +26,10 @@ import com.intellij.facet.ui.libraries.RemoteRepositoryInfo; import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurableListener; import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider; +import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportCommunicator; import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl; import com.intellij.ide.util.projectWizard.ModuleBuilder; +import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ModifiableRootModel; @@ -60,7 +62,7 @@ import java.util.List; /** * @author nik */ -public class AddSupportForFrameworksPanel { +public class AddSupportForFrameworksPanel implements Disposable { private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.newProjectWizard.AddSupportForFrameworksStep"); @NonNls private static final String UNCHECKED_CARD = "unchecked"; @NonNls private static final String EMPTY_CARD = "empty"; @@ -135,6 +137,10 @@ public class AddSupportForFrameworksPanel { } } + @Override + public void dispose() { + } + private void applyLibraryOptionsForSelected() { if (myLastSelectedNode != null) { final LibraryCompositionOptionsPanel optionsPanel = myLastSelectedNode.getLibraryCompositionOptionsPanel(myLibrariesContainer, myMirrorsMap); @@ -286,7 +292,7 @@ public class AddSupportForFrameworksPanel { } parentNode = createNode(parentProvider, nodes, groups); } - node = new FrameworkSupportNode(provider, parentNode, myModel, myBaseDirForLibrariesGetter); + node = new FrameworkSupportNode(provider, parentNode, myModel, myBaseDirForLibrariesGetter, this); nodes.put(provider.getId(), node); groups.put(provider.getGroupId(), node); } @@ -336,9 +342,10 @@ public class AddSupportForFrameworksPanel { List addedLibraries = new ArrayList(); List selectedFrameworks = getFrameworkNodes(true); sortFrameworks(selectedFrameworks); - + List selectedConfigurables = new ArrayList(); for (FrameworkSupportNode node : selectedFrameworks) { FrameworkSupportConfigurable configurable = node.getConfigurable(); + selectedConfigurables.add(configurable); final LibraryCompositionSettings settings = node.getLibraryCompositionSettings(); Library library = settings != null ? settings.addLibraries(rootModel, addedLibraries) : null; configurable.addSupport(module, rootModel, library); @@ -349,6 +356,9 @@ public class AddSupportForFrameworksPanel { ((FacetBasedFrameworkSupportProvider)provider).processAddedLibraries(module, addedLibraries); } } + for (FrameworkSupportCommunicator communicator : FrameworkSupportCommunicator.EP_NAME.getExtensions()) { + communicator.onFrameworkSupportAdded(module, rootModel, selectedConfigurables, myModel); + } } private void sortFrameworks(final List nodes) { diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java index 4a6aae2994cc..f66d36a9849c 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/FrameworkSupportNode.java @@ -15,18 +15,19 @@ */ package com.intellij.ide.util.newProjectWizard; -import com.intellij.facet.impl.ui.libraries.LibraryCompositionSettings; import com.intellij.facet.impl.ui.libraries.LibraryCompositionOptionsPanel; +import com.intellij.facet.impl.ui.libraries.LibraryCompositionSettings; import com.intellij.facet.impl.ui.libraries.LibraryDownloadingMirrorsMap; +import com.intellij.facet.ui.libraries.LibraryInfo; import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider; import com.intellij.ide.util.frameworkSupport.FrameworkVersion; -import com.intellij.facet.ui.libraries.LibraryInfo; import com.intellij.ide.util.newProjectWizard.impl.FrameworkSupportModelImpl; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Computable; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; +import com.intellij.openapi.util.Disposer; import com.intellij.ui.CheckedTreeNode; import com.intellij.ui.GuiUtils; import com.intellij.util.ui.UIUtil; @@ -52,7 +53,7 @@ public class FrameworkSupportNode extends CheckedTreeNode { private LibraryCompositionOptionsPanel myLibraryCompositionOptionsPanel; FrameworkSupportNode(final FrameworkSupportProvider provider, final FrameworkSupportNode parentNode, final FrameworkSupportModelImpl model, - Computable baseDirForLibrariesGetter) { + Computable baseDirForLibrariesGetter, Disposable parentDisposable) { super(provider); myBaseDirForLibrariesGetter = baseDirForLibrariesGetter; setChecked(false); @@ -60,6 +61,7 @@ public class FrameworkSupportNode extends CheckedTreeNode { myParentNode = parentNode; model.registerComponent(provider, this); myConfigurable = provider.createConfigurable(model); + Disposer.register(parentDisposable, myConfigurable); if (parentNode != null) { parentNode.add(this); parentNode.myChildren.add(this); diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java index 2e579d9b0606..25f88922b6a9 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/SupportForFrameworksStep.java @@ -5,11 +5,11 @@ package com.intellij.ide.util.newProjectWizard; import com.intellij.CommonBundle; +import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider; import com.intellij.ide.util.frameworkSupport.FrameworkSupportUtil; import com.intellij.ide.util.projectWizard.JavaModuleBuilder; import com.intellij.ide.util.projectWizard.ModuleBuilder; import com.intellij.ide.util.projectWizard.ModuleWizardStep; -import com.intellij.ide.util.frameworkSupport.FrameworkSupportProvider; import com.intellij.ide.wizard.CommitStepException; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.ProjectBundle; @@ -17,6 +17,7 @@ import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -60,6 +61,12 @@ public class SupportForFrameworksStep extends ModuleWizardStep { return ICON; } + @Override + public void disposeUIResources() { + Disposer.dispose(mySupportForFrameworksPanel); + super.disposeUIResources(); + } + @NonNls public String getHelpId() { return "reference.dialogs.new.project.technologies"; diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportCommunicator.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportCommunicator.java new file mode 100644 index 000000000000..b6d325b8bffa --- /dev/null +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/impl/FrameworkSupportCommunicator.java @@ -0,0 +1,35 @@ +/* + * Copyright 2000-2010 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.ide.util.newProjectWizard.impl; + +import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; +import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.roots.ModifiableRootModel; + +import java.util.List; + +/** + * @author nik + */ +public abstract class FrameworkSupportCommunicator { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.frameworkSupportCommunicator"); + + public abstract void onFrameworkSupportAdded(Module module, ModifiableRootModel rootModel, + List selectedFrameworks, + FrameworkSupportModel model); +} diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java index 924f2f419bf7..3fd85200e823 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/JdkChooserPanel.java @@ -26,7 +26,7 @@ import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.projectRoots.ui.ProjectJdksEditor; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.wm.ex.WindowManagerEx; @@ -152,11 +152,11 @@ public class JdkChooserPanel extends JPanel { jdks = getCompatibleJdks(type, Arrays.asList(allJdks)); } else { - final ProjectJdksModel projectJdksModel = ProjectStructureConfigurable.getInstance(myProject).getProjectJdksModel(); + final ProjectSdksModel projectJdksModel = ProjectStructureConfigurable.getInstance(myProject).getProjectJdksModel(); if (!projectJdksModel.isInitialized()){ //should be initialized projectJdksModel.reset(myProject); } - final Collection collection = projectJdksModel.getProjectJdks().values(); + final Collection collection = projectJdksModel.getProjectSdks().values(); jdks = getCompatibleJdks(type, collection); } Arrays.sort(jdks, new Comparator() { diff --git a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java index 2ce321b52c26..823c9ef9b7e2 100644 --- a/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java +++ b/java/idea-ui/src/com/intellij/ide/util/projectWizard/ProjectJdkForModuleStep.java @@ -25,7 +25,7 @@ import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.roots.ex.ProjectRootManagerEx; import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable; import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.MultiLineLabelUI; import com.intellij.openapi.util.IconLoader; @@ -80,7 +80,7 @@ public class ProjectJdkForModuleStep extends ModuleWizardStep { final Project project = getProject(context, type); final ProjectStructureConfigurable projectConfig = ProjectStructureConfigurable.getInstance(project); final JdkListConfigurable jdkConfig = JdkListConfigurable.getInstance(project); - final ProjectJdksModel projectJdksModel = projectConfig.getProjectJdksModel(); + final ProjectSdksModel projectJdksModel = projectConfig.getProjectJdksModel(); final boolean[] successfullyAdded = new boolean[1]; projectJdksModel.doAdd(type, myPanel, new Consumer() { public void consume(final Sdk jdk) { 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 22c487df3dcc..82b82d45f5de 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 @@ -18,13 +18,12 @@ package com.intellij.openapi.projectRoots.ui; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.fileChooser.FileChooser; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; +import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.ui.configuration.OrderRootTypeUIFactory; import com.intellij.openapi.ui.Messages; @@ -32,9 +31,7 @@ import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.TabbedPaneWrapper; import com.intellij.ui.navigation.History; @@ -75,7 +72,7 @@ public class SdkEditor implements Configurable, Place.Navigator { // GUI components private JPanel myMainPanel; private TabbedPaneWrapper myTabbedPane; - private final NotifiableSdkModel mySdkModel; + private final SdkModel mySdkModel; private JLabel myHomeFieldLabel; private String myVersionString; @@ -85,7 +82,7 @@ public class SdkEditor implements Configurable, Place.Navigator { private final Disposable myDisposable = Disposer.newDisposable(); - public SdkEditor(NotifiableSdkModel sdkModel, History history, final ProjectJdkImpl sdk) { + public SdkEditor(SdkModel sdkModel, History history, final ProjectJdkImpl sdk) { mySdkModel = sdkModel; myHistory = history; mySdk = sdk; @@ -218,7 +215,7 @@ public class SdkEditor implements Configurable, Place.Navigator { else{ final SdkModificator sdkModificator = mySdk.getSdkModificator(); for (OrderRootType type : myPathEditors.keySet()) { - myPathEditors.get(type).reset(sdkModificator.getRoots(type)); + myPathEditors.get(type).reset(sdkModificator); } sdkModificator.commitChanges(); setHomePathValue(mySdk.getHomePath().replace('/', File.separatorChar)); @@ -275,28 +272,9 @@ public class SdkEditor implements Configurable, Place.Navigator { myHomeComponent.getTextField().setForeground(fg); } - @Nullable - public static String selectSdkHome(final Component parentComponent, final SdkType sdkType){ - final FileChooserDescriptor descriptor = sdkType.getHomeChooserDescriptor(); - VirtualFile[] files = FileChooser.chooseFiles(parentComponent, descriptor, getSuggestedSdkRoot(sdkType)); - if (files.length != 0){ - final String path = files[0].getPath(); - if (sdkType.isValidSdkHome(path)) return path; - return SystemInfo.isMac && sdkType.isValidSdkHome(path + SdkType.MAC_HOME_PATH) ? path + SdkType.MAC_HOME_PATH : null; - } - return null; - } - - @Nullable - private static VirtualFile getSuggestedSdkRoot(SdkType sdkType) { - final String homepath = sdkType.suggestHomePath(); - if (homepath == null) return null; - return LocalFileSystem.getInstance().findFileByPath(homepath); - } - private void doSelectHomePath(){ final SdkType sdkType = mySdk.getSdkType(); - final String homePath = selectSdkHome(myHomeComponent, sdkType); + final String homePath = SdkConfigurationUtil.selectSdkHome(myHomeComponent, sdkType); doSetHomePath(homePath, sdkType); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java index f04f3ebc259e..755b11bb7da2 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ClasspathPanel.java @@ -55,6 +55,7 @@ import com.intellij.ui.*; import com.intellij.ui.awt.RelativePoint; import com.intellij.util.EventDispatcher; import com.intellij.util.Icons; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ItemRemovable; import com.intellij.util.ui.Table; import org.jetbrains.annotations.NotNull; @@ -1091,7 +1092,7 @@ public class ClasspathPanel extends JPanel { final Set alreadyAdded = new HashSet(); final Library[] libraries = myLibraryTable.getLibraries(); for (Library library : libraries) { - alreadyAdded.addAll(Arrays.asList(library.getFiles(OrderRootType.CLASSES))); + ContainerUtil.addAll(alreadyAdded, library.getFiles(OrderRootType.CLASSES)); } chosenFilesSet.removeAll(alreadyAdded); return VfsUtil.toVirtualFileArray(chosenFilesSet); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java index 4b892ac12562..9737f780ab29 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java @@ -23,12 +23,12 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.popup.JBPopupFactory; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.Condition; -import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.ScreenUtil; +import com.intellij.ui.SimpleTextAttributes; import com.intellij.util.Consumer; import javax.swing.*; @@ -47,7 +47,7 @@ import java.util.Comparator; class JdkComboBox extends JComboBox{ private final JButton myEditButton = new JButton(ApplicationBundle.message("button.edit")); - public JdkComboBox(final ProjectJdksModel jdksModel) { + public JdkComboBox(final ProjectSdksModel jdksModel) { super(new JdkComboBoxModel(jdksModel)); setRenderer(new ProjectJdkListRenderer() { protected void customizeCellRenderer(JList list, Object value, int index, boolean selected, boolean hasFocus) { @@ -59,7 +59,7 @@ class JdkComboBox extends JComboBox{ else if (value instanceof ProjectJdkComboBoxItem){ final ProjectJdkComboBoxItem item = (ProjectJdkComboBoxItem)value; final String str = item.toString(); - final Sdk jdk = jdksModel.getProjectJdk(); + final Sdk jdk = jdksModel.getProjectSdk(); if (jdk != null){ setIcon(jdk.getSdkType().getIcon()); append(ProjectBundle.message("project.roots.project.jdk.inherited"), SimpleTextAttributes.REGULAR_ATTRIBUTES); @@ -97,13 +97,13 @@ class JdkComboBox extends JComboBox{ return minSize; } - public JButton createSetupButton(final Project project, final ProjectJdksModel jdksModel, final JdkComboBoxItem firstItem) { + public JButton createSetupButton(final Project project, final ProjectSdksModel jdksModel, final JdkComboBoxItem firstItem) { return createSetupButton(project, jdksModel, firstItem, null, false); } public JButton createSetupButton(final Project project, - final ProjectJdksModel jdksModel, + final ProjectSdksModel jdksModel, final JdkComboBoxItem firstItem, final Condition additionalSetup, final boolean moduleJdkSetup) { @@ -144,7 +144,7 @@ class JdkComboBox extends JComboBox{ public void actionPerformed(ActionEvent e) { final JdkComboBoxItem selectedItem = getSelectedItem(); if (selectedItem instanceof ProjectJdkComboBoxItem) { - myEditButton.setEnabled(ProjectStructureConfigurable.getInstance(project).getProjectJdksModel().getProjectJdk() != null); + myEditButton.setEnabled(ProjectStructureConfigurable.getInstance(project).getProjectJdksModel().getProjectSdk() != null); } else { myEditButton.setEnabled(!(selectedItem instanceof InvalidJdkComboBoxItem) && selectedItem != null && selectedItem.getJdk() != null); } @@ -212,7 +212,8 @@ class JdkComboBox extends JComboBox{ final DefaultComboBoxModel model = ((DefaultComboBoxModel)getModel()); model.removeAllElements(); model.addElement(firstItem); - final ArrayList projectJdks = new ArrayList(ProjectJdksModel.getInstance(project).getProjectJdks().values()); + final ProjectSdksModel projectJdksModel = ProjectStructureConfigurable.getInstance(project).getProjectJdksModel(); + final ArrayList projectJdks = new ArrayList(projectJdksModel.getProjectSdks().values()); Collections.sort(projectJdks, new Comparator() { public int compare(final Sdk o1, final Sdk o2) { return o1.getName().compareToIgnoreCase(o2.getName()); @@ -224,7 +225,7 @@ class JdkComboBox extends JComboBox{ } private static class JdkComboBoxModel extends DefaultComboBoxModel { - public JdkComboBoxModel(final ProjectJdksModel jdksModel) { + public JdkComboBoxModel(final ProjectSdksModel jdksModel) { super(); final Sdk[] jdks = jdksModel.getSdks(); Arrays.sort(jdks, new Comparator() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java index 583d151dcb2f..fe641f733c88 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleEditor.java @@ -37,6 +37,7 @@ import com.intellij.ui.TabbedPaneWrapper; import com.intellij.ui.navigation.History; import com.intellij.ui.navigation.Place; import com.intellij.util.EventDispatcher; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -187,8 +188,8 @@ public abstract class ModuleEditor implements Place.Navigator, Disposable { private static ModuleConfigurationEditorProvider[] collectProviders(final Module module) { List result = new ArrayList(); - result.addAll(Arrays.asList(module.getComponents(ModuleConfigurationEditorProvider.class))); - result.addAll(Arrays.asList(Extensions.getExtensions(ModuleConfigurationEditorProvider.EP_NAME, module))); + ContainerUtil.addAll(result, module.getComponents(ModuleConfigurationEditorProvider.class)); + ContainerUtil.addAll(result, Extensions.getExtensions(ModuleConfigurationEditorProvider.EP_NAME, module)); return result.toArray(new ModuleConfigurationEditorProvider[result.size()]); } @@ -208,7 +209,7 @@ public abstract class ModuleEditor implements Place.Navigator, Disposable { private void processEditorsProvider(final ModuleConfigurationEditorProvider provider, final ModuleConfigurationState state) { final ModuleConfigurationEditor[] editors = provider.createEditors(state); - myEditors.addAll(Arrays.asList(editors)); + ContainerUtil.addAll(myEditors, editors); } private JPanel createPanel() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleJdkConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleJdkConfigurable.java index 728167753479..bbaa045e1bf0 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleJdkConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleJdkConfigurable.java @@ -24,7 +24,7 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkModel; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ModuleProjectStructureElement; import com.intellij.openapi.ui.DialogWrapper; @@ -47,7 +47,7 @@ public abstract class ModuleJdkConfigurable implements Disposable { private Sdk mySelectedModuleJdk = null; private JPanel myJdkPanel; private ClasspathEditor myModuleEditor; - private final ProjectJdksModel myJdksModel; + private final ProjectSdksModel myJdksModel; private boolean myFreeze = false; private final SdkModel.Listener myListener = new SdkModel.Listener() { public void sdkAdded(Sdk sdk) { @@ -67,7 +67,7 @@ public abstract class ModuleJdkConfigurable implements Disposable { } }; - public ModuleJdkConfigurable(ClasspathEditor moduleEditor, ProjectJdksModel jdksModel) { + public ModuleJdkConfigurable(ClasspathEditor moduleEditor, ProjectSdksModel jdksModel) { myModuleEditor = moduleEditor; myJdksModel = jdksModel; myJdksModel.addListener(myListener); @@ -122,7 +122,7 @@ public abstract class ModuleJdkConfigurable implements Disposable { final JButton setUpButton = myCbModuleJdk .createSetupButton(project, myJdksModel, new JdkComboBox.ProjectJdkComboBoxItem(), new Condition(){ public boolean value(Sdk jdk) { - final Sdk projectJdk = myJdksModel.getProjectJdk(); + final Sdk projectJdk = myJdksModel.getProjectSdk(); if (projectJdk == null){ final int res = Messages.showYesNoDialog(myJdkPanel, @@ -130,7 +130,7 @@ public abstract class ModuleJdkConfigurable implements Disposable { ProjectBundle.message("project.roots.no.jdk.on.projecct.title"), Messages.getInformationIcon()); if (res == DialogWrapper.OK_EXIT_CODE){ - myJdksModel.setProjectJdk(jdk); + myJdksModel.setProjectSdk(jdk); return true; } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java index 6655a196ea72..17c7ddc6cc91 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModulesConfigurator.java @@ -41,7 +41,7 @@ import com.intellij.openapi.roots.ModuleRootModel; import com.intellij.openapi.roots.impl.ProjectRootManagerImpl; import com.intellij.openapi.roots.ui.configuration.actions.ModuleDeleteProvider; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ModuleProjectStructureElement; import com.intellij.openapi.ui.Messages; @@ -91,7 +91,7 @@ public class ModulesConfigurator implements ModulesProvider, ModuleEditor.Change private StructureConfigurableContext myContext; private final List myAllModulesChangeListeners = new ArrayList(); - public ModulesConfigurator(Project project, ProjectJdksModel projectJdksModel) { + public ModulesConfigurator(Project project, ProjectSdksModel projectJdksModel) { myProject = project; myModuleModel = ModuleManager.getInstance(myProject).getModifiableModel(); myProjectConfigurable = new ProjectConfigurable(project, this, projectJdksModel); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/OrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/OrderRootTypeUIFactory.java index 0723886593b7..47415c25e280 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/OrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/OrderRootTypeUIFactory.java @@ -20,15 +20,12 @@ */ package com.intellij.openapi.roots.ui.configuration; -import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.module.LanguageLevelUtil; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.ui.PathEditor; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryElement; import com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryTableTreeContentElement; import com.intellij.openapi.util.KeyedExtensionFactory; -import com.intellij.pom.java.LanguageLevel; public interface OrderRootTypeUIFactory { KeyedExtensionFactory FACTORY = new KeyedExtensionFactory(OrderRootTypeUIFactory.class, "com.intellij.OrderRootTypeUI") { @@ -39,56 +36,4 @@ public interface OrderRootTypeUIFactory { LibraryTableTreeContentElement createElement(final LibraryElement parentElement); PathEditor createPathEditor(Sdk sdk); - - class MyPathsEditor extends PathEditor { - private final boolean myShowUrl; - private final OrderRootType myOrderRootType; - private final FileChooserDescriptor myDescriptor; - private final String myDisplayName; - private final Sdk mySdk; - - public MyPathsEditor(final String displayName, - final OrderRootType orderRootType, - final FileChooserDescriptor descriptor, - final boolean showUrl, - Sdk sdk) { - myShowUrl = showUrl; - myOrderRootType = orderRootType; - myDescriptor = descriptor; - myDisplayName = displayName; - mySdk = sdk; - } - - protected boolean isShowUrlButton() { - return myShowUrl; - } - - protected OrderRootType getRootType() { - return myOrderRootType; - } - - protected FileChooserDescriptor createFileChooserDescriptor() { - return myDescriptor; - } - - public String getDisplayName() { - return myDisplayName; - } - - @Override - protected String getInitialValue() { - if (mySdk != null) { - final String versionString = mySdk.getVersionString(); - if (versionString != null) { - final LanguageLevel level = LanguageLevelUtil.getDefaultLanguageLevel(versionString); - if (level == LanguageLevel.JDK_1_5) { - return "http://java.sun.com/j2se/1.5.0/docs/api/"; - } else if (level == LanguageLevel.JDK_1_6) { - return "http://java.sun.com/j2se/6/docs/api/"; - } - } - } - return ""; - } - } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectConfigurable.java index 3ad9750ff697..87c3740e0fad 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectConfigurable.java @@ -27,7 +27,7 @@ import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.CompilerProjectExtension; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.ModifiableRootModel; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.DetailsComponent; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.ui.NamedConfigurable; @@ -82,7 +82,7 @@ public class ProjectConfigurable extends NamedConfigurable implements D private boolean myFreeze = false; private DetailsComponent myDetailsComponent; - public ProjectConfigurable(Project project, ModulesConfigurator configurator, ProjectJdksModel model) { + public ProjectConfigurable(Project project, ModulesConfigurator configurator, ProjectSdksModel model) { myProject = project; myModulesConfigurator = configurator; init(model); @@ -103,7 +103,7 @@ public class ProjectConfigurable extends NamedConfigurable implements D return myDetailsComponent.getComponent(); } - private void init(final ProjectJdksModel model) { + private void init(final ProjectSdksModel model) { myPanel = new MyJPanel(); myPanel.setPreferredSize(new Dimension(700, 500)); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java index bb39ec3efdbb..5567ef30be8d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdkConfigurable.java @@ -25,7 +25,7 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.SdkModel; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ModuleProjectStructureElement; import com.intellij.openapi.util.Comparing; @@ -45,7 +45,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { private JdkComboBox myCbProjectJdk; private JPanel myJdkPanel; private final Project myProject; - private final ProjectJdksModel myJdksModel; + private final ProjectSdksModel myJdksModel; private final SdkModel.Listener myListener = new SdkModel.Listener() { public void sdkAdded(Sdk sdk) { reloadModel(); @@ -66,7 +66,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { private boolean myFreeze = false; - public ProjectJdkConfigurable(Project project, final ProjectJdksModel jdksModel) { + public ProjectJdkConfigurable(Project project, final ProjectSdksModel jdksModel) { myProject = project; myJdksModel = jdksModel; myJdksModel.addListener(myListener); @@ -84,7 +84,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { private void reloadModel() { myFreeze = true; - final Sdk projectJdk = myJdksModel.getProjectJdk(); + final Sdk projectJdk = myJdksModel.getProjectSdk(); myCbProjectJdk.reloadModel(new JdkComboBox.NoneJdkComboBoxItem(), myProject); final String sdkName = projectJdk == null ? ProjectRootManager.getInstance(myProject).getProjectJdkName() : projectJdk.getName(); if (sdkName != null) { @@ -108,8 +108,8 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { myCbProjectJdk.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (myFreeze) return; - final Sdk oldJdk = myJdksModel.getProjectJdk(); - myJdksModel.setProjectJdk(myCbProjectJdk.getSelectedJdk()); + final Sdk oldJdk = myJdksModel.getProjectSdk(); + myJdksModel.setProjectSdk(myCbProjectJdk.getSelectedJdk()); clearCaches(); } }); @@ -120,7 +120,7 @@ public class ProjectJdkConfigurable implements UnnamedConfigurable { myCbProjectJdk.appendEditButton(myProject, myJdkPanel, new GridBagConstraints(GridBagConstraints.RELATIVE, 1, 1, 1, 1.0, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 4, 0, 0), 0, 0), new Computable() { @Nullable public Sdk compute() { - return myJdksModel.getProjectJdk(); + return myJdksModel.getProjectSdk(); } }); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java index 284853e27b6b..3edad868db79 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java @@ -32,7 +32,7 @@ import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl; import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.MasterDetailsComponent; import com.intellij.openapi.ui.MasterDetailsStateService; import com.intellij.openapi.ui.NamedConfigurable; @@ -56,7 +56,7 @@ import java.util.Set; public class ProjectJdksConfigurable extends MasterDetailsComponent implements Configurable.Assistant { - private final ProjectJdksModel myProjectJdksModel; + private final ProjectSdksModel myProjectJdksModel; private final Project myProject; @NonNls private static final String SPLITTER_PROPORTION = "project.jdk.splitter"; @@ -64,7 +64,7 @@ public class ProjectJdksConfigurable extends MasterDetailsComponent implements C public ProjectJdksConfigurable(Project project) { super(); myProject = project; - myProjectJdksModel = ProjectJdksModel.getInstance(project); + myProjectJdksModel = ProjectStructureConfigurable.getInstance(project).getProjectJdksModel(); MasterDetailsStateService.getInstance(project).register("ProjectJDKs.UI", this); initTree(); } @@ -86,12 +86,12 @@ public class ProjectJdksConfigurable extends MasterDetailsComponent implements C myProjectJdksModel.reset(myProject); myRoot.removeAllChildren(); - final HashMap sdks = myProjectJdksModel.getProjectJdks(); + final HashMap sdks = myProjectJdksModel.getProjectSdks(); for (Sdk sdk : sdks.keySet()) { final JdkConfigurable configurable = new JdkConfigurable((ProjectJdkImpl)sdks.get(sdk), myProjectJdksModel, TREE_UPDATER, myHistory, myProject); addNode(new MyNode(configurable), myRoot); } - selectJdk(myProjectJdksModel.getProjectJdk()); //restore selection + selectJdk(myProjectJdksModel.getProjectSdk()); //restore selection final String value = PropertiesComponent.getInstance().getValue(SPLITTER_PROPORTION); if (value != null) { try { @@ -127,7 +127,7 @@ public class ProjectJdksConfigurable extends MasterDetailsComponent implements C } if (myProjectJdksModel.isModified() || modifiedJdks) myProjectJdksModel.apply(this); - myProjectJdksModel.setProjectJdk(getSelectedJdk()); + myProjectJdksModel.setProjectSdk(getSelectedJdk()); } @@ -168,17 +168,17 @@ public class ProjectJdksConfigurable extends MasterDetailsComponent implements C final NamedConfigurable namedConfigurable = (NamedConfigurable)node.getUserObject(); jdks.add(((JdkConfigurable)namedConfigurable).getEditableObject()); } - final HashMap sdks = new HashMap(myProjectJdksModel.getProjectJdks()); + final HashMap sdks = new HashMap(myProjectJdksModel.getProjectSdks()); for (Sdk sdk : sdks.values()) { if (!jdks.contains(sdk)) { - myProjectJdksModel.removeJdk(sdk); + myProjectJdksModel.removeSdk(sdk); } } } protected boolean wasObjectStored(Object editableObject) { //noinspection RedundantCast - return myProjectJdksModel.getProjectJdks().containsKey((Sdk)editableObject); + return myProjectJdksModel.getProjectSdks().containsKey((Sdk)editableObject); } @Nullable diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java index 1003a570f891..89b6c5db4681 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java @@ -84,7 +84,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se private Configurable mySelectedConfigurable; - private final ProjectJdksModel myProjectJdksModel = new ProjectJdksModel(); + private final ProjectSdksModel myProjectJdksModel = new ProjectSdksModel(); private ProjectConfigurable myProjectConfig; private final ProjectLibrariesConfigurable myProjectLibrariesConfig; @@ -473,7 +473,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se return ShowSettingsUtil.getInstance().findProjectConfigurable(project, ProjectStructureConfigurable.class); } - public ProjectJdksModel getProjectJdksModel() { + public ProjectSdksModel getProjectJdksModel() { return myProjectJdksModel; } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java index 66a9150e7d04..f4e15ab614bb 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/UIRootConfigurationAccessor.java @@ -22,7 +22,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.impl.RootConfigurationAccessor; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.projectRoot.ModuleStructureConfigurable; -import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectJdksModel; +import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import org.jetbrains.annotations.Nullable; @@ -51,7 +51,7 @@ public class UIRootConfigurationAccessor extends RootConfigurationAccessor { @Nullable public Sdk getSdk(final Sdk sdk, final String sdkName) { - final ProjectJdksModel model = ProjectStructureConfigurable.getInstance(myProject).getJdkConfig().getJdksTreeModel(); + final ProjectSdksModel model = ProjectStructureConfigurable.getInstance(myProject).getJdkConfig().getJdksTreeModel(); return sdkName != null ? model.findSdk(sdkName) : sdk; } @@ -63,9 +63,10 @@ public class UIRootConfigurationAccessor extends RootConfigurationAccessor { } public Sdk getProjectSdk(final Project project) { - return ProjectJdksModel.getInstance(project).getProjectJdk(); + return ProjectStructureConfigurable.getInstance(project).getProjectJdksModel().getProjectSdk(); } + @Nullable public String getProjectSdkName(final Project project) { final String projectJdkName = ProjectRootManager.getInstance(project).getProjectJdkName(); final Sdk projectJdk = getProjectSdk(project); @@ -73,7 +74,8 @@ public class UIRootConfigurationAccessor extends RootConfigurationAccessor { return projectJdk.getName(); } else { - return ProjectJdksModel.getInstance(project).findSdk(projectJdkName) == null ? projectJdkName : null; + final ProjectSdksModel projectJdksModel = ProjectStructureConfigurable.getInstance(project).getProjectJdksModel(); + return projectJdksModel.findSdk(projectJdkName) == null ? projectJdkName : null; } } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ComplexElementSubstitutionParameters.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ComplexElementSubstitutionParameters.java index bbb0f2b401dc..1845308c5e1a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ComplexElementSubstitutionParameters.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ComplexElementSubstitutionParameters.java @@ -19,6 +19,7 @@ import com.intellij.openapi.roots.ui.configuration.artifacts.nodes.ComplexPackag import com.intellij.packaging.elements.ComplexPackagingElement; import com.intellij.packaging.elements.ComplexPackagingElementType; import com.intellij.packaging.elements.PackagingElementFactory; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -31,7 +32,7 @@ public class ComplexElementSubstitutionParameters { private final Set> mySubstituted = new HashSet>(); public void setSubstituteAll() { - myTypesToSubstitute.addAll(Arrays.asList(PackagingElementFactory.getInstance().getComplexElementTypes())); + ContainerUtil.addAll(myTypesToSubstitute, PackagingElementFactory.getInstance().getComplexElementTypes()); mySubstituted.clear(); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java index 0b4ab2759abe..240ca0c0af5d 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/AnnotationsOrderRootTypeUIFactory.java @@ -33,7 +33,7 @@ public class AnnotationsOrderRootTypeUIFactory implements OrderRootTypeUIFactory } public PathEditor createPathEditor(Sdk sdk) { - return new MyPathsEditor(ProjectBundle.message("sdk.configure.annotations.tab"), AnnotationOrderRootType.getInstance(), - FileChooserDescriptorFactory.createSingleFolderDescriptor(), false, sdk); + return new PathEditor(ProjectBundle.message("sdk.configure.annotations.tab"), AnnotationOrderRootType.getInstance(), + FileChooserDescriptorFactory.createSingleFolderDescriptor()); } } \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java index c74af974f0a7..9dba0edd3627 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/ClassesOrderRootTypeUIFactory.java @@ -33,7 +33,6 @@ public class ClassesOrderRootTypeUIFactory implements OrderRootTypeUIFactory { } public PathEditor createPathEditor(Sdk sdk) { - return new MyPathsEditor(ProjectBundle.message("sdk.configure.classpath.tab"), OrderRootType.CLASSES, new FileChooserDescriptor(true, true, true, false, true, true), false, - sdk); + return new PathEditor(ProjectBundle.message("sdk.configure.classpath.tab"), OrderRootType.CLASSES, new FileChooserDescriptor(true, true, true, false, true, true)); } } \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java index 73f24a24a68a..d41a685aeed3 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/JavadocOrderRootTypeUIFactory.java @@ -21,11 +21,15 @@ package com.intellij.openapi.roots.ui.configuration.libraryEditor; import com.intellij.openapi.fileChooser.FileChooserDescriptor; +import com.intellij.openapi.module.LanguageLevelUtil; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.ui.PathEditor; +import com.intellij.openapi.projectRoots.ui.Util; import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.ui.configuration.OrderRootTypeUIFactory; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.pom.java.LanguageLevel; public class JavadocOrderRootTypeUIFactory implements OrderRootTypeUIFactory { public LibraryTableTreeContentElement createElement(final LibraryElement parentElement) { @@ -33,7 +37,49 @@ public class JavadocOrderRootTypeUIFactory implements OrderRootTypeUIFactory { } public PathEditor createPathEditor(Sdk sdk) { - return new MyPathsEditor(ProjectBundle.message("sdk.configure.javadoc.tab"), JavadocOrderRootType.getInstance(), new FileChooserDescriptor(false, true, true, false, true, true), true, - sdk); + return new JavadocPathsEditor(sdk); + } + + static class JavadocPathsEditor extends PathEditor { + private final Sdk mySdk; + + public JavadocPathsEditor(Sdk sdk) { + super(ProjectBundle.message("sdk.configure.javadoc.tab"), + JavadocOrderRootType.getInstance(), + new FileChooserDescriptor(false, true, true, false, true, true)); + mySdk = sdk; + } + + @Override + protected boolean isShowUrlButton() { + return true; + } + + @Override + protected void onSpecifyUrlButtonClicked() { + VirtualFile virtualFile = Util.showSpecifyJavadocUrlDialog(myPanel, getInitialValue()); + if(virtualFile != null){ + addElement(virtualFile); + setModified(true); + updateButtons(); + requestDefaultFocus(); + setSelectedRoots(new Object[]{virtualFile}); + } + } + + private String getInitialValue() { + if (mySdk != null) { + final String versionString = mySdk.getVersionString(); + if (versionString != null) { + final LanguageLevel level = LanguageLevelUtil.getDefaultLanguageLevel(versionString); + if (level == LanguageLevel.JDK_1_5) { + return "http://java.sun.com/j2se/1.5.0/docs/api/"; + } else if (level == LanguageLevel.JDK_1_6) { + return "http://java.sun.com/j2se/6/docs/api/"; + } + } + } + return ""; + } } } \ No newline at end of file diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java index 5b5f7c5a3397..a8124ef78e0a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/LibraryTableEditor.java @@ -30,9 +30,7 @@ import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.ui.Util; import com.intellij.openapi.roots.AnnotationOrderRootType; import com.intellij.openapi.roots.JavadocOrderRootType; -import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.OrderRootType; -import com.intellij.openapi.roots.impl.libraries.LibraryEx; import com.intellij.openapi.roots.impl.libraries.LibraryImpl; import com.intellij.openapi.roots.impl.libraries.LibraryTableImplUtil; import com.intellij.openapi.roots.libraries.Library; @@ -62,6 +60,7 @@ import com.intellij.ui.TreeSpeedSearch; import com.intellij.ui.treeStructure.Tree; import com.intellij.util.ArrayUtil; import com.intellij.util.Icons; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -471,10 +470,11 @@ public class LibraryTableEditor implements Disposable, LibraryEditorListener { private void appendLibraryToModules(final ModuleStructureConfigurable rootConfigurable, final Library libraryToSelect) { final List modules = new ArrayList(); - modules.addAll(Arrays.asList(rootConfigurable.getModules())); + ContainerUtil.addAll(modules, rootConfigurable.getModules()); final ChooseModulesDialog dlg = new ChooseModulesDialog(myProject, modules, ProjectBundle.message("choose.modules.dialog.title"), - ProjectBundle.message("choose.modules.dialog.description", libraryToSelect.getName())); + ProjectBundle + .message("choose.modules.dialog.description", libraryToSelect.getName())); dlg.show(); if (dlg.isOK()) { final List choosenModules = dlg.getChosenElements(); @@ -596,12 +596,12 @@ public class LibraryTableEditor implements Disposable, LibraryEditorListener { final Library[] libraries = myTableModifiableModel.getLibraries(); for (Library library : libraries) { final VirtualFile[] libraryFiles = getLibraryEditor(library).getFiles(rootType); - alreadyAdded.addAll(Arrays.asList(libraryFiles)); + ContainerUtil.addAll(alreadyAdded, libraryFiles); } } else { final VirtualFile[] libraryFiles = getLibraryEditor(lib).getFiles(rootType); - alreadyAdded.addAll(Arrays.asList(libraryFiles)); + ContainerUtil.addAll(alreadyAdded, libraryFiles); } chosenFilesSet.removeAll(alreadyAdded); return VfsUtil.toVirtualFileArray(chosenFilesSet); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java index d485ba0743f7..9bdc02712df5 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/libraryEditor/SourcesOrderRootTypeUIFactory.java @@ -37,8 +37,7 @@ public class SourcesOrderRootTypeUIFactory implements OrderRootTypeUIFactory { } public PathEditor createPathEditor(Sdk sdk) { - return new MyPathsEditor(ProjectBundle.message("sdk.configure.sourcepath.tab"), OrderRootType.SOURCES, new FileChooserDescriptor(true, true, true, false, true, true), false, - sdk) { + return new PathEditor(ProjectBundle.message("sdk.configure.sourcepath.tab"), OrderRootType.SOURCES, new FileChooserDescriptor(true, true, true, false, true, true)) { @Override protected VirtualFile[] adjustAddedFileSet(final Component component, final VirtualFile[] files) { return PathUIUtils.scanAndSelectDetectedJavaSourceRoots(component, files); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java index eab16fa91cd7..0affa63122e5 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkConfigurable.java @@ -43,7 +43,7 @@ public class JdkConfigurable extends ProjectStructureElementConfigurable im private final SdkProjectStructureElement myProjectStructureElement; public JdkConfigurable(final ProjectJdkImpl projectJdk, - final ProjectJdksModel configurable, + final ProjectSdksModel configurable, final Runnable updateTree, @NotNull History history, Project project) { super(true, updateTree); myProjectJdk = projectJdk; diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java index 1204e297a568..5e50739e9081 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java @@ -56,7 +56,7 @@ import java.util.List; ) public class JdkListConfigurable extends BaseStructureConfigurable { - private final ProjectJdksModel myJdksTreeModel; + private final ProjectSdksModel myJdksTreeModel; SdkModel.Listener myListener = new SdkModel.Listener() { @@ -124,7 +124,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { } protected void loadTree() { - final HashMap sdks = myJdksTreeModel.getProjectJdks(); + final HashMap sdks = myJdksTreeModel.getProjectSdks(); for (Sdk sdk : sdks.keySet()) { final JdkConfigurable configurable = new JdkConfigurable((ProjectJdkImpl)sdks.get(sdk), myJdksTreeModel, TREE_UPDATER, myHistory, myProject); @@ -136,7 +136,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { @Override protected Collection getProjectStructureElements() { final List result = new ArrayList(); - for (Sdk sdk : myJdksTreeModel.getProjectJdks().values()) { + for (Sdk sdk : myJdksTreeModel.getProjectSdks().values()) { result.add(new SdkProjectStructureElement(myContext, sdk)); } return result; @@ -159,7 +159,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { myJdksTreeModel.disposeUIResources(); } - public ProjectJdksModel getJdksTreeModel() { + public ProjectSdksModel getJdksTreeModel() { return myJdksTreeModel; } @@ -179,7 +179,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { } if (myJdksTreeModel.isModified() || modifiedJdks) myJdksTreeModel.apply(this); - myJdksTreeModel.setProjectJdk(ProjectRootManager.getInstance(myProject).getProjectJdk()); + myJdksTreeModel.setProjectSdk(ProjectRootManager.getInstance(myProject).getProjectJdk()); } public boolean isModified() { @@ -205,7 +205,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable { } protected void removeJdk(final Sdk jdk) { - myJdksTreeModel.removeJdk(jdk); + myJdksTreeModel.removeSdk(jdk); myContext.getDaemonAnalyzer().removeElement(new SdkProjectStructureElement(myContext, jdk)); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdksConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdksConfigurable.java deleted file mode 100644 index 516b1bb5a78f..000000000000 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdksConfigurable.java +++ /dev/null @@ -1,87 +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.openapi.roots.ui.configuration.projectRoot; - -import com.intellij.openapi.options.ConfigurationException; -import com.intellij.openapi.project.ProjectBundle; -import com.intellij.openapi.ui.NamedConfigurable; -import com.intellij.openapi.ui.PanelWithText; -import com.intellij.openapi.util.IconLoader; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -/** - * User: anna - * Date: 05-Jun-2006 - */ -public class JdksConfigurable extends NamedConfigurable { - private final ProjectJdksModel myJdkTableConfigurable; - public static final String JDKS = ProjectBundle.message("jdks.node.display.name"); - public static final Icon ICON = IconLoader.getIcon("/modules/jdks.png"); - - - public JdksConfigurable(final ProjectJdksModel jdksTreeModel) { - myJdkTableConfigurable = jdksTreeModel; - } - - public void setDisplayName(final String name) { - //do nothing - } - - public ProjectJdksModel getEditableObject() { - return myJdkTableConfigurable; - } - - public String getBannerSlogan() { - return JDKS; - } - - public String getDisplayName() { - return JDKS; - } - - public Icon getIcon() { - return ICON; - } - - @Nullable - @NonNls - public String getHelpTopic() { //todo help - return "preferences.jdks"; - } - - - public JComponent createOptionsPanel() { - return new PanelWithText(ProjectBundle.message("project.roots.jdks.node.text")); - } - - public boolean isModified() { - return false; - } - - public void apply() throws ConfigurationException { - } - - public void reset() { - } - - public void disposeUIResources() { - - } -} diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java index bc784b5e00a8..bdf4e13ad907 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java @@ -63,6 +63,7 @@ import com.intellij.openapi.wm.WindowManager; import com.intellij.ui.navigation.Place; import com.intellij.util.Consumer; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -649,7 +650,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple result.add(new Separator(ProjectBundle.message("add.group.facet.separator"))); } - result.addAll(Arrays.asList(facets)); + ContainerUtil.addAll(result, facets); return result.toArray(new AnAction[result.size()]); } diff --git a/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java b/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java index 5725e9ba423b..0959dab65992 100644 --- a/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java +++ b/java/idea-ui/src/com/intellij/projectImport/ProjectOpenProcessorBase.java @@ -34,9 +34,7 @@ import com.intellij.openapi.projectRoots.JavaSdk; import com.intellij.openapi.projectRoots.ProjectJdkTable; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.CompilerProjectExtension; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.roots.ProjectRootManager; -import com.intellij.openapi.roots.ex.ProjectRootManagerEx; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.InvalidDataException; @@ -73,11 +71,22 @@ public abstract class ProjectOpenProcessorBase extends ProjectOpenProcessor { public boolean canOpenProject(final VirtualFile file) { final String[] supported = getSupportedExtensions(); if (supported != null) { - final String fileName = file.getName(); - for (String name : supported) { - if (fileName.equals(name)) { - return true; + if (file.isDirectory()) { + for (VirtualFile child : file.getChildren()) { + if (canOpenFile(child, supported)) return true; } + return false; + } + if (canOpenFile(file, supported)) return true; + } + return false; + } + + protected static boolean canOpenFile(VirtualFile file, String[] supported) { + final String fileName = file.getName(); + for (String name : supported) { + if (fileName.equals(name)) { + return true; } } return false; @@ -98,6 +107,15 @@ public abstract class ProjectOpenProcessorBase extends ProjectOpenProcessor { public Project doOpenProject(@NotNull VirtualFile virtualFile, Project projectToClose, boolean forceOpenInNewFrame) { try { final WizardContext wizardContext = new WizardContext(null); + if (virtualFile.isDirectory()) { + final String[] supported = getSupportedExtensions(); + for (VirtualFile file : virtualFile.getChildren()) { + if (canOpenFile(file, supported)) { + virtualFile = file; + break; + } + } + } if (!doQuickImport(virtualFile, wizardContext)) return null; if (wizardContext.getProjectName() == null) { diff --git a/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java b/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java index 04dd2497913b..fb893e7bb258 100644 --- a/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java +++ b/java/java-impl/src/com/intellij/analysis/JavaAnalysisScope.java @@ -28,11 +28,11 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.PackageScope; +import com.intellij.psi.search.SearchScope; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -111,7 +111,7 @@ public class JavaAnalysisScope extends AnalysisScope { final Set dirs = new HashSet(); ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - dirs.addAll(Arrays.asList(pack.getDirectories(GlobalSearchScope.projectScope(myElement.getProject())))); + ContainerUtil.addAll(dirs, pack.getDirectories(GlobalSearchScope.projectScope(myElement.getProject()))); } }); for (PsiDirectory dir : dirs) { @@ -130,4 +130,4 @@ public class JavaAnalysisScope extends AnalysisScope { } return super.toSearchScope(); } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypeUtil.java b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypeUtil.java index 3c2e3b9abbf2..3a8eeb35f779 100644 --- a/java/java-impl/src/com/intellij/codeInsight/ExpectedTypeUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/ExpectedTypeUtil.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -151,7 +152,7 @@ public class ExpectedTypeUtil { List methods = new ArrayList(); for (PsiClass aClass : myOccurrenceClasses) { final PsiMethod[] occMethod = aClass.findMethodsByName(name, true); - methods.addAll(Arrays.asList(occMethod)); + ContainerUtil.addAll(methods, occMethod); } return methods.toArray(new PsiMethod[methods.size()]); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java index e7b76bbea611..fa190b5dad65 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/AllClassesGetter.java @@ -29,6 +29,7 @@ import com.intellij.openapi.util.Condition; import com.intellij.patterns.PsiJavaPatterns; import com.intellij.psi.*; import com.intellij.psi.filters.ElementFilter; +import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.searches.AllClassesSearch; import com.intellij.util.IncorrectOperationException; @@ -73,6 +74,7 @@ public class AllClassesGetter { if (handler != null) { checkReference = handler.handleInsert(context, item); } + PostprocessReformattingAspect.getInstance(context.getProject()).doPostponedFormatting(); final int newOffset = context.getOffsetMap().getOffset(key); if (newOffset >= 0) { diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ExpectedTypeBasedCompletionProvider.java b/java/java-impl/src/com/intellij/codeInsight/completion/ExpectedTypeBasedCompletionProvider.java index 65478857ce33..86f668f34910 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ExpectedTypeBasedCompletionProvider.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ExpectedTypeBasedCompletionProvider.java @@ -20,10 +20,10 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiLiteralExpression; import com.intellij.util.ProcessingContext; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; -import java.util.Arrays; import java.util.Collection; /** @@ -42,7 +42,7 @@ public abstract class ExpectedTypeBasedCompletionProvider extends CompletionProv final THashSet infos = new THashSet(); ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - infos.addAll(Arrays.asList(JavaSmartCompletionContributor.getExpectedTypes(params))); + ContainerUtil.addAll(infos, JavaSmartCompletionContributor.getExpectedTypes(params)); } }); addCompletions(params, result, infos); 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 4eb8e5f27a30..9e7513d06e6a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -56,6 +56,7 @@ import com.intellij.psi.xml.XmlTokenType; import com.intellij.util.ArrayUtil; import com.intellij.util.NullableFunction; import com.intellij.util.PairFunction; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -267,7 +268,7 @@ public class JavaCompletionUtil { } } - result.addAll(Arrays.asList(getOverlappedNameVersions(prefix, suggestedNames, requiredSuffix))); + ContainerUtil.addAll(result, getOverlappedNameVersions(prefix, suggestedNames, requiredSuffix)); } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java index 672df85106a1..e1c7d5cbba5d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaSmartCompletionContributor.java @@ -369,7 +369,7 @@ public class JavaSmartCompletionContributor extends CompletionContributor { ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { - infos.addAll(Arrays.asList(getExpectedTypes(parameters))); + ContainerUtil.addAll(infos, getExpectedTypes(parameters)); for (PsiType type : ExpectedTypesGetter.getExpectedTypes(identifierCopy, true)) { if (type instanceof PsiClassType) { final PsiClassType classType = (PsiClassType)type; diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java index 4250ef5f1c45..15a704e21bb4 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java @@ -22,6 +22,7 @@ import com.intellij.psi.impl.source.jsp.jspJava.JspClassLevelDeclarationStatemen import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import java.util.ArrayList; @@ -105,7 +106,7 @@ scopes: } } if (!containModifierFlag) { - ret.addAll(Arrays.asList(keywords)); + ContainerUtil.addAll(ret, keywords); } } break scopes; diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index c795b02f7df1..cf4ca7c941d3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -565,7 +565,13 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumSuperConstructorCall(expression)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkSuperQualifierType(expression)); // in case of JSP syntethic method call, do not check - if (expression.getMethodExpression().isPhysical() && !myHolder.hasErrorResults()) myHolder.add(HighlightMethodUtil.checkMethodCall(expression, myResolveHelper)); + if (expression.getMethodExpression().isPhysical() && !myHolder.hasErrorResults()) { + try { + myHolder.add(HighlightMethodUtil.checkMethodCall(expression, myResolveHelper)); + } + catch (IndexNotReadyException ignored) { + } + } if (!myHolder.hasErrorResults()) visitExpression(expression); } @@ -630,7 +636,11 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkQualifiedNewOfStaticClass(expression)); if (!myHolder.hasErrorResults()) myHolder.add(HighlightClassUtil.checkCreateInnerClassFromStaticContext(expression)); if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkTypeParameterInstantiation(expression)); - if (!myHolder.hasErrorResults()) HighlightMethodUtil.checkNewExpression(expression, myHolder); + try { + if (!myHolder.hasErrorResults()) HighlightMethodUtil.checkNewExpression(expression, myHolder); + } + catch (IndexNotReadyException ignored) { + } if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkEnumInstantiation(expression)); if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkGenericArrayCreation(expression, expression.getType())); if (!myHolder.hasErrorResults()) registerConstructorCall(expression); @@ -758,7 +768,11 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh PsiElement resolved = result.getElement(); if (resolved instanceof PsiVariable && resolved.getContainingFile() == expression.getContainingFile()) { if (!myHolder.hasErrorResults()) { - myHolder.add(HighlightControlFlowUtil.checkVariableInitializedBeforeUsage(expression, (PsiVariable)resolved, myUninitializedVarProblems)); + try { + myHolder.add(HighlightControlFlowUtil.checkVariableInitializedBeforeUsage(expression, (PsiVariable)resolved, myUninitializedVarProblems)); + } + catch (IndexNotReadyException ignored) { + } } PsiVariable variable = (PsiVariable)resolved; boolean isFinal = variable.hasModifierProperty(PsiModifier.FINAL); @@ -772,7 +786,11 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkExpressionRequired(expression)); if (!myHolder.hasErrorResults() && resolved instanceof PsiField) { - myHolder.add(HighlightUtil.checkIllegalForwardReferenceToField(expression, (PsiField)resolved)); + try { + myHolder.add(HighlightUtil.checkIllegalForwardReferenceToField(expression, (PsiField)resolved)); + } + catch (IndexNotReadyException ignored) { + } } if (!myHolder.hasErrorResults()) myHolder.add(HighlightMethodUtil.checkConstructorCallMustBeFirstStatement(expression)); if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkAccessStaticFieldFromEnumConstructor(expression, result)); diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java index 867393fa645b..c05c1fd7f579 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddMethodFix.java @@ -28,11 +28,11 @@ import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.util.MethodSignatureUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class AddMethodFix extends IntentionAndQuickFixAction { @@ -51,7 +51,7 @@ public class AddMethodFix extends IntentionAndQuickFixAction { public AddMethodFix(@NonNls @NotNull String methodText, @NotNull PsiClass implClass, @NotNull String... exceptions) { this(createMethod(methodText, implClass), implClass); - myExceptions.addAll(Arrays.asList(exceptions)); + ContainerUtil.addAll(myExceptions, exceptions); } private static PsiMethod createMethod(final String methodText, final PsiClass implClass) { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddReturnFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddReturnFix.java index 701c0d85b446..ecc223f86016 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddReturnFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/AddReturnFix.java @@ -26,13 +26,12 @@ import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.util.PsiTypesUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import org.jetbrains.annotations.NotNull; - public class AddReturnFix implements IntentionAction { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.impl.quickfix.AddReturnFix"); private final PsiMethod myMethod; @@ -106,8 +105,8 @@ public class AddReturnFix implements IntentionAction { } } PsiParameter[] parameters = method.getParameterList().getParameters(); - variables.addAll(Arrays.asList(parameters)); - return (PsiVariable[]) variables.toArray(new PsiVariable[variables.size()]); + ContainerUtil.addAll(variables, parameters); + return (PsiVariable[])variables.toArray(new PsiVariable[variables.size()]); } public boolean startInWriteAction() { diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java index 5a7b05dd3b1d..e3aafe432b11 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java @@ -28,9 +28,13 @@ import com.intellij.openapi.util.Computable; import com.intellij.psi.*; import com.intellij.psi.impl.source.jsp.jspJava.JspClass; import com.intellij.psi.util.PsiTypesUtil; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import java.util.Arrays; +import java.util.Comparator; + public class CreateConstructorParameterFromFieldFix implements IntentionAction { private final SmartPsiElementPointer myField; @@ -76,8 +80,22 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction { aClass = getField().getContainingClass(); constructors = aClass.getConstructors(); } - for (int i = 0; i < constructors.length; i++){ - if (!addParameterToConstructor(project, file, editor, getField().getContainingClass().getConstructors()[i])) break; + Arrays.sort(constructors, new Comparator() { + @Override + public int compare(PsiMethod c1, PsiMethod c2) { + final PsiMethod cc1 = RefactoringUtil.getChainedConstructor(c1); + final PsiMethod cc2 = RefactoringUtil.getChainedConstructor(c2); + if (cc1 == c2) return 1; + if (cc2 == c1) return -1; + if (cc1 == null) { + return cc2 == null ? 0 : compare(c1, cc2); + } else { + return cc2 == null ? compare(cc1, c2) : compare(cc1, cc2); + } + } + }); + for (PsiMethod constructor : constructors) { + if (!addParameterToConstructor(project, file, editor, constructor)) break; } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java index 17b11aebe4db..1176657dce4a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateFromUsageUtils.java @@ -18,7 +18,6 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.*; import com.intellij.codeInsight.completion.proc.VariablesProcessor; import com.intellij.codeInsight.daemon.QuickFixBundle; -import static com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind.*; import com.intellij.codeInsight.intention.impl.CreateClassDialog; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupItemUtil; @@ -66,6 +65,8 @@ import org.jetbrains.annotations.Nullable; import java.util.*; +import static com.intellij.codeInsight.daemon.impl.quickfix.CreateClassKind.*; + /** * @author mike */ @@ -583,7 +584,7 @@ public class CreateFromUsageUtils { if (expectedTypes.length == 0 && !typesList.isEmpty()) { List union = new ArrayList(); for (ExpectedTypeInfo[] aTypesList : typesList) { - union.addAll(Arrays.asList((ExpectedTypeInfo[])aTypesList)); + ContainerUtil.addAll(union, (ExpectedTypeInfo[])aTypesList); } expectedTypes = union.toArray(new ExpectedTypeInfo[union.size()]); } @@ -633,7 +634,7 @@ public class CreateFromUsageUtils { if (expectedTypes.length == 0 && !typesList.isEmpty()) { List union = new ArrayList(); for (ExpectedTypeInfo[] aTypesList : typesList) { - union.addAll(Arrays.asList((ExpectedTypeInfo[])aTypesList)); + ContainerUtil.addAll(union, (ExpectedTypeInfo[])aTypesList); } expectedTypes = union.toArray(new ExpectedTypeInfo[union.size()]); } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/GuessTypeParameters.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/GuessTypeParameters.java index 4d2493a05803..fa3f7272e443 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/GuessTypeParameters.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/GuessTypeParameters.java @@ -26,10 +26,10 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; @@ -86,7 +86,7 @@ public class GuessTypeParameters { List types = matchingTypeParameters(vals, params, info); if (!types.isEmpty()) { - types.addAll(Arrays.asList(ExpectedTypesProvider.processExpectedTypes(infos, new MyTypeVisitor(manager, scope), project))); + ContainerUtil.addAll(types, ExpectedTypesProvider.processExpectedTypes(infos, new MyTypeVisitor(manager, scope), project)); builder.replaceElement(typeElement, new TypeExpression(project, types.toArray(new PsiType[types.size()]))); return; } diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java index 4bde9f7011e5..df55f85033f0 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateConstructorHandler.java @@ -21,16 +21,16 @@ import com.intellij.codeInsight.CodeInsightBundle; import com.intellij.codeInsight.daemon.ImplicitUsageProvider; import com.intellij.ide.util.MemberChooser; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.extensions.Extensions; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.javadoc.PsiDocComment; -import com.intellij.psi.util.TypeConversionUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; @@ -39,7 +39,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -126,12 +125,12 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { members = chooseMembers(allMembers, true, false, project); if (members == null) return null; } - if (baseConstructors != null){ + if (baseConstructors != null) { ArrayList array = new ArrayList(); for (PsiMethod baseConstructor : baseConstructors) { array.add(new PsiMethodMember(baseConstructor)); } - array.addAll(Arrays.asList(members)); + ContainerUtil.addAll(array, members); members = array.toArray(new ClassMember[array.size()]); } @@ -276,4 +275,4 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase { LOG.assertTrue(false); return null; } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHelper.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHelper.java index dd5d4493bf95..485370e2aa16 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHelper.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateEqualsHelper.java @@ -28,6 +28,7 @@ import com.intellij.psi.util.MethodSignature; import com.intellij.psi.util.MethodSignatureUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import org.jetbrains.annotations.NonNls; @@ -73,7 +74,7 @@ public class GenerateEqualsHelper implements Runnable { myCheckParameterWithInstanceof = useInstanceofToCheckParameterType; myNonNullSet = new HashSet(); - myNonNullSet.addAll(Arrays.asList(nonNullFields)); + ContainerUtil.addAll(myNonNullSet, nonNullFields); final PsiManager manager = PsiManager.getInstance(project); myFactory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); @@ -179,7 +180,7 @@ public class GenerateEqualsHelper implements Runnable { addClassInstance(buffer); ArrayList equalsFields = new ArrayList(); - equalsFields.addAll(Arrays.asList(myEqualsFields)); + ContainerUtil.addAll(equalsFields, myEqualsFields); Collections.sort(equalsFields, EqualsFieldsComparator.INSTANCE); for (PsiField field : equalsFields) { diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java index 9d9da0b92338..2ea2f1c5916d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersHandlerBase.java @@ -24,10 +24,10 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.command.WriteCommandAction; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.editor.ScrollType; -import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.actions.EnterAction; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -38,11 +38,11 @@ import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -185,7 +185,7 @@ public abstract class GenerateMembersHandlerBase implements CodeInsightActionHan for (ClassMember member : members) { GenerationInfo[] prototypes = generateMemberPrototypes(aClass, member); if (prototypes != null) { - array.addAll(Arrays.asList(prototypes)); + ContainerUtil.addAll(array, prototypes); } } return array; diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java index 46d63d90538d..8cf1df4453f3 100644 --- a/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/generation/OverrideImplementUtil.java @@ -228,6 +228,9 @@ public class OverrideImplementUtil { } public static boolean isInsertOverride(PsiMethod superMethod, PsiClass targetClass) { + if (superMethod.isConstructor()) { + return false; + } if (!CodeStyleSettingsManager.getSettings(targetClass.getProject()).INSERT_OVERRIDE_ANNOTATION || !PsiUtil.isLanguageLevel5OrHigher(targetClass)) { return false; @@ -248,7 +251,7 @@ public class OverrideImplementUtil { List results = new ArrayList(); for (final MethodImplementor implementor : getImplementors()) { - results.addAll(Arrays.asList(implementor.createImplementationPrototypes(aClass, method))); + ContainerUtil.addAll(results, implementor.createImplementationPrototypes(aClass, method)); } if (results.isEmpty()) { PsiMethod method1 = GenerateMembersUtil.substituteGenericMethod(method, substitutor); @@ -318,7 +321,7 @@ public class OverrideImplementUtil { } public static void annotateOnOverrideImplement(PsiMethod method, PsiClass targetClass, PsiMethod overridden, boolean insertOverride) { - if (insertOverride && !overridden.isConstructor() && isInsertOverride(overridden, targetClass)) { + if (insertOverride && isInsertOverride(overridden, targetClass)) { annotate(method, Override.class.getName()); } for (OverrideImplementsAnnotationsHandler each : Extensions.getExtensions(OverrideImplementsAnnotationsHandler.EP_NAME)) { @@ -479,7 +482,27 @@ public class OverrideImplementUtil { Collection candidates = getMethodsToOverrideImplement(aClass, toImplement); Collection secondary = toImplement ? Collections.emptyList() : getMethodsToOverrideImplement(aClass, true); - if (candidates.isEmpty() && secondary.isEmpty()) return; + final MemberChooser chooser = showOverrideImplementChooser(editor, aClass, toImplement, candidates, secondary); + if (chooser == null) return; + + final List selectedElements = chooser.getSelectedElements(); + if (selectedElements == null || selectedElements.isEmpty()) return; + + new WriteCommandAction(project, aClass.getContainingFile()) { + protected void run(final Result result) throws Throwable { + overrideOrImplementMethodsInRightPlace(editor, aClass, selectedElements, chooser.isCopyJavadoc(), chooser.isInsertOverrideAnnotation()); + } + }.execute(); + } + + @Nullable + public static MemberChooser showOverrideImplementChooser(Editor editor, + final PsiClass aClass, + final boolean toImplement, + Collection candidates, + Collection secondary) { + Project project = aClass.getProject(); + if (candidates.isEmpty() && secondary.isEmpty()) return null; final PsiMethodMember[] onlyPrimary = convertToMethodMembers(candidates); final PsiMethodMember[] all = ArrayUtil.mergeArrays(onlyPrimary, convertToMethodMembers(secondary), PsiMethodMember.class); @@ -521,20 +544,12 @@ public class OverrideImplementUtil { if (toImplement) { chooser.selectElements(isAll ? all : onlyPrimary); } - + chooser.show(); - if (chooser.getExitCode() != DialogWrapper.OK_EXIT_CODE) return; + if (chooser.getExitCode() != DialogWrapper.OK_EXIT_CODE) return null; PropertiesComponent.getInstance(project).setValue(PROP_COMBINED_OVERRIDE_IMPLEMENT, merge.get().toString()); - - final List selectedElements = chooser.getSelectedElements(); - if (selectedElements == null || selectedElements.isEmpty()) return; - - new WriteCommandAction(project, aClass.getContainingFile()) { - protected void run(final Result result) throws Throwable { - overrideOrImplementMethodsInRightPlace(editor, aClass, selectedElements, chooser.isCopyJavadoc(), chooser.isInsertOverrideAnnotation()); - } - }.execute(); + return chooser; } private static String getChooserTitle(boolean toImplement, Ref merge) { diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java index bbd0c485137d..79f9ba5297f2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/AnnotationParameterInfoHandler.java @@ -17,6 +17,7 @@ package com.intellij.codeInsight.hint.api.impls; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.lang.parameterInfo.*; +import com.intellij.openapi.project.DumbAware; import com.intellij.psi.*; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NonNls; @@ -26,7 +27,7 @@ import org.jetbrains.annotations.Nullable; /** * @author Maxim.Mossienko */ -public class AnnotationParameterInfoHandler implements ParameterInfoHandler { +public class AnnotationParameterInfoHandler implements ParameterInfoHandler, DumbAware { public @Nullable Object[] getParametersForLookup(LookupElement item, ParameterInfoContext context) { return null; } diff --git a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java index 0bbaffd19b26..c90f14323cf2 100644 --- a/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/hint/api/impls/MethodParameterInfoHandler.java @@ -21,6 +21,7 @@ import com.intellij.codeInsight.completion.JavaCompletionUtil; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.lang.parameterInfo.*; +import com.intellij.openapi.project.DumbAware; import com.intellij.psi.*; import com.intellij.psi.infos.CandidateInfo; import com.intellij.psi.infos.MethodCandidateInfo; @@ -39,7 +40,8 @@ import java.util.Set; /** * @author Maxim.Mossienko */ -public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabActionSupport { +public class MethodParameterInfoHandler implements ParameterInfoHandlerWithTabActionSupport, + DumbAware { private static final Set ourArgumentListAllowedParentClassesSet = new HashSet( Arrays.asList(PsiMethodCallExpression.class,PsiNewExpression.class, PsiAnonymousClass.class,PsiEnumConstant.class)); 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 2556bc2b1d9e..f11ff20b9bd9 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 @@ -32,7 +32,6 @@ import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.SuggestedNameInfo; import com.intellij.psi.codeStyle.VariableKind; -import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; @@ -41,6 +40,7 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -167,7 +167,7 @@ public class CreateFieldFromParameterAction implements IntentionAction { if (isInteractive) { List namesList = new ArrayList(); - namesList.addAll(Arrays.asList(names)); + ContainerUtil.addAll(namesList, names); String defaultName = styleManager.propertyNameToVariableName(propertyName, kind); if (namesList.contains(defaultName)) { Collections.swap(namesList, 0, namesList.indexOf(defaultName)); diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java index b62a5aebd292..4564664d18db 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/SplitIfAction.java @@ -25,6 +25,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; @@ -104,8 +105,8 @@ public class SplitIfAction extends PsiElementBaseIntentionAction { PsiManager psiManager = ifStatement.getManager(); PsiIfStatement subIf = (PsiIfStatement)ifStatement.copy(); - subIf.getCondition().replace(rOperand); - ifStatement.getCondition().replace(lOperand); + subIf.getCondition().replace(RefactoringUtil.unparenthesizeExpression(rOperand)); + ifStatement.getCondition().replace(RefactoringUtil.unparenthesizeExpression(lOperand)); if (ifStatement.getThenBranch() instanceof PsiBlockStatement) { PsiBlockStatement blockStmt = (PsiBlockStatement)JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory().createStatementFromText("{}", null); @@ -141,8 +142,8 @@ public class SplitIfAction extends PsiElementBaseIntentionAction { PsiStatement elseBranch = ifStatement.getElseBranch(); if (elseBranch != null) { elseBranch = (PsiStatement)elseBranch.copy(); } - ifStatement.getCondition().replace(lOperand); - secondIf.getCondition().replace(rOperand); + ifStatement.getCondition().replace(RefactoringUtil.unparenthesizeExpression(lOperand)); + secondIf.getCondition().replace(RefactoringUtil.unparenthesizeExpression(rOperand)); ifStatement.setElseBranch(secondIf); if (elseBranch != null) { secondIf.setElseBranch(elseBranch); } diff --git a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java index 7453b29a9cb3..b50a34e6d9c6 100644 --- a/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java +++ b/java/java-impl/src/com/intellij/codeInsight/javadoc/JavaDocInfoGenerator.java @@ -339,7 +339,10 @@ public class JavaDocInfoGenerator { generateTypeParametersSection(buffer, result); } + @Nullable private static Pair> findInHierarchy(PsiClass psiClass, final DocTagLocator locator) { + final Pair> inClassComment = findInClassComment(psiClass, locator); + if (inClassComment != null) return inClassComment; for (final PsiClass superClass : psiClass.getSupers()) { final Pair> pair = findInClassComment(superClass, locator); if (pair != null) return pair; @@ -348,7 +351,7 @@ public class JavaDocInfoGenerator { final Pair> pair = findInClassComment(superInterface, locator); if (pair != null) return pair; } - return findInClassComment(psiClass, locator); + return null; } private static Pair> findInClassComment(final PsiClass psiClass, final DocTagLocator locator) { diff --git a/java/java-impl/src/com/intellij/codeInsight/template/macro/VariableOfTypeMacro.java b/java/java-impl/src/com/intellij/codeInsight/template/macro/VariableOfTypeMacro.java index a9ba2a0d4e15..e9bda185b2c9 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/macro/VariableOfTypeMacro.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/macro/VariableOfTypeMacro.java @@ -23,11 +23,11 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; @@ -103,7 +103,7 @@ public class VariableOfTypeMacro implements Macro { } PsiExpression[] expressions = MacroUtil.getStandardExpressionsOfType(place, type); - array.addAll(Arrays.asList(expressions)); + ContainerUtil.addAll(array, expressions); return array.toArray(new PsiElement[array.size()]); } } diff --git a/java/java-impl/src/com/intellij/codeInspection/SuppressManagerImpl.java b/java/java-impl/src/com/intellij/codeInspection/SuppressManagerImpl.java index 9f9e4d5800a4..a88ed63d4ff6 100644 --- a/java/java-impl/src/com/intellij/codeInspection/SuppressManagerImpl.java +++ b/java/java-impl/src/com/intellij/codeInspection/SuppressManagerImpl.java @@ -23,8 +23,8 @@ package com.intellij.codeInspection; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings; import com.intellij.codeInsight.daemon.HighlightDisplayKey; -import com.intellij.codeInsight.daemon.impl.actions.SuppressByJavaCommentFix; import com.intellij.codeInsight.daemon.impl.actions.SuppressAllForClassFix; +import com.intellij.codeInsight.daemon.impl.actions.SuppressByJavaCommentFix; import com.intellij.codeInsight.daemon.impl.actions.SuppressFix; import com.intellij.codeInsight.daemon.impl.actions.SuppressForClassFix; import com.intellij.openapi.application.ApplicationManager; @@ -44,6 +44,7 @@ import com.intellij.psi.util.PsiUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.annotation.Generated; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -86,6 +87,8 @@ public class SuppressManagerImpl extends SuppressManager { @Nullable public PsiElement getAnnotationMemberSuppressedIn(@NotNull final PsiModifierListOwner owner, final String inspectionToolID) { + final PsiAnnotation generatedAnnotation = AnnotationUtil.findAnnotation(owner, Generated.class.getName()); + if (generatedAnnotation != null) return generatedAnnotation; PsiModifierList modifierList = owner.getModifierList(); Collection suppressedIds = getInspectionIdsSuppressedInAnnotation(modifierList); for (String ids : suppressedIds) { diff --git a/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java index bb820f68ed2e..56c4d9fab4fd 100644 --- a/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java +++ b/java/java-impl/src/com/intellij/codeInspection/canBeFinal/CanBeFinalAnnotator.java @@ -19,8 +19,12 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; import com.intellij.codeInspection.reference.*; import com.intellij.psi.*; import com.intellij.psi.controlFlow.*; +import com.intellij.util.containers.ContainerUtil; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; /** * User: anna @@ -115,7 +119,7 @@ class CanBeFinalAnnotator extends RefGraphAnnotatorEx { PsiField[] psiFields = psiClass.getFields(); HashSet allFields = new HashSet(); - allFields.addAll(Arrays.asList(psiFields)); + ContainerUtil.addAll(allFields, psiFields); ArrayList instanceInitializerInitializedFields = new ArrayList(); boolean hasInitializers = false; for (PsiClassInitializer initializer : psiClass.getInitializers()) { @@ -123,7 +127,8 @@ class CanBeFinalAnnotator extends RefGraphAnnotatorEx { hasInitializers = true; ControlFlow flow; try { - flow = ControlFlowFactory.getInstance(body.getProject()).getControlFlow(body, LocalsOrMyInstanceFieldsControlFlowPolicy.getInstance(), false); + flow = ControlFlowFactory.getInstance(body.getProject()) + .getControlFlow(body, LocalsOrMyInstanceFieldsControlFlowPolicy.getInstance(), false); } catch (AnalysisCanceledException e) { flow = ControlFlow.EMPTY; @@ -154,7 +159,8 @@ class CanBeFinalAnnotator extends RefGraphAnnotatorEx { hasInitializers = true; ControlFlow flow; try { - flow = ControlFlowFactory.getInstance(body.getProject()).getControlFlow(body, LocalsOrMyInstanceFieldsControlFlowPolicy.getInstance(), false); + flow = ControlFlowFactory.getInstance(body.getProject()) + .getControlFlow(body, LocalsOrMyInstanceFieldsControlFlowPolicy.getInstance(), false); } catch (AnalysisCanceledException e) { flow = ControlFlow.EMPTY; diff --git a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java index 29e43e5ec01d..285ce57ffdc0 100644 --- a/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/deadCode/UnusedDeclarationInspection.java @@ -26,7 +26,6 @@ package com.intellij.codeInspection.deadCode; import com.intellij.ExtensionPoints; -import com.intellij.ui.SeparatorFactory; import com.intellij.analysis.AnalysisScope; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.daemon.GroupNames; @@ -57,7 +56,9 @@ import com.intellij.psi.search.PsiSearchHelper; import com.intellij.psi.util.PsiMethodUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.safeDelete.SafeDeleteHandler; +import com.intellij.ui.SeparatorFactory; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.text.CharArrayUtil; import org.jdom.Element; @@ -105,7 +106,7 @@ public class UnusedDeclarationInspection extends FilteringInspectionTool { public final UnusedCodeExtension[] myExtensions; public UnusedDeclarationInspection() { - ADDITIONAL_ANNOTATIONS.addAll(Arrays.asList(ADDITIONAL_ANNOS)); + ContainerUtil.addAll(ADDITIONAL_ANNOTATIONS, ADDITIONAL_ANNOS); myQuickFixActions = new QuickFixAction[]{new PermanentDeleteAction(), new CommentOutBin(), new MoveToEntries()}; ExtensionPoint point = Extensions.getRootArea().getExtensionPoint(ExtensionPoints.DEAD_CODE_TOOL); final UnusedCodeExtension[] deadCodeAddins = point.getExtensions(); diff --git a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/GenericsInspectionToolBase.java b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/GenericsInspectionToolBase.java index d17847b12353..81bfd2dac6e9 100644 --- a/java/java-impl/src/com/intellij/codeInspection/miscGenerics/GenericsInspectionToolBase.java +++ b/java/java-impl/src/com/intellij/codeInspection/miscGenerics/GenericsInspectionToolBase.java @@ -19,10 +19,10 @@ import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ex.BaseLocalInspectionTool; import com.intellij.psi.*; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -36,7 +36,7 @@ public abstract class GenericsInspectionToolBase extends BaseLocalInspectionTool for (PsiClassInitializer initializer : initializers) { final ProblemDescriptor[] localDescriptions = getDescriptions(initializer, manager, isOnTheFly); if (localDescriptions != null) { - descriptors.addAll(Arrays.asList(localDescriptions)); + ContainerUtil.addAll(descriptors, localDescriptions); } } if (descriptors.isEmpty()) return null; diff --git a/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java b/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java index 77ce710a95e1..33e320c53982 100644 --- a/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/suspiciousNameCombination/SuspiciousNameCombinationInspection.java @@ -16,7 +16,6 @@ package com.intellij.codeInspection.suspiciousNameCombination; -import com.intellij.CommonBundle; import com.intellij.codeInsight.daemon.GroupNames; import com.intellij.codeInsight.daemon.JavaErrorMessages; import com.intellij.codeInspection.InspectionsBundle; @@ -29,7 +28,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.codeStyle.NameUtil; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.ui.AddDeleteListPanel; +import com.intellij.ui.AddEditDeleteListPanel; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -38,10 +37,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -209,23 +204,10 @@ public class SuspiciousNameCombinationInspection extends BaseLocalInspectionTool } } - private class MyOptionsPanel extends AddDeleteListPanel { - private JButton myEditButton; + private class MyOptionsPanel extends AddEditDeleteListPanel { public MyOptionsPanel() { super(InspectionsBundle.message("suspicious.name.combination.options.title"), myNameGroups); - myEditButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - editSelectedItem(); - } - }); - myList.addMouseListener(new MouseAdapter() { - public void mouseClicked(MouseEvent e) { - if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) { - editSelectedItem(); - } - } - }); myListModel.addListDataListener(new ListDataListener() { public void intervalAdded(ListDataEvent e) { saveChanges(); @@ -241,31 +223,20 @@ public class SuspiciousNameCombinationInspection extends BaseLocalInspectionTool }); } - @Override protected JButton[] createButtons() { - myEditButton = new JButton(CommonBundle.message("button.edit")); - return new JButton[] { myAddButton, myEditButton, myDeleteButton }; - } - - protected Object findItemToAdd() { + protected String findItemToAdd() { return Messages.showInputDialog(this, InspectionsBundle.message("suspicious.name.combination.options.prompt"), InspectionsBundle.message("suspicious.name.combination.add.titile"), Messages.getQuestionIcon(), "", null); } - private void editSelectedItem() { - int index = myList.getSelectedIndex(); - if (index >= 0) { - String inputValue = (String) myListModel.get(index); - String newValue = Messages.showInputDialog(this, - InspectionsBundle.message("suspicious.name.combination.options.prompt"), - InspectionsBundle.message("suspicious.name.combination.edit.title"), - Messages.getQuestionIcon(), - inputValue, null); - if (newValue != null) { - myListModel.set(index, newValue); - } - } + @Override + protected String editSelectedItem(String inputValue) { + return Messages.showInputDialog(this, + InspectionsBundle.message("suspicious.name.combination.options.prompt"), + InspectionsBundle.message("suspicious.name.combination.edit.title"), + Messages.getQuestionIcon(), + inputValue, null); } private void saveChanges() { diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java index 00f0f49ea195..8fd0e093d7d1 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedLibraries/UnusedLibrariesInspection.java @@ -55,6 +55,7 @@ import com.intellij.psi.search.scope.packageSet.NamedScope; import com.intellij.psi.search.scope.packageSet.PackageSetFactory; import com.intellij.psi.search.scope.packageSet.ParsingException; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -69,11 +70,12 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { final Project project = getContext().getProject(); final ArrayList libraryRoots = new ArrayList(); if (scope.getScopeType() == AnalysisScope.PROJECT) { - libraryRoots.addAll(Arrays.asList(LibraryUtil.getLibraryRoots(project, false, false))); + ContainerUtil.addAll(libraryRoots, LibraryUtil.getLibraryRoots(project, false, false)); } else { final Set modules = new HashSet(); scope.accept(new PsiRecursiveElementVisitor() { - @Override public void visitFile(PsiFile file) { + @Override + public void visitFile(PsiFile file) { if (!(file instanceof PsiCompiledElement)) { final VirtualFile virtualFile = file.getVirtualFile(); if (virtualFile != null) { @@ -85,7 +87,7 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { } } }); - libraryRoots.addAll(Arrays.asList(LibraryUtil.getLibraryRoots(modules.toArray(new Module[modules.size()]), false, false))); + ContainerUtil.addAll(libraryRoots, LibraryUtil.getLibraryRoots(modules.toArray(new Module[modules.size()]), false, false)); } GlobalSearchScope searchScope; try { @@ -148,7 +150,8 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { if (orderEntry instanceof LibraryOrderEntry) { final RefModule refModule = refManager.getRefModule(orderEntry.getOwnerModule()); final Set files = unusedLibs.get(orderEntry); - if (files.size() < orderEntry.getFiles(OrderRootType.CLASSES).length) { + final VirtualFile[] roots = ((LibraryOrderEntry)orderEntry).getRootFiles(OrderRootType.CLASSES); + if (files.size() < roots.length) { final String unusedLibraryRoots = StringUtil.join(files, new Function() { public String fun(final VirtualFile file) { return file.getPresentableName(); @@ -244,4 +247,4 @@ public class UnusedLibrariesInspection extends DescriptorProviderInspection { }); } } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/codeInspection/unusedSymbol/UnusedSymbolLocalInspection.java b/java/java-impl/src/com/intellij/codeInspection/unusedSymbol/UnusedSymbolLocalInspection.java index 1cec76994013..cc4be90a44aa 100644 --- a/java/java-impl/src/com/intellij/codeInspection/unusedSymbol/UnusedSymbolLocalInspection.java +++ b/java/java-impl/src/com/intellij/codeInspection/unusedSymbol/UnusedSymbolLocalInspection.java @@ -31,6 +31,7 @@ import com.intellij.openapi.util.JDOMExternalizableStringList; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner; import com.intellij.psi.util.PropertyUtil; +import com.intellij.util.containers.ContainerUtil; import org.intellij.lang.annotations.Pattern; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -171,7 +172,7 @@ public class UnusedSymbolLocalInspection extends BaseJavaLocalInspectionTool imp for (Object extension : Extensions.getExtensions(ExtensionPoints.DEAD_CODE_TOOL)) { final String[] ignoredAnnotations = ((UnusedCodeExtension)extension).getIgnoreAnnotations(); if (ignoredAnnotations != null) { - annotations.addAll(Arrays.asList(ignoredAnnotations)); + ContainerUtil.addAll(annotations, ignoredAnnotations); } } ANNOTATIONS = annotations; diff --git a/java/java-impl/src/com/intellij/cyclicDependencies/actions/CyclicDependenciesAction.java b/java/java-impl/src/com/intellij/cyclicDependencies/actions/CyclicDependenciesAction.java index 615f21a72f70..7af260767aa8 100644 --- a/java/java-impl/src/com/intellij/cyclicDependencies/actions/CyclicDependenciesAction.java +++ b/java/java-impl/src/com/intellij/cyclicDependencies/actions/CyclicDependenciesAction.java @@ -27,6 +27,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.IdeBorderFactory; +import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -62,10 +63,13 @@ public class CyclicDependenciesAction extends AnAction{ } AnalysisScope scope = getInspectionScope(dataContext); if (scope == null || scope.getScopeType() != AnalysisScope.MODULES){ - ProjectModuleOrPackageDialog dlg = new ProjectModuleOrPackageDialog(module != null ? ModuleUtil.getModuleNameInReadAction(module) : null); - dlg.show(); - if (!dlg.isOK()) return; - if (dlg.isProjectScopeSelected()) { + ProjectModuleOrPackageDialog dlg = null; + if (module != null) { + dlg = new ProjectModuleOrPackageDialog(ModuleUtil.getModuleNameInReadAction(module)); + dlg.show(); + if (!dlg.isOK()) return; + } + if (dlg == null || dlg.isProjectScopeSelected()) { scope = getProjectScope(dataContext); } else { @@ -82,6 +86,7 @@ public class CyclicDependenciesAction extends AnAction{ } + @Nullable private static AnalysisScope getInspectionScope(final DataContext dataContext) { final Project project = PlatformDataKeys.PROJECT.getData(dataContext); if (project == null) return null; @@ -91,6 +96,7 @@ public class CyclicDependenciesAction extends AnAction{ return scope != null && scope.getScopeType() != AnalysisScope.INVALID ? scope : null; } + @Nullable private static AnalysisScope getInspectionScopeImpl(DataContext dataContext) { //Possible scopes: package, project, module. Project projectContext = PlatformDataKeys.PROJECT_CONTEXT.getData(dataContext); @@ -127,6 +133,7 @@ public class CyclicDependenciesAction extends AnAction{ return getProjectScope(dataContext); } + @Nullable private static AnalysisScope getProjectScope(DataContext dataContext) { final Project data = PlatformDataKeys.PROJECT.getData(dataContext); if (data == null) { @@ -135,6 +142,7 @@ public class CyclicDependenciesAction extends AnAction{ return new AnalysisScope(data); } + @Nullable private static AnalysisScope getModuleScope(DataContext dataContext) { final Module data = LangDataKeys.MODULE.getData(dataContext); if (data == null) { @@ -158,12 +166,7 @@ public class CyclicDependenciesAction extends AnAction{ init(); setTitle(AnalysisScopeBundle.message("cyclic.dependencies.scope.dialog.title", myTitle)); setHorizontalStretch(1.75f); - if (moduleName == null){ - myModuleButton.setVisible(false); - myProjectButton.setSelected(true); - } else { - myModuleButton.setSelected(true); - } + myModuleButton.setSelected(true); } protected JComponent createCenterPanel() { diff --git a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java index 90ee10cf58a3..bbc0535caf89 100644 --- a/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java +++ b/java/java-impl/src/com/intellij/find/findUsages/JavaFindUsagesHandler.java @@ -49,7 +49,10 @@ import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; /** * @author peter @@ -186,10 +189,10 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ if (doSearch) { final List elements = new ArrayList(); if (getter != null) { - elements.addAll(Arrays.asList(SuperMethodWarningUtil.checkSuperMethods(getter, ACTION_STRING))); + ContainerUtil.addAll(elements, SuperMethodWarningUtil.checkSuperMethods(getter, ACTION_STRING)); } if (setter != null) { - elements.addAll(Arrays.asList(SuperMethodWarningUtil.checkSuperMethods(setter, ACTION_STRING))); + ContainerUtil.addAll(elements, SuperMethodWarningUtil.checkSuperMethods(setter, ACTION_STRING)); } return elements.toArray(new PsiElement[elements.size()]); } @@ -415,7 +418,7 @@ public class JavaFindUsagesHandler extends FindUsagesHandler{ ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { PsiClass[] classes = JavaDirectoryService.getInstance().getClasses(dir); - array.addAll(Arrays.asList(classes)); + ContainerUtil.addAll(array, classes); if (includeSubdirs) { PsiDirectory[] dirs = dir.getSubdirectories(); for (PsiDirectory directory : dirs) { diff --git a/java/java-impl/src/com/intellij/ide/actions/CreateTemplateInPackageAction.java b/java/java-impl/src/com/intellij/ide/actions/CreateTemplateInPackageAction.java index 5defec828c81..aa9db99da131 100644 --- a/java/java-impl/src/com/intellij/ide/actions/CreateTemplateInPackageAction.java +++ b/java/java-impl/src/com/intellij/ide/actions/CreateTemplateInPackageAction.java @@ -17,7 +17,9 @@ package com.intellij.ide.actions; import com.intellij.ide.IdeView; -import com.intellij.openapi.actionSystem.*; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.LangDataKeys; +import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; @@ -33,7 +35,7 @@ import javax.swing.*; /** * @author peter */ -public abstract class CreateTemplateInPackageAction extends AnAction { +public abstract class CreateTemplateInPackageAction extends CreateFromTemplateAction { private final boolean myinSourceOnly; protected CreateTemplateInPackageAction(String text, String description, Icon icon, boolean inSourceOnly) { @@ -41,54 +43,21 @@ public abstract class CreateTemplateInPackageAction extend myinSourceOnly = inSourceOnly; } - public final void actionPerformed(final AnActionEvent e) { - final DataContext dataContext = e.getDataContext(); + @Override + @Nullable + protected T createFile(String name, String templateName, PsiDirectory dir) { + return checkOrCreate(name, dir, templateName, false); + } - final IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext); - if (view == null) { - return; - } - - final Project project = PlatformDataKeys.PROJECT.getData(dataContext); - - final PsiDirectory dir = view.getOrChooseDirectory(); - if (dir == null) return; - - final T createdElement = buildDialog(project, dir).show(getErrorTitle(), new CreateFileFromTemplateDialog.FileCreator() { - public void checkBeforeCreate(@NotNull String name, @NotNull String templateName) { - CreateTemplateInPackageAction.this.checkOrCreate(name, dir, templateName, true); - } - - public T createFile(@NotNull String name, @NotNull String templateName) { - return CreateTemplateInPackageAction.this.checkOrCreate(name, dir, templateName, false); - } - - @NotNull - public String getActionName(@NotNull String name, @NotNull String templateName) { - return CreateTemplateInPackageAction.this.getActionName(dir, name, templateName); - } - }); - if (createdElement != null) { - view.selectElement(createdElement); - } + @Override + protected void checkBeforeCreate(String name, String templateName, PsiDirectory dir) { + checkOrCreate(name, dir, templateName, true); } @Nullable protected abstract PsiElement getNavigationElement(@NotNull T createdElement); - @NotNull - protected abstract CreateFileFromTemplateDialog.Builder buildDialog(Project project, PsiDirectory directory); - - public void update(final AnActionEvent e) { - final DataContext dataContext = e.getDataContext(); - final Presentation presentation = e.getPresentation(); - - final boolean enabled = isAvailable(dataContext); - - presentation.setVisible(enabled); - presentation.setEnabled(enabled); - } - + @Override protected boolean isAvailable(final DataContext dataContext) { final Project project = PlatformDataKeys.PROJECT.getData(dataContext); final IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext); @@ -150,7 +119,4 @@ public abstract class CreateTemplateInPackageAction extend protected abstract T doCreate(final PsiDirectory dir, final String className, String templateName) throws IncorrectOperationException; - protected abstract String getActionName(PsiDirectory directory, String newName, String templateName); - - protected abstract String getErrorTitle(); } diff --git a/java/java-impl/src/com/intellij/ide/hierarchy/call/CallerMethodsTreeStructure.java b/java/java-impl/src/com/intellij/ide/hierarchy/call/CallerMethodsTreeStructure.java index 8db99a3526b9..5b111ecfd3c6 100644 --- a/java/java-impl/src/com/intellij/ide/hierarchy/call/CallerMethodsTreeStructure.java +++ b/java/java-impl/src/com/intellij/ide/hierarchy/call/CallerMethodsTreeStructure.java @@ -25,9 +25,9 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; -import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -57,9 +57,9 @@ public final class CallerMethodsTreeStructure extends HierarchyTreeStructure { final PsiClassType originalType = JavaPsiFacade.getElementFactory(myProject).createType(originalClass); final Set methodsToFind = new HashSet(); methodsToFind.add(method); - methodsToFind.addAll(Arrays.asList(method.findDeepestSuperMethods())); + ContainerUtil.addAll(methodsToFind, method.findDeepestSuperMethods()); - final Map methodToDescriptorMap = new HashMap(); + final Map methodToDescriptorMap = new HashMap(); for (final PsiMethod methodToFind : methodsToFind) { MethodReferencesSearch.search(methodToFind, searchScope, true).forEach(new Processor() { public boolean process(final PsiReference reference) { @@ -73,7 +73,9 @@ public final class CallerMethodsTreeStructure extends HierarchyTreeStructure { } if (qualifier != null && !methodToFind.hasModifierProperty(PsiModifier.STATIC)) { final PsiType qualifierType = qualifier.getType(); - if (qualifierType instanceof PsiClassType && !TypeConversionUtil.isAssignable(qualifierType, originalType) && methodToFind != method) { + if (qualifierType instanceof PsiClassType && + !TypeConversionUtil.isAssignable(qualifierType, originalType) && + methodToFind != method) { final PsiClass psiClass = ((PsiClassType)qualifierType).resolve(); if (psiClass != null) { final PsiMethod callee = psiClass.findMethodBySignature(methodToFind, true); diff --git a/java/java-impl/src/com/intellij/ide/projectView/PsiClassChildrenSource.java b/java/java-impl/src/com/intellij/ide/projectView/PsiClassChildrenSource.java index fc22d4ee89f5..05fb03c40eea 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/PsiClassChildrenSource.java +++ b/java/java-impl/src/com/intellij/ide/projectView/PsiClassChildrenSource.java @@ -17,8 +17,8 @@ package com.intellij.ide.projectView; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.util.containers.ContainerUtil; -import java.util.Arrays; import java.util.List; public interface PsiClassChildrenSource { @@ -30,19 +30,19 @@ public interface PsiClassChildrenSource { PsiClassChildrenSource METHODS = new PsiClassChildrenSource() { public void addChildren(PsiClass psiClass, List children) { - children.addAll(Arrays.asList(psiClass.getMethods())); + ContainerUtil.addAll(children, psiClass.getMethods()); } }; PsiClassChildrenSource FIELDS = new PsiClassChildrenSource() { public void addChildren(PsiClass psiClass, List children) { - children.addAll(Arrays.asList(psiClass.getFields())); + ContainerUtil.addAll(children, psiClass.getFields()); } }; PsiClassChildrenSource CLASSES = new PsiClassChildrenSource() { public void addChildren(PsiClass psiClass, List children) { - children.addAll(Arrays.asList(psiClass.getInnerClasses())); + ContainerUtil.addAll(children, psiClass.getInnerClasses()); } }; diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewLibrariesNode.java b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewLibrariesNode.java index 392af2a56520..d0358681dc74 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewLibrariesNode.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewLibrariesNode.java @@ -23,7 +23,9 @@ import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.*; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.JarFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Icons; @@ -67,19 +69,13 @@ public class PackageViewLibrariesNode extends ProjectViewNode{ } private static void addModuleLibraryRoots(ModuleRootManager moduleRootManager, List roots) { - final OrderEntry[] orderEntries = moduleRootManager.getOrderEntries(); - for (final OrderEntry orderEntry : orderEntries) { - if (!(orderEntry instanceof LibraryOrderEntry || orderEntry instanceof JdkOrderEntry)) { + final VirtualFile[] files = moduleRootManager.orderEntries().withoutModuleSourceEntries().withoutDepModules().classes().getRoots(); + for (final VirtualFile file : files) { + if (file.getFileSystem() instanceof JarFileSystem && file.getParent() != null) { + // skip entries inside jars continue; } - final VirtualFile[] files = orderEntry.getFiles(OrderRootType.CLASSES); - for (final VirtualFile file : files) { - if (file.getFileSystem() instanceof JarFileSystem && file.getParent() != null) { - // skip entries inside jars - continue; - } - roots.add(file); - } + roots.add(file); } } diff --git a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java index 2c882b11ad42..f96b1ec5772c 100644 --- a/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java +++ b/java/java-impl/src/com/intellij/ide/projectView/impl/nodes/PackageViewProjectNode.java @@ -28,6 +28,7 @@ import com.intellij.psi.JavaDirectoryService; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiPackage; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.lang.reflect.InvocationTargetException; @@ -55,7 +56,7 @@ public class PackageViewProjectNode extends AbstractProjectNode { else { final List sourceRoots = new ArrayList(); final ProjectRootManager projectRootManager = ProjectRootManager.getInstance(myProject); - sourceRoots.addAll(Arrays.asList(projectRootManager.getContentSourceRoots())); + ContainerUtil.addAll(sourceRoots, projectRootManager.getContentSourceRoots()); final PsiManager psiManager = PsiManager.getInstance(myProject); final List children = new ArrayList(); diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java index bf0c6916beca..b97433a98ca3 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaClassTreeElement.java @@ -18,6 +18,7 @@ package com.intellij.ide.structureView.impl.java; import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.structureView.impl.AddAllMembersProcessor; import com.intellij.psi.*; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; @@ -41,10 +42,10 @@ public class JavaClassTreeElement extends JavaClassTreeElementBase { List children = Arrays.asList(aClass.getChildren()); Collection ownChildren = new THashSet(); - ownChildren.addAll(Arrays.asList(aClass.getFields())); - ownChildren.addAll(Arrays.asList(aClass.getMethods())); - ownChildren.addAll(Arrays.asList(aClass.getInnerClasses())); - ownChildren.addAll(Arrays.asList(aClass.getInitializers())); + ContainerUtil.addAll(ownChildren, aClass.getFields()); + ContainerUtil.addAll(ownChildren, aClass.getMethods()); + ContainerUtil.addAll(ownChildren, aClass.getInnerClasses()); + ContainerUtil.addAll(ownChildren, aClass.getInitializers()); Collection inherited = new LinkedHashSet(children); aClass.processDeclarations(new AddAllMembersProcessor(inherited, aClass), ResolveState.initial(), null, aClass); diff --git a/java/java-impl/src/com/intellij/ide/todo/nodes/TodoJavaTreeHelper.java b/java/java-impl/src/com/intellij/ide/todo/nodes/TodoJavaTreeHelper.java index 82dc5ca09ee9..940fe5796060 100644 --- a/java/java-impl/src/com/intellij/ide/todo/nodes/TodoJavaTreeHelper.java +++ b/java/java-impl/src/com/intellij/ide/todo/nodes/TodoJavaTreeHelper.java @@ -31,6 +31,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.Nullable; import java.util.*; @@ -59,12 +60,12 @@ public class TodoJavaTreeHelper extends TodoTreeHelper { public void addPackagesToChildren(final ArrayList children, final Module module, final TodoTreeBuilder builder) { final PsiManager psiManager = PsiManager.getInstance(getProject()); final List sourceRoots = new ArrayList(); - if (module == null){ + if (module == null) { final ProjectRootManager projectRootManager = ProjectRootManager.getInstance(getProject()); - sourceRoots.addAll(Arrays.asList(projectRootManager.getContentSourceRoots())); + ContainerUtil.addAll(sourceRoots, projectRootManager.getContentSourceRoots()); } else { ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module); - sourceRoots.addAll(Arrays.asList(moduleRootManager.getSourceRoots())); + ContainerUtil.addAll(sourceRoots, moduleRootManager.getSourceRoots()); } final Set topLevelPackages = new HashSet(); for (final VirtualFile root : sourceRoots) { @@ -187,4 +188,4 @@ public class TodoJavaTreeHelper extends TodoTreeHelper { } return isEmpty; } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java index beba42382ee0..5e9a65aef891 100644 --- a/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java +++ b/java/java-impl/src/com/intellij/ide/util/gotoByName/DefaultSymbolNavigationContributor.java @@ -26,6 +26,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import java.util.*; @@ -52,9 +53,9 @@ public class DefaultSymbolNavigationContributor implements ChooseByNameContribut PsiClass[] classes = cache.getClassesByName(name, scope); List result = new ArrayList(); - result.addAll(Arrays.asList(methods)); - result.addAll(Arrays.asList(fields)); - result.addAll(Arrays.asList(classes)); + ContainerUtil.addAll(result, methods); + ContainerUtil.addAll(result, fields); + ContainerUtil.addAll(result, classes); filterOutNonOpenable(result); PsiMember[] array = result.toArray(new PsiMember[result.size()]); Arrays.sort(array, MyComparator.INSTANCE); diff --git a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java index 535a36da14d5..4ee09633632d 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaDocumentationProvider.java @@ -701,8 +701,7 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext } if (module != null) { String[] javadocPaths = ModuleRootManager.getInstance(module).getRootUrls(JavadocOrderRootType.getInstance()); - List httpRoot = getHttpRoots(javadocPaths, relPath); - if (httpRoot != null) return httpRoot; + return getHttpRoots(javadocPaths, relPath); } final List orderEntries = fileIndex.getOrderEntriesForFile(virtualFile); diff --git a/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java b/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java index d1dfb59d57af..af92a3512def 100644 --- a/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java +++ b/java/java-impl/src/com/intellij/openapi/options/colors/pages/JavaColorSettingsPage.java @@ -28,11 +28,15 @@ import com.intellij.openapi.options.colors.AttributesDescriptor; import com.intellij.openapi.options.colors.ColorDescriptor; import com.intellij.openapi.options.colors.ColorSettingsPage; import com.intellij.pom.java.LanguageLevel; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColorSettingsPage { private static final AttributesDescriptor[] ourDescriptors = { @@ -124,10 +128,13 @@ public class JavaColorSettingsPage implements ColorSettingsPage, InspectionColor @NotNull public AttributesDescriptor[] getAttributeDescriptors() { List descriptors = new ArrayList(); - descriptors.addAll(Arrays.asList(ourDescriptors)); - descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.full.coverage"), CodeInsightColors.LINE_FULL_COVERAGE)); - descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.partial.coverage"), CodeInsightColors.LINE_PARTIAL_COVERAGE)); - descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.none.coverage"), CodeInsightColors.LINE_NONE_COVERAGE)); + ContainerUtil.addAll(descriptors, ourDescriptors); + descriptors.add( + new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.full.coverage"), CodeInsightColors.LINE_FULL_COVERAGE)); + descriptors.add(new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.partial.coverage"), + CodeInsightColors.LINE_PARTIAL_COVERAGE)); + descriptors.add( + new AttributesDescriptor(OptionsBundle.message("options.java.color.descriptor.none.coverage"), CodeInsightColors.LINE_NONE_COVERAGE)); return descriptors.toArray(new AttributesDescriptor[descriptors.size()]); } diff --git a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java index dcbacb752c4d..7ed0e9161c14 100644 --- a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java +++ b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java @@ -121,6 +121,16 @@ public class JavaSdkImpl extends JavaSdk { return null; } + @NonNls public static final String MAC_HOME_PATH = "/Home"; + + @Override + public String adjustSelectedSdkHome(String homePath) { + if (SystemInfo.isMac) { + return homePath + MAC_HOME_PATH; + } + return homePath; + } + public boolean isValidSdkHome(String path) { return checkForJdk(new File(path)); } diff --git a/java/java-impl/src/com/intellij/psi/NonClasspathClassFinder.java b/java/java-impl/src/com/intellij/psi/NonClasspathClassFinder.java index bde3a3650563..70574ed584f9 100644 --- a/java/java-impl/src/com/intellij/psi/NonClasspathClassFinder.java +++ b/java/java-impl/src/com/intellij/psi/NonClasspathClassFinder.java @@ -25,6 +25,7 @@ import com.intellij.psi.impl.file.PsiPackageImpl; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.NonClasspathDirectoryScope; import com.intellij.util.Processor; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.*; @@ -50,6 +51,9 @@ public abstract class NonClasspathClassFinder extends PsiElementFinder { if (scope.contains(classRoot)) { final VirtualFile classFile = classRoot.findFileByRelativePath(qualifiedName.replace('.', '/') + ".class"); if (classFile != null) { + if (!classFile.isValid()) { + throw new AssertionError("Invalid child of valid parent: " + classFile.getPath() + "; " + classRoot.isValid() + " path=" + classRoot.getPath()); + } final PsiFile file = PsiManager.getInstance(myProject).findFile(classFile); if (file instanceof PsiClassOwner) { final PsiClass[] classes = ((PsiClassOwner)file).getClasses(); @@ -83,7 +87,7 @@ public abstract class NonClasspathClassFinder extends PsiElementFinder { if (!file.isDirectory()) { final PsiFile psi = PsiManager.getInstance(myProject).findFile(file); if (psi instanceof PsiClassOwner) { - result.addAll(Arrays.asList(((PsiClassOwner)psi).getClasses())); + ContainerUtil.addAll(result, ((PsiClassOwner)psi).getClasses()); } } } diff --git a/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java b/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java index 2b1c1fee6ac6..40c5af792b87 100644 --- a/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java +++ b/java/java-impl/src/com/intellij/psi/impl/CompositeShortNamesCache.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; @@ -188,7 +189,7 @@ public class CompositeShortNamesCache extends PsiShortNamesCache { if (myAllItems == null) { myAllItems = new THashSet(Arrays.asList(mySingleItem)); } - myAllItems.addAll(Arrays.asList(items)); + ContainerUtil.addAll(myAllItems, items); } public T[] getResult() { @@ -202,4 +203,4 @@ public class CompositeShortNamesCache extends PsiShortNamesCache { public String toString() { return "Composite cache: " + myCaches; } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java index b08d11e023e5..19e95aa46b7b 100644 --- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiFacadeImpl.java @@ -60,6 +60,7 @@ import com.intellij.util.ConcurrencyUtil; import com.intellij.util.Processor; import com.intellij.util.SmartList; import com.intellij.util.containers.ConcurrentHashMap; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBus; import org.jetbrains.annotations.NotNull; @@ -100,7 +101,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { List elementFinders = new ArrayList(); elementFinders.add(new PsiElementFinderImpl()); - elementFinders.addAll(Arrays.asList(myProject.getExtensions(PsiElementFinder.EP_NAME))); + ContainerUtil.addAll(elementFinders, myProject.getExtensions(PsiElementFinder.EP_NAME)); myElementFinders = elementFinders.toArray(new PsiElementFinder[elementFinders.size()]); myPackagePrefixIndex = new PackagePrefixIndex(myProject); @@ -109,7 +110,8 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { if (isProjectDefault) { myShortNamesCache = new EmptyShortNamesCacheImpl(); - } else { + } + else { myShortNamesCache = new PsiShortNamesCacheImpl((PsiManagerEx)PsiManager.getInstance(project)); for (final PsiShortNamesCache cache : project.getExtensions(PsiShortNamesCache.EP_NAME)) { _registerShortNamesCache(cache); @@ -118,11 +120,12 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { myFileManager = new JavaFileManagerImpl(psiManager, projectRootManagerEx, psiManager.getFileManager(), bus); - final PsiModificationTrackerImpl modificationTracker = (PsiModificationTrackerImpl) psiManager.getModificationTracker(); + final PsiModificationTrackerImpl modificationTracker = (PsiModificationTrackerImpl)psiManager.getModificationTracker(); psiManager.addTreeChangePreprocessor(new JavaCodeBlockModificationListener(modificationTracker)); bus.connect().subscribe(ProjectTopics.MODIFICATION_TRACKER, new PsiModificationTracker.Listener() { private long lastTimeSeen = -1L; + public void modificationCountChanged() { final long now = modificationTracker.getJavaStructureModificationCount(); if (lastTimeSeen != now) { @@ -224,7 +227,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { List classes = new SmartList(); for (PsiElementFinder finder : myElementFinders) { PsiClass[] finderClasses = finder.findClasses(qualifiedName, scope); - classes.addAll(Arrays.asList(finderClasses)); + ContainerUtil.addAll(classes, finderClasses); } return classes.toArray(new PsiClass[classes.size()]); @@ -322,7 +325,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { PsiClass[] classes = finder.getClasses(psiPackage, scope); if (classes.length == 0) continue; if (result == null) result = new ArrayList(); - result.addAll(Arrays.asList(classes)); + ContainerUtil.addAll(result, classes); } return result == null ? PsiClass.EMPTY_ARRAY : result.toArray(new PsiClass[result.size()]); @@ -341,7 +344,7 @@ public class JavaPsiFacadeImpl extends JavaPsiFacadeEx implements Disposable { List result = new ArrayList(); for (PsiElementFinder finder : myElementFinders) { PsiPackage[] packages = finder.getSubPackages(psiPackage, scope); - result.addAll(Arrays.asList(packages)); + ContainerUtil.addAll(result, packages); } return result.toArray(new PsiPackage[result.size()]); diff --git a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java index 9ad79c328ef7..5d790db42693 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java @@ -38,10 +38,10 @@ import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Properties; @@ -65,7 +65,7 @@ public class JavaDirectoryServiceImpl extends JavaDirectoryService { PsiClass[] psiClasses = ((PsiClassOwner)file).getClasses(); if (psiClasses.length == 0) continue; if (classes == null) classes = new ArrayList(); - classes.addAll(Arrays.asList(psiClasses)); + ContainerUtil.addAll(classes, psiClasses); } } return classes == null ? PsiClass.EMPTY_ARRAY : classes.toArray(new PsiClass[classes.size()]); diff --git a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java index 6e1cd58d31ae..be06300ba8af 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java @@ -142,7 +142,7 @@ public class JavaFileManagerImpl implements JavaFileManager { if (qualifiedName == null || !qualifiedName.equals(qName)) continue; VirtualFile vFile = aClass.getContainingFile().getVirtualFile(); - if (!fileIsInScope(scope, vFile)) continue; + if (!hasAcceptablePackage(vFile)) continue; result.add(aClass); count++; @@ -331,7 +331,7 @@ public class JavaFileManagerImpl implements JavaFileManager { } VirtualFile vFile = file.getVirtualFile(); - if (!fileIsInScope(scope, vFile)) continue; + if (!hasAcceptablePackage(vFile)) continue; if (bestFile == null || scope.compare(vFile, bestFile) > 0) { bestFile = vFile; bestClass = aClass; @@ -342,9 +342,7 @@ public class JavaFileManagerImpl implements JavaFileManager { } - private boolean fileIsInScope(final GlobalSearchScope scope, final VirtualFile vFile) { - if (!scope.contains(vFile)) return false; - + private boolean hasAcceptablePackage(final VirtualFile vFile) { if (vFile.getFileType() == StdFileTypes.CLASS) { // See IDEADEV-5626 final VirtualFile root = ProjectRootManager.getInstance(myManager.getProject()).getFileIndex().getClassRootForFile(vFile); diff --git a/java/java-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java b/java/java-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java index 3b4b0195c707..6a35c4c90f07 100644 --- a/java/java-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java +++ b/java/java-impl/src/com/intellij/psi/impl/search/JavaSourceFilterScope.java @@ -19,7 +19,6 @@ */ package com.intellij.psi.impl.search; -import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; @@ -39,9 +38,12 @@ public class JavaSourceFilterScope extends DelegatingGlobalSearchScope { if (!super.contains(file)) { return false; } - final FileType fileType = file.getFileType(); - return StdFileTypes.JAVA == fileType && myIndex.isInSourceContent(file) || - StdFileTypes.CLASS == fileType && myIndex.isInLibraryClasses(file); + + if (StdFileTypes.CLASS == file.getFileType()) { + return myIndex.isInLibraryClasses(file); + } + + return myIndex.isInSourceContent(file); } } \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java index e262972b78ba..e92b5e4830b6 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/ImportHelper.java @@ -38,6 +38,7 @@ import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashMap; import gnu.trove.THashSet; import gnu.trove.TObjectIntHashMap; @@ -645,9 +646,9 @@ public class ImportHelper{ final PsiElement child = stack.removeFirst(); if (child instanceof PsiImportList) continue; if (child instanceof PsiLiteralExpression) continue; - stack.addAll(Arrays.asList(child.getChildren())); + ContainerUtil.addAll(stack, child.getChildren()); - for(final PsiReference reference : child.getReferences()){ + for (final PsiReference reference : child.getReferences()) { if (!(reference instanceof PsiJavaReference)) continue; final PsiJavaReference javaReference = (PsiJavaReference)reference; if (javaReference instanceof JavaClassReference && ((JavaClassReference)javaReference).getContextReference() != null) continue; @@ -674,8 +675,8 @@ public class ImportHelper{ if (!(currentFileResolveScope instanceof PsiImportStatementBase)) continue; if (context != null && (!currentFileResolveScope.isValid() || - currentFileResolveScope instanceof JspxImportStatement && - context != ((JspxImportStatement)currentFileResolveScope).getDeclarationFile())) { + currentFileResolveScope instanceof JspxImportStatement && + context != ((JspxImportStatement)currentFileResolveScope).getDeclarationFile())) { continue; } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java index 0a513aec8840..84931bc09cad 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java @@ -37,6 +37,7 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import gnu.trove.THashSet; import gnu.trove.TObjectHashingStrategy; @@ -135,7 +136,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { if (JspPsiUtil.isInJspFile(file)) { // remove only duplicate imports redundants = new THashSet(TObjectHashingStrategy.IDENTITY); - redundants.addAll(Arrays.asList(imports)); + ContainerUtil.addAll(redundants, imports); redundants.removeAll(allImports); for (PsiImportStatementBase importStatement : imports) { if (importStatement instanceof JspxImportStatement && ((JspxImportStatement)importStatement).isForeignFileImport()) { @@ -231,7 +232,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { if (propertyName != null) { String[] namesByName = getSuggestionsByName(propertyName, kind, false); sortVariableNameSuggestions(namesByName, kind, propertyName, null); - names.addAll(Arrays.asList(namesByName)); + ContainerUtil.addAll(names, namesByName); } final NamesByExprInfo namesByExpr; @@ -240,7 +241,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { if (namesByExpr.propertyName != null) { sortVariableNameSuggestions(namesByExpr.names, kind, namesByExpr.propertyName, null); } - names.addAll(Arrays.asList(namesByExpr.names)); + ContainerUtil.addAll(names, namesByExpr.names); } else { namesByExpr = null; @@ -249,7 +250,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { if (type != null) { String[] namesByType = suggestVariableNameByType(type, kind); sortVariableNameSuggestions(namesByType, kind, null, type); - names.addAll(Arrays.asList(namesByType)); + ContainerUtil.addAll(names, namesByType); } final String _propertyName; @@ -327,7 +328,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { String typeName = normalizeTypeName(getTypeName(type)); if (typeName != null) { - suggestions.addAll(Arrays.asList(getSuggestionsByName(typeName, variableKind, type instanceof PsiArrayType))); + ContainerUtil.addAll(suggestions, getSuggestionsByName(typeName, variableKind, type instanceof PsiArrayType)); } return ArrayUtil.toStringArray(suggestions); @@ -352,7 +353,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { String baseName = normalizeTypeName(getTypeName(type)); if (baseName != null) { fullNameBuilder.append(baseName); - suggestions.addAll(Arrays.asList(getSuggestionsByName(fullNameBuilder.toString(), variableKind, false))); + ContainerUtil.addAll(suggestions, getSuggestionsByName(fullNameBuilder.toString(), variableKind, false)); } } @@ -411,7 +412,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { } String typeName = normalizeTypeName(getTypeName(componentType)); if (typeName != null) { - suggestions.addAll(Arrays.asList(getSuggestionsByName(typeName, variableKind, true))); + ContainerUtil.addAll(suggestions, getSuggestionsByName(typeName, variableKind, true)); } } } @@ -561,10 +562,10 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { } LinkedHashSet names = new LinkedHashSet(); - names.addAll(Arrays.asList(names1.names)); - names.addAll(Arrays.asList(names2.names)); + ContainerUtil.addAll(names, names1.names); + ContainerUtil.addAll(names, names2.names); if (names3 != null) { - names.addAll(Arrays.asList(names3)); + ContainerUtil.addAll(names, names3); } String[] namesArray = ArrayUtil.toStringArray(names); String propertyName = names1.propertyName != null ? names1.propertyName : names2.propertyName; @@ -585,7 +586,11 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { || CREATE_PREFIX.equals(firstWord)) { if (words.length > 1) { final String propertyName = methodName.substring(firstWord.length()); - final String[] names = getSuggestionsByName(propertyName, variableKind, false); + String[] names = getSuggestionsByName(propertyName, variableKind, false); + final PsiExpression qualifierExpression = methodExpr.getQualifierExpression(); + if (qualifierExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifierExpression).resolve() instanceof PsiVariable) { + names = ArrayUtil.append(names, changeIfNotIdentifier(qualifierExpression.getText() + StringUtil.capitalize(propertyName))); + } return new NamesByExprInfo(propertyName, names); } } @@ -737,6 +742,10 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { if (leftExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression) leftExpression).getQualifier() == null) { String name = leftExpression.getText(); if (name != null) { + final PsiElement resolve = ((PsiReferenceExpression)leftExpression).resolve(); + if (resolve instanceof PsiVariable) { + name = variableNameToPropertyName(name, getVariableKind((PsiVariable)resolve)); + } String[] names = getSuggestionsByName(name, variableKind, false); return new NamesByExprInfo(name, names); } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/ParamDocTagInfo.java b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/ParamDocTagInfo.java index 4bd8be483631..a6e5ef4bc54f 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/javadoc/ParamDocTagInfo.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/javadoc/ParamDocTagInfo.java @@ -17,12 +17,12 @@ package com.intellij.psi.impl.source.javadoc; import com.intellij.codeInsight.daemon.JavaErrorMessages; import com.intellij.lang.ASTNode; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; -import com.intellij.psi.util.PsiUtil; import com.intellij.psi.javadoc.JavadocTagInfo; import com.intellij.psi.javadoc.PsiDocTagValue; +import com.intellij.psi.util.PsiUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import java.util.ArrayList; import java.util.Arrays; @@ -47,7 +47,7 @@ class ParamDocTagInfo implements JavadocTagInfo { if ((PsiTypeParameterListOwner)context instanceof PsiMethod) { PsiMethod method = (PsiMethod)context; - result.addAll(Arrays.asList(method.getParameterList().getParameters())); + ContainerUtil.addAll(result, method.getParameterList().getParameters()); } return result.toArray(new PsiNamedElement[result.size()]); 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 b6902af7d931..23dbad408018 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 @@ -36,12 +36,12 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.CharTable; import com.intellij.util.IncorrectOperationException; import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -257,8 +257,8 @@ public class PsiDocMethodOrFieldRef extends CompositePsiElement implements PsiDo final List vars = new ArrayList(); final PsiElement scope = getScope(); if (scope != null) { - vars.addAll(Arrays.asList(getAllMethods(scope, PsiDocMethodOrFieldRef.this))); - vars.addAll(Arrays.asList(getAllVariables(scope, PsiDocMethodOrFieldRef.this))); + ContainerUtil.addAll(vars, getAllMethods(scope, PsiDocMethodOrFieldRef.this)); + ContainerUtil.addAll(vars, getAllVariables(scope, PsiDocMethodOrFieldRef.this)); } return vars.toArray(new PsiModifierListOwner[vars.size()]); } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java index c23d3ce2de44..d3e6181586f5 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/JavaResolveUtil.java @@ -137,7 +137,7 @@ public class JavaResolveUtil { PsiElement scope = place; while(scope != null){ if (scope instanceof PsiDocComment) return true; - if (scope instanceof PsiFile) return false; + if (scope instanceof PsiMember || scope instanceof PsiMethodCallExpression || scope instanceof PsiFile) return false; scope = scope.getContext(); } return false; diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java index 8e4d9613e170..5b831c1fb150 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FilePathReferenceProvider.java @@ -23,9 +23,13 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.util.ProcessingContext; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; /** * @author cdr @@ -109,7 +113,7 @@ public class FilePathReferenceProvider extends PsiReferenceProvider { List modules = new ArrayList(); modules.add(thisModule); ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(thisModule); - modules.addAll(Arrays.asList(moduleRootManager.getDependencies())); + ContainerUtil.addAll(modules, moduleRootManager.getDependencies()); List result = new ArrayList(); final PsiManager psiManager = PsiManager.getInstance(thisModule.getProject()); diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassListReferenceProvider.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassListReferenceProvider.java index d2ab61beac96..3e4950313e26 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassListReferenceProvider.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassListReferenceProvider.java @@ -27,7 +27,10 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * Created by IntelliJ IDEA. @@ -95,11 +98,11 @@ public class JavaClassListReferenceProvider extends JavaClassReferenceProvider { } } String s = str.substring(start, end + 1); - results.addAll(Arrays.asList(new JavaClassReferenceSet(s, position, offsetInPosition + start, false, this){ - public boolean isSoft(){ + ContainerUtil.addAll(results, new JavaClassReferenceSet(s, position, offsetInPosition + start, false, this) { + public boolean isSoft() { return true; } - }.getAllReferences())); + }.getAllReferences()); ProgressManager.checkCanceled(); } } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java index 8e8890f27c51..972167c8716c 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/JavaClassReference.java @@ -275,7 +275,7 @@ public class JavaClassReference extends GenericReference implements PsiJavaRefer } } else { - list.addAll(Arrays.asList(classes)); + ContainerUtil.addAll(list, classes); } return list.toArray(); } diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/java/PsiCompositeModifierList.java b/java/java-impl/src/com/intellij/psi/impl/source/tree/java/PsiCompositeModifierList.java index a53b0ccdfd29..44b60dbebb64 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/tree/java/PsiCompositeModifierList.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/java/PsiCompositeModifierList.java @@ -23,10 +23,10 @@ import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiManager; import com.intellij.psi.PsiModifierList; import com.intellij.psi.impl.light.LightModifierList; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public class PsiCompositeModifierList extends LightModifierList { @@ -41,7 +41,7 @@ public class PsiCompositeModifierList extends LightModifierList { public PsiAnnotation[] getAnnotations() { List annotations = new ArrayList(); for (PsiModifierList list : mySublists) { - annotations.addAll(Arrays.asList(list.getAnnotations())); + ContainerUtil.addAll(annotations, list.getAnnotations()); } return annotations.toArray(new PsiAnnotation[annotations.size()]); } @@ -68,4 +68,4 @@ public class PsiCompositeModifierList extends LightModifierList { } return false; } -} \ No newline at end of file +} diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index e0e6f39cf913..cd8ff0b67273 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -38,6 +38,7 @@ import com.intellij.refactoring.util.usageInfo.NoConstructorClassUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.Nullable; @@ -662,7 +663,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr LOG.assertTrue(toInsertParams || toInsertThrows); if (toInsertParams) { List newParameters = new ArrayList(); - newParameters.addAll(Arrays.asList(caller.getParameterList().getParameters())); + ContainerUtil.addAll(newParameters, caller.getParameterList().getParameters()); final JavaParameterInfo[] primaryNewParms = changeInfo.getNewParameters(); PsiSubstitutor substitutor = baseMethod == null ? PsiSubstitutor.EMPTY : ChangeSignatureProcessor.calculateSubstitutor(caller, baseMethod); @@ -678,7 +679,7 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr if (toInsertThrows) { List newThrowns = new ArrayList(); final PsiReferenceList throwsList = caller.getThrowsList(); - newThrowns.addAll(Arrays.asList(throwsList.getReferenceElements())); + ContainerUtil.addAll(newThrowns, throwsList.getReferenceElements()); final ThrownExceptionInfo[] primaryNewExns = changeInfo.getNewExceptions(); for (ThrownExceptionInfo thrownExceptionInfo : primaryNewExns) { if (thrownExceptionInfo.getOldIndex() < 0) { diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageSearcher.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageSearcher.java index 0ec986ef9178..c4e4fa3ac815 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageSearcher.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageSearcher.java @@ -35,10 +35,10 @@ import com.intellij.refactoring.util.usageInfo.DefaultConstructorImplicitUsageIn import com.intellij.refactoring.util.usageInfo.NoConstructorClassUsageInfo; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; import java.util.ArrayList; -import java.util.Arrays; import java.util.Set; /** @@ -101,7 +101,7 @@ class JavaChangeSignatureUsageSearcher { final PsiParameter[] parameters = method.getParameterList().getParameters(); final Set deletedOrRenamedParameters = new HashSet(); if (isOriginal) { - deletedOrRenamedParameters.addAll(Arrays.asList(parameters)); + ContainerUtil.addAll(deletedOrRenamedParameters, parameters); for (ParameterInfo parameterInfo : myChangeInfo.getNewParameters()) { if (parameterInfo.getOldIndex() >= 0 && parameterInfo.getOldIndex() < parameters.length) { final PsiParameter parameter = parameters[parameterInfo.getOldIndex()]; diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index 2f18ccf88cce..1ec3ceb5e20d 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -15,9 +15,11 @@ */ package com.intellij.refactoring.extractMethod; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.codeInsight.ChangeContextUtil; import com.intellij.codeInsight.ExceptionUtil; import com.intellij.codeInsight.highlighting.HighlightManager; +import com.intellij.codeInsight.intention.impl.AddNullableNotNullAnnotationFix; import com.intellij.codeInspection.dataFlow.RunnerResult; import com.intellij.codeInspection.dataFlow.StandardDataFlowRunner; import com.intellij.codeInspection.dataFlow.StandardInstructionVisitor; @@ -920,6 +922,18 @@ public class ExtractMethodProcessor implements MatchProvider { throwsList.add(JavaPsiFacade.getInstance(myManager.getProject()).getElementFactory().createReferenceElementByType(exception)); } + if (myNullConditionalCheck) { + final boolean isNullCheckReturnNull = (myHasExpressionOutput ? 1 : 0) + (myGenerateConditionalExit ? 1 : 0) + myOutputVariables.length <= 1; + if (isNullCheckReturnNull && PsiUtil.isLanguageLevel5OrHigher(myElements[0])) { + final PsiClass nullableAnnotationClass = + JavaPsiFacade.getInstance(myProject).findClass(AnnotationUtil.NULLABLE, GlobalSearchScope.allScope(myProject)); + if (nullableAnnotationClass != null) { + new AddNullableNotNullAnnotationFix(AnnotationUtil.NULLABLE, newMethod, AnnotationUtil.NOT_NULL) + .invoke(myProject, myEditor, myTargetClass.getContainingFile()); + } + } + } + return (PsiMethod)myStyleManager.reformat(newMethod); } @@ -1067,7 +1081,11 @@ public class ExtractMethodProcessor implements MatchProvider { } if (success) { myTargetClass = newTargetClass; - inputVariables.addAll(array); + for (PsiVariable variable : array) { + if (!inputVariables.contains(variable)) { + inputVariables.addAll(array); + } + } myNeedChangeContext = true; } } diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/InputVariables.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/InputVariables.java index 655eba6ec29e..9a7418d021ec 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/InputVariables.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/InputVariables.java @@ -29,9 +29,11 @@ import com.intellij.psi.controlFlow.ControlFlow; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.searches.ReferencesSearch; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.util.ParameterTablePanel; import com.intellij.refactoring.util.duplicates.DuplicatesFinder; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.Nullable; import java.util.*; @@ -86,6 +88,33 @@ public class InputVariables { if (type instanceof PsiEllipsisType) { type = ((PsiEllipsisType)type).toArrayType(); } + final Map casts = new HashMap(); + for (PsiReference reference : ReferencesSearch.search(var, myScope)) { + final PsiElement element = reference.getElement(); + final PsiElement parent = element.getParent(); + final PsiCodeBlock block = PsiTreeUtil.getParentOfType(parent, PsiCodeBlock.class); + if (parent instanceof PsiTypeCastExpression) { + final PsiType currentType = casts.get(block); + final PsiType castType = ((PsiTypeCastExpression)parent).getType(); + casts.put(block, getBroaderType(currentType, castType)); + } else if (!(parent instanceof PsiInstanceOfExpression)){ + if (!casts.containsKey(block)) { + casts.put(block, null); + } + } + } + if (!casts.containsValue(null)) { + PsiType currentType = null; + for (PsiType psiType : casts.values()) { + currentType = getBroaderType(currentType, psiType); + if (currentType == null) { + break; + } + } + if (currentType != null) { + type = currentType; + } + } ParameterTablePanel.VariableData data = new ParameterTablePanel.VariableData(var, type); data.name = name; @@ -111,6 +140,28 @@ public class InputVariables { return inputData; } + @Nullable + private static PsiType getBroaderType(PsiType currentType, PsiType castType) { + if (currentType != null) { + if (castType != null) { + if (TypeConversionUtil.isAssignable(castType, currentType)) { + return castType; + } else if (!TypeConversionUtil.isAssignable(currentType, castType)) { + for (PsiType superType : castType.getSuperTypes()) { + if (TypeConversionUtil.isAssignable(superType, currentType)) { + return superType; + } + } + return null; + } + } + } + else { + return castType; + } + return currentType; + } + public List getInputVariables() { return myInputVariables; } diff --git a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java index 912b44ab088a..3fc2c91f2998 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractclass/ExtractClassProcessor.java @@ -51,6 +51,7 @@ import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -110,7 +111,7 @@ public class ExtractClassProcessor extends FixableUsagesRefactoringProcessor { delegateFieldName = calculateDelegateFieldName(); requiresBackpointer = new BackpointerUsageVisitor(fields, innerClasses, methods, sourceClass).backpointerRequired(); if (requiresBackpointer) { - typeParams.addAll(Arrays.asList(sourceClass.getTypeParameters())); + ContainerUtil.addAll(typeParams, sourceClass.getTypeParameters()); } else { final Set typeParamSet = new HashSet(); diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java index 3915c8a696ae..4bc6b70363b1 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineLocalHandler.java @@ -166,7 +166,12 @@ public class InlineLocalHandler extends JavaInlineActionHandler { } } - if (checkRefsInAugmentedAssignmentOrUnaryModified(refsToInline, project, editor, localName)) { + final PsiElement writeAccess = checkRefsInAugmentedAssignmentOrUnaryModified(refsToInline); + if (writeAccess != null) { + HighlightManager.getInstance(project).addOccurrenceHighlights(editor, new PsiElement[]{writeAccess}, writeAttributes, true, null); + String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("variable.is.accessed.for.writing", localName)); + CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HelpID.INLINE_VARIABLE); + WindowManager.getInstance().getStatusBar(project).setInfo(RefactoringBundle.message("press.escape.to.remove.the.highlighting")); return; } @@ -238,8 +243,8 @@ public class InlineLocalHandler extends JavaInlineActionHandler { }, RefactoringBundle.message("inline.command", localName), null); } - private static boolean checkRefsInAugmentedAssignmentOrUnaryModified(final PsiElement[] refsToInline, final Project project, final Editor editor, - final String localName) { + @Nullable + public static PsiElement checkRefsInAugmentedAssignmentOrUnaryModified(final PsiElement[] refsToInline) { for (PsiElement element : refsToInline) { PsiElement parent = element.getParent(); @@ -251,16 +256,10 @@ public class InlineLocalHandler extends JavaInlineActionHandler { if (parent instanceof PsiAssignmentExpression && element == ((PsiAssignmentExpression)parent).getLExpression() || isUnaryWriteExpression(parent)) { - EditorColorsManager manager = EditorColorsManager.getInstance(); - final TextAttributes writeAttributes = manager.getGlobalScheme().getAttributes(EditorColors.WRITE_SEARCH_RESULT_ATTRIBUTES); - HighlightManager.getInstance(project).addOccurrenceHighlights(editor, new PsiElement[]{element}, writeAttributes, true, null); - String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("variable.is.accessed.for.writing", localName)); - CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HelpID.INLINE_VARIABLE); - WindowManager.getInstance().getStatusBar(project).setInfo(RefactoringBundle.message("press.escape.to.remove.the.highlighting")); - return true; + return element; } } - return false; + return null; } private static boolean isUnaryWriteExpression(PsiElement parent) { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java index 104332c1c3e8..d93340f4108d 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineParameterHandler.java @@ -26,12 +26,15 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.psi.*; +import com.intellij.psi.controlFlow.DefUseUtil; import com.intellij.psi.search.searches.OverridingMethodsSearch; import com.intellij.psi.search.searches.ReferencesSearch; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.util.CommonRefactoringUtil; +import com.intellij.refactoring.util.InlineUtil; import com.intellij.refactoring.util.RefactoringMessageDialog; import com.intellij.util.Processor; import org.jetbrains.annotations.Nullable; @@ -107,7 +110,36 @@ public class InlineParameterHandler extends JavaInlineActionHandler { } }); if (occurrences.isEmpty()) { - CommonRefactoringUtil.showErrorHint(project, editor, "Method has no usages", RefactoringBundle.message("inline.parameter.refactoring"), null); + final int offset = editor.getCaretModel().getOffset(); + final PsiElement refExpr = psiElement.getContainingFile().findElementAt(offset); + final PsiCodeBlock codeBlock = PsiTreeUtil.getParentOfType(refExpr, PsiCodeBlock.class); + if (codeBlock != null) { + final PsiElement[] defs = DefUseUtil.getDefs(codeBlock, psiParameter, refExpr); + if (defs.length == 1) { + final PsiElement def = defs[0]; + if (def instanceof PsiReferenceExpression && PsiUtil.isOnAssignmentLeftHand((PsiExpression)def)) { + final PsiExpression rExpr = ((PsiAssignmentExpression)def.getParent()).getRExpression(); + if (rExpr != null) { + final PsiElement[] refs = DefUseUtil.getRefs(codeBlock, psiParameter, refExpr); + + if (InlineLocalHandler.checkRefsInAugmentedAssignmentOrUnaryModified(refs) == null) { + new WriteCommandAction(project) { + @Override + protected void run(Result result) throws Throwable { + for (final PsiElement ref : refs) { + InlineUtil.inlineVariable(psiParameter, rExpr, (PsiJavaCodeReferenceElement)ref); + } + def.getParent().delete(); + } + }.execute(); + return; + } + } + } + } + } + CommonRefactoringUtil + .showErrorHint(project, editor, "Method has no usages", RefactoringBundle.message("inline.parameter.refactoring"), null); return; } if (!result) { diff --git a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java index 5f10465e8a32..b9d681d4b408 100644 --- a/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/inline/InlineToAnonymousClassHandler.java @@ -18,6 +18,7 @@ package com.intellij.refactoring.inline; import com.intellij.codeInsight.TargetElementUtilBase; import com.intellij.lang.StdLanguages; import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.patterns.ElementPattern; @@ -34,6 +35,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Collection; /** @@ -50,17 +52,29 @@ public class InlineToAnonymousClassHandler extends JavaInlineActionHandler { return element instanceof PsiMethod || element instanceof PsiClass; } - public boolean canInlineElement(PsiElement element) { + public boolean canInlineElement(final PsiElement element) { if (element.getLanguage() != StdLanguages.JAVA) return false; if (element instanceof PsiMethod) { PsiMethod method = (PsiMethod)element; if (method.isConstructor() && !InlineMethodHandler.isChainingConstructor(method)) { final PsiClass containingClass = method.getContainingClass(); - return containingClass != null && ClassInheritorsSearch.search(containingClass).findAll().size() == 0; + if (containingClass == null) return false; + return findClassInheritors(containingClass); } } if (!(element instanceof PsiClass)) return false; - Collection inheritors = ClassInheritorsSearch.search((PsiClass)element).findAll(); + if (element instanceof PsiAnonymousClass) return false; + return findClassInheritors((PsiClass)element); + } + + private static boolean findClassInheritors(final PsiClass element) { + final Collection inheritors = new ArrayList(); + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable(){ + @Override + public void run() { + inheritors.addAll(ClassInheritorsSearch.search(element).findAll()); + } + }, "Searching for class \"" + element.getQualifiedName() + "\" inheritors ...", true, element.getProject())) return false; return inheritors.size() == 0; } @@ -78,9 +92,15 @@ public class InlineToAnonymousClassHandler extends JavaInlineActionHandler { return; } - String errorMessage = getCannotInlineMessage(psiClass); - if (errorMessage != null) { - CommonRefactoringUtil.showErrorHint(project, editor, errorMessage, RefactoringBundle.message("inline.to.anonymous.refactoring"), null); + final Ref errorMessage = new Ref(); + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable(){ + @Override + public void run() { + errorMessage.set(getCannotInlineMessage(psiClass)); + } + }, "Check if inline is possible...", true, project)) return; + if (errorMessage.get() != null) { + CommonRefactoringUtil.showErrorHint(project, editor, errorMessage.get(), RefactoringBundle.message("inline.to.anonymous.refactoring"), null); return; } diff --git a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java index 9d373db01edc..705c7f0e195a 100644 --- a/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java +++ b/java/java-impl/src/com/intellij/refactoring/introduceVariable/IntroduceVariableBase.java @@ -127,6 +127,9 @@ public abstract class IntroduceVariableBase extends IntroduceHandlerBase impleme correctedOffset = offset; } else if (!Character.isJavaIdentifierPart(text.charAt(correctedOffset))) { + if (text.charAt(correctedOffset) == ';') {//initially caret on the end of line + correctedOffset--; + } if (text.charAt(correctedOffset) != ')') { correctedOffset = offset; } diff --git a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java index 5c5036683675..f0510564c983 100644 --- a/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/makeStatic/MakeMethodOrClassStaticProcessor.java @@ -44,11 +44,11 @@ import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; import com.intellij.usageView.UsageViewUtil; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; import java.util.List; @@ -200,7 +200,7 @@ public abstract class MakeMethodOrClassStaticProcessor result = new ArrayList(); - result.addAll(Arrays.asList(MakeStaticUtil.findClassRefsInMember(myMember, true))); + ContainerUtil.addAll(result, MakeStaticUtil.findClassRefsInMember(myMember, true)); if (mySettings.isReplaceUsages()) { findExternalUsages(result); diff --git a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java index 55e137a4d9b9..bd2e176dd899 100644 --- a/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/memberPullUp/JavaPullUpHandler.java @@ -29,6 +29,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; +import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.psi.*; @@ -142,11 +143,17 @@ public class JavaPullUpHandler implements RefactoringActionHandler, PullUpDialog - public boolean checkConflicts(PullUpDialog dialog) { + public boolean checkConflicts(final PullUpDialog dialog) { final MemberInfo[] infos = dialog.getSelectedMemberInfos(); - PsiClass superClass = dialog.getSuperClass(); + final PsiClass superClass = dialog.getSuperClass(); if (!checkWritable(superClass, infos)) return false; - MultiMap conflicts = PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, null, null, dialog.getContainmentVerifier()); + final MultiMap conflicts = new MultiMap(); + if (!ProgressManager.getInstance().runProcessWithProgressSynchronously(new Runnable() { + public void run() { + conflicts + .putAllValues(PullUpConflictsUtil.checkConflicts(infos, mySubclass, superClass, null, null, dialog.getContainmentVerifier())); + } + }, "Detecting possible conflicts...", true, myProject)) return false; if (!conflicts.isEmpty()) { ConflictsDialog conflictsDialog = new ConflictsDialog(myProject, conflicts); conflictsDialog.show(); diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodHandler.java b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodHandler.java index 1430da9bea02..ed51d5326147 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveInstanceMethod/MoveInstanceMethodHandler.java @@ -37,6 +37,7 @@ import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.makeStatic.MakeStaticHandler; import com.intellij.refactoring.move.MoveInstanceMembersUtil; import com.intellij.refactoring.util.CommonRefactoringUtil; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -131,8 +132,8 @@ public class MoveInstanceMethodHandler implements RefactoringActionHandler { @Nullable private static String collectSuitableVariables(final PsiMethod method, final List suitableVariables) { final List allVariables = new ArrayList(); - allVariables.addAll(Arrays.asList(method.getParameterList().getParameters())); - allVariables.addAll(Arrays.asList(method.getContainingClass().getFields())); + ContainerUtil.addAll(allVariables, method.getParameterList().getParameters()); + ContainerUtil.addAll(allVariables, method.getContainingClass().getFields()); boolean classTypesFound = false; boolean resolvableClassesFound = false; boolean classesInProjectFound = false; diff --git a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java index 2852d5b6144c..6ddce912fa95 100644 --- a/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/move/moveMembers/MoveMembersProcessor.java @@ -45,6 +45,7 @@ import com.intellij.usageView.UsageViewDescriptor; import com.intellij.usageView.UsageViewUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashMap; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; @@ -80,7 +81,7 @@ public class MoveMembersProcessor extends BaseRefactoringProcessor { myOptions = dialog; PsiMember[] members = dialog.getSelectedMembers(); myMembersToMove.clear(); - myMembersToMove.addAll(Arrays.asList(members)); + ContainerUtil.addAll(myMembersToMove, members); setCommandName(members); diff --git a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ParameterData.java b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ParameterData.java index 4d7307edeeb3..5279cd3a3b25 100644 --- a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ParameterData.java +++ b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ParameterData.java @@ -25,7 +25,7 @@ import com.intellij.psi.*; import com.intellij.psi.codeStyle.JavaCodeStyleManager; import com.intellij.psi.codeStyle.VariableKind; import com.intellij.psi.util.PropertyUtil; -import org.jetbrains.annotations.Nullable; +import com.intellij.refactoring.util.RefactoringUtil; import java.util.Map; @@ -51,7 +51,7 @@ public class ParameterData { initParameterData(parameter, result); } - final PsiMethod chainedConstructor = getChainedConstructor(constructor); + final PsiMethod chainedConstructor = RefactoringUtil.getChainedConstructor(constructor); if (chainedConstructor != null) { final PsiCodeBlock constructorBody = constructor.getBody(); LOG.assertTrue(constructorBody != null); @@ -68,24 +68,6 @@ public class ParameterData { } } - @Nullable - public static PsiMethod getChainedConstructor(PsiMethod constructor) { - final PsiCodeBlock constructorBody = constructor.getBody(); - LOG.assertTrue(constructorBody != null); - final PsiStatement[] statements = constructorBody.getStatements(); - if (statements.length == 1 && statements[0] instanceof PsiExpressionStatement) { - final PsiExpression expression = ((PsiExpressionStatement)statements[0]).getExpression(); - if (expression instanceof PsiMethodCallExpression) { - final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression; - final PsiReferenceExpression methodExpr = methodCallExpression.getMethodExpression(); - if ("this".equals(methodExpr.getReferenceName())) { - return (PsiMethod)methodExpr.resolve(); - } - } - } - return null; - } - private static ParameterData initParameterData(PsiParameter parameter, Map result) { JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(parameter.getProject()); final String paramName = parameter.getName(); diff --git a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java index 41f53f6631d7..f6b4b5e6463e 100644 --- a/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/replaceConstructorWithBuilder/ReplaceConstructorWithBuilderProcessor.java @@ -40,6 +40,7 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.refactoring.replaceConstructorWithBuilder.usageInfo.ReplaceConstructorWithSettersChainInfo; import com.intellij.refactoring.util.FixableUsageInfo; import com.intellij.refactoring.util.FixableUsagesRefactoringProcessor; +import com.intellij.refactoring.util.RefactoringUtil; import com.intellij.usageView.UsageInfo; import com.intellij.usageView.UsageViewDescriptor; import com.intellij.util.IncorrectOperationException; @@ -234,7 +235,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto if (myConstructors.length == 1) return myConstructors[0]; PsiMethod commonConstructor = null; for (PsiMethod constructor : myConstructors) { - final PsiMethod chainedConstructor = ParameterData.getChainedConstructor(constructor); + final PsiMethod chainedConstructor = RefactoringUtil.getChainedConstructor(constructor); if (chainedConstructor == null) { if (commonConstructor != null) { if (!isChained(commonConstructor, constructor)) { @@ -258,7 +259,7 @@ public class ReplaceConstructorWithBuilderProcessor extends FixableUsagesRefacto private static boolean isChained(PsiMethod first, PsiMethod last) { if (first == null) return false; if (first == last) return true; - return isChained(ParameterData.getChainedConstructor(first), last); + return isChained(RefactoringUtil.getChainedConstructor(first), last); } private String createMethodName() { diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/ClassTypeArgumentMigrationProcessor.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/ClassTypeArgumentMigrationProcessor.java index 9f78f9d47e37..2bbdaaf7862d 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/ClassTypeArgumentMigrationProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/ClassTypeArgumentMigrationProcessor.java @@ -13,6 +13,7 @@ import com.intellij.psi.util.InheritanceUtil; import com.intellij.psi.util.MethodSignatureUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.typeMigration.usageInfo.TypeMigrationUsageInfo; +import com.intellij.util.containers.ContainerUtil; import java.util.*; @@ -153,7 +154,7 @@ public class ClassTypeArgumentMigrationProcessor { private final Set myTypeParams = new HashSet(); private TypeParameterSearcher(final PsiTypeParameter[] set) { - myTypeParams.addAll(Arrays.asList(set)); + ContainerUtil.addAll(myTypeParams, set); } public Boolean visitType(final PsiType type) { diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeEvaluator.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeEvaluator.java index 93f340b74cb0..43d63970e765 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeEvaluator.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeEvaluator.java @@ -402,7 +402,7 @@ public class TypeEvaluator { public static PsiType substituteType(final PsiType migrationTtype, final PsiType originalType, final boolean isContraVariantPosition) { if ( originalType instanceof PsiClassType && migrationTtype instanceof PsiClassType) { final PsiClass originalClass = ((PsiClassType)originalType).resolve(); - if (isContraVariantPosition && ((PsiClassType)originalType).rawType().isAssignableFrom(((PsiClassType)migrationTtype).rawType())) { + if (isContraVariantPosition && TypeConversionUtil.erasure(originalType).isAssignableFrom(TypeConversionUtil.erasure(migrationTtype))) { final PsiClass psiClass = ((PsiClassType)migrationTtype).resolve(); final PsiSubstitutor substitutor = TypeConversionUtil.getClassSubstitutor(originalClass, psiClass, PsiSubstitutor.EMPTY); if (substitutor != null) { @@ -413,7 +413,8 @@ public class TypeEvaluator { } } } - else if (!isContraVariantPosition && ((PsiClassType)migrationTtype).rawType().isAssignableFrom(((PsiClassType)originalType).rawType())) { + else if (!isContraVariantPosition && TypeConversionUtil.erasure(migrationTtype).isAssignableFrom(TypeConversionUtil.erasure( + originalType))) { final PsiType psiType = substituteType(migrationTtype, originalType, false, originalClass, JavaPsiFacade.getElementFactory(originalClass.getProject()).createType(originalClass, PsiSubstitutor.EMPTY)); if (psiType != null) { return psiType; diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java index b1f85817e46b..f2d386edd980 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationLabeler.java @@ -362,15 +362,7 @@ public class TypeMigrationLabeler { type = userDefinedType ? type : TypeEvaluator.substituteType(type, originalType, isContraVariantPosition); if (!userDefinedType) { - if (originalType instanceof PsiClassType) { - final PsiClassType psiClassType = (PsiClassType)originalType; - if (psiClassType.resolve() instanceof PsiTypeParameter) { - return false; - } - for (PsiType paramType : psiClassType.getParameters()) { - if (paramType instanceof PsiClassType && ((PsiClassType)paramType).resolve() instanceof PsiTypeParameter) return false; - } - } + if (typeContainsTypeParameters(originalType)) return false; } if (type instanceof PsiCapturedWildcardType) { @@ -399,11 +391,7 @@ public class TypeMigrationLabeler { return !alreadyProcessed; } else if (resolved instanceof PsiParameter && ((PsiParameter)resolved).getDeclarationScope() instanceof PsiMethod) { - final PsiMethod method = PsiTreeUtil.getParentOfType(resolved, PsiMethod.class); - - if (method == null) { - return false; - } + final PsiMethod method = (PsiMethod)((PsiParameter)resolved).getDeclarationScope(); final int index = method.getParameterList().getParameterIndex(((PsiParameter)resolved)); final PsiMethod[] methods = OverridingMethodsSearch.search(method, method.getUseScope(), false).toArray(PsiMethod.EMPTY_ARRAY); @@ -433,6 +421,18 @@ public class TypeMigrationLabeler { } } + static boolean typeContainsTypeParameters(PsiType originalType) { + if (originalType instanceof PsiClassType) { + final PsiClassType psiClassType = (PsiClassType)originalType; + if (psiClassType.resolve() instanceof PsiTypeParameter) { + return true; + } + for (PsiType paramType : psiClassType.getParameters()) { + if (paramType instanceof PsiClassType && ((PsiClassType)paramType).resolve() instanceof PsiTypeParameter) return true; + } + } + return false; + } @Nullable diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationRules.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationRules.java index da6f08d8bd3b..aa029927fd38 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationRules.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationRules.java @@ -5,11 +5,12 @@ import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.search.SearchScope; import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.refactoring.typeMigration.rules.*; +import com.intellij.refactoring.typeMigration.rules.RootTypeConversionRule; +import com.intellij.refactoring.typeMigration.rules.TypeConversionRule; +import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; -import java.util.Arrays; import java.util.LinkedList; /** @@ -29,7 +30,7 @@ public class TypeMigrationRules { public TypeMigrationRules(final PsiType root) { myRootType = root; myConversionRules.add(new RootTypeConversionRule()); - myConversionRules.addAll(Arrays.asList(Extensions.getExtensions(TypeConversionRule.EP_NAME))); + ContainerUtil.addAll(myConversionRules, Extensions.getExtensions(TypeConversionRule.EP_NAME)); } public void setMigrationRootType(PsiType migrationRootType) { diff --git a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationStatementProcessor.java b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationStatementProcessor.java index dc7a470a4363..84c7fe5be7d3 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationStatementProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/typeMigration/TypeMigrationStatementProcessor.java @@ -168,7 +168,10 @@ class TypeMigrationStatementProcessor extends JavaRecursiveElementVisitor { final PsiType valueType = myTypeEvaluator.evaluateType(value); if (returnType != null && valueType != null) { - myLabeler.addMigrationRoot(method, valueType, myStatement, TypeConversionUtil.isAssignable(returnType, valueType), true); + if (!myLabeler.addMigrationRoot(method, valueType, myStatement, TypeConversionUtil.isAssignable(returnType, valueType), true) + && TypeMigrationLabeler.typeContainsTypeParameters(returnType)) { + myLabeler.markFailedConversion(new Pair(returnType, valueType), value); + } } } } diff --git a/java/java-impl/src/com/intellij/refactoring/util/FieldConflictsResolver.java b/java/java-impl/src/com/intellij/refactoring/util/FieldConflictsResolver.java index 9fbea01ed06b..974568a2a324 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/FieldConflictsResolver.java +++ b/java/java-impl/src/com/intellij/refactoring/util/FieldConflictsResolver.java @@ -15,6 +15,7 @@ */ package com.intellij.refactoring.util; +import com.intellij.codeInsight.daemon.impl.analysis.HighlightUtil; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; @@ -113,6 +114,13 @@ public class FieldConflictsResolver { final PsiMember member, @Nullable final PsiClass qualifyingClass) throws IncorrectOperationException { PsiManager manager = referenceExpression.getManager(); + PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(referenceExpression, PsiMethodCallExpression.class, true); + while ((methodCallExpression) != null) { + if (HighlightUtil.isSuperOrThisMethodCall(methodCallExpression)) { + return referenceExpression; + } + methodCallExpression = PsiTreeUtil.getParentOfType(methodCallExpression, PsiMethodCallExpression.class, true); + } PsiReferenceExpression expressionFromText; final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory(); if (qualifyingClass == null) { diff --git a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java index 5cd57a03d9dd..2d9a51938ce4 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java +++ b/java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java @@ -63,8 +63,6 @@ import org.jetbrains.annotations.Nullable; import java.util.*; -import static com.intellij.psi.JavaTokenType.*; - public class RefactoringUtil { private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.util.RefactoringUtil"); public static final int EXPR_COPY_SAFE = 0; @@ -913,6 +911,24 @@ public class RefactoringUtil { return array; } + @Nullable + public static PsiMethod getChainedConstructor(PsiMethod constructor) { + final PsiCodeBlock constructorBody = constructor.getBody(); + LOG.assertTrue(constructorBody != null); + final PsiStatement[] statements = constructorBody.getStatements(); + if (statements.length == 1 && statements[0] instanceof PsiExpressionStatement) { + final PsiExpression expression = ((PsiExpressionStatement)statements[0]).getExpression(); + if (expression instanceof PsiMethodCallExpression) { + final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression; + final PsiReferenceExpression methodExpr = methodCallExpression.getMethodExpression(); + if ("this".equals(methodExpr.getReferenceName())) { + return (PsiMethod)methodExpr.resolve(); + } + } + } + return null; + } + public static interface ImplicitConstructorUsageVisitor { void visitConstructor(PsiMethod constructor, PsiMethod baseConstructor); diff --git a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java index 52d34e93eb43..65f2783627ac 100644 --- a/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java +++ b/java/java-impl/src/com/intellij/refactoring/util/duplicates/DuplicatesFinder.java @@ -292,13 +292,16 @@ public class DuplicatesFinder { if (pattern instanceof PsiExpressionList && candidate instanceof PsiExpressionList) { //check varargs final PsiExpression[] expressions = ((PsiExpressionList)pattern).getExpressions(); final PsiExpression[] childExpressions = ((PsiExpressionList)candidate).getExpressions(); - if (expressions.length < childExpressions.length && expressions.length > 0 && expressions[expressions.length - 1] instanceof PsiReferenceExpression) { + if (expressions.length > 0 && expressions[expressions.length - 1] instanceof PsiReferenceExpression) { final PsiElement resolved = ((PsiReferenceExpression)expressions[expressions.length - 1]).resolve(); if (resolved instanceof PsiParameter && ((PsiParameter)resolved).getType() instanceof PsiEllipsisType) { for(int i = 0; i < expressions.length - 1; i++) { final Pair parameter = expressions[i].getUserData(PARAMETER); - if (parameter == null) return false; - if (!match.putParameter(parameter, childExpressions[i])) return false; + if (parameter == null) { + if (!matchPattern(expressions[i], childExpressions[i], candidates, match)) { + return false; + } + } else if (!match.putParameter(parameter, childExpressions[i])) return false; } final Pair param = expressions[expressions.length - 1].getUserData(PARAMETER); if (param == null) return false; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java new file mode 100644 index 000000000000..830383e3a2ee --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/afterChainedCalls.java @@ -0,0 +1,14 @@ +// "Add constructor parameter" "true" +class A { + private final int field; + private int j; + + A(int field) { + this(0, field); + } + + A(int j, int field) { + this.j = j; + this.field = field; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java new file mode 100644 index 000000000000..5b1f93172630 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createConstructorParameterFromField/beforeChainedCalls.java @@ -0,0 +1,13 @@ +// "Add constructor parameter" "true" +class A { + private final int field; + private int j; + + A() { + this(0); + } + + A(int j) { + this.j = j; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java new file mode 100644 index 000000000000..9ca346215c77 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/suppressLocalInspection/before12.java @@ -0,0 +1,16 @@ +// "Suppress for class" "false" + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +class Test { + @javax.annotation.Generated(value = "unknown") + public static void main(String[] args) { + ActionListener listener = new ActionListener() { + public void actionPerformed(ActionEvent e) { + int i = 0; + System.out.println(i); + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java new file mode 100644 index 000000000000..129158349fcc --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/afterOrParenthesis.java @@ -0,0 +1,9 @@ +class C { + void foo() { + if (a) { + call(); + } else if (b) { + call(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java new file mode 100644 index 000000000000..19020cded56d --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/afterParenthesis.java @@ -0,0 +1,9 @@ +class C { + void foo() { + if (a) { + if (b) { + call(); + } + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java new file mode 100644 index 000000000000..32c9a7b59d8b --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeOrParenthesis.java @@ -0,0 +1,7 @@ +class C { + void foo() { + if ((a) || (b)) { + call(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java b/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java new file mode 100644 index 000000000000..4fb622a99c0b --- /dev/null +++ b/java/java-tests/testData/codeInsight/splitIfAction/beforeParenthesis.java @@ -0,0 +1,7 @@ +class C { + void foo() { + if ((a) && (b)) { + call(); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java new file mode 100644 index 000000000000..fc9dc3af5e2d --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous.java @@ -0,0 +1,12 @@ +class Test { + void f() { + new Runnable() { + public void run() { + int j = 0; + if (j == 0 && j < 0 && j > 0) { + assert false; + } + } + }; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java new file mode 100644 index 000000000000..8768dbc565af --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/ParametersFromAnonymous_after.java @@ -0,0 +1,16 @@ +class Test { + void f() { + new Runnable() { + public void run() { + int j = 0; + if (j == 0 && newMethod(j)) { + assert false; + } + } + }; + } + + private boolean newMethod(int j) { + return j < 0 && j > 0; + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java new file mode 100644 index 000000000000..9e5953fec89e --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java @@ -0,0 +1,6 @@ +public class ExpData { + void foo(String s) { + s = ""; + System.out.println(s.substring(2)); + } +} diff --git a/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after new file mode 100644 index 000000000000..332d13232d9c --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/InlineLocalParamDef.java.after @@ -0,0 +1,5 @@ +public class ExpData { + void foo(String s) { + System.out.println("".substring(2)); + } +} diff --git a/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java b/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java new file mode 100644 index 000000000000..a9c50831ad68 --- /dev/null +++ b/java/java-tests/testData/refactoring/inlineParameter/ParameterDefWithWriteAccess.java @@ -0,0 +1,6 @@ +public class ExpData { + void foo(int i) { + i = 0; + System.out.println(i++); + } +} diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java new file mode 100644 index 000000000000..563dddcca1b2 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java @@ -0,0 +1,14 @@ +class A { + void bar(int i){ + method(1); + method(i, "a"); + method(1, "a", "b"); + } + + void m(String... args) { + method(1, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after new file mode 100644 index 000000000000..dfe62140f596 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/IncorrectVarargsAccess.java.after @@ -0,0 +1,14 @@ +class A { + void bar(int i){ + m(new String[0]); + method(i, "a"); + m("a", "b"); + } + + void m(String... args) { + method(1, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java new file mode 100644 index 000000000000..c031ecfc0e25 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java @@ -0,0 +1,14 @@ +class A { + void bar(int i){ + method(i); + method(i, "a"); + method(i, "a", "b"); + } + + void m(int i, String... args) { + method(i, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after new file mode 100644 index 000000000000..447b90c2f410 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarVarargsAccess.java.after @@ -0,0 +1,14 @@ +class A { + void bar(int i){ + m(i, new String[0]); + m(i, "a"); + m(i, "a", "b"); + } + + void m(int i, String... args) { + method(i, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java new file mode 100644 index 000000000000..4f9caccb9874 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java @@ -0,0 +1,14 @@ +class A { + { + method(1); + method(1, "a"); + method(1, "a", "b"); + } + + void m(String... args) { + method(1, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after new file mode 100644 index 000000000000..645d7c52a222 --- /dev/null +++ b/java/java-tests/testData/refactoring/methodDuplicatesMisc/VarargsAccess.java.after @@ -0,0 +1,14 @@ +class A { + { + m(new String[0]); + m("a"); + m("a", "b"); + } + + void m(String... args) { + method(1, args); + } + + void method(int i, String... args) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java new file mode 100644 index 000000000000..daf6dbc6cf54 --- /dev/null +++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/after/X.java @@ -0,0 +1,12 @@ +public class X { +} + +class MyClass1 {} + +/** + * {@link #MyClass1Impl()} + */ +class MyClass1Impl extends MyClass1 { + MyClass1Impl() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java new file mode 100644 index 000000000000..b4807562986a --- /dev/null +++ b/java/java-tests/testData/refactoring/renameClass/automaticRenameInheritors/before/X.java @@ -0,0 +1,12 @@ +public class X { +} + +class MyClass {} + +/** + * {@link #MyClassImpl()} + */ +class MyClassImpl extends MyClass { + MyClassImpl() { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java b/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java new file mode 100644 index 000000000000..967fe3c7af78 --- /dev/null +++ b/java/java-tests/testData/refactoring/suggestedTypes/CastInside.java @@ -0,0 +1,7 @@ +class Test { + void foo(Object o) { + ((A)o).doSmth(); + } +} + +class A {void doSmth(){}} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java b/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java new file mode 100644 index 000000000000..7e0fc0e58173 --- /dev/null +++ b/java/java-tests/testData/refactoring/suggestedTypes/CastNoCast.java @@ -0,0 +1,14 @@ +class Test { + void foo(Object o) { + + if (true) { + ((A1)o).doSmth(); + } else { + o.toString(); + } + + } +} + +class A {void doSmth(){}} +class A1 extends A {} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java b/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java new file mode 100644 index 000000000000..91aeb8a8d41b --- /dev/null +++ b/java/java-tests/testData/refactoring/suggestedTypes/MultipleCasts.java @@ -0,0 +1,15 @@ +class Test { + void foo(Object o) { + + if (true) { + ((A1)o).doSmth(); + } else { + ((A2)o).doSmth(); + } + + } +} + +class A {void doSmth(){}} +class A1 extends A {} +class A2 extends A {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java index 0323fe9e45dd..485cc0b02b81 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java @@ -145,9 +145,7 @@ public class CompleteStatementTest extends EditorActionTestCase { public void testSCR36110() throws Exception { JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject()); LanguageLevel old = LanguageLevelProjectExtension.getInstance(facade.getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(facade.getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); doTest(); - LanguageLevelProjectExtension.getInstance(facade.getProject()).setLanguageLevel(old); } public void testSCR37331() throws Exception { doTest(); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavySmartTypeCompletion15Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavySmartTypeCompletion15Test.java index e5ad185ef108..750c40dedd5b 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavySmartTypeCompletion15Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/HeavySmartTypeCompletion15Test.java @@ -4,8 +4,6 @@ import com.intellij.JavaTestUtil; import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; @SuppressWarnings({"ALL"}) public class HeavySmartTypeCompletion15Test extends CompletionTestCase { @@ -79,11 +77,6 @@ public class HeavySmartTypeCompletion15Test extends CompletionTestCase { complete(); } - protected void setUp() throws Exception { - super.setUp(); - LanguageLevelProjectExtension.getInstance(myJavaFacade.getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - protected void tearDown() throws Exception { LookupManager.getInstance(myProject).hideActiveLookup(); super.tearDown(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java index c0261cfb210b..6f65c32a2e3d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java @@ -1,8 +1,6 @@ package com.intellij.codeInsight.completion; import com.intellij.JavaTestUtil; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; /** @@ -109,15 +107,8 @@ public class KeywordCompletionTest extends LightCompletionTestCase { } public void testExtends_12() throws Exception { - final LanguageLevel level = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - try { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - configureByFile(BASE_PATH + "/extends-12.java"); - checkResultByFile(BASE_PATH + "/extends-12-result.java"); - } - finally { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(level); - } + configureByFile(BASE_PATH + "/extends-12.java"); + checkResultByFile(BASE_PATH + "/extends-12-result.java"); } public void testSynchronized_1() throws Exception { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.java index 40cb370a5fe7..447d073a858e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.java @@ -6,10 +6,8 @@ import com.intellij.codeInsight.lookup.Lookup; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.openapi.editor.impl.EditorImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.CommonClassNames; import com.intellij.psi.PsiDocumentManager; import com.intellij.psi.PsiMethod; @@ -241,39 +239,33 @@ public class NormalCompletionTest extends LightCompletionTestCase { } public void testSwitchEnumLabel() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/SwitchEnumLabel.java"); assertEquals(3, myItems.length); } public void testMethodInAnnotation() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation.java"); checkResultByFile("/codeInsight/completion/normal/Annotation_after.java"); } public void testMethodInAnnotation2() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation2.java"); checkResultByFile("/codeInsight/completion/normal/Annotation2_after.java"); } public void testMethodInAnnotation3() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation3.java"); checkResultByFile("/codeInsight/completion/normal/Annotation3_after.java"); } public void testMethodInAnnotation5() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation5.java"); checkResultByFile("/codeInsight/completion/normal/Annotation5_after.java"); } public void testMethodInAnnotation7() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation7.java"); selectItem(myItems[0]); @@ -281,19 +273,16 @@ public class NormalCompletionTest extends LightCompletionTestCase { } public void testEnumInAnnotation() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation4.java"); checkResultByFile("/codeInsight/completion/normal/Annotation4_after.java"); } public void testSecondAttribute() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/Annotation6.java"); checkResultByFile("/codeInsight/completion/normal/Annotation6_after.java"); } public void testIDEADEV6408() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); configureByFile("/codeInsight/completion/normal/IDEADEV6408.java"); assertEquals(2, myItems.length); } @@ -334,22 +323,18 @@ public class NormalCompletionTest extends LightCompletionTestCase { } public void testPackageInAnnoParam() throws Throwable { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); doTest(); } public void testClassLiteralInAnnoParam() throws Throwable { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); doTest(); } public void testAtUnderClass() throws Throwable { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); doTest(); } public void testAtUnderClassNoModifiers() throws Throwable { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); doTest(); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SecondSmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SecondSmartTypeCompletionTest.java index a6778c702fc5..4670cc526d22 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SecondSmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SecondSmartTypeCompletionTest.java @@ -9,13 +9,9 @@ import com.intellij.codeInsight.lookup.LookupManager; import com.intellij.codeInsight.lookup.impl.LookupImpl; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import com.intellij.testFramework.IdeaTestUtil; import org.jetbrains.annotations.NonNls; -import java.util.Arrays; - @SuppressWarnings({"ALL"}) public class SecondSmartTypeCompletionTest extends LightCompletionTestCase { private static final String BASE_PATH = "/codeInsight/completion/smartType/second"; @@ -160,7 +156,7 @@ public class SecondSmartTypeCompletionTest extends LightCompletionTestCase { protected void checkResultByFile(@NonNls final String filePath) throws Exception { if (myItems != null) { - System.out.println("items = " + Arrays.asList(myItems)); + //System.out.println("items = " + Arrays.asList(myItems)); } super.checkResultByFile(filePath); } @@ -178,11 +174,6 @@ public class SecondSmartTypeCompletionTest extends LightCompletionTestCase { myItems = lookup == null ? null : lookup.getItems().toArray(LookupElement.EMPTY_ARRAY); } - protected void setUp() throws Exception { - super.setUp(); - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - protected void tearDown() throws Exception { LookupManager.getInstance(getProject()).hideActiveLookup(); super.tearDown(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index b90900f6fd95..d194054d0279 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -15,7 +15,6 @@ import com.intellij.codeInsight.template.impl.TemplateImpl; import com.intellij.codeInsight.template.impl.TemplateSettings; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.util.Condition; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.codeStyle.CodeStyleSettings; @@ -25,7 +24,6 @@ import org.jetbrains.annotations.NonNls; public class SmartTypeCompletionTest extends LightCompletionTestCase { private static final String BASE_PATH = "/codeInsight/completion/smartType"; - private LanguageLevel myPrevLanguageLevel; @Override protected String getTestDataPath() { @@ -764,13 +762,13 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase { } public void testAfterNew15() throws Exception { + setLanguageLevel(LanguageLevel.JDK_1_5); doActionItemTest(); } public void testInsertOverride() throws Exception { CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(getProject()); styleSettings.INSERT_OVERRIDE_ANNOTATION = true; - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_6); doActionItemTest(); } @@ -1064,17 +1062,9 @@ public class SmartTypeCompletionTest extends LightCompletionTestCase { protected void setUp() throws Exception { super.setUp(); - myPrevLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); setType(CompletionType.SMART); } - protected void tearDown() throws Exception { - LookupManager.getInstance(getProject()).hideActiveLookup(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myPrevLanguageLevel); - super.tearDown(); - } - @Override protected Sdk getProjectJDK() { return JavaSdkImpl.getMockJdk17("java 1.5"); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AnnotationsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AnnotationsHighlightingTest.java index 2b27d2879b95..7ec7c261da7d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AnnotationsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AnnotationsHighlightingTest.java @@ -2,26 +2,12 @@ package com.intellij.codeInsight.daemon; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import org.jetbrains.annotations.NonNls; /** * @author ven */ public class AnnotationsHighlightingTest extends LightDaemonAnalyzerTestCase { - private LanguageLevel myPrevLanguageLevel; - - protected void setUp() throws Exception { - super.setUp(); - myPrevLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myPrevLanguageLevel); - super.tearDown(); - } @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/annotations"; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 8a1eb48987eb..d6b425be2701 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -15,8 +15,6 @@ import org.jetbrains.annotations.NonNls; public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/genericsHighlighting"; - private LanguageLevel myOldLanguageLevel; - protected LocalInspectionTool[] configureLocalInspectionTools() { return new LocalInspectionTool[]{new UncheckedWarningLocalInspection(), new UnusedSymbolLocalInspection(), new UnusedImportLocalInspection()}; @@ -32,7 +30,6 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { protected void setUp() throws Exception { super.setUp(); - myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); LanguageLevel level = getTestName(false).contains("Level6") ? LanguageLevel.JDK_1_6 : LanguageLevel.JDK_1_5; LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(level); } @@ -41,10 +38,6 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { return JavaSdkImpl.getMockJdk17("java 1.5"); } - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myOldLanguageLevel); - super.tearDown(); - } public void testReferenceTypeParams() throws Exception { doTest(false); } public void testOverridingMethods() throws Exception { doTest(false); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocHighlightingTest.java index 28023f3788f0..60fc5d7521f5 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/JavadocHighlightingTest.java @@ -8,7 +8,6 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.pom.java.LanguageLevel; -import com.intellij.psi.JavaPsiFacade; public class JavadocHighlightingTest extends LightDaemonAnalyzerTestCase { @@ -99,15 +98,8 @@ public class JavadocHighlightingTest extends LightDaemonAnalyzerTestCase { public void testMissingReturnDescription() throws Exception {doTest();} private void doTestWithLangLevel(final LanguageLevel langLevel) throws Exception { - JavaPsiFacade manager = getJavaFacade(); - final LanguageLevel effectiveLanguageLevel = LanguageLevelProjectExtension.getInstance(manager.getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(manager.getProject()).setLanguageLevel(langLevel); - try { - doTest(); - } - finally { - LanguageLevelProjectExtension.getInstance(manager.getProject()).setLanguageLevel(effectiveLanguageLevel); - } + LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(langLevel); + doTest(); } protected void doTest() throws Exception { diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java index 4f8e50531b9a..e2a6e9a64e1c 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingJdk7Test.java @@ -1,7 +1,5 @@ package com.intellij.codeInsight.daemon; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import org.jetbrains.annotations.NonNls; /** @@ -10,23 +8,11 @@ import org.jetbrains.annotations.NonNls; */ public class LightAdvHighlightingJdk7Test extends LightDaemonAnalyzerTestCase { @NonNls static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/advHighlighting7"; - private LanguageLevel myOldLanguageLevel; private void doTest(boolean checkWarnings, boolean checkInfos) throws Exception { doTest(BASE_PATH + "/" + getTestName(false) + ".java", checkWarnings, checkInfos); } - protected void setUp() throws Exception { - super.setUp(); - myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myOldLanguageLevel); - super.tearDown(); - } - public void testSwitchByString() throws Exception { doTest(true, false); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingTest.java index 18223fd7cb1e..cd4d72a7090d 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/LightAdvHighlightingTest.java @@ -13,7 +13,6 @@ import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspec import com.intellij.codeInspection.unneededThrows.RedundantThrowsDeclaration; import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection; import com.intellij.codeInspection.unusedSymbol.UnusedSymbolLocalInspection; -import com.intellij.idea.Bombed; import com.intellij.lang.Language; import com.intellij.lang.LanguageAnnotators; import com.intellij.lang.annotation.AnnotationHolder; @@ -35,7 +34,6 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import java.io.IOException; -import java.util.Calendar; import java.util.List; import static com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase.filter; @@ -46,7 +44,6 @@ import static com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase.filter; */ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase { @NonNls static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/advHighlighting"; - private LanguageLevel myOldLanguageLevel; private UnusedSymbolLocalInspection myUnusedSymbolLocalInspection; private void doTest(boolean checkWarnings, boolean checkInfos) throws Exception { @@ -55,14 +52,9 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase { protected void setUp() throws Exception { super.setUp(); - myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_4); + setLanguageLevel(LanguageLevel.JDK_1_4); } - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myOldLanguageLevel); - super.tearDown(); - } protected LocalInspectionTool[] configureLocalInspectionTools() { myUnusedSymbolLocalInspection = new UnusedSymbolLocalInspection(); @@ -283,7 +275,6 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase { assertFalse(list.toString(), list.contains(annotator)); } - @Bombed(month = Calendar.DECEMBER, day=31, user="cdr") public void testSOEForTypeOfHugeBinaryExpression() throws IOException { configureFromFileText("a.java", "class A { String s = \"\"; }"); assertEmpty(filter(doHighlighting(), HighlightSeverity.ERROR)); @@ -299,6 +290,8 @@ public class LightAdvHighlightingTest extends LightDaemonAnalyzerTestCase { binary.getLOperand().replace(expression); binary.getROperand().replace(literal); + //UIUtil.dispatchAllInvocationEvents(); + expression.replace(binary); PostprocessReformattingAspect.getInstance(getProject()).clear(); // OOM otherwise } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/SuppressWarningsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/SuppressWarningsTest.java index 204066140e46..e2f5b1953cd8 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/SuppressWarningsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/SuppressWarningsTest.java @@ -8,25 +8,11 @@ import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.unusedSymbol.UnusedSymbolLocalInspection; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import org.jetbrains.annotations.NonNls; public class SuppressWarningsTest extends LightDaemonAnalyzerTestCase { - private LanguageLevel myPrevLanguageLevel; @NonNls private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/advHighlighting"; - protected void setUp() throws Exception { - super.setUp(); - myPrevLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myPrevLanguageLevel); - super.tearDown(); - } - private void doTest(boolean checkWarnings) throws Exception { doTest(BASE_PATH + "/" + getTestName(false) + ".java", checkWarnings, false); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/UnusedImportsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/UnusedImportsTest.java index e1e8c5adf299..c648204feb93 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/UnusedImportsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/UnusedImportsTest.java @@ -2,8 +2,6 @@ package com.intellij.codeInsight.daemon; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.unusedImport.UnusedImportLocalInspection; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; public class UnusedImportsTest extends DaemonAnalyzerTestCase { private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/unusedImports"; @@ -12,11 +10,6 @@ public class UnusedImportsTest extends DaemonAnalyzerTestCase { return new LocalInspectionTool[]{new UnusedImportLocalInspection()}; } - protected void setUp() throws Exception { - super.setUp(); - LanguageLevelProjectExtension.getInstance(myJavaFacade.getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - public void test1() throws Exception { doTest(); } public void test2() throws Exception { doTest(); } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ChangeParameterClassTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ChangeParameterClassTest.java index ecc48a5f0196..d66517c9a889 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ChangeParameterClassTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/ChangeParameterClassTest.java @@ -1,11 +1,16 @@ package com.intellij.codeInsight.daemon.quickFix; +import com.intellij.pom.java.LanguageLevel; + public class ChangeParameterClassTest extends LightQuickFix15TestCase { - public void test() throws Exception {doAllTests();} + public void test() throws Exception { + setLanguageLevel(LanguageLevel.JDK_1_5); + doAllTests(); + } protected String getBasePath() { return "/codeInsight/daemonCodeAnalyzer/quickFix/changeParameterClass"; diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/GenerifyFileTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/GenerifyFileTest.java index e2e467dddf28..bf935850215a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/GenerifyFileTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/GenerifyFileTest.java @@ -2,13 +2,9 @@ package com.intellij.codeInsight.daemon.quickFix; import com.intellij.codeInspection.LocalInspectionTool; import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspection; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; public class GenerifyFileTest extends LightQuickFixAvailabilityTestCase { - private LanguageLevel oldLanguageLevel; - protected LocalInspectionTool[] configureLocalInspectionTools() { return new LocalInspectionTool[] {new UncheckedWarningLocalInspection()}; @@ -16,17 +12,6 @@ public class GenerifyFileTest extends LightQuickFixAvailabilityTestCase { public void test() throws Exception { doAllTests(); } - protected void setUp() throws Exception { - super.setUp(); - oldLanguageLevel = LanguageLevelProjectExtension.getInstance(getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(oldLanguageLevel); - super.tearDown(); - } - protected String getBasePath() { return "/codeInsight/daemonCodeAnalyzer/quickFix/generifyFile"; } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/LightQuickFix15TestCase.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/LightQuickFix15TestCase.java index f3bf91546b20..8391be09d092 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/LightQuickFix15TestCase.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/LightQuickFix15TestCase.java @@ -2,27 +2,14 @@ package com.intellij.codeInsight.daemon.quickFix; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; /** * @author ven */ public abstract class LightQuickFix15TestCase extends LightQuickFixTestCase { - private LanguageLevel myPrevLanguageLevel; - - protected void setUp() throws Exception { - super.setUp(); - myPrevLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } protected Sdk getProjectJDK() { return JavaSdkImpl.getMockJdk17("java 1.5"); } - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myPrevLanguageLevel); - super.tearDown(); - } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/Suppress15InspectionsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/Suppress15InspectionsTest.java index 31ab26f3fc85..8aff66516144 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/Suppress15InspectionsTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/Suppress15InspectionsTest.java @@ -11,17 +11,10 @@ import com.intellij.codeInspection.unneededThrows.RedundantThrowsDeclaration; import com.intellij.codeInspection.unusedSymbol.UnusedSymbolLocalInspection; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; public class Suppress15InspectionsTest extends LightQuickFixTestCase { - protected void setUp() throws Exception { - super.setUp(); - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); - } - @Override protected Sdk getProjectJDK() { return JavaSdkImpl.getMockJdk17(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddOnDemandStaticImportActionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddOnDemandStaticImportActionTest.java index 686cdc7fa5de..d5d0adedfa48 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddOnDemandStaticImportActionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/AddOnDemandStaticImportActionTest.java @@ -3,25 +3,11 @@ package com.intellij.codeInsight.intention; import com.intellij.codeInsight.daemon.LightIntentionActionTestCase; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; public class AddOnDemandStaticImportActionTest extends LightIntentionActionTestCase { - private LanguageLevel myLanguageLevel; public void test() throws Exception { doAllTests(); } - protected void setUp() throws Exception { - super.setUp(); - myLanguageLevel = LanguageLevelProjectExtension.getInstance(getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(myLanguageLevel); - super.tearDown(); - } - protected String getBasePath() { return "/codeInsight/daemonCodeAnalyzer/quickFix/addOnDemandStaticImport"; } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/InvertIfConditionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/InvertIfConditionTest.java index ac4be1949eea..904cc783ed7f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/intention/InvertIfConditionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/InvertIfConditionTest.java @@ -9,13 +9,10 @@ package com.intellij.codeInsight.intention; import com.intellij.codeInsight.daemon.LightIntentionActionTestCase; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; public class InvertIfConditionTest extends LightIntentionActionTestCase { - private LanguageLevel myPrevLanguageLevel; protected String getBasePath() { return BASE_PATH; @@ -24,18 +21,6 @@ public class InvertIfConditionTest extends LightIntentionActionTestCase { private static final String BASE_PATH = "/codeInsight/invertIfCondition/"; private boolean myElseOnNewLine; - protected void setUp() throws Exception { - super.setUp(); - - myPrevLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myPrevLanguageLevel); - super.tearDown(); - } - protected boolean shouldBeAvailableAfterExecution() { return true; } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java index 9bff30635d2f..ba7002cdc621 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/intention/SplitIfActionTest.java @@ -1,8 +1,8 @@ package com.intellij.codeInsight.intention; import com.intellij.codeInsight.intention.impl.SplitIfAction; -import com.intellij.testFramework.LightCodeInsightTestCase; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.testFramework.LightCodeInsightTestCase; /** * @author mike @@ -39,6 +39,20 @@ public class SplitIfActionTest extends LightCodeInsightTestCase { checkResultByFile("/codeInsight/splitIfAction/after5.java"); } + public void test6() throws Exception { + configureByFile("/codeInsight/splitIfAction/beforeParenthesis.java"); + perform(); + checkResultByFile("/codeInsight/splitIfAction/afterParenthesis.java"); + } + + public void test7() throws Exception { + configureByFile("/codeInsight/splitIfAction/beforeOrParenthesis.java"); + perform(); + checkResultByFile("/codeInsight/splitIfAction/afterOrParenthesis.java"); + } + + + private void perform() throws Exception { SplitIfAction action = new SplitIfAction(); assertTrue(action.isAvailable(getProject(), getEditor(), getFile())); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/slice/SliceTreeTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/slice/SliceTreeTest.java index 480883a76d1e..279352dd80fa 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/slice/SliceTreeTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/slice/SliceTreeTest.java @@ -8,11 +8,9 @@ import com.intellij.ide.util.treeView.AbstractTreeNode; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.impl.ToolWindowHeadlessManagerImpl; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.slicer.*; import com.intellij.util.ArrayUtil; @@ -26,23 +24,10 @@ import java.util.*; * @author cdr */ public class SliceTreeTest extends LightDaemonAnalyzerTestCase { - private LanguageLevel myOldLanguageLevel; - - protected void setUp() throws Exception { - super.setUp(); - myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_5); - } - @Override protected Sdk getProjectJDK() { return JavaSdkImpl.getMockJdk17("java 1.5"); } - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myOldLanguageLevel); - super.tearDown(); - } - private SliceTreeStructure configureTree(@NonNls final String name) throws Exception { configureByFile("/codeInsight/slice/backward/"+ name +".java"); PsiDocumentManager.getInstance(getProject()).commitAllDocuments(); diff --git a/java/java-tests/testSrc/com/intellij/psi/impl/compiled/ClassFileStubBuilderTest.java b/java/java-tests/testSrc/com/intellij/psi/impl/compiled/ClassFileStubBuilderTest.java index b5e9fa54880f..434e454f511b 100644 --- a/java/java-tests/testSrc/com/intellij/psi/impl/compiled/ClassFileStubBuilderTest.java +++ b/java/java-tests/testSrc/com/intellij/psi/impl/compiled/ClassFileStubBuilderTest.java @@ -1,8 +1,10 @@ package com.intellij.psi.impl.compiled; +import com.intellij.util.containers.ContainerUtil; import junit.framework.TestCase; -import java.util.*; +import java.util.HashSet; +import java.util.Set; /** * Pavel.Fatin, 18.02.2010 @@ -123,7 +125,7 @@ public class ClassFileStubBuilderTest extends TestCase { private static boolean isInner(String name, String... files) { Set all = new HashSet(); - all.addAll(Arrays.asList(files)); + ContainerUtil.addAll(all, files); all.add(name); return ClassFileStubBuilder.isInner(name, new DirectoryMock(all)); } @@ -140,4 +142,4 @@ public class ClassFileStubBuilderTest extends TestCase { return myFiles.contains(name); } } -} \ No newline at end of file +} diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index 873f5b27ffd3..ef41e85586f9 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -13,6 +13,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; import com.intellij.refactoring.extractMethod.ExtractMethodProcessor; import com.intellij.refactoring.extractMethod.PrepareFailedException; +import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; import com.intellij.refactoring.util.duplicates.Match; import com.intellij.testFramework.LightCodeInsightTestCase; import com.intellij.util.IncorrectOperationException; @@ -448,6 +449,10 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { doDuplicatesTest(); } + public void testParametersFromAnonymous() throws Exception { + doTest(); + } + private void doPrepareErrorTest(final String expectedMessage) throws Exception { String expectedError = null; try { @@ -503,6 +508,12 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { else { elements = CodeInsightUtil.findStatementsInRange(file, startOffset, endOffset); } + if (elements.length == 0) { + final PsiExpression expression = IntroduceVariableBase.getSelectedExpression(project, file, startOffset, endOffset); + if (expression != null) { + elements = new PsiElement[]{expression}; + } + } assertTrue(elements.length > 0); final ExtractMethodProcessor processor = diff --git a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java index 50ad3f496723..434b76b8208a 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/FindMethodDuplicatesMiscTest.java @@ -74,5 +74,15 @@ public class FindMethodDuplicatesMiscTest extends FindMethodDuplicatesBaseTest { doTest(); } + public void testVarargsAccess() throws Exception { + doTest(); + } + public void testIncorrectVarargsAccess() throws Exception { + doTest(); + } + + public void testVarVarargsAccess() throws Exception { + doTest(); + } } \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java b/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java index 9d93d39a8288..4ad546d0c7ea 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/InheritanceToDelegationTest.java @@ -9,9 +9,9 @@ import com.intellij.psi.PsiMethod; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.inheritanceToDelegation.InheritanceToDelegationProcessor; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -167,7 +167,7 @@ public class InheritanceToDelegationTest extends MultiFileTestCase { final List methodsList = new ArrayList(); for (String name : methodNames) { final PsiMethod[] methodsByName = baseClass.findMethodsByName(name, false); - methodsList.addAll(Arrays.asList(methodsByName)); + ContainerUtil.addAll(methodsList, methodsByName); } delegatedMethods = methodsList.toArray(new PsiMethod[methodsList.size()]); diff --git a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java index 8264b21c1af2..1db6d6e7e100 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java @@ -5,8 +5,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; -import com.intellij.openapi.roots.LanguageLevelProjectExtension; -import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.PsiElement; import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; import com.intellij.refactoring.introduceVariable.IntroduceVariableSettings; @@ -221,17 +219,6 @@ public class IntroduceVariableTest extends LightCodeInsightTestCase { checkResultByFile(baseName + ".after.java"); } - private LanguageLevel myOldLanguageLevel; - protected void setUp() throws Exception { - super.setUp(); - myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).getLanguageLevel(); - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(LanguageLevel.JDK_1_7); - } - - protected void tearDown() throws Exception { - LanguageLevelProjectExtension.getInstance(getJavaFacade().getProject()).setLanguageLevel(myOldLanguageLevel); - super.tearDown(); - } @Override protected Sdk getProjectJDK() { return JavaSdkImpl.getMockJdk17(); diff --git a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java index 3a53f431baf2..e4817cbe679d 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/PullUpTest.java @@ -6,6 +6,7 @@ package com.intellij.refactoring; import com.intellij.JavaTestUtil; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; +import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.refactoring.listeners.JavaRefactoringListenerManager; @@ -69,6 +70,7 @@ public class PullUpTest extends LightCodeInsightTestCase { public void testRemoveOverride() throws Exception { + setLanguageLevel(LanguageLevel.JDK_1_5); doTest(new RefactoringTestUtil.MemberDescriptor("get", PsiMethod.class)); } diff --git a/java/java-tests/testSrc/com/intellij/refactoring/RenameClassTest.java b/java/java-tests/testSrc/com/intellij/refactoring/RenameClassTest.java index 25ede307809d..f79af9eecd02 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/RenameClassTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/RenameClassTest.java @@ -54,12 +54,16 @@ public class RenameClassTest extends MultiFileTestCase { } public void testAutomaticRenameVars() throws Exception { + doRenameClass("XX", "Y"); + } + + private void doRenameClass(final String className, final String newName) throws Exception { doTest(new PerformAction() { public void performAction(VirtualFile rootDir, VirtualFile rootAfter) throws Exception { - PsiClass aClass = myJavaFacade.findClass("XX", GlobalSearchScope.allScope(getProject())); + PsiClass aClass = myJavaFacade.findClass(className, GlobalSearchScope.allScope(getProject())); assertNotNull("Class XX not found", aClass); - final RenameProcessor processor = new RenameProcessor(myProject, aClass, "Y", true, true) { + final RenameProcessor processor = new RenameProcessor(myProject, aClass, newName, true, true) { @Override protected boolean showAutomaticRenamingDialog(AutomaticRenamer automaticVariableRenamer) { for (PsiNamedElement element : automaticVariableRenamer.getElements()) { @@ -78,6 +82,10 @@ public class RenameClassTest extends MultiFileTestCase { }); } + public void testAutomaticRenameInheritors() throws Exception { + doRenameClass("MyClass", "MyClass1"); + } + public void testAutomaticRenameVarsCollision() throws Exception { doTest("XX", "Y"); } diff --git a/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java b/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java index 87d91cc1a793..499e9a281a32 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/SafeDeleteTest.java @@ -91,7 +91,7 @@ public class SafeDeleteTest extends MultiFileTestCase { catch (BaseRefactoringProcessor.ConflictsInTestsException e) { String message = e.getMessage(); assertTrue(message, message.startsWith("local variable varName has 1 usage that is not safe to delete.\n" + - "Of those 0 usages are in strings, comments, or non-Java files.")); + "Of those 0 usages are in strings, comments, or non-code files.")); } } diff --git a/java/java-tests/testSrc/com/intellij/refactoring/SuggestedParamTypesTest.java b/java/java-tests/testSrc/com/intellij/refactoring/SuggestedParamTypesTest.java index 881ca1b180e3..c8101c7f362d 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/SuggestedParamTypesTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/SuggestedParamTypesTest.java @@ -75,6 +75,18 @@ public class SuggestedParamTypesTest extends LightCodeInsightTestCase { doTest("String", "Object", "Serializable", "Comparable", "CharSequence"); } + public void testCastInside() throws Exception { + doTest("A", "Object"); + } + + public void testMultipleCasts() throws Exception { + doTest("A", "Object"); + } + + public void testCastNoCast() throws Exception { + doTest("Object"); + } + private void doTest(String... types) throws Exception { configureByFile(BASE_PATH + getTestName(false) + ".java"); diff --git a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java index 673361a21540..4e58558adc28 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/inline/InlineParameterTest.java @@ -246,6 +246,19 @@ public class InlineParameterTest extends LightCodeInsightTestCase { } } + public void testInlineLocalParamDef() throws Exception { + doTest(false); + } + + public void testParameterDefWithWriteAccess() throws Exception { + try { + doTest(false); + } + catch (CommonRefactoringUtil.RefactoringErrorHintException e) { + assertEquals("Method has no usages", e.getMessage()); + } + } + private void doTest(final boolean createLocal) throws Exception { getProject().putUserData(InlineParameterExpressionProcessor.CREATE_LOCAL_FOR_TESTS,createLocal); diff --git a/java/java-tests/testSrc/com/intellij/roots/DirectoryIndexImplTest.java b/java/java-tests/testSrc/com/intellij/roots/DirectoryIndexImplTest.java index a7dc32a7cfaa..7c5fdc002d4b 100644 --- a/java/java-tests/testSrc/com/intellij/roots/DirectoryIndexImplTest.java +++ b/java/java-tests/testSrc/com/intellij/roots/DirectoryIndexImplTest.java @@ -16,6 +16,7 @@ import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.*; import com.intellij.testFramework.IdeaTestCase; +import com.intellij.util.containers.ContainerUtil; import java.io.File; import java.io.IOException; @@ -516,9 +517,9 @@ public class DirectoryIndexImplTest extends IdeaTestCase { VirtualFile[] actualDirs = myIndex.getDirectoriesByPackageName(packageName, true).toArray(VirtualFile.EMPTY_ARRAY); assertNotNull(actualDirs); HashSet set1 = new HashSet(); - set1.addAll(Arrays.asList(expectedDirs)); + ContainerUtil.addAll(set1, expectedDirs); HashSet set2 = new HashSet(); - set2.addAll(Arrays.asList(actualDirs)); + ContainerUtil.addAll(set2, actualDirs); assertEquals(set1, set2); } } diff --git a/java/openapi/src/com/intellij/psi/util/PsiUtil.java b/java/openapi/src/com/intellij/psi/util/PsiUtil.java index 27a47578ba03..ad9555b09ed8 100644 --- a/java/openapi/src/com/intellij/psi/util/PsiUtil.java +++ b/java/openapi/src/com/intellij/psi/util/PsiUtil.java @@ -202,7 +202,7 @@ public final class PsiUtil extends PsiUtilBase { if (element instanceof PsiClass && !isLocalOrAnonymousClass((PsiClass)element)) { break; } - if (PsiUtilBase.getTemplateLanguageFile(element) != null && element instanceof PsiFile) { + if (element instanceof PsiFile && PsiUtilBase.getTemplateLanguageFile(element) != null) { return element; } if (element == scope) break; diff --git a/java/openapi/src/com/intellij/psi/util/TypeConversionUtil.java b/java/openapi/src/com/intellij/psi/util/TypeConversionUtil.java index b77c47cd11b1..fde48c62adb2 100644 --- a/java/openapi/src/com/intellij/psi/util/TypeConversionUtil.java +++ b/java/openapi/src/com/intellij/psi/util/TypeConversionUtil.java @@ -919,7 +919,8 @@ public class TypeConversionUtil { substitutor = getSuperClassSubstitutorInner(superClass, derivedClass, derivedSubstitutor, visited, manager); } if (substitutor == null) { - LOG.error("Not inheritor: " + derivedClass + " super: " + superClass); + LOG.error("Not inheritor: " + derivedClass + "(" + derivedClass.getClass().getName() + ");" + + " super: " + superClass + "(" + derivedClass.getClass().getName() + ")"); } return substitutor; } diff --git a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java index cb964f5b21c3..d2ebffc8bfbd 100644 --- a/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java +++ b/java/openapi/src/com/intellij/ui/classFilter/ClassFilterEditor.java @@ -29,6 +29,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.TableUtil; import com.intellij.ui.UIBundle; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.ItemRemovable; import com.intellij.util.ui.Table; import com.intellij.util.ui.UIUtil; @@ -43,7 +44,6 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; -import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -177,7 +177,7 @@ public class ClassFilterEditor extends JPanel { public final void setFilters(ClassFilter[] filters) { myFilters.clear(); if (filters != null) { - myFilters.addAll(Arrays.asList(filters)); + ContainerUtil.addAll(myFilters, filters); } fireTableDataChanged(); } diff --git a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java index e2bd7044f1f9..e1a7d3fc36f0 100644 --- a/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java +++ b/java/testFramework/src/com/intellij/codeInsight/daemon/DaemonAnalyzerTestCase.java @@ -370,7 +370,7 @@ public abstract class DaemonAnalyzerTestCase extends CodeInsightTestCase { IntentionAction intentionAction = findIntentionAction(infos, intentionActionName, editor, file); assertNotNull(intentionActionName, intentionAction); - ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction, intentionActionName); + assertTrue(ShowIntentionActionsHandler.chooseActionAndInvoke(file, editor, intentionAction, intentionActionName)); } protected static IntentionAction findIntentionAction(final Collection infos, final String intentionActionName, final Editor editor, diff --git a/java/testFramework/src/com/intellij/testFramework/LightCodeInsightTestCase.java b/java/testFramework/src/com/intellij/testFramework/LightCodeInsightTestCase.java index fcbd332cec6d..52872af29fcc 100644 --- a/java/testFramework/src/com/intellij/testFramework/LightCodeInsightTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/LightCodeInsightTestCase.java @@ -15,16 +15,20 @@ */ package com.intellij.testFramework; -import com.intellij.psi.impl.JavaPsiFacadeEx; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; import com.intellij.openapi.module.ModuleType; import com.intellij.openapi.module.StdModuleTypes; +import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.impl.JavaSdkImpl; +import com.intellij.openapi.roots.LanguageLevelProjectExtension; +import com.intellij.pom.java.LanguageLevel; +import com.intellij.psi.impl.JavaPsiFacadeEx; /** * A TestCase for single PsiFile being opened in Editor conversion. See configureXXX and checkResultXXX method docs. */ public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightTestCase { + private LanguageLevel myOldLanguageLevel; + protected LightCodeInsightTestCase() { IdeaTestCase.initPlatformPrefix(); } @@ -33,6 +37,22 @@ public abstract class LightCodeInsightTestCase extends LightPlatformCodeInsightT return JavaPsiFacadeEx.getInstanceEx(ourProject); } + @Override + protected void setUp() throws Exception { + super.setUp(); + myOldLanguageLevel = LanguageLevelProjectExtension.getInstance(getProject()).getLanguageLevel(); + setLanguageLevel(LanguageLevel.HIGHEST); + } + + @Override + protected void tearDown() throws Exception { + setLanguageLevel(myOldLanguageLevel); + super.tearDown(); + } + + protected static void setLanguageLevel(final LanguageLevel level) { + LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(level); + } @Override protected Sdk getProjectJDK() { diff --git a/platform/bootstrap/src/com/intellij/ide/ClassloaderUtil.java b/platform/bootstrap/src/com/intellij/ide/ClassloaderUtil.java index ca799298e995..d521547510f4 100644 --- a/platform/bootstrap/src/com/intellij/ide/ClassloaderUtil.java +++ b/platform/bootstrap/src/com/intellij/ide/ClassloaderUtil.java @@ -25,6 +25,7 @@ import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.ArrayUtil; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.lang.UrlClassLoader; import com.intellij.util.text.StringTokenizer; import org.jetbrains.annotations.NonNls; @@ -37,7 +38,6 @@ import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; -import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -167,7 +167,7 @@ public class ClassloaderUtil { final ClassLoader loader = ClassloaderUtil.class.getClassLoader(); if (loader instanceof URLClassLoader) { URLClassLoader urlClassLoader = (URLClassLoader)loader; - aClasspathElements.addAll(Arrays.asList(urlClassLoader.getURLs())); + ContainerUtil.addAll(aClasspathElements, urlClassLoader.getURLs()); } else { try { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/controlflow/ConditionalInstruction.java b/platform/lang-api/src/com/intellij/codeInsight/controlflow/ConditionalInstruction.java similarity index 100% rename from platform/lang-impl/src/com/intellij/codeInsight/controlflow/ConditionalInstruction.java rename to platform/lang-api/src/com/intellij/codeInsight/controlflow/ConditionalInstruction.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/controlflow/ControlFlow.java b/platform/lang-api/src/com/intellij/codeInsight/controlflow/ControlFlow.java similarity index 100% rename from platform/lang-impl/src/com/intellij/codeInsight/controlflow/ControlFlow.java rename to platform/lang-api/src/com/intellij/codeInsight/controlflow/ControlFlow.java diff --git a/platform/lang-impl/src/com/intellij/codeInsight/controlflow/Instruction.java b/platform/lang-api/src/com/intellij/codeInsight/controlflow/Instruction.java similarity index 100% rename from platform/lang-impl/src/com/intellij/codeInsight/controlflow/Instruction.java rename to platform/lang-api/src/com/intellij/codeInsight/controlflow/Instruction.java diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java index f86bf6db7855..0690bea3e0c2 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/LineMarkerInfo.java @@ -18,10 +18,10 @@ package com.intellij.codeInsight.daemon; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.GutterIconRenderer; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.editor.markup.SeparatorPlacement; +import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -153,7 +153,12 @@ public class LineMarkerInfo { } public String getTooltipText() { - return myInfo.getLineMarkerTooltip(); + try { + return myInfo.getLineMarkerTooltip(); + } + catch (IndexNotReadyException ignored) { + return null; + } } public Alignment getAlignment() { diff --git a/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionContext.java b/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionContext.java index 302b2a2a0c58..b26ab828e328 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionContext.java +++ b/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionContext.java @@ -16,6 +16,7 @@ package com.intellij.codeInspection; +import com.intellij.codeInspection.ex.JobDescriptor; import com.intellij.codeInspection.reference.RefEntity; import com.intellij.codeInspection.reference.RefManager; import com.intellij.openapi.project.Project; @@ -73,4 +74,6 @@ public interface GlobalInspectionContext { Project getProject(); T getExtension(Key key); + + void incrementJobDoneAmount(JobDescriptor job, String message); } diff --git a/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionTool.java b/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionTool.java index ecb6b959713a..4cb88fb66b27 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionTool.java +++ b/platform/lang-api/src/com/intellij/codeInspection/GlobalInspectionTool.java @@ -16,6 +16,7 @@ package com.intellij.codeInspection; import com.intellij.analysis.AnalysisScope; +import com.intellij.codeInspection.ex.JobDescriptor; import com.intellij.codeInspection.reference.RefEntity; import com.intellij.codeInspection.reference.RefGraphAnnotator; import com.intellij.codeInspection.reference.RefManager; @@ -174,4 +175,14 @@ public abstract class GlobalInspectionTool extends InspectionProfileEntry { */ public void compose(StringBuffer buf, RefEntity refEntity, HTMLComposer composer) { } + + /** + * @return JobDescriptors array to show inspection progress correctly. TotalAmount should be set (e.g. in + * {@link #runInspection(com.intellij.analysis.AnalysisScope, InspectionManager, GlobalInspectionContext, ProblemDescriptionsProcessor)}) + * ProgressIndicator should progress with {@link com.intellij.codeInspection.GlobalInspectionContext#incrementJobDoneAmount(com.intellij.codeInspection.ex.JobDescriptor, String)} + */ + @Nullable + public JobDescriptor[] getAdditionalJobs() { + return null; + } } diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/JobDescriptor.java b/platform/lang-api/src/com/intellij/codeInspection/ex/JobDescriptor.java similarity index 100% rename from platform/lang-impl/src/com/intellij/codeInspection/ex/JobDescriptor.java rename to platform/lang-api/src/com/intellij/codeInspection/ex/JobDescriptor.java diff --git a/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java b/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java index 4ec8dfba6a4c..7dfe46c0be6f 100644 --- a/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java +++ b/platform/lang-api/src/com/intellij/facet/ui/FacetBasedFrameworkSupportProvider.java @@ -44,7 +44,7 @@ public abstract class FacetBasedFrameworkSupportProvider extend myFacetType = facetType; } - protected static String getProviderId(final FacetType facetType) { + public static String getProviderId(final FacetType facetType) { return FACET_SUPPORT_PREFIX + facetType.getStringId(); } diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java index 1091ab914326..b4374ea7dec4 100644 --- a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java +++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurable.java @@ -16,6 +16,7 @@ package com.intellij.ide.util.frameworkSupport; +import com.intellij.openapi.Disposable; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.libraries.Library; @@ -28,7 +29,7 @@ import javax.swing.*; /** * @author nik */ -public abstract class FrameworkSupportConfigurable { +public abstract class FrameworkSupportConfigurable implements Disposable { private final EventDispatcher myDispatcher = EventDispatcher.create(FrameworkSupportConfigurableListener.class); @Nullable @@ -55,4 +56,8 @@ public abstract class FrameworkSupportConfigurable { protected void fireFrameworkVersionChanged() { myDispatcher.getMulticaster().frameworkVersionChanged(); } + + @Override + public void dispose() { + } } diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java index d3e233048df6..3a3b52155387 100644 --- a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java +++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportConfigurableBase.java @@ -17,8 +17,6 @@ package com.intellij.ide.util.frameworkSupport; import com.intellij.facet.ui.libraries.LibraryInfo; -import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable; -import com.intellij.ide.util.frameworkSupport.FrameworkVersion; import com.intellij.openapi.module.Module; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.libraries.Library; @@ -38,15 +36,17 @@ import java.util.List; public class FrameworkSupportConfigurableBase extends FrameworkSupportConfigurable { private JComboBox myVersionComboBox; private final FrameworkSupportProviderBase myFrameworkSupportProvider; + protected final FrameworkSupportModel myFrameworkSupportModel; private JPanel myMainPanel; private JLabel myDescriptionLabel; - public FrameworkSupportConfigurableBase(FrameworkSupportProviderBase frameworkSupportProvider) { - this(frameworkSupportProvider, Collections.emptyList(), null); + public FrameworkSupportConfigurableBase(FrameworkSupportProviderBase frameworkSupportProvider, FrameworkSupportModel model) { + this(frameworkSupportProvider, model, Collections.emptyList(), null); } - public FrameworkSupportConfigurableBase(final FrameworkSupportProviderBase frameworkSupportProvider, List versions, String versionLabelText) { + public FrameworkSupportConfigurableBase(final FrameworkSupportProviderBase frameworkSupportProvider, FrameworkSupportModel model, List versions, String versionLabelText) { myFrameworkSupportProvider = frameworkSupportProvider; + myFrameworkSupportModel = model; if (versions.size() > 0) { myDescriptionLabel.setText(versionLabelText); String maxValue = ""; diff --git a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java index a769b06077e5..07d859395e61 100644 --- a/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java +++ b/platform/lang-api/src/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderBase.java @@ -48,6 +48,6 @@ public abstract class FrameworkSupportProviderBase extends FrameworkSupportProvi @NotNull public FrameworkSupportConfigurableBase createConfigurable(final @NotNull FrameworkSupportModel model) { - return new FrameworkSupportConfigurableBase(this, getVersions(), getVersionLabelText()); + return new FrameworkSupportConfigurableBase(this, model, getVersions(), getVersionLabelText()); } } diff --git a/platform/lang-api/src/com/intellij/lang/ITokenTypeRemapper.java b/platform/lang-api/src/com/intellij/lang/ITokenTypeRemapper.java index 2c335290ec4f..c5eca6676e08 100644 --- a/platform/lang-api/src/com/intellij/lang/ITokenTypeRemapper.java +++ b/platform/lang-api/src/com/intellij/lang/ITokenTypeRemapper.java @@ -29,8 +29,8 @@ public interface ITokenTypeRemapper { * An external hook to see and alter token types reported by lexer. * A lexer might take a delegate implementing this interface. * @param source type of an element as lexer understood it. - * @param start start index of lexem in text (as lexer.getTokenStart() would return). - * @param end end index of lexem in text (as lexer.getTokenEnd() would return). + * @param start start index of lexeme in text (as lexer.getTokenStart() would return). + * @param end end index of lexeme in text (as lexer.getTokenEnd() would return). * @param text text being parsed. * @return altered (or not) element type. **/ diff --git a/platform/lang-api/src/com/intellij/lang/annotation/AnnotationHolder.java b/platform/lang-api/src/com/intellij/lang/annotation/AnnotationHolder.java index 424851003529..f070885a4f0e 100644 --- a/platform/lang-api/src/com/intellij/lang/annotation/AnnotationHolder.java +++ b/platform/lang-api/src/com/intellij/lang/annotation/AnnotationHolder.java @@ -45,7 +45,7 @@ public interface AnnotationHolder { * @param message the error message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createErrorAnnotation(ASTNode node, @Nullable String message); + Annotation createErrorAnnotation(@NotNull ASTNode node, @Nullable String message); /** * Creates an error annotation with the specified message over the specified text range. @@ -54,7 +54,7 @@ public interface AnnotationHolder { * @param message the error message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createErrorAnnotation(TextRange range, @Nullable String message); + Annotation createErrorAnnotation(@NotNull TextRange range, @Nullable String message); /** * Creates a warning annotation with the specified message over the specified PSI element. @@ -63,7 +63,7 @@ public interface AnnotationHolder { * @param message the warning message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createWarningAnnotation(PsiElement elt, @Nullable String message); + Annotation createWarningAnnotation(@NotNull PsiElement elt, @Nullable String message); /** * Creates a warning annotation with the specified message over the specified AST node. @@ -72,7 +72,7 @@ public interface AnnotationHolder { * @param message the warning message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createWarningAnnotation(ASTNode node, @Nullable String message); + Annotation createWarningAnnotation(@NotNull ASTNode node, @Nullable String message); /** * Creates a warning annotation with the specified message over the specified text range. @@ -81,7 +81,7 @@ public interface AnnotationHolder { * @param message the warning message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createWarningAnnotation(TextRange range, @Nullable String message); + Annotation createWarningAnnotation(@NotNull TextRange range, @Nullable String message); /** * Creates an annotation with severity {@link HighlightSeverity#INFO} ('weak warning') with the specified @@ -91,7 +91,7 @@ public interface AnnotationHolder { * @param message the info message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInformationAnnotation(PsiElement elt, @Nullable String message); + Annotation createInformationAnnotation(@NotNull PsiElement elt, @Nullable String message); /** * Creates an annotation with severity {@link HighlightSeverity#INFO} ('weak warning') with the specified @@ -101,7 +101,7 @@ public interface AnnotationHolder { * @param message the info message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInformationAnnotation(ASTNode node, @Nullable String message); + Annotation createInformationAnnotation(@NotNull ASTNode node, @Nullable String message); /** * Creates an annotation with severity {@link HighlightSeverity#INFO} ('weak warning') with the specified @@ -111,7 +111,7 @@ public interface AnnotationHolder { * @param message the info message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInformationAnnotation(TextRange range, String message); + Annotation createInformationAnnotation(@NotNull TextRange range, String message); /** @@ -122,7 +122,7 @@ public interface AnnotationHolder { * @param message the information message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInfoAnnotation(PsiElement elt, @Nullable String message); + Annotation createInfoAnnotation(@NotNull PsiElement elt, @Nullable String message); /** * Creates an information annotation (colored highlighting only, with no gutter mark and not participating in @@ -132,7 +132,7 @@ public interface AnnotationHolder { * @param message the information message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInfoAnnotation(ASTNode node, @Nullable String message); + Annotation createInfoAnnotation(@NotNull ASTNode node, @Nullable String message); /** * Creates an information annotation (colored highlighting only, with no gutter mark and not participating in @@ -142,6 +142,6 @@ public interface AnnotationHolder { * @param message the information message. * @return the annotation (which can be modified to set additional annotation parameters) */ - Annotation createInfoAnnotation(TextRange range, String message); + Annotation createInfoAnnotation(@NotNull TextRange range, String message); } diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkModel.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkModel.java index e4aac97e6f80..7d06888fbd8c 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkModel.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkModel.java @@ -40,6 +40,13 @@ public interface SdkModel { @Nullable Sdk findSdk(String sdkName); + /** + * Adds the specified SDK (already created and initialized) to the model. + * + * @param sdk the SDK to add + */ + void addSdk(Sdk sdk); + /** * Allows to receive notifications when the JDK list has been changed by the * user configuring the JDKs. @@ -91,4 +98,6 @@ public interface SdkModel { * @param listener the listener instance. */ void removeListener(Listener listener); + + Listener getMulticaster(); } diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java index 62967e202044..2781f1b45ff0 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/SdkType.java @@ -18,18 +18,18 @@ package com.intellij.openapi.projectRoots; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.fileChooser.FileChooserDescriptor; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.vfs.VirtualFile; import org.jdom.Element; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -38,14 +38,29 @@ public abstract class SdkType { private final String myName; - @NonNls public static final String MAC_HOME_PATH = "/Home"; - /** * @return path to set up filechooser to or null if not applicable */ @Nullable public abstract String suggestHomePath(); + public Collection suggestHomePaths() { + String s = suggestHomePath(); + return s == null ? Collections.emptyList() : Collections.singletonList(s); + } + + /** + * If a path selected in the file chooser is not a valid SDK home path, returns an adjusted version of the path that is again + * checked for validity. + * + * @param homePath the path selected in the file chooser. + * @return the path to be used as the SDK home. + */ + + public String adjustSelectedSdkHome(String homePath) { + return homePath; + } + public abstract boolean isValidSdkHome(String path); @@ -133,11 +148,10 @@ public abstract class SdkType { final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false) { public void validateSelectedFiles(VirtualFile[] files) throws Exception { if (files.length != 0){ - boolean valid = isValidSdkHome(files[0].getPath()); + final String selectedPath = files[0].getPath(); + boolean valid = isValidSdkHome(selectedPath); if (!valid){ - if (SystemInfo.isMac) { - valid = isValidSdkHome(files[0].getPath() + MAC_HOME_PATH); - } + valid = isValidSdkHome(adjustSelectedSdkHome(selectedPath)); if (!valid) { String message = files[0].isDirectory() ? ProjectBundle.message("sdk.configure.home.invalid.error", getPresentableName()) diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java b/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java index fb40a96dc3eb..36771a65c53d 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ModifiableRootModel.java @@ -146,6 +146,9 @@ public interface ModifiableRootModel extends ModuleRootModel { */ void inheritSdk(); + /** + * @deprecated see {@link ModuleRootManager#getFiles(OrderRootType)} for replacement + */ @NotNull VirtualFile[] getOrderedRoots(OrderRootType type); @@ -155,6 +158,9 @@ public interface ModifiableRootModel extends ModuleRootModel { boolean isChanged(); + /** + * @deprecated see {@link ModuleRootManager#getUrls(OrderRootType)} for replacement + */ @NotNull String[] getOrderedRootUrls(OrderRootType type); boolean isExcludeExplodedDirectory(); diff --git a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootManager.java b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootManager.java index 62a0e3dba4b3..3c649555f2ad 100644 --- a/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootManager.java +++ b/platform/lang-api/src/com/intellij/openapi/roots/ModuleRootManager.java @@ -43,7 +43,7 @@ public abstract class ModuleRootManager implements ModuleRootModel { * * @deprecated *