Skip to content

Commit 5e2768f

Browse files
move KlassMap to separate file
1 parent 9b3aa9a commit 5e2768f

File tree

3 files changed

+73
-63
lines changed

3 files changed

+73
-63
lines changed

luceedebug/src/main/java/luceedebug/Agent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ private static Map<String, Integer> linearizedCoreInjectClasses() {
156156
result.put("luceedebug.coreinject.ClosureScopeLocalScopeAccessorShim", 0);
157157
result.put("luceedebug.coreinject.ComponentScopeMarkerTraitShim", 0);
158158
result.put("luceedebug.coreinject.LuceeVm$SteppingState", 0);
159-
result.put("luceedebug.coreinject.LuceeVm$KlassMap", 0);
159+
result.put("luceedebug.coreinject.KlassMap", 0);
160160
result.put("luceedebug.coreinject.LuceeVm$JdwpWorker", 0);
161161
result.put("luceedebug.coreinject.ValTracker$TaggedObject", 0);
162162
result.put("luceedebug.coreinject.DebugEntity", 0);
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package luceedebug.coreinject;
2+
3+
import java.util.HashMap;
4+
5+
import luceedebug.Config;
6+
import luceedebug.OriginalAndTransformedString;
7+
8+
import com.sun.jdi.*;
9+
10+
class KlassMap {
11+
/**
12+
* original -> original
13+
*
14+
* transformed -> canonicalized as per fs config
15+
*/
16+
final public OriginalAndTransformedString sourceName;
17+
final public HashMap<Integer, Location> lineMap;
18+
private final ClassObjectReference objRef;
19+
20+
final public ReferenceType refType;
21+
22+
private KlassMap(Config config, ReferenceType refType) throws AbsentInformationException {
23+
objRef = refType.classObject();
24+
25+
String sourceName = refType.sourceName();
26+
var lineMap = new HashMap<Integer, Location>();
27+
28+
for (var loc : refType.allLineLocations()) {
29+
lineMap.put(loc.lineNumber(), loc);
30+
}
31+
32+
this.sourceName = new OriginalAndTransformedString(
33+
sourceName,
34+
Config.canonicalizeFileName(sourceName)
35+
);
36+
this.lineMap = lineMap;
37+
this.refType = refType;
38+
}
39+
40+
boolean isCollected() {
41+
return objRef.isCollected();
42+
}
43+
44+
/**
45+
* May return null if ReferenceType throws an AbsentInformationException, which the caller
46+
* should interpret as "we can't do anything meaningful with this file"
47+
*/
48+
static KlassMap maybeNull_tryBuildKlassMap(Config config, ReferenceType refType) {
49+
try {
50+
return new KlassMap(config, refType);
51+
}
52+
catch (AbsentInformationException e) {
53+
return null;
54+
}
55+
catch (Throwable e) {
56+
e.printStackTrace();
57+
System.exit(1);
58+
}
59+
60+
// unreachable
61+
return null;
62+
}
63+
64+
@Override
65+
public boolean equals(Object e) {
66+
if (e instanceof KlassMap) {
67+
return ((KlassMap)e).sourceName.equals(this.sourceName);
68+
}
69+
return false;
70+
}
71+
}

luceedebug/src/main/java/luceedebug/coreinject/LuceeVm.java

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.util.Collection;
66
import java.util.ArrayList;
77
import java.util.Arrays;
8-
import java.util.HashMap;
98
import java.util.HashSet;
109
import java.util.List;
1110
import java.util.Set;
@@ -720,66 +719,6 @@ public IDebugEntity[] getIndexedVariables(long ID) {
720719
return GlobalIDebugManagerHolder.debugManager.getVariables(ID, IDebugEntity.DebugEntityType.INDEXED);
721720
}
722721

723-
static private class KlassMap {
724-
/**
725-
* original -> original
726-
*
727-
* transformed -> canonicalized as per fs config
728-
*/
729-
final public OriginalAndTransformedString sourceName;
730-
final public HashMap<Integer, Location> lineMap;
731-
private final ClassObjectReference objRef;
732-
733-
@SuppressWarnings("unused")
734-
final public ReferenceType refType;
735-
736-
private KlassMap(Config config, ReferenceType refType) throws AbsentInformationException {
737-
objRef = refType.classObject();
738-
739-
String sourceName = refType.sourceName();
740-
var lineMap = new HashMap<Integer, Location>();
741-
742-
for (var loc : refType.allLineLocations()) {
743-
lineMap.put(loc.lineNumber(), loc);
744-
}
745-
746-
this.sourceName = new OriginalAndTransformedString(
747-
sourceName,
748-
Config.canonicalizeFileName(sourceName)
749-
);
750-
this.lineMap = lineMap;
751-
this.refType = refType;
752-
}
753-
754-
/**
755-
* May return null if ReferenceType throws an AbsentInformationException, which the caller
756-
* should interpret as "we can't do anything meaningful with this file"
757-
*/
758-
static KlassMap maybeNull_tryBuildKlassMap(Config config, ReferenceType refType) {
759-
try {
760-
return new KlassMap(config, refType);
761-
}
762-
catch (AbsentInformationException e) {
763-
return null;
764-
}
765-
catch (Throwable e) {
766-
e.printStackTrace();
767-
System.exit(1);
768-
}
769-
770-
// unreachable
771-
return null;
772-
}
773-
774-
@Override
775-
public boolean equals(Object e) {
776-
if (e instanceof KlassMap) {
777-
return ((KlassMap)e).sourceName.equals(this.sourceName);
778-
}
779-
return false;
780-
}
781-
}
782-
783722
private AtomicInteger breakpointID = new AtomicInteger();
784723
private int nextBreakpointID() {
785724
return breakpointID.incrementAndGet();
@@ -875,7 +814,7 @@ private IBreakpoint[] __internal__bindBreakpoints(String serverAbsPath, BpLineAn
875814
List<KlassMap> garbageCollectedKlassMaps = new ArrayList<>();
876815

877816
for (KlassMap mapping : klassMapSet) {
878-
if (mapping.objRef.isCollected()) {
817+
if (mapping.isCollected()) {
879818
// This still leaves us with a little race where it gets collected after this,
880819
// but before we start adding breakpoints to the gc'd class.
881820
garbageCollectedKlassMaps.add(mapping);

0 commit comments

Comments
 (0)