From 983d97ca0d7a63342e80f59787f89996100137fc Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 18 Jan 2012 13:04:32 +0400 Subject: [PATCH 1/7] idea wont start --- platform/util/src/com/intellij/util/lang/ClassPath.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/util/src/com/intellij/util/lang/ClassPath.java b/platform/util/src/com/intellij/util/lang/ClassPath.java index ec363dae33d7..5055c0ad4a49 100644 --- a/platform/util/src/com/intellij/util/lang/ClassPath.java +++ b/platform/util/src/com/intellij/util/lang/ClassPath.java @@ -119,7 +119,7 @@ class ClassPath { List loaders = myCache.getLoaders(s); for (int j = 0, size = loaders.size(); j < size; ++j ) { final Loader loader = loaders.get(j); - if (!myCache.loaderHasName(s, loader)) continue; + //if (!myCache.loaderHasName(s, loader)) continue; final Resource resource = loader.getResource(s, flag); if (resource != null) { if (ourDumpOrder) { From 1f547f7e0709721e9d8f6cc51a537c967899d6a1 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 18 Jan 2012 12:56:52 +0400 Subject: [PATCH 2/7] cleanup --- platform/util/src/com/intellij/Patches.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/platform/util/src/com/intellij/Patches.java b/platform/util/src/com/intellij/Patches.java index 998639c91ba6..8008080b4b12 100644 --- a/platform/util/src/com/intellij/Patches.java +++ b/platform/util/src/com/intellij/Patches.java @@ -106,8 +106,6 @@ public class Patches { /** * Lion eAWT FullScreen mode leads to visual artifacts - * - * @see com.intellij.util.concurrency.LockFactory */ public static final boolean APPLE_BUG_ID_10207064 = SystemInfo.isMac && (!SystemInfo.isMacOSLeopard || !SystemInfo.isJavaVersionAtLeast("1.6.0_30")); From 7788b1cf40f8838dcb482a7ab29cd59cf21c0595 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 18 Jan 2012 12:58:36 +0400 Subject: [PATCH 3/7] IDEA-79994 ClassNotFoundException on OS X 10.7.2 --- .../src/com/intellij/openapi/wm/impl/IdeFrameImpl.java | 2 +- .../src/com/intellij/ui/mac/MacMainFrameDecorator.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java index 9a20cb09ec2e..76422cc6e8e1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/IdeFrameImpl.java @@ -114,7 +114,7 @@ public class IdeFrameImpl extends JFrame implements IdeFrame, DataProvider { // http://lists.apple.com/archives/java-dev/2009/Dec/msg00240.html if (SystemInfo.isMac) setIconImage(null); // enable fullscreen titlebar button - if (SystemInfo.isMacOSLion) FullScreenUtilities.setWindowCanFullScreen(this, true); + if (SystemInfo.isMacOSLion && MacMainFrameDecorator.FULL_SCREEN_AVAILABLE) FullScreenUtilities.setWindowCanFullScreen(this, true); MouseGestureManager.getInstance().add(this); } diff --git a/platform/platform-impl/src/com/intellij/ui/mac/MacMainFrameDecorator.java b/platform/platform-impl/src/com/intellij/ui/mac/MacMainFrameDecorator.java index 8b7c0e64d534..ddc17b3a4fd3 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/MacMainFrameDecorator.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/MacMainFrameDecorator.java @@ -53,6 +53,7 @@ public class MacMainFrameDecorator implements UISettingsListener, Disposable { public static final Key SHOULD_OPEN_IN_FULLSCREEN = Key.create("mac.should.open.in.fullscreen"); public static final String FULL_SCREEN = "Idea.Is.In.FullScreen.Mode.Now"; + public static final boolean FULL_SCREEN_AVAILABLE = SystemInfo.isJavaVersionAtLeast("1.6.0_29"); private static boolean SHOWN = false; @@ -136,6 +137,8 @@ public class MacMainFrameDecorator implements UISettingsListener, Disposable { }); try { if (SystemInfo.isMacOSLion) { + if (!FULL_SCREEN_AVAILABLE) return; + FullScreenUtilities.addFullScreenListenerTo(frame, new FullScreenAdapter() { @Override public void windowEnteredFullScreen(AppEvent.FullScreenEvent event) { From 4bdcb7e1e3c70e025a68254894a6a537234f8f26 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 16 Jan 2012 17:41:06 +0400 Subject: [PATCH 4/7] winp library patched to fix problem with extracting dll to 'lib' directory under Win7 --- .idea/libraries/winp.xml | 6 ++++-- build/scripts/libLicenses.gant | 2 +- lib/required_for_dist.txt | 2 +- lib/src/winp-1.16-patched-src.zip | Bin 0 -> 6481 bytes lib/winp-1.16-patched.jar | Bin 0 -> 17342 bytes lib/winp-1.16.jar | Bin 18465 -> 0 bytes 6 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 lib/src/winp-1.16-patched-src.zip create mode 100644 lib/winp-1.16-patched.jar delete mode 100644 lib/winp-1.16.jar diff --git a/.idea/libraries/winp.xml b/.idea/libraries/winp.xml index f86a5426c94b..ca5008ccc110 100644 --- a/.idea/libraries/winp.xml +++ b/.idea/libraries/winp.xml @@ -1,9 +1,11 @@ - + - + + + \ No newline at end of file diff --git a/build/scripts/libLicenses.gant b/build/scripts/libLicenses.gant index 52eefc21f4dc..c4b9f40dfd88 100644 --- a/build/scripts/libLicenses.gant +++ b/build/scripts/libLicenses.gant @@ -222,7 +222,7 @@ libraryLicense(name: "TestNG", version: "5.7 snapshot", license: "Apache 2.0", u libraryLicense(name: "Trilead SSH", libraryName: "trilead-ssh2", version: "build 213", license: "BSD style (see LICENSE.txt in trilead.jar)", url: "http://www.trilead.com/SSH_Library/") libraryLicense(name: "Trove4j", version: "1.1 (with patches by JetBrains)", license: "LGPL", url: "http://trove4j.sourceforge.net/", licenseUrl: "http://trove4j.sourceforge.net/html/license.html") libraryLicense(name: "Velocity", version: "1.7", license: "Apache 2.0", url: "http://velocity.apache.org/", licenseUrl: "http://velocity.apache.org/index.html") -libraryLicense(name: "winp", version: "1.16", license: "MIT", url: "http://winp.dev.java.net/", licenseUrl: "https://winp.dev.java.net/license.html") +libraryLicense(name: "winp", version: "1.16 (patched)", license: "MIT", url: "http://winp.dev.java.net/", licenseUrl: "https://winp.dev.java.net/license.html") libraryLicense(name: "Xalan", libraryName:"Xalan-2.7.1", version: "2.7.1", license: "Apache 2.0", url: "http://xml.apache.org/xalan-j/", licenseUrl: "http://xml.apache.org/xalan-j/") libraryLicense(name: "Xerces", version: "2.9.1", license: "Apache 2.0", url: "http://xerces.apache.org/xerces2-j/", licenseUrl: "http://xerces.apache.org/xerces2-j/") libraryLicense(name: "XML Commons (xml-apis.jar, resolver.jar)", version: "", license: "Apache 2.0, W3C Software License , public domain", url: "http://xml.apache.org/commons/", licenseUrl: "http://xml.apache.org/commons/licenses.html") diff --git a/lib/required_for_dist.txt b/lib/required_for_dist.txt index d08f4b185b8c..6e5ed206d18f 100644 --- a/lib/required_for_dist.txt +++ b/lib/required_for_dist.txt @@ -37,7 +37,7 @@ sanselan-0.98-snapshot.jar serviceMessages.jar trove4j.jar velocity.jar -winp-1.16.jar +winp-1.16-patched.jar xbean.jar xerces.jar xmlrpc-2.0.jar diff --git a/lib/src/winp-1.16-patched-src.zip b/lib/src/winp-1.16-patched-src.zip new file mode 100644 index 0000000000000000000000000000000000000000..fb96ffb2ea2a52c3d9a493ceeca6b9627bc5192b GIT binary patch literal 6481 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 literal 0 HcmV?d00001 diff --git a/lib/winp-1.16-patched.jar b/lib/winp-1.16-patched.jar new file mode 100644 index 0000000000000000000000000000000000000000..36dca5299f50d6907cc2bdd178ff465b77d0c641 GIT binary patch literal 17342 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 Date: Wed, 18 Jan 2012 11:32:20 +0100 Subject: [PATCH 5/7] npe --- .../src/com/intellij/internal/psiView/PsiViewerDialog.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java b/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java index 9ab6b99af4ba..24f74774c628 100644 --- a/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java +++ b/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java @@ -1275,7 +1275,8 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp final PsiElement rootElement = treeStructure.getRootPsiElement(); final SelectionModel selection = myEditor.getSelectionModel(); PsiElement rootPsiElement = treeStructure.getRootPsiElement(); - int baseOffset = rootPsiElement.getTextRange().getStartOffset(); + final TextRange textRange = rootPsiElement.getTextRange(); + int baseOffset = textRange != null ? textRange.getStartOffset() : 0; final int start = selection.getSelectionStart()+baseOffset; final int end = selection.getSelectionEnd()+baseOffset - 1; final PsiElement element = From 2679bf2acba1116aa9385c1d75757b16e52f8a01 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 18 Jan 2012 11:45:37 +0100 Subject: [PATCH 6/7] suggest to delete type arguments when they are not expected (IDEA-79300) --- .../impl/analysis/GenericsHighlightUtil.java | 3 + .../impl/quickfix/RemoveTypeArgumentsFix.java | 75 +++++++++++++++++++ .../removeTypeArguments/afterRemoveAll.java | 7 ++ .../removeTypeArguments/beforeRemoveAll.java | 7 ++ .../beforeRemoveUnavailable.java | 7 ++ .../quickFix/RemoveTypeArgumentsTest.java | 25 +++++++ 6 files changed, 124 insertions(+) create mode 100644 java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveTypeArgumentsFix.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java create mode 100644 java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveTypeArgumentsTest.java diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 3d5cc6306f28..4a0ed7347583 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -157,6 +157,9 @@ public class GenericsHighlightUtil { if (pparent instanceof PsiTypeElement) { PsiElement variable = pparent.getParent(); if (variable instanceof PsiVariable) { + if (targetParametersNum == 0) { + QuickFixAction.registerQuickFixAction(highlightInfo, new RemoveTypeArgumentsFix(variable), null); + } VariableParameterizedTypeFix.registerIntentions(highlightInfo, (PsiVariable)variable, referenceParameterList); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveTypeArgumentsFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveTypeArgumentsFix.java new file mode 100644 index 000000000000..d0a5eea3c48b --- /dev/null +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/RemoveTypeArgumentsFix.java @@ -0,0 +1,75 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.daemon.impl.quickfix; + +import com.intellij.codeInsight.intention.HighPriorityAction; +import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * User: anna + * Date: 1/18/12 + */ +public class RemoveTypeArgumentsFix extends LocalQuickFixAndIntentionActionOnPsiElement implements HighPriorityAction { + private static final Logger LOGGER = Logger.getInstance("#" + RemoveTypeArgumentsFix.class.getName()); + + public RemoveTypeArgumentsFix(@Nullable PsiElement element) { + super(element); + } + + @NotNull + @Override + public String getText() { + return "Remove type arguments"; + } + + @NotNull + @Override + public String getFamilyName() { + return getText(); + } + + @Override + public boolean isAvailable(@NotNull Project project, + @NotNull PsiFile file, + @NotNull PsiElement startElement, + @NotNull PsiElement endElement) { + return startElement instanceof PsiVariable && startElement.isValid() && ((PsiVariable)startElement).getTypeElement() != null; + } + + @Override + public void invoke(@NotNull Project project, + @NotNull PsiFile file, + @Nullable("is null when called from inspection") Editor editor, + @NotNull PsiElement startElement, + @NotNull PsiElement endElement) { + final PsiVariable psiVariable = (PsiVariable)startElement; + final PsiTypeElement typeElement = psiVariable.getTypeElement(); + LOGGER.assertTrue(typeElement != null); + final PsiJavaCodeReferenceElement referenceElement = typeElement.getInnermostComponentReferenceElement(); + if (referenceElement != null) { + final PsiReferenceParameterList parameterList = referenceElement.getParameterList(); + if (parameterList != null) { + parameterList.delete(); + } + } + } +} diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java new file mode 100644 index 000000000000..6717f0845c70 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/afterRemoveAll.java @@ -0,0 +1,7 @@ +// "Remove type arguments" "true" +abstract class SomeClass implements Some { + public abstract void doSomething(K key, Node root); +} +class Node {} +interface Some{} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java new file mode 100644 index 000000000000..b80e08c65436 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveAll.java @@ -0,0 +1,7 @@ +// "Remove type arguments" "true" +abstract class SomeClass implements Some { + public abstract void doSomething(K key, Node root); +} +class Node {} +interface Some{} + diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java new file mode 100644 index 000000000000..23363b2c6613 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments/beforeRemoveUnavailable.java @@ -0,0 +1,7 @@ +// "Remove type arguments" "false" +abstract class SomeClass implements Some { + public abstract void doSomething(K key, Node root); +} +class Node {} +interface Some{} + diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveTypeArgumentsTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveTypeArgumentsTest.java new file mode 100644 index 000000000000..cd1a096e0d96 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/quickFix/RemoveTypeArgumentsTest.java @@ -0,0 +1,25 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.codeInsight.daemon.quickFix; + +public class RemoveTypeArgumentsTest extends LightQuickFixTestCase { + public void test() throws Exception { doAllTests(); } + + @Override + protected String getBasePath() { + return "/codeInsight/daemonCodeAnalyzer/quickFix/removeTypeArguments"; + } +} From 6ccc3afd6634a99129c9f8f9ac3c3282f7c0a04a Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Wed, 18 Jan 2012 12:05:34 +0100 Subject: [PATCH 7/7] hotswap: optionally scan with VFS for in-process make implementation --- .../openapi/compiler/ex/CompilerPathsEx.java | 3 +- .../debugger/impl/HotSwapManager.java | 68 ++++++++++++++----- .../intellij/debugger/ui/HotSwapUIImpl.java | 14 ++-- 3 files changed, 63 insertions(+), 22 deletions(-) diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java index bb2d830651ce..963635775c68 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/ex/CompilerPathsEx.java @@ -30,6 +30,7 @@ import com.intellij.util.containers.OrderedSet; import gnu.trove.TObjectHashingStrategy; import java.io.File; +import java.util.Collection; import java.util.Set; public class CompilerPathsEx extends CompilerPaths { @@ -75,7 +76,7 @@ public class CompilerPathsEx extends CompilerPaths { } } - public static void visitFiles(final VirtualFile[] directories, final FileVisitor visitor) { + public static void visitFiles(final Collection directories, final FileVisitor visitor) { for (final VirtualFile outputDir : directories) { ApplicationManager.getApplication().runReadAction(new Runnable() { public void run() { diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java index 1838d9d21458..9483a6668db2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/HotSwapManager.java @@ -20,14 +20,15 @@ import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.events.DebuggerCommandImpl; import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.compiler.ex.CompilerPathsEx; import com.intellij.openapi.components.AbstractProjectComponent; +import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.OrderEnumerator; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.HashMap; import org.jetbrains.annotations.NotNull; @@ -68,25 +69,58 @@ public class HotSwapManager extends AbstractProjectComponent { myTimeStamps.put(session, Long.valueOf(tStamp)); } - public Map scanForModifiedClasses(final DebuggerSession session, final HotSwapProgress progress) { + public Map scanForModifiedClasses(final DebuggerSession session, final HotSwapProgress progress, final boolean scanWithVFS) { DebuggerManagerThreadImpl.assertIsManagerThread(); - final List outputRoots = new ArrayList(); - ApplicationManager.getApplication().runReadAction(new Runnable() { - public void run() { - final List allClasses = OrderEnumerator.orderEntries(myProject).withoutSdk().withoutLibraries().getPathsList().getRootDirs(); - for (VirtualFile dir : VfsUtil.toVirtualFileArray(allClasses)) { - outputRoots.add(new File(dir.getPath())); - } - } - }); - final long timeStamp = getTimeStamp(session); final Map modifiedClasses = new HashMap(); - for (File root : outputRoots) { - final String rootPath = FileUtil.toCanonicalPath(root.getPath()); - collectModifiedClasses(root, rootPath, rootPath + "/", modifiedClasses, progress, timeStamp); + + if (scanWithVFS) { + ApplicationManager.getApplication().runReadAction(new Runnable() { + public void run() { + final List allDirs = OrderEnumerator.orderEntries(myProject).withoutSdk().withoutLibraries().getPathsList().getRootDirs(); + CompilerPathsEx.visitFiles(allDirs, new CompilerPathsEx.FileVisitor() { + protected void acceptDirectory(final VirtualFile file, final String fileRoot, final String filePath) { + if (!progress.isCancelled()) { + progress.setText(DebuggerBundle.message("progress.hotswap.scanning.path", filePath)); + super.acceptDirectory(file, fileRoot, filePath); + } + } + + protected void acceptFile(VirtualFile file, String fileRoot, String filePath) { + if (progress.isCancelled()) { + return; + } + if (file.getTimeStamp() > timeStamp && StdFileTypes.CLASS.equals(file.getFileType())) { + //noinspection HardCodedStringLiteral + if (SystemInfo.isFileSystemCaseSensitive ? filePath.endsWith(CLASS_EXTENSION) : StringUtil.endsWithIgnoreCase(filePath, CLASS_EXTENSION)) { + progress.setText(DebuggerBundle.message("progress.hotswap.scanning.path", filePath)); + //noinspection HardCodedStringLiteral + final String qualifiedName = filePath.substring(fileRoot.length() + 1, filePath.length() - CLASS_EXTENSION.length()).replace('/', '.'); + modifiedClasses.put(qualifiedName, new HotSwapFile(new File(filePath))); + } + } + } + }); + } + }); } + else { + final List outputRoots = new ArrayList(); + ApplicationManager.getApplication().runReadAction(new Runnable() { + public void run() { + final List allDirs = OrderEnumerator.orderEntries(myProject).withoutSdk().withoutLibraries().getPathsList().getRootDirs(); + for (VirtualFile dir : allDirs) { + outputRoots.add(new File(dir.getPath())); + } + } + }); + for (File root : outputRoots) { + final String rootPath = FileUtil.toCanonicalPath(root.getPath()); + collectModifiedClasses(root, rootPath, rootPath + "/", modifiedClasses, progress, timeStamp); + } + } + return modifiedClasses; } @@ -158,7 +192,7 @@ public class HotSwapManager extends AbstractProjectComponent { } - public static Map> scanForModifiedClasses(final List sessions, final HotSwapProgress swapProgress) { + public static Map> scanForModifiedClasses(final List sessions, final HotSwapProgress swapProgress, final boolean scanWithVFS) { final Map> modifiedClasses = new HashMap>(); final MultiProcessCommand scanClassesCommand = new MultiProcessCommand(); @@ -174,7 +208,7 @@ public class HotSwapManager extends AbstractProjectComponent { scanClassesCommand.addCommand(debuggerSession.getProcess(), new DebuggerCommandImpl() { protected void action() throws Exception { swapProgress.setDebuggerSession(debuggerSession); - final Map sessionClasses = getInstance(swapProgress.getProject()).scanForModifiedClasses(debuggerSession, swapProgress); + final Map sessionClasses = getInstance(swapProgress.getProject()).scanForModifiedClasses(debuggerSession, swapProgress, scanWithVFS); if (!sessionClasses.isEmpty()) { modifiedClasses.put(debuggerSession, sessionClasses); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java index 5404b04f8f99..ff744dbad2d4 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/HotSwapUIImpl.java @@ -16,6 +16,7 @@ package com.intellij.debugger.ui; import com.intellij.CommonBundle; +import com.intellij.compiler.CompilerWorkspaceConfiguration; import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.DebuggerManagerEx; import com.intellij.debugger.impl.DebuggerSession; @@ -157,11 +158,16 @@ public class HotSwapUIImpl extends HotSwapUI implements ProjectComponent{ return; } - final HotSwapProgressImpl findClassesProgress = generatedPaths == null? new HotSwapProgressImpl(myProject) : null; + final boolean isServerMode = CompilerWorkspaceConfiguration.getInstance(myProject).useCompileServer(); + final boolean shouldPerformScan = !isServerMode || generatedPaths == null; + + final HotSwapProgressImpl findClassesProgress = shouldPerformScan ? new HotSwapProgressImpl(myProject) : null; ApplicationManager.getApplication().executeOnPooledThread(new Runnable() { public void run() { - final Map> modifiedClasses = generatedPaths == null? scanForModifiedClassesWithProgress(sessions, findClassesProgress) : HotSwapManager.findModifiedClasses(sessions, generatedPaths); + final Map> modifiedClasses = shouldPerformScan? + scanForModifiedClassesWithProgress(sessions, findClassesProgress, !isServerMode) : + HotSwapManager.findModifiedClasses(sessions, generatedPaths); final Application application = ApplicationManager.getApplication(); if (modifiedClasses.isEmpty()) { @@ -216,12 +222,12 @@ public class HotSwapUIImpl extends HotSwapUI implements ProjectComponent{ }); } - private static Map> scanForModifiedClassesWithProgress(final List sessions, final HotSwapProgressImpl progress) { + private static Map> scanForModifiedClassesWithProgress(final List sessions, final HotSwapProgressImpl progress, final boolean scanWithVFS) { final Ref>> result = Ref.create(null); ProgressManager.getInstance().runProcess(new Runnable() { public void run() { try { - result.set(HotSwapManager.scanForModifiedClasses(sessions, progress)); + result.set(HotSwapManager.scanForModifiedClasses(sessions, progress, scanWithVFS)); } finally { progress.finished();