diff --git a/tasty-query/shared/src/main/scala/tastyquery/TypeOps.scala b/tasty-query/shared/src/main/scala/tastyquery/TypeOps.scala index caa04660..9b57b0e4 100644 --- a/tasty-query/shared/src/main/scala/tastyquery/TypeOps.scala +++ b/tasty-query/shared/src/main/scala/tastyquery/TypeOps.scala @@ -110,7 +110,8 @@ private[tastyquery] object TypeOps: case _: PolyType => false case tp2: MethodType => - matchesType(tp1, tp2.resultType) + tp2.paramNames.isEmpty + && matchesType(tp1, tp2.resultType) case _ => true end matchesType diff --git a/tasty-query/shared/src/test/scala/tastyquery/TypeSuite.scala b/tasty-query/shared/src/test/scala/tastyquery/TypeSuite.scala index 8f3e03e0..d1a0ec3d 100644 --- a/tasty-query/shared/src/test/scala/tastyquery/TypeSuite.scala +++ b/tasty-query/shared/src/test/scala/tastyquery/TypeSuite.scala @@ -1803,6 +1803,12 @@ class TypeSuite extends UnrestrictedUnpicklingSuite { val poly1InChild = polyInChild.find(_.typeParamCountIs(1)).get val poly2InChild = polyInChild.find(_.typeParamCountIs(2)).get + val overloadedParensNoParensInSuper = SuperMonoClass.findNonOverloadedDecl(termName("overloadedParensNoParens")) + val overloadedParensNoParensInChild = ChildMonoClass.findNonOverloadedDecl(termName("overloadedParensNoParens")) + + val overloadedNoParensParensInSuper = SuperMonoClass.findNonOverloadedDecl(termName("overloadedNoParensParens")) + val overloadedNoParensParensInChild = ChildMonoClass.findNonOverloadedDecl(termName("overloadedNoParensParens")) + // From intInSuper assert(clue(intInSuper.overriddenSymbol(SuperMonoClass)) == Some(intInSuper)) @@ -1922,6 +1928,82 @@ class TypeSuite extends UnrestrictedUnpicklingSuite { assert(clue(poly2InChild.allOverriddenSymbols.toList) == List(poly2InSuper)) assert(clue(poly2InChild.nextOverriddenSymbol) == Some(poly2InSuper)) + + // From overloadedParensNoParensInSuper + + assert( + clue(overloadedParensNoParensInSuper.overriddenSymbol(SuperMonoClass)) == Some(overloadedParensNoParensInSuper) + ) + assert(clue(overloadedParensNoParensInSuper.overriddenSymbol(ChildMonoClass)) == None) + + assert( + clue(overloadedParensNoParensInSuper.overridingSymbol(SuperMonoClass)) == Some(overloadedParensNoParensInSuper) + ) + assert(clue(overloadedParensNoParensInSuper.overridingSymbol(ChildMonoClass)) == None) + + assert( + clue(overloadedParensNoParensInSuper.matchingSymbol(SuperMonoClass, ChildMonoClass)) == Some( + overloadedParensNoParensInSuper + ) + ) + assert(clue(overloadedParensNoParensInSuper.matchingSymbol(ChildMonoClass, ChildMonoClass)) == None) + + // From overloadedParensNoParensInChild + + assert(clue(overloadedParensNoParensInChild.overriddenSymbol(SuperMonoClass)) == None) + assert( + clue(overloadedParensNoParensInChild.overriddenSymbol(ChildMonoClass)) == Some(overloadedParensNoParensInChild) + ) + + assert(clue(overloadedParensNoParensInChild.overridingSymbol(SuperMonoClass)) == None) + assert( + clue(overloadedParensNoParensInChild.overridingSymbol(ChildMonoClass)) == Some(overloadedParensNoParensInChild) + ) + + assert(clue(overloadedParensNoParensInChild.matchingSymbol(SuperMonoClass, ChildMonoClass)) == None) + assert( + clue(overloadedParensNoParensInChild.matchingSymbol(ChildMonoClass, ChildMonoClass)) == Some( + overloadedParensNoParensInChild + ) + ) + + // From overloadedNoParensParensInSuper + + assert( + clue(overloadedNoParensParensInSuper.overriddenSymbol(SuperMonoClass)) == Some(overloadedNoParensParensInSuper) + ) + assert(clue(overloadedNoParensParensInSuper.overriddenSymbol(ChildMonoClass)) == None) + + assert( + clue(overloadedNoParensParensInSuper.overridingSymbol(SuperMonoClass)) == Some(overloadedNoParensParensInSuper) + ) + assert(clue(overloadedNoParensParensInSuper.overridingSymbol(ChildMonoClass)) == None) + + assert( + clue(overloadedNoParensParensInSuper.matchingSymbol(SuperMonoClass, ChildMonoClass)) == Some( + overloadedNoParensParensInSuper + ) + ) + assert(clue(overloadedNoParensParensInSuper.matchingSymbol(ChildMonoClass, ChildMonoClass)) == None) + + // From overloadedNoParensParensInChild + + assert(clue(overloadedNoParensParensInChild.overriddenSymbol(SuperMonoClass)) == None) + assert( + clue(overloadedNoParensParensInChild.overriddenSymbol(ChildMonoClass)) == Some(overloadedNoParensParensInChild) + ) + + assert(clue(overloadedNoParensParensInChild.overridingSymbol(SuperMonoClass)) == None) + assert( + clue(overloadedNoParensParensInChild.overridingSymbol(ChildMonoClass)) == Some(overloadedNoParensParensInChild) + ) + + assert(clue(overloadedNoParensParensInChild.matchingSymbol(SuperMonoClass, ChildMonoClass)) == None) + assert( + clue(overloadedNoParensParensInChild.matchingSymbol(ChildMonoClass, ChildMonoClass)) == Some( + overloadedNoParensParensInChild + ) + ) } testWithContext("overrides-cannot-override") { diff --git a/test-sources/src/main/scala/inheritance/Overrides.scala b/test-sources/src/main/scala/inheritance/Overrides.scala index 6de73c7c..e417fcd0 100644 --- a/test-sources/src/main/scala/inheritance/Overrides.scala +++ b/test-sources/src/main/scala/inheritance/Overrides.scala @@ -13,6 +13,10 @@ object Overrides: def overloadedPoly[A](x: A): A = x def overloadedPoly[A, B](x: A, y: B): (A, B) = (x, y) + def overloadedParensNoParens(x: Int): Int = x + + def overloadedNoParensParens: Int = 1 + override def toString(): String = "SuperMono" end SuperMono @@ -34,6 +38,10 @@ object Overrides: override def overloadedPoly[B](a: B): B = a override def overloadedPoly[X, B](x: X, y: B): (X, B) = (x, y) + def overloadedParensNoParens: Int = 1 + + def overloadedNoParensParens(x: Int): Int = x + override def toString: String = "ChildMono" end ChildMono