From b3c51ccbd030fbaac1c76ea69e2947c26a80c5a1 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Tue, 19 Mar 2024 18:18:40 +0100 Subject: [PATCH] Refactor ResolvedReferenceType#equals Fixes comparing against lazy types --- .../types/ResolvedReferenceType.java | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedReferenceType.java b/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedReferenceType.java index 0f297e26c5..d09d20c413 100644 --- a/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedReferenceType.java +++ b/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedReferenceType.java @@ -20,10 +20,6 @@ */ package com.github.javaparser.resolution.types; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - import com.github.javaparser.ast.AccessSpecifier; import com.github.javaparser.resolution.MethodUsage; import com.github.javaparser.resolution.declarations.ResolvedFieldDeclaration; @@ -37,6 +33,10 @@ import com.github.javaparser.resolution.types.parametrization.ResolvedTypeParametrized; import com.github.javaparser.utils.Pair; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + /** * A ReferenceType like a class, an interface or an enum. Note that this type can contain also the values * specified for the type parameters. @@ -88,10 +88,20 @@ public ResolvedReferenceType(ResolvedReferenceTypeDeclaration typeDeclaration, L public boolean equals(Object o) { if (this == o) return true; - if (o == null || (!isLazyType(o) && getClass() != o.getClass()) - || (isLazyType(o) && !this.equals(asResolvedReferenceType(o)))) + if (o == null) return false; - ResolvedReferenceType that = asResolvedReferenceType(o); + + if (o instanceof LazyType) { + final LazyType lazyType = (LazyType) o; + if (!lazyType.isReferenceType()) + return false; + return this.equals(lazyType.asReferenceType()); + } + + if (getClass() != o.getClass()) + return false; + + ResolvedReferenceType that = (ResolvedReferenceType) o; if (!typeDeclaration.equals(that.typeDeclaration)) return false; if (!typeParametersMap.equals(that.typeParametersMap)) @@ -99,17 +109,6 @@ public boolean equals(Object o) { return true; } - private boolean isLazyType(Object type) { - return type !=null && type instanceof LazyType; - } - - private ResolvedReferenceType asResolvedReferenceType(Object o) { - if (isLazyType(o)) { - return ((LazyType) o).asReferenceType(); - } - return ResolvedReferenceType.class.cast(o); - } - @Override public int hashCode() { int result = typeDeclaration.hashCode();