@@ -574,12 +574,14 @@ object CheckUnused:
574574 private def shouldNotReportParamOwner (using Context ): Boolean =
575575 if sym.exists then
576576 val owner = sym.owner
577- trivialDefs(owner) ||
578- owner.is(Flags .Override ) ||
577+ trivialDefs(owner) || // is a trivial def
579578 owner.isPrimaryConstructor ||
580- owner.annotations.exists (
579+ owner.annotations.exists ( // @depreacated
581580 _.symbol == ctx.definitions.DeprecatedAnnot
582- )
581+ ) ||
582+ owner.isAllOf(Synthetic | PrivateLocal ) ||
583+ owner.is(Accessor ) ||
584+ owner.isOverriden
583585 else
584586 false
585587
@@ -589,6 +591,11 @@ object CheckUnused:
589591 private def everySymbol (using Context ): List [Symbol ] =
590592 List (sym, sym.companionClass, sym.companionModule, sym.moduleClass).filter(_.exists)
591593
594+ /** A function is overriden. Either has `override flags` or parent has a matching member (type and name) */
595+ private def isOverriden (using Context ): Boolean =
596+ sym.is(Flags .Override ) ||
597+ (if sym.exists then sym.owner.thisType.parents.exists(p => sym.matchingMember(p).exists) else false )
598+
592599 end extension
593600
594601 extension (defdef : tpd.DefDef )
@@ -620,8 +627,8 @@ object CheckUnused:
620627 val sym = memDef.symbol
621628 (sym.is(Param ) || sym.isAllOf(PrivateParamAccessor | Local , butNot = CaseAccessor )) &&
622629 ! isSyntheticMainParam(sym) &&
623- ! sym.shouldNotReportParamOwner &&
624- ( ! sym.exists || ! (sym.owner.isAllOf( Synthetic | PrivateLocal ) || sym.owner.is( Accessor )))
630+ ! sym.shouldNotReportParamOwner
631+
625632
626633 private def shouldReportPrivateDef (using Context ): Boolean =
627634 currScopeType.top == ScopeType .Template && ! memDef.symbol.isConstructor && memDef.symbol.is(Private , butNot = SelfName | Synthetic | CaseAccessor )
0 commit comments