From 810c16844ffb3f432fa729766d8af36c8a7d84a9 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Mon, 12 Dec 2011 16:29:30 +0300 Subject: [PATCH] Bug fix: Process doesn't stop on breakpoint. --- .../springloaded/SpringLoadedPositionManager.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java index dffc834d3c2a..34f0e7d303df 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/springloaded/SpringLoadedPositionManager.java @@ -33,7 +33,7 @@ import java.util.regex.Pattern; */ public class SpringLoadedPositionManager implements PositionManager { - private static final Pattern GENERATED_CLASS_NAME = Pattern.compile(".*\\$\\$[A-Za-z0-9]{8}"); + private static final Pattern GENERATED_CLASS_NAME = Pattern.compile("\\$\\$[A-Za-z0-9]{8}"); private final DebugProcess myDebugProcess; @@ -158,6 +158,16 @@ public class SpringLoadedPositionManager implements PositionManager { return myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, className + "*"); } + private static boolean isSpringLoadedGeneratedClass(ReferenceType ownerClass, ReferenceType aClass) { + String name = aClass.name(); + String ownerClassName = ownerClass.name(); + + // return name == ownerClassName + "$$" + /[A-Za-z0-9]{8}/ + return name.length() == ownerClassName.length() + 2 + 8 + && name.startsWith(ownerClassName) + && GENERATED_CLASS_NAME.matcher(name.substring(ownerClassName.length())).matches(); + } + @Nullable private static List findNested(ReferenceType fromClass, SourcePosition classPosition) { if (!fromClass.isPrepared()) return null; @@ -169,7 +179,7 @@ public class SpringLoadedPositionManager implements PositionManager { for (ReferenceType nested : nestedTypes) { if (!nested.isPrepared()) continue; - if (GENERATED_CLASS_NAME.matcher(nested.name()).matches()) { + if (isSpringLoadedGeneratedClass(fromClass, nested)) { if (springLoadedGeneratedClasses.size() > 0 && !springLoadedGeneratedClasses.get(0).name().equals(nested.name())) { springLoadedGeneratedClasses.clear(); // Only latest generated classes should be used. }