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 extends AbstractTestProxy> myAllTests = getModel().getRoot().getAllTests();
- return Filter.DEFECTIVE_LEAF.and(JavaAwareFilter.METHOD(project)).select(myAllTests);
+ final List extends AbstractTestProxy> 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 extends ProjectStructureElement> 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