Quantcast
Channel: YouTrackReSharper (RSRP) - Bug and Issue Tracker
Viewing all articles
Browse latest Browse all 106942

RSRP-469145: Feature request: Detect unused code for interfaces not implemented

$
0
0
Reporter Vianney PHILIPPE (vianney) Vianney PHILIPPE (vianney)
Created Apr 6, 2018 5:12:50 PM
Updated Apr 6, 2018 5:34:35 PM
Subsystem No Subsystem
Assignee Unassigned
Priority Normal
State Submitted
Type Unspecified
Fix version No Fix versions
Affected versions No Affected versions
Fixed In Version ReSharper Undefined
VsVersion All Versions

Description

When an interface is never implemented, all casts to this interface are expected to return null, which may lead to dead code that could be detected.

Sample repro


[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)]
public interface IUsed
{
string Value { get; }
}

internal interface INotImplemented : IUsed
{
}

[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)]
public class Base
{
public Base(IUsed value)
{
Value = value;
}
public IUsed Value { get; }
}

internal sealed class DeadClass : Base
{
public DeadClass(INotImplemented value)
: base(value)
{
NewValue = value;
}
public INotImplemented NewValue { get; }
}

[UsedImplicitly(ImplicitUseTargetFlags.WithMembers)]
public sealed class OtherCode
{
public Base GetBase(IUsed data)
{
var alwaysNull = data as INotImplemented;
if (alwaysNull != null)
return new DeadClass(alwaysNull);
return new Base(data);
}
}

Expected result

I expect these code inspections to pop up:
  • alwaysNull is always null
  • DeadClass is not used
  • INotImplemented is never implemented

Actual result

Nothing
But I can safely delete INotImplemented, DeadClass and the 3 first lines of GetBase.

Versions

Resharper 2017.3.5

Viewing all articles
Browse latest Browse all 106942

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>