load file content for hotswap only if corresponding class is loaded in VM

This commit is contained in:
Eugene Zhuravlev
2013-10-31 19:20:14 +01:00
parent 32e25e5217
commit 5ad289fdff
2 changed files with 11 additions and 7 deletions
@@ -15,6 +15,8 @@
*/
package com.intellij.debugger.impl;
import org.jetbrains.annotations.NotNull;
import java.io.File;
/**
@@ -23,9 +25,10 @@ import java.io.File;
* Time: 2:23:38 PM
*/
public class HotSwapFile {
@NotNull
final File file;
public HotSwapFile(File file) {
public HotSwapFile(@NotNull File file) {
this.file = file;
}
}
@@ -31,6 +31,7 @@ import com.intellij.util.ui.UIUtil;
import com.sun.jdi.ReferenceType;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
@@ -121,15 +122,12 @@ class ReloadClassesWorker {
myProgress.setFraction(processedClassesCount / (double)modifiedClasses.size());
}
final HotSwapFile fileDescr = modifiedClasses.get(qualifiedName);
final byte[] content;
try {
content = FileUtil.loadFileBytes(fileDescr.file);
redefineProcessor.processClass(qualifiedName, fileDescr.file);
}
catch (IOException e) {
reportProblem(qualifiedName, e);
continue;
}
redefineProcessor.processClass(qualifiedName, content);
}
redefineProcessor.processPending();
myProgress.setFraction(1);
@@ -233,10 +231,13 @@ class ReloadClassesWorker {
myVirtualMachineProxy = virtualMachineProxy;
}
public void processClass(String qualifiedName, byte[] content) throws Throwable {
public void processClass(String qualifiedName, File file) throws Throwable {
final List<ReferenceType> vmClasses = myVirtualMachineProxy.classesByName(qualifiedName);
if (vmClasses.isEmpty()) return;
if (vmClasses.isEmpty()) {
return;
}
final byte[] content = FileUtil.loadFileBytes(file);
if (vmClasses.size() == 1) {
myRedefineMap.put(vmClasses.get(0), content);
if (myRedefineMap.size() >= CLASSES_CHUNK_SIZE) {