éèŠãªã€ãã³ããPVS-Studioã¢ãã©ã€ã¶ãŒã®ã©ã€ããµã€ã¯ã«ã§çºçããŸãã-ææ°ããŒãžã§ã³ã§ã¯ãCïŒã§èšè¿°ãããã³ãŒãããã§ãã¯ããæ©èœãè¿œå ãããŸããã ãã®ã¢ãã©ã€ã¶ãŒã®éçºè ã®äžäººãšããŠãç§ã¯ãããžã§ã¯ãããã§ãã¯ããã«éãéããããšãã§ããŸããã§ããã å°ãããŠæªç¥ã®ãããžã§ã¯ãããã§ãã¯ããããšã«èå³ãæã€äººã¯ã»ãšãã©ããªãã®ã§ãæåãªãã®ãéžæããå¿ èŠãããããã®éžæã¯MonoDevelopã«å§ããããŸããã
ãããžã§ã¯ãã«ã€ããŠå°ã
MonoDevelopã¯ãCïŒãJavaãBooãNemerleãVisual Basic .NETãValaãCILãCãããã³C ++ã¢ããªã±ãŒã·ã§ã³ãäœæããããã«èšèšãããç¡æã®éçºç°å¢ã§ãã Embarcadero Technologiesã®Oxygeneã®ãµããŒããèšç»ãããŠããŸãã
åœåãããã¯Mono / GTK +ã®SharpDevelopããŒãã§ãããããã以æ¥ããããžã§ã¯ãã¯åæç¶æ ããã¯çšé ãç¶æ ã«ãªã£ãŠããŸãã
MonoDevelopã¯Monoãããžã§ã¯ãã®äžéšã§ãã ã¹ã¯ãªãããäœæããæ段ãšããŠUnity3Dé åžãããã«çµã¿èŸŒãŸããŠããŸãããå€ãããŒãžã§ã³ïŒ4.0.1ïŒã§ãã
ãã®éçºç°å¢ã®æ©èœã®äžã§ãæ§æã®åŒ·èª¿è¡šç€ºãã³ãŒãã®æãããã¿ãã³ãŒãè£å®ãã¯ã©ã¹ãã©ãŠã¶ãŒããã©ã°ã€ã³ã®ãµããŒããçµ±åãããã¬ãŒãããžã¥ã¢ã«ãã©ãŒã ãã¶ã€ããŒããŠããããã¹ãã匷調衚瀺ãããŸãã
ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒãã¯GitHubã®å¯Ÿå¿ãããªããžããªã§å ¥æã§ãã ã¢ã»ã³ããªã®æé ã¯ãããžã§ã¯ãã®å ¬åŒWebãµã€ãã§èª¬æãããŠããŸãã
äœããã§ãã¯ãããŸãããïŒ
åè¿°ããããã«ããããžã§ã¯ãã¯CVSã³ãŒããåæããæ©èœãè¿œå ãããPVS-Studioéçã³ãŒãã¢ãã©ã€ã¶ãŒã®ææ°ããŒãžã§ã³ã䜿çšããŠåæãããŸããã ããã¯CïŒã¢ãã©ã€ã¶ãŒã®æåã®ãªãªãŒã¹ã§ãããçŸåš40以äžã®èšºæã«ãŒã«ãå®è£ ããŠããŸãã ãã®ããŒãžã§ã³ã¯ãŸã C ++ã¢ãã©ã€ã¶ãŒãšåããããéçºãããŠããªãããšã¯æããã§ããããã®ããŒã«ã䜿çšãããšããã§ã«éåžžã«èå³æ·±ããšã©ãŒãèŠã€ããããšãã§ããŸãïŒãã®äžéšã¯ãã®èšäºã§èª¬æããŸãïŒã CïŒã¢ãã©ã€ã¶ãŒã¯åå¥ã®è£œåã§ã¯ãªããåãPVS-Studioã®äžéšã§ãããå¥ã®ããã°ã©ãã³ã°èšèªã§èšè¿°ãããã³ãŒããåæããæ¹æ³ãåçŽã«èªèããŠããŸãã
ãã®ãªã³ã¯ããã¢ãã©ã€ã¶ãŒã®ææ°ããŒãžã§ã³ãããŠã³ããŒãããŠãã ãã ã
åæçµæã«é¢ããããã€ãã®èšè
åæã®çµæã95件ã®ãããžã§ã¯ãã§8,457åã®ãã¡ã€ã«ãæ€èšŒãããŸããã
ã¢ãã©ã€ã¶ãŒã¯ãæåã®118åã®èŠåã2çªç®ã®128åã®èŠåã3çªç®ã®ã¬ãã«ã®475åã®èŠåãçæããŸããã
äžéšã®äººã¯ãããã»ã©å€ãã®ãã¡ã€ã«ã«ã¯ããã»ã©å€ããªããšèšããããããŸããã ãã ããããã§ã¯ãçŸæç¹ã§å®è£ ãããŠãã蚺æãC ++ã¢ãã©ã€ã¶ãŒãããå°ãªããšããäºå®ãèæ ®ãã䟡å€ããããŸãã 次ã«ãã¢ãã©ã€ã¶ãŒã¯1åéãã®ãã§ãã¯ã§ã¯ç¡å¹ã§ãã ããã¯æ°åç¹°ãè¿ãããŠããŸãããããäžåºŠèšåãã䟡å€ããããŸã-éç解æããŒã«ã®äœ¿çšããååã«å©çãåŸãããã«ããããã¯äžåºŠã§ã¯ãªãå®æçã«äœ¿çšãããã¹ãã§ãã ããã«ããããã©ãã«ã·ã¥ãŒãã£ã³ã°ã®æéãç¯çŽããããã®çµæããããžã§ã¯ãéçºãå®äŸ¡ã§ç°¡åã«ãªããŸãã
åæçµæ
ãã®èšäºã§ã¯ãèŠã€ãã£ããšã©ãŒã®ãã¡æãèå³æ·±ããã®ã®ããã€ããæ€èšããŸããèŠã€ãã£ããã¹ãŠã®ãšã©ãŒãæ€èšãããšããã®èšäºã®ããªã¥ãŒã ãäžé©åãªæ¬¡å ã«å¢ããããã§ãã ãã®èšäºã¯ããããžã§ã¯ãã®ã³ãŒãäŸãšãšãã«ç¹å®ã®çš®é¡ã®ãšã©ãŒã®èª¬æãå«ããµãã»ã¯ã·ã§ã³ã«åãããŠããŸãã ãããã£ãŠãããã«æãèå³æ·±ããšã©ãŒã衚瀺ããããšãã§ããŸãã
æŒç®åã®å·Šå³ã«åãåŒ
ãã®ã»ã¯ã·ã§ã³ã«ã¯ã 'A ||ãšãã圢åŒã®ãšã©ãŒã®èª¬æãå«ãŸããŠããŸãã A 'ã å€ãã®å Žåããã®ãããªãšã©ãŒã¯ãã¿ã€ããã¹ãŸãã¯ã³ããŒããŒã¹ãã®å€±æãšããã°ã©ããŒã®äžæ³šæã«èµ·å ããŸãã å€ãã®å Žåããã®ãããªãšã©ãŒã¯ãç¹ã«å€æ°ã®ååãååã«é·ãã1æåã ãç°ãªãå Žåã倧éã®ã³ãŒãã§èŠã€ããã®ãé£ããå ŽåããããŸãã ååãšããŠãå¥ã®å€æ°ã®äœ¿çšãæ瀺ãããŸããããã®ãããªãã§ãã¯ã¯åã«åé·ãªã³ãŒãã§ããå ŽåããããŸãã 以äžã®ãã¹ãŠã®è©³çŽ°ã
protected override SourceCodeLocation GetSourceCodeLocation (string fixtureTypeNamespace, string fixtureTypeName, string methodName) { if (string.IsNullOrEmpty (fixtureTypeName) || string.IsNullOrEmpty (fixtureTypeName)) return null; .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3001 ã||ãã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãstring.IsNullOrEmptyïŒfixtureTypeNameïŒãããããŸãã æŒç®åã MonoDevelop.NUnit NUnitProjectTestSuite.cs 84
ãšã©ãŒã¯èçŒã§èŠãã-æ¡ä»¶ã§ã¯ãåãæååå€æ°ã 'null'ã®ç䟡æ§ãŸã㯠'String.Empty'ã®ç䟡æ§ã«ã€ããŠäºéãã§ãã¯ãããŸãã 以äžã®ã³ãŒãã§ã¯ïŒç¥èŠãè€éã«ããªãããã«ãæ¬æå šäœã¯ããã«èšèŒãããŠããªããããåèªããšãïŒå€æ° 'fixtureTypeNamespace'ã«å¯ŸããŠåæ§ã®ãã§ãã¯ãå®è¡ãããããããã®æ¡ä»¶ã®2çªç®ã®ãã§ãã¯ã¯å€æ° 'methodNameãã¡ãœãããžã®åŒæ°ãšããŠãšã'ãŸãã¯ãŸã£ããã
åæ§ã®ãšã©ãŒã®å¥ã®äŸïŒ
bool TryAddDocument (string fileName, out OpenRazorDocument currentDocument) { .... var guiDoc = IdeApp.Workbench.GetDocument (fileName); if (guiDoc != null && guiDoc.Editor != null) .... guiDoc.Closed += (sender, args) => { var doc = sender as MonoDevelop.Ide.Gui.Document; if (doc.Editor != null && doc.Editor != null) .... } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3001 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«åäžã®å¯æ¬¡åŒãdoc.EditorïŒ= NullãããããŸãã MonoDevelop.AspNet RazorCSharpParser.cs 180
åã³ãåãåŒå ã§2ã€ã®åäžã®ãã§ãã¯ã çè«çã«ã¯ãæŒç®åãasãã䜿çšããŠå€æ°ãsenderããå€æ°ãdocãã«ãã£ã¹ãããåŸãå€ãnullããæžã蟌ãããšãã§ããŸãã ãã®çµæããdoc.EditorïŒ= Nullãããã§ãã¯ãããšããNullReferenceExceptionãã¿ã€ãã®äŸå€ãã¹ããŒãããŸãã ã³ãŒãã®ä¿®æ£ããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸãã
if (doc != null && doc.Editor != null)
å¥ã®ãšã©ãŒã³ãŒãïŒ
static MemberCore GetLaterDefinedMember (MemberSpec a, MemberSpec b) { var mc_a = a.MemberDefinition as MemberCore; var mc_b = b.MemberDefinition as MemberCore; if (mc_a == null) return mc_b; if (mc_b == null) return mc_a; if (a.DeclaringType.MemberDefinition != b.DeclaringType.MemberDefinition) return mc_b; if (mc_a.Location.File != mc_a.Location.File) return mc_b; return mc_b.Location.Row > mc_a.Location.Row ? mc_b : mc_a; }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3001 ãïŒ=ãæŒç®åã®å·ŠåŽãšå³åŽã«åããµãåŒãmc_a.Location.FileãããããŸãã ICSharpCode.NRefactory.CSharp membercache.cs 1319
ãã®ãããªééãã¯ç®ãåŒãããšã¯ãªããããããŸããããåæåšã¯äººã§ã¯ãªãããã®ãããªããšãèŠéããŸããã ã³ãŒãããããmc_aããªããžã§ã¯ãã®ãFileãããããã£ãããèªäœãšæ¯èŒãããããšãããããŸããããmc_bããªããžã§ã¯ãã®å¯Ÿå¿ããããããã£ãšæ¯èŒããå¿ èŠãããããšã¯æããã§ãã
æ£ããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
if (mc_a.Location.File != mc_b.Location.File)
åé·ã³ãŒãïŒ
public override AppResult Property (string propertyName, object value) { if (resultIter != null && resultIter.HasValue) { var objectToCompare = TModel.GetValue (resultIter.Value, Column); return MatchProperty (propertyName, objectToCompare, value); } return MatchProperty (propertyName, ParentWidget, value); } TreeIter? resultIter;
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3001 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãresultIterïŒ= NullãããããŸãã MonoDevelop.Ide GtkTreeModelResult.cs 125
å€æ°ãresultIterãã¯null蚱容åã§ããããããresultIterïŒ= Nullãããã³ãresultIter.HasValueããšãã圢åŒã®ãã§ãã¯ã¯åäžã§ããããããã1ã€ã«å¶éããããšãã§ããŸãã
ãŸã£ããåãã³ãŒãããã1ååºäŒã£ãã 察å¿ããã¢ãã©ã€ã¶ãŒèŠåïŒ
V3001 ã&&ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãresultIterïŒ= NullãããããŸãã MonoDevelop.Ide GtkTreeModelResult.cs 135
次ã®ã³ãŒãã¹ãããããæ€èšããŠãã ããã
Accessibility DeclaredAccessibility { get; } bool IsStatic { get; } private bool MembersMatch(ISymbol member1, ISymbol member2) { if (member1.Kind != member2.Kind) { return false; } if (member1.DeclaredAccessibility != member1.DeclaredAccessibility || member1.IsStatic != member1.IsStatic) { return false; } if (member1.ExplicitInterfaceImplementations().Any() || member2.ExplicitInterfaceImplementations().Any()) { return false; } return SignatureComparer .HaveSameSignatureAndConstraintsAndReturnTypeAndAccessors( member1, member2, this.IsCaseSensitive); }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ
- V3001 ãïŒ=ãæŒç®åã®å·Šå³ã«ã¯ãåäžã®ãµãåŒãmember1.DeclaredAccessibilityãããããŸãã CSharpBinding AbstractImplementInterfaceService.CodeAction.cs 544
- V3001 ãïŒ=ãæŒç®åã®å·ŠåŽãšå³åŽã«ã¯ãåäžã®ãµãåŒãmember1.IsStaticãããããŸãã CSharpBinding AbstractImplementInterfaceService.CodeAction.cs 545
å¥ã®ã¿ã€ããã¹ã ãããŠ1ã€ã§ã¯ãªããäžåºŠã«2ã€ã ç¹°ãè¿ããŸãããåããªããžã§ã¯ãïŒ 'member1'ïŒã®ããããã£éã§æ¯èŒãè¡ãããŸãã ããããã£ã¯ããªããã£ãã§ãããè¿œå ã®ããžãã¯ããªãããããã®ãããªãã§ãã¯ãæå³ã倱ããŸãã ã¯ããã³ãŒãã¯ããªããžã§ã¯ããmember1ããšãmember2ãã®ããããã£ãæ¯èŒããå¿ èŠãããããšã瀺ããŠããŸãã ã³ãŒãã®æ£ããããŒãžã§ã³ïŒ
if (member1.DeclaredAccessibility != member2.DeclaredAccessibility || member1.IsStatic != member2.IsStatic)
å€æ°ãããèªäœã«å²ãåœãŠã
åã®ãããªäžè¬çãªçš®é¡ã®ãšã©ãŒã§ã¯ãããŸããããããã»ã©èå³æ·±ããã®ã§ã¯ãããŸããã å€ãã®å Žåã誀ã£ãç¶æ³ã¯ãã¡ãœããå ã®ã¯ã©ã¹ã®ã¡ã³ããŒã«ãæž¡ãããåŒæ°ã®1ã€ã®å€ãå²ãåœãŠãå¿ èŠãããå Žåã§ãããããã®ååã¯ãæåã®æåã®å Žåã®ã¿ç°ãªãããšããããããŸãã ééããç¯ããããã§ãã ãŸããå€æ°ãããèªäœã«å²ãåœãŠãåçŽãªã±ãŒã¹ããããããããããããã£ã§ããå Žåãã³ã³ãã€ã©ã¯èŠåãåºããŸããã è€éãªããžãã¯ãã²ãã¿ãŒ/ã»ãã¿ãŒããããã£ã«ããã£ãŠããå Žåããã®ãããªã¢ã¯ã·ã§ã³ã¯ç解ã§ããŸããããªãå Žåãå²ãåœãŠã¯å°ãªããšãå¥åŠã«èŠããŸãã ããããç§ãã¡ã¯æ ¹æ ããªãããã§ã¯ãªãã®ã§ããã®ãããªãšã©ãŒã®äŸãèŠãŠã¿ãã»ããããã§ãããã
public ViMacro (char macroCharacter) { MacroCharacter = MacroCharacter; } public char MacroCharacter {get; set;}
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3005 ãMacroCharacterãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã Mono.TextEditor ViMacro.cs 57
äžèšã®èª¬æ-ããããã£ã®ååãšã³ã³ã¹ãã©ã¯ã¿ãŒåŒæ°ã¯æåã®æåã®å Žåã«ã®ã¿ç°ãªããããããããã£ã®å€ã¯åŒæ°ãšããŠæž¡ãããå€ã«æžã蟌ãã®ã§ã¯ãªããããèªäœã«æžã蟌ãŸããŸãã ããããã£ã®å®çŸ©ãèŠããšãè¿œå ã®ããžãã¯ãå«ãŸããŠããªãããšãããããŸãã
public ViMark (char markCharacter) { MarkCharacter = MarkCharacter; } public char MarkCharacter {get; set;}
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3005 ãMarkCharacterãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã Mono.TextEditor ViMark.cs 45
ãšã©ãŒã¯åã®ãã®ãšãŸã£ããåãã§ãã ç¹°ãè¿ããŸãããå€æ°åã®æåã®æåã¯æ··ä¹±ããŠããŸãããã®ãããã³ã³ã¹ãã©ã¯ã¿ãŒãæåŸ ã©ããã«æ©èœããŸããã
public WhitespaceNode(string whiteSpaceText, TextLocation startLocation) { this.WhiteSpaceText = WhiteSpaceText; this.startLocation = startLocation; } public string WhiteSpaceText { get; set; }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3005 ãthis.WhiteSpaceTextãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã ICSharpCode.NRefactory.CSharp WhitespaceNode.cs 65
ãã®ãšã©ãŒã以åã®ãšã©ãŒãšäŒŒãŠããŸãããä»åã¯2ã€ã®å²ãåœãŠã®1ã€ã§ããã°ã©ããŒãå°å°ãããªãã£ããããã³ãŒãã¯ããèå³æ·±ããã®ã«ãªããŸããã ã¯ã€ãã¯ã¿ã€ãã³ã°ã§ã¯ãç¹ã«èªåã³ãŒã眮æã®æ段ã䜿çšããå Žåããã®ãããªãšã©ãŒãèŠéããããã§ãã ãã ããéçã¢ãã©ã€ã¶ãŒã䜿çšããŠæ°ããã³ãŒããå®æçã«ãã§ãã¯ããããšã«ããããããåé¿ã§ããŸããã ããšãã°ãPVS-Studioã§ã¯ãã³ã³ãã€ã«åŸã«æ°ããã³ãŒããèªåçã«ãã§ãã¯ã§ããŸã ïŒ ã€ã³ã¯ãªã¡ã³ã¿ã«åæã¢ãŒããåç §ïŒã
void OptionsChanged (object sender, EventArgs e) { gutterMargin.IsVisible = Options.ShowLineNumberMargin; iconMargin.IsVisible = iconMargin.IsVisible; .... } public bool IsVisible { get; set; }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3005 ãiconMargin.IsVisibleãå€æ°ã¯ããèªäœã«å²ãåœãŠãããŸãã MonoDevelop.HexEditor HexEditor.cs 241
ããã¯ããµãã»ã¯ã·ã§ã³ã®åé ã§èª¬æãã2çªç®ã®ã¿ã€ãã®ãšã©ãŒã§ãã ããããã£å€ã¯ç¬èªã«å²ãåœãŠãããŸããããã®ããããã£ã«é¡äŒŒããååã®ããŒã«ã«å€æ°ã¯ãããŸããã ããã«ããã®ããããã£ã¯è¿œå ã®ããžãã¯ã«é¢é£ä»ããããŠããŸããã 確ãã«èšãããšã¯ãã¯ãã§ããŸããããããããæ£ããã³ãŒãã¯æ¬¡ã®ããã«ãªã£ãŠããã¯ãã§ãã
iconMargin.IsVisible = gutterMargin.IsVisible;
éžæã®é¯èŠ
é¢çœãå¯é¡ã§ããã ãã ããããšãã°ã蚺æã¡ãã»ãŒãžV3004ãŸãã¯V3012ã䜿çšããŠæ€åºããããšã©ãŒãªã©ãããã€ãã®ã¿ã€ãã®ãšã©ãŒãæãæ£ç¢ºã«èª¬æããŠããŸãã ãã®ã¿ã€ãã®ãšã©ãŒã®æ¬è³ªã¯ããã§ãã¯å¯Ÿè±¡ã®æ¡ä»¶ïŒãifãæŒç®åã®V3004ããã³3é ã®V3012ïŒãtrueãŸãã¯falseã§ãããã©ããã«é¢ä¿ãªããåãã¢ã¯ã·ã§ã³ãåžžã«å®è¡ãããããåãçµæãè¿ãããããšã§ãã æ®å¿µãªãããV3004èŠåã«ãã£ãŠèšºæããããšã©ãŒã¯ãããžã§ã¯ãã§èŠã€ãããŸããã§ããããV3012èŠåãããã€ããããŸãããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã
public enum WindowCommands { NextDocument, PrevDocument, OpenDocumentList, OpenWindowList, SplitWindowVertically, SplitWindowHorizontally, UnsplitWindow, SwitchSplitWindow, SwitchNextDocument, SwitchPreviousDocument } protected static void Switch (bool next) { if (!IdeApp.Preferences.EnableDocumentSwitchDialog) { IdeApp.CommandService.DispatchCommand ( next ? WindowCommands.NextDocument : WindowCommands.NextDocument); return; } var toplevel = Window.ListToplevels () .FirstOrDefault (w => w.HasToplevelFocus) ?? IdeApp.Workbench.RootWindow; var sw = new DocumentSwitcher (toplevel, next); sw.Present (); }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3012 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€WindowCommands.NextDocumentãè¿ããŸãã MonoDevelop.Ide WindowCommands.cs 254
äžé æŒç®åã¯åžžã«åãåæèŠçŽ ïŒ 'WindowCommands.NextDocument'ïŒãè¿ããŸãã ãnextãå€æ°ã®å€ããfalseãã®å ŽåãèŠçŽ ãWindowCommands.PrevDocumentããè¿ãããã¯ãã§ãããšæ³å®ããŸãã
ç¹°ãè¿ããŸããããã®ãããªãšã©ãŒã¯èªåã³ãŒã眮æã®äœ¿çšãåå ã§ãããšçãããŠããŸãã è¿ éãªäœæ¥ã§ã¯ãã³ãŒãã®äœæã«åœ¹ç«ã€ããŒã«ããšã©ãŒã®äœæã«åœ¹ç«ã€ããšã«ãŸã£ããæ°ä»ããªãå ŽåããããŸãã ãã ãããããã¯ãã®èšäºã®ç¯å²å€ã®ãã®ãããã¯ã«é¢ããä»®å®ãšè°è«ã«ãããŸããã
ç§ã¯å¥ã®åæ§ã®äŸã«äŒã£ã
private void StartTestElement(ITestResult result) { ITest test = result.Test; TestSuite suite = test as TestSuite; if (suite != null) { xmlWriter.WriteStartElement("test-suite"); xmlWriter.WriteAttributeString("type", suite.TestType); xmlWriter.WriteAttributeString("name", suite.TestType == "Assembly" ? result.Test.FullName : result.Test.FullName); } .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3012 ãïŒïŒãæŒç®åã¯ããã®æ¡ä»¶åŒã«é¢ä¿ãªããåžžã«1ã€ã®åãå€result.Test.FullNameãè¿ããŸãã GuiUnit_NET_4_5 NUnit2XmlOutputWriter.cs 207
ã³ãŒããã©ã°ã¡ã³ããããããããã«ãåŒ 'suite.TestType ==â Assemblyâ'ã¯trueãŸãã¯falseã«ãªããäžé æŒç®åã®çµæ㯠'FullName'ããããã£ã®å€ã«ãªããŸãã
æŒç®åãasãã«ãããã£ã¹ãåŸã«ãnullãã®ç䟡æ§ã«ã€ããŠééã£ãå€æ°ããã§ãã¯
ãããŠãããã¯CïŒåºæã®ç¶æ³ã§ãã ããã«ããã¹ãæžã¿ã®ãããžã§ã¯ãããå€æãããšãããã¯ç¹å®ã®ãšã©ãŒãã¿ãŒã³ã§ãããåå¥ã®ã±ãŒã¹ã§ã¯ãããŸããã ãåç¥ã®ããã«ããasãæŒç®åã䜿çšããŠãã£ã¹ãã§ããªãã£ãå Žåãçµæã¯nullã«ãªããŸãïŒãInvalidCastExceptionãåã®äŸå€ãã¹ããŒãããå Žåãæ§æãïŒtype_nameïŒargãã䜿çšããæ瀺çãªãã£ã¹ããšã¯å¯Ÿç §çã§ãïŒ ïŒ å€ãã®å Žåããã®ãããªãã£ã¹ãã®åŸããã§ãã¯ãå®è¡ãããŠæåããããšã確èªããŸãã ãã ãããã£ã¹ãçµæã§ã¯ãªããéå å¯èœãªå€æ°ã誀ã£ãŠãã§ãã¯ããããšã«ãããå€ãã®å Žåãã¹ãç¯ããŸãã ãã®ãããªå Žåã®ããã€ãã以äžã§èª¬æããŸãã
public override bool Equals (object o) { SolutionItemReference sr = o as SolutionItemReference; if (o == null) return false; return (path == sr.path) && (id == sr.id); }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3019 ãasãããŒã¯ãŒãã䜿çšããåå€æåŸã«ã誀ã£ãå€æ°ãnullãšæ¯èŒãããå¯èœæ§ããããŸãã å€æ°ãoãããsrãã確èªããŸãã MonoDevelop.Core SolutionItemReference.cs 81
ãã®ã³ãŒãã§ã¯ãã¿ã€ãããªããžã§ã¯ããã®å€æ°ãoããã¿ã€ããSolutionItemReferenceãã«å€æãããŸãã ãã®ãããªãã£ã¹ãã倱æãããšãå€ãnullããå€æ°ãsrãã«æžã蟌ãŸããŸãã ãã®çµæãão == nullãã®ãã§ãã¯ã¯æåãïŒåœç¶ããoãããnullãã§ãªãå ŽåïŒããpath == sr.pathãããã§ãã¯ãããšããNullReferenceExceptionãã¿ã€ãã®äŸå€ãã¹ããŒãããŸãã ãããã¯ãã¹ãŠãé©åãªå Žæã§æ£ããå€æ°ããã§ãã¯ããããšã§åé¿ã§ããŸãã
if (sr == null) return false;
ãã®ã³ãŒãã®å¥ã®äŸïŒ
void OnTokenSelectionChanged (object sender, EventArgs args) { TreeSelection selection = sender as TreeSelection; if (sender != null) { TreeIter iter; TreeModel model = (TreeModel)tokensStore; if (selection.GetSelected (out model, out iter)) { entryToken.Text = (string)tokensStore.GetValue (iter, 0); comboPriority.Active = (int)tokensStore.GetValue (iter, 1); } else { entryToken.Text = String.Empty; comboPriority.Active = (int)TaskPriority.Normal; } } }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3019 ãasãããŒã¯ãŒãã䜿çšããåå€æåŸã«ã誀ã£ãå€æ°ãnullãšæ¯èŒãããå¯èœæ§ããããŸãã å€æ°ãéä¿¡è ãããéžæãã確èªããŠãã ããã MonoDevelop.Ide TasksOptionsPanel.cs 123
ç¶æ³ã¯åã®ç¶æ³ãšãŸã£ããåãã§ãã ãéä¿¡è ãããTreeSelectionãã«ãnullãã«ãã£ã¹ãããåŸãééã£ãå€æ°ããã§ãã¯ãããŸãããã®ããããNullReferenceExceptionããååŸããå±éºããããŸãã
åããšã©ãŒãã¿ãŒã³ãæã€åæ§ã®ã³ãŒãäŸãããã«2åæ€åºãããŸããã
- V3019 ãasãããŒã¯ãŒãã䜿çšããåå€æåŸã«ã誀ã£ãå€æ°ãnullãšæ¯èŒãããå¯èœæ§ããããŸãã å€æ°ãdataãããurlMarkerãã確èªããŠãã ããã MonoDevelop.SourceEditor MarkerOperationsHandler.cs 43
- V3019 ãasãããŒã¯ãŒãã䜿çšããåå€æåŸã«ã誀ã£ãå€æ°ãnullãšæ¯èŒãããå¯èœæ§ããããŸãã å€æ°ãã·ã³ãã«ãããã¡ãœãããã確èªããŠãã ããã CSharpBinding FormatStringHelper.cs 59
åæ§ã®æ¡ä»¶ã®ç¹°ãè¿ããã§ãã¯
ãããã®åŒã§äœ¿çšãããå€æ°ã¯ãããã®éã§å€ãããªãããåãæ¡ä»¶ãäºéãã§ãã¯ãããå ŽåããããŸãã ãã®ééãã¯ãäžèŠæããããããã¯ããã«æ·±å»ãªçµæãæãå¯èœæ§ããããŸãã ã©ã®ãã®-å®éã®äŸãèŠãæ¹ãè¯ãã§ãã
public override void VisitIndexerExpression( IndexerExpression indexerExpression) { .... var localResolveResult = context.Resolve(indexerExpression.Target) as LocalResolveResult; if (localResolveResult == null) return; var resolveResult = context.Resolve(indexerExpression); if (localResolveResult == null) return; .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3021åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯ã¡ãœããã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãICSharpCode.NRefactory.CSharp.Refactoring ParameterCanBeDeclaredWithBaseTypeIssue.cs 356
ãã®ã³ãŒãã¹ããããããããresolveResult == nullãã確èªãã代ããã«ããlocalResolveResult == nullãã確èªããããšã2åå®è¡ãããããšãæ確ã«ããããŸãã ããã¯ãã«ããã³ãŒãã¹ããããããæ確ã«èŠãããšãã§ããŸãã ãã®ãã©ã°ã¡ã³ãã«å ããŠã¡ãœããã®ã¡ã€ã³ããžãã¯ïŒããã§ã¯äŸãæããªããããããã§ã¯èª¬æããŸããïŒã«å ããŠå«ãŸããã³ãŒããèŠãŠããã®ãšã©ãŒãç°¡åã«èŠã€ããããšãã§ãããã©ããã¯å€§ããªåé¡ã§ãã ãããã®å Žåã§ãããresolveResultãããnullãã®å Žåã«ã¡ãœãããçµäºãã代ããã«ãåŒãç¶ãæ£åžžã«åäœããŸããã€ãŸãããresolveResultãã䜿çšããåŸç¶ã®ãã¹ãŠã®ããžãã¯ãtarratarasã«ç§»è¡ããŸãã
åæ§ã®ç£èŠã®å¥ã®äŸã次ã«ç€ºããŸãã
bool TryRemoveTransparentIdentifier(....) { .... string nae1Name = ExtractExpressionName(ref nae1); if (nae1Name == null) return false; .... string nae2Name = ExtractExpressionName(ref nae2); if (nae1Name == null) return false; .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3021åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯ã¡ãœããã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãICSharpCode.NRefactory.CSharp CombineQueryExpressions.cs 114
ç¹°ãè¿ããŸãããæ€èšŒã®ããã«å€æ°ãæ··åãããšããäºå®ã«ãããã«ãŒãã¯çµäºãããæ£ããå€ãè¿ãããã¡ãœããã®ãããªãããžãã¯ã«éåããŸãã
ãããŠãåããšã©ãŒãå«ããããèå³æ·±ãäŸããããŸãïŒ
public static SW.FontWeight ToWpfFontWeight (this FontWeight value) { if (value == FontWeight.Thin) return SW.FontWeights.Thin; if (value == FontWeight.Ultralight) return SW.FontWeights.UltraLight; if (value == FontWeight.Light) return SW.FontWeights.Light; if (value == FontWeight.Semilight) return SW.FontWeights.Light; if (value == FontWeight.Book) return SW.FontWeights.Normal; if (value == FontWeight.Medium) return SW.FontWeights.Medium; if (value == FontWeight.Semibold) return SW.FontWeights.SemiBold; if (value == FontWeight.Bold) return SW.FontWeights.Bold; if (value == FontWeight.Ultrabold) return SW.FontWeights.UltraBold; if (value == FontWeight.Heavy) return SW.FontWeights.Black; if (value == FontWeight.Ultraheavy) return SW.FontWeights.UltraBlack; return SW.FontWeights.Normal; }
ããŠãããªãã¯èŠã€ããŸãããïŒ åè«ã§ãã空ã§æãçªãã ãã§ãã ããããã¢ãã©ã€ã¶ãŒã«ã¯åé¡ã¯ãªãã圌ã¯èœã¡çããŠã¿ã¹ã¯ã«å¯ŸåŠããŸããã
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3021åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯ã¡ãœããã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãXwt.WPF DataConverter.cs 217
åé¡ãäœã§ããããããããç解ããã«ã¯ãFontWeightåæã調ã¹ãå¿ èŠããããŸãã
public enum FontWeight { /// The thin weight (100) Thin = 100, /// The ultra light weight (200) Ultralight = 200, /// The light weight (300) Light = 300, /// The semi light weight (350) Semilight = 350, /// The book weight (380) Book = 350, .... }
å®æ°ãSemilightããšãBookãã®å€ã¯åãã§ãããã³ã¡ã³ãã§ã¯ãå®æ°ãBookãã®å€ã¯380ã§ãªããã°ãªããªãããšãæ確ã«ç€ºãããŠããŸãã
ããã«èå³æ·±ãããšã«ãå€ãvalueãã380ã«çããå Žåããã®ã¡ãœããã¯åŒãç¶ãæ£åžžã«æ©èœããŸãã ãã®å Žåããªã¹ããããæ¡ä»¶ã¯ã©ããæºããããªããããæ¡ä»¶ 'value == FontWeight.Book'ãæºããããå Žåã«è¿ãããå€ã®ã¿ãè¿ãããŸãã ããã°ã§ã¯ãªããæ©èœã
ããŠããã®ãµãã»ã¯ã·ã§ã³ã®çµããã«ïŒ
public override object GetData (TransferDataType type) { if (type == TransferDataType.Text) return clipboard.WaitForText (); if (type == TransferDataType.Text) return clipboard.WaitForImage (); .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3021åäžã®æ¡ä»¶åŒãæã€2ã€ã®ãifãã¹ããŒãã¡ã³ãããããŸãã æåã®ãifãã¹ããŒãã¡ã³ãã«ã¯ã¡ãœããã®æ»ãå€ãå«ãŸããŸãã ããã¯ã2çªç®ã®ãifãã¹ããŒãã¡ã³ããç¡æå³ã§ããããšãæå³ããŸãXwt.Gtk ClipboardBackend.cs 86
ãã®ã³ãŒãã¹ããããã§ã¯ãã¿ã€ããã¹ãç°¡åã«èŠã€ããããšãã§ããŸãã ãtype == TransferDataType.Textãã®ãã§ãã¯ãç¹°ãè¿ã代ããã«ããtype == TransferDataType.Imageãããã§ãã¯ããå¿ èŠããããŸããã
競åããæ¡ä»¶ã確èªãã
1ã€ã®åŒã®å¶éå ã§ãåãå€æ°ãä»»æã®å€ãšçãã/çãããªããã©ããããã§ãã¯ãããã³ãŒãããããŸãã ãã®ãããªãã§ãã¯ã¯å°ãªããšãåé·ã§ããã誀ã£ãå€æ°ã®å€ã2åç®ã«ãã§ãã¯ããããšããäºå®ã«é¢é£ãããšã©ãŒãå«ãå¯èœæ§ããããŸãã ãã®ãããªãšã©ãŒã¯ãããžã§ã¯ãã§ãèŠã€ãããŸããã
IEnumerable<ICompletionData> CreateConstructorCompletionData(IType hintType) { .... if (!(hintType.Kind == TypeKind.Interface && hintType.Kind != TypeKind.Array)) .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3023ãã®åŒã®æ€æ»ãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã ICSharpCode.NRefactory.CSharp CSharpCompletionEngine.cs 2397
ã³ãŒãã®ç°å¢ããå€æãããšã圌ãã¯ããã§åŒããã§ãã¯ããã ãã§è€éã«ãªããŸããã ãã®æ¡ä»¶ã¯ãã¹ãŠæ¬¡ã®åœ¢åŒã®ã³ãŒãã«åçŽåã§ããããããã®è€éããå¿ èŠãªçç±ã¯æããã§ã¯ãããŸããã
if (hintType.Kind != TypeKind.Interface)
åæ§ã®ã±ãŒã¹ïŒ
void OnUpdateClicked (object s, StatusBarIconClickedEventArgs args) { if (args.Button != Xwt.PointerButton.Right && args.Button == Xwt.PointerButton.Left) { HideAlert (); AddinManagerWindow.Run (IdeApp.Workbench.RootWindow); } }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3023ãã®åŒã®æ€æ»ãæ€èšããŠãã ããã è¡šçŸãéå°ã§ãããã誀æ€ãå«ãŸããŠããŸãã MonoDevelop.Ide AddinsUpdateHandler.cs 97
ãã®ã³ãŒãã¹ãããããããæ¯èŒã®ããã®ä»ã®å€æ°ã®äœ¿çšãããã§æ瀺ãããŠããªãããšã¯æããã§ãããããã«ãããããããéå°ãªæ¯èŒãè¡ãããŸãã Buttonããããã£ã«è¿œå ã®ããžãã¯ãæããããŠããªããããèªã¿åãæã«ãèœãšãç©Žãã¯ãããŸããã ç¹°ãè¿ããŸãããã³ãŒãã¯ç°¡åã«åçŽåãããŸãã
if (args.Button == Xwt.PointerButton.Left)
誀ã£ããã©ãŒãããæåå
å€ãã®å Žåãæååã®æžåŒèšå®ã«ãšã©ãŒãå«ãã³ãŒãããããŸãã éåžžããšã©ãŒã«ã¯2ã€ã®ã¿ã€ãããããŸãã
- äºæ³ãããåŒæ°ã®æ°ã¯ãå®éã®åŒæ°ã®æ°ãããå°ãªãã§ãã ãã®å Žåãæªäœ¿çšã®åŒæ°ã¯åã«ç¡èŠãããŸãã åæ§ã®ãšã©ãŒã¯ãæååãæ£ããæ§æãããŠããªããšãããµã€ã³ãããããŸãããããã§ãªããã°ããªãæªäœ¿çšã®åŒæ°ãå«ãŸããŠããã®ã§ããããïŒ ãªãã¡ã¯ã¿ãªã³ã°ã®çµæãšããŠåœŒãæ®ã£ãå¯èœæ§ããããŸãã
- äºæ³ãããåŒæ°ã®æ°ã¯ãå®éã®åŒæ°ã®æ°ãããå€ããªã£ãŠããŸãã ã¿ã€ã 'FormatException'ã®äŸå€ãã¹ããŒããããããããäžæå¿«ãªã±ãŒã¹ã§ãã
ãã®ãããžã§ã¯ãã§ã¯ãæåã®ã¿ã€ãã®ãšã©ãŒã®ã¿ãçºçããŸããã ãããã®1ã€ã®äŸïŒ
ConditionExpression ParseReferenceExpression (string prefix) { StringBuilder sb = new StringBuilder (); string ref_type = prefix [0] == '$' ? "a property" : "an item list"; int token_pos = tokenizer.Token.Position; IsAtToken (TokenType.LeftParen, String.Format ( "Expected {0} at position {1} in condition \"{2}\". Missing opening parantheses after the '{3}'.", ref_type, token_pos, conditionStr, prefix)); .... IsAtToken (TokenType.RightParen, String.Format ( "Expected {0} at position {1} in condition \"{2}\". Missing closing parantheses'.", ref_type, token_pos, conditionStr, prefix)); .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒ V3025ã®åœ¢åŒãæ£ãããããŸãã ã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ3.çŸåšïŒ4. MonoDevelop.Core ConditionParser.cs 254
ã»ãšãã©ã®å Žåããã®ãšã©ãŒã¯ã³ããŒãšè²Œãä»ãã倱æããçµæã§ãããIsAtTokenã¡ãœããã®2çªç®ã®åŒã³åºãã¯æåã®åŒã³åºããšäŒŒãŠãããããå¯äžã®éãã¯éãæ¬åŒ§ã«é¢ããããšã§ãã ãã ãããprefixãã®åŒæ°ã¯äœ¿çšãããŸããã éèŠã§ã¯ãããŸãããã圌ã«ã¯æå³ããããŸããã
åæ§ã®èŠåïŒ
- V3025圢åŒãæ£ãããããŸããã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ1.çŸåšïŒ2. MonoDevelop.Xml XmlFormatterWriter.cs 1131;
- V3025圢åŒãæ£ãããããŸããã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ4.çŸåšïŒ6. ICSharpCode.NRefactory.CSharp MonoSymbolTable.cs 235
- V3025圢åŒãæ£ãããããŸããã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ1.çŸåšïŒ2. MonoDevelop.Ide HelpOperations.cs 212
- V3025圢åŒãæ£ãããããŸããã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ4.çŸåšïŒ6. Mono.Cecil.Mdb MonoSymbolTable.cs 235
- V3025圢åŒãæ£ãããããŸããã ããã©ãŒããããé¢æ°ãåŒã³åºããšãã«ãç°ãªãæ°ã®ãã©ãŒãããé ç®ãäºæ³ãããŸãã äºæ³ïŒ2.çŸåšïŒ3. MonoDevelop.TextEditor.Tests ViTests.cs 255
ãã«åç §ã®æœåšçãªéåç §
å€ãã®å Žåãå€æ°ããnullãã«çãããã©ããã確èªããå¿ èŠããããŸããç¹ã«ããã®å€æ°ãã¡ãœããã®åŒæ°ã§ããå Žåããã®äœæ¥ã®çµæã¯ãasãæŒç®åã䜿çšããŠååŸãããŸããããã䜿çšããåã«ãå€æ°ã«å€ãnullããå«ãŸããŠããªãããšã確èªããå¿ èŠããããŸããããã§ãªãå Žåãããšãã°ããªããžã§ã¯ãã®ã¡ã³ããŒã®1ã€ãåŒã³åºãããšãããšããNullReferenceExceptionãåã®äŸå€ãã¹ããŒãããŸãã
ããããããã°ã©ããŒã¯ãäžæ³šæã«ããããªã³ã¯ãéæ¥åç §ããåŸã«ãã®ãããªãã§ãã¯ãå®è¡ããå ŽåããããŸããããã§ãã®ãããªã±ãŒã¹ãçºçããŸããã
void Replace (RedBlackTreeNode oldNode, RedBlackTreeNode newNode) { .... if (oldNode.parent.left == oldNode || oldNode == null && oldNode.parent.left == null) .... }
ã¢ãã©ã€ã¶ãŒã®èŠåïŒV3027å€æ° 'oldNode'ã¯ãåãè«çåŒã§ãã«ãšæ€èšŒãããåã«ãè«çåŒã§äœ¿çšãããŸããã MonoDevelop.HexEditor RedBlackTree.cs 167
ã³ãŒããããããããã«ãæåã«ãªããžã§ã¯ããoldNode.parent.leftãã®ããã€ãã®ãã£ãŒã«ãããªããžã§ã¯ããoldNodeãèªäœãšæ¯èŒããã次ã«ãã®ãªããžã§ã¯ããšãã£ãŒã«ãããnullãã®çãããã©ããããã§ãã¯ãããŸãããã ãããoldNodeãããŸã nullã®å Žåãæåã®ãã§ãã¯ã§ãNullReferenceExceptionãã¿ã€ãã®äŸå€ãæ¢ã«ã¹ããŒãããŸããæ£ãã決å®ã¯ãæåã«ãªããžã§ã¯ãã 'null'ã§ãããã©ããããã§ãã¯ããããšã§ãã
ãããã«
å人çã«ã¯ãããã€ãã®èå³æ·±ããšã©ãŒãèŠã€ããããšãã§ãããããæ€èšŒã®çµæã«æºè¶³ããŸããããããã®ãã¹ãŠããã®èšäºã§æ€èšãããããã§ã¯ãããŸãããã»ãšãã©ããã«èšäºã®è³æãååãããããšãæããã«ãªã£ããããå€ãã®èšºæã¡ãã»ãŒãžãè¡šé¢çã«æ€æ»ãããŸããã
ãã®ããªã¥ãŒã ã®ãããžã§ã¯ãã«ã¯ããã»ã©å€ãã®ééãã¯ãªããšèšã人ããããããããŸããããã ãããã¹ã段éã§å€ãã®ãšã©ãŒãæ€åºãããéçã¢ãã©ã€ã¶ãŒã䜿çšããŠéçºæ®µéã§æ€åºããã³ä¿®æ£ã§ãããããã³ãŒãã®èšè¿°ãšãããã°ã®ããã»ã¹ã容æã«ãªããæçµè£œåã®ç·ã³ã¹ããåæžãããããšã«æ³šæããŠãã ããã
ãã®ä»ã®å®çžŸã®ããCïŒãããžã§ã¯ã
ä»ã®ãªãŒãã³ãœãŒã¹CïŒãããžã§ã¯ãã®ãã§ãã¯ã¢ãŠãã«ã€ããŠèªãããšã«èå³ããããããããŸããããã ãããããã®ãããžã§ã¯ãã®äžéšã¯ã¢ãã©ã€ã¶ãŒã®éçºäžã«ãã§ãã¯ãããããããã§ãã¯ãããšãæè¯ã®çµæã衚瀺ãããå¯èœæ§ããããŸãã
- æ°å¹Žã®ãã§ãã¯.NET Core LibrariesïŒCoreFXïŒ ;
- PVS-Studio 6.00æ°å¹ŽãªãªãŒã¹ïŒRoslynããã§ãã¯ããŸãã
- Microsoftã³ãŒãå¥çŽã®ç¢ºèªã
- CïŒïŒSharpDevelopãã§ãã¯ïŒããµããŒãããPVS-Studioã®å®éšçã
- æåã®èšäºã¯ãCïŒãããžã§ã¯ãã®ãã§ãã¯ïŒUmbracoã®ãã§ãã¯ïŒã«é¢ãããã®ã§ãã
ãã®èšäºãè±èªåã®èŽè¡ãšå ±æãããå Žåã¯ã翻蚳ãžã®ãªã³ã¯ã䜿çšããŠãã ããïŒSergey VasilievãMonoDevelopã®ãã°ãæ¢ããŠããŸãã
èšäºãèªãã§è³ªåããããŸããïŒ
å€ãã®å Žåãèšäºã«ã¯åã質åãå¯ããããŸãã ããã§åçãéããŸããïŒ PVS-StudioããŒãžã§ã³2015ã«é¢ããèšäºã®èªè
ããã®è³ªåãžã®åç ã ãªã¹ããã芧ãã ããã