Quantos de vocês usaram bibliotecas de terceiros ao escrever seu código? A pergunta é retórica, porque sem o uso de bibliotecas de terceiros o desenvolvimento de alguns produtos teria demorado muito, muito tempo, porque para resolver cada problema seria preciso "reinventar a roda". No entanto, além das vantagens, também existem desvantagens no uso de bibliotecas de terceiros. Uma dessas desvantagens tocou recentemente no analisador PVS-Studio para C #. Por muito tempo, o analisador não conseguiu concluir a análise de um grande projeto devido ao uso do método SymbolFinder.FindReferencesAsync da API Roslyn no diagnóstico V3083.
PVS-Studio, , . , , . ! . Alarm! Alarm! ! , . , 3 C# . V3083. , . V3083 C# . , :
public class IncorrectEventUse
{
public event EventHandler EventOne;
protected void InvokeEventTwice(object o, Eventers args)
{
if (EventOne != null)
{
EventOne(o, args);
EventOne.Invoke(o, args);
}
}
}
V3083 EventOne InvokeEventTwice. . , V3083 :
;
, ;
, .
- .
- . V3083 , ( : Visual Studio, Rider, SonarQube), . , . Roslyn API SymbolFinder.FindReferencesAsync, V3083, " ".
: , , . . , - . , , . 100 % V3083.
V3083
, , , . , , open-source ( 90 ). open-source ? " ", , . V3083. , , – V3083 . . SymbolFinder.FindReferencesAsync V3083 9 %. - , , :
, , - V3083.
, Roslyn API, ! . , SymbolFinder.FindReferencesAsync, Microsoft.CodeAnalysis.FindSymbols.SymbolFinder, .
PVS-Studio, .
V3083 , 7.12 SymbolFinder.FindReferencesAsync.
, C# , V3083. , , . 50, .
, : Valery Komarov. Roslyn API: Why PVS-Studio Was Analyzing the Project So Long.