Bug 565462 - SourceLookup + Java 11 + Find Duplicates broken Added new ISourceLookupDirector.equalSourceElements() API to allow Java debugger distinguish between different Java model elements that represent same Java class files. The new interface method has default implementation that delegates to Objects.equals() to keep the previous behavior unchanged for existing clients. Change-Id: Ib9a514366e8b613b31fd5143a54fbf2186c4788b Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.debug.core/.settings/.api_filters b/org.eclipse.debug.core/.settings/.api_filters index d039d6c..c3e0e24 100644 --- a/org.eclipse.debug.core/.settings/.api_filters +++ b/org.eclipse.debug.core/.settings/.api_filters
@@ -1,5 +1,13 @@ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <component id="org.eclipse.debug.core" version="2"> + <resource path="core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java" type="org.eclipse.debug.core.sourcelookup.ISourceLookupDirector"> + <filter comment="565462#c15" id="404000815"> + <message_arguments> + <message_argument value="org.eclipse.debug.core.sourcelookup.ISourceLookupDirector"/> + <message_argument value="equalSourceElements(Object, Object)"/> + </message_arguments> + </filter> + </resource> <resource path="core/org/eclipse/debug/internal/core/groups/GroupLaunch.java" type="org.eclipse.debug.internal.core.groups.GroupLaunch"> <filter comment="Bug 548841 - Mark internal package as x-internal in manifest" id="305365105"> <message_arguments>
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java index a3d1cac..153a7e9 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/AbstractSourceLookupDirector.java
@@ -534,7 +534,7 @@ return false; } for (Object obj : sources) { - if (obj.equals(sourceToAdd)) { + if (equalSourceElements(obj, sourceToAdd)) { return true; } }
diff --git a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java index 0f97d1e..dd247c2 100644 --- a/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java +++ b/org.eclipse.debug.core/core/org/eclipse/debug/core/sourcelookup/ISourceLookupDirector.java
@@ -13,6 +13,8 @@ *******************************************************************************/ package org.eclipse.debug.core.sourcelookup; +import java.util.Objects; + import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; @@ -182,4 +184,20 @@ */ Object getSourceElement(Object element); + /** + * Answers if the objects should be considered as same source elements (e.g. + * resulting in the physically same storage element), independently if in + * the modelled world they may be different views on same data. + * + * @param element1 first source element + * @param element2 second source element + * @return Returns {@code true} if two source elements represent physically + * same data. Default implementation just delegates to + * {@link Objects#equals(Object, Object)}. + * @since 3.17 + */ + default boolean equalSourceElements(Object element1, Object element2) { + return Objects.equals(element1, element2); + } + }