From 3fddcdb2c5722b9822c3871a884e3ebf2bb5fa12 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Fri, 15 Jul 2022 20:51:27 +1000 Subject: [PATCH] Add Analyzer rule to enforce throwing in `[FeatureNotImplemented]` --- Common.ruleset | 3 + .../FeatureNotImplementedAnalyzer.cs | 111 ++++++++++++++++++ .../BizHawk.Analyzer/RoslynUtils.cs | 3 + References/BizHawk.Analyzer.dll | Bin 12800 -> 18432 bytes .../AppleII/AppleII.IVideoProvider.cs | 10 +- .../ZXSpectrum.ICodeDataLog.cs | 8 +- .../Consoles/Coleco/TMS9918A.cs | 10 +- .../GCE/Vectrex/VectrexHawk.ICodeDataLog.cs | 4 +- .../Consoles/Intellivision/STIC.cs | 10 +- .../Magnavox/Odyssey2/O2Hawk.ICodeDataLog.cs | 6 +- .../Nintendo/GBA/MGBAHawk.IDebuggable.cs | 1 - .../Consoles/Nintendo/GBA/MGBAHawk.cs | 1 - .../Nintendo/GBHawk/GBHawk.ICodeDataLog.cs | 6 +- .../GBHawkLink/GBHawkLink.ICodeDataLog.cs | 6 +- .../GBHawkLink3x/GBHawkLink3x.ICodeDataLog.cs | 6 +- .../GBHawkLink4x/GBHawkLink4x.ICodeDataLog.cs | 6 +- .../Nintendo/Gameboy/Gambatte.ICodeDataLog.cs | 5 +- .../Gameboy/GambatteLink.ICodeDataLog.cs | 8 +- .../Nintendo/N64/N64.IInputPollable.cs | 2 +- .../Nintendo/NES/NES.ICodeDataLogger.cs | 4 +- .../Consoles/PC Engine/VDC.Render.cs | 10 +- .../Consoles/PC Engine/VPC.cs | 10 +- .../GGHawkLink/GGHawkLink.ICodeDataLog.cs | 4 +- .../Consoles/Sega/SMS/SMS.ICodeDataLogger.cs | 4 +- .../Consoles/Sony/PSX/Octoshock.cs | 1 - 25 files changed, 158 insertions(+), 81 deletions(-) create mode 100644 ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs diff --git a/Common.ruleset b/Common.ruleset index 6e5cf4c0c4..a842f23d7c 100644 --- a/Common.ruleset +++ b/Common.ruleset @@ -15,6 +15,9 @@ + + + diff --git a/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs new file mode 100644 index 0000000000..bc7c6fb9c9 --- /dev/null +++ b/ExternalProjects/BizHawk.Analyzer/FeatureNotImplementedAnalyzer.cs @@ -0,0 +1,111 @@ +namespace BizHawk.Analyzers; + +using System.Collections.Immutable; +using System.Linq; + +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; + +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public sealed class FeatureNotImplementedAnalyzer : DiagnosticAnalyzer +{ + private const string ERR_MSG_DOES_NOT_THROW = "Throw NotImplementedException in [FeatureNotImplemented] method/prop body (or remove attribute)"; + + private const string ERR_MSG_METHOD_THROWS_UNKNOWN = "Indeterminable exception type in [FeatureNotImplemented] method/prop body, should be NotImplementedException"; + + private const string ERR_MSG_THROWS_WRONG_TYPE = "Incorrect exception type in [FeatureNotImplemented] method/prop body, should be NotImplementedException"; + + private const string ERR_MSG_UNEXPECTED_INCANTATION = "It seems [FeatureNotImplemented] should not be applied to whatever this is"; + + private static readonly DiagnosticDescriptor DiagShouldThrowNIE = new( + id: "BHI3300", + title: "Throw NotImplementedException from methods/props marked [FeatureNotImplemented]", + messageFormat: "{0}", + category: "Usage", + defaultSeverity: DiagnosticSeverity.Error, + isEnabledByDefault: true); + + public override ImmutableArray SupportedDiagnostics { get; } = ImmutableArray.Create(DiagShouldThrowNIE); + + public override void Initialize(AnalysisContext context) + { + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + var skipThisProject = false; + INamedTypeSymbol? featureNotImplementedAttrSym = null; + INamedTypeSymbol? notImplementedExceptionSym = null; + context.RegisterSyntaxNodeAction( + snac => + { + if (skipThisProject) return; + if (featureNotImplementedAttrSym is null) + { + featureNotImplementedAttrSym = snac.Compilation.GetTypeByMetadataName("BizHawk.Emulation.Common.FeatureNotImplementedAttribute"); + if (featureNotImplementedAttrSym is null) + { + // project does not have BizHawk.Emulation.Common dependency + skipThisProject = true; + return; + } + notImplementedExceptionSym = snac.Compilation.GetTypeByMetadataName("System.NotImplementedException")!; + } + void Wat(Location location) + => snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_UNEXPECTED_INCANTATION)); + void MaybeReportFor(ITypeSymbol? thrownExceptionType, Location location) + { + if (thrownExceptionType is null) snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_METHOD_THROWS_UNKNOWN)); + else if (!notImplementedExceptionSym!.Matches(thrownExceptionType)) snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_THROWS_WRONG_TYPE)); + // else correct usage, do not flag + } + bool IncludesFNIAttribute(SyntaxList mds) + => mds.SelectMany(static als => als.Attributes).Any(aSyn => featureNotImplementedAttrSym.Matches(snac.SemanticModel.GetTypeInfo(aSyn).Type)); + void CheckBlockBody(BlockSyntax bs, Location location) + { + if (bs.Statements.Count is not 1) snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_DOES_NOT_THROW)); + else if (bs.Statements[0] is not ThrowStatementSyntax tss) snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_DOES_NOT_THROW)); + else MaybeReportFor(snac.SemanticModel.GetThrownExceptionType(tss), tss.GetLocation()); + } + void CheckExprBody(ArrowExpressionClauseSyntax aecs, Location location) + { + if (aecs.Expression is not ThrowExpressionSyntax tes) snac.ReportDiagnostic(Diagnostic.Create(DiagShouldThrowNIE, location, ERR_MSG_DOES_NOT_THROW)); + else MaybeReportFor(snac.SemanticModel.GetThrownExceptionType(tes), tes.GetLocation()); + } + void CheckAccessor(AccessorDeclarationSyntax ads) + { + if (!IncludesFNIAttribute(ads.AttributeLists)) return; + if (ads.ExpressionBody is not null) CheckExprBody(ads.ExpressionBody, ads.GetLocation()); + else if (ads.Body is not null) CheckBlockBody(ads.Body, ads.GetLocation()); + else Wat(ads.GetLocation()); + } + switch (snac.Node) + { + case AccessorDeclarationSyntax ads: + CheckAccessor(ads); + break; + case MethodDeclarationSyntax mds: + if (!IncludesFNIAttribute(mds.AttributeLists)) return; + if (mds.ExpressionBody is not null) CheckExprBody(mds.ExpressionBody, mds.GetLocation()); + else if (mds.Body is not null) CheckBlockBody(mds.Body, mds.GetLocation()); + else Wat(mds.GetLocation()); + break; + case PropertyDeclarationSyntax pds: + if (pds.ExpressionBody is not null) + { + if (IncludesFNIAttribute(pds.AttributeLists)) CheckExprBody(pds.ExpressionBody, pds.GetLocation()); + } + else + { + if (IncludesFNIAttribute(pds.AttributeLists)) Wat(pds.GetLocation()); + else foreach (var accessor in pds.AccessorList!.Accessors) CheckAccessor(accessor); + } + break; + } + }, + SyntaxKind.GetAccessorDeclaration, + SyntaxKind.MethodDeclaration, + SyntaxKind.PropertyDeclaration, + SyntaxKind.SetAccessorDeclaration); + } +} diff --git a/ExternalProjects/BizHawk.Analyzer/RoslynUtils.cs b/ExternalProjects/BizHawk.Analyzer/RoslynUtils.cs index deaa57b34d..051658fecf 100644 --- a/ExternalProjects/BizHawk.Analyzer/RoslynUtils.cs +++ b/ExternalProjects/BizHawk.Analyzer/RoslynUtils.cs @@ -13,6 +13,9 @@ internal static class RoslynUtils public static ITypeSymbol? GetThrownExceptionType(this SemanticModel model, ThrowExpressionSyntax tes) => model.GetThrownExceptionType(tes.Expression); + public static ITypeSymbol? GetThrownExceptionType(this SemanticModel model, ThrowStatementSyntax tss) + => model.GetThrownExceptionType(tss.Expression!); + public static bool Matches(this ITypeSymbol expected, ITypeSymbol? actual) => SymbolEqualityComparer.Default.Equals(expected, actual); } diff --git a/References/BizHawk.Analyzer.dll b/References/BizHawk.Analyzer.dll index 4c53a0a2e00ddac5cf40893cee3d6a1bcfdfb558..aa5311910e93e1ab8488ed5f14c90fda36f7f33f 100644 GIT binary patch literal 18432 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 nYsej62ZGFaC7@`KT;Cnb$t3 zM}1UA=y1<-sc!r$cesN+9yhOi!5-DEf>5sFr=#w`E>O0VxeF6NFr%RC#eIO6UKcOD z^IUj2(`wJv;C6n45iiP%zrU?BQ$@U?0JhC|jsB0ZK|ExZKzxV11xy58 zGx92GkvL#CLJu}lK_|en0jFX!_(m}a3x%GB1Xid(!sJ0HV9V4_r?*nn4tiTNLU-SL z$?c@{Y~kuB@p%g;lW*Z?T-l55hhG;Ezb-s+1wI>5D7g4HIEB}?{&4@pyYIRA<43N% z@Cj|W=I`hJcsI*fu}2@(R*dWBp7@He9>q&h$&|SQzbGHm%@y|KuHYvn2A&Yu4<2%a z+|$t&`p}gt>`7ly@O}o|Co3e!TR#>XqW(>7D_d4kR-<*cMm*{_U-;_{*O%{pH1eg3 zp876Emc8EKawuCXzGr{QZej5}(g-IKJ&|~lM$M>hXqr5}wWuc-LyDN^=>=b2@Wg^+ z3%*-(tmgTet_AJ3uN2Gvzf$AhyU6daGQ}g7P?D4T$#|}B!sp^$_{|q`W%jCc@UKiR z!Z+VRz)t)=u^)$zeK@}wltaia>wjIKC!KG<%K>G5xHXrFvTp7~*$xN6GYI3OKq?>b zciG>%d5Pm=PQDi5?MwdO8mzNNv*>J280f3cF$h(lQ~p?fswDil9X$NR!uo5*SrJkg z{`-Xh@Y!$ue7-r3aq&SgvYpV2PYBz{%xB zO+Ia$PF4dlm6EfB^;jZ%Sj;jSaRSkh`*7bgz|R)5PTwr;@+0_Teb(c=EP+41u<$_E zX6Vny>It#R7)Ht?8OFI$3Opfvwn?9THa>1!Bs+fAz_Q-y^li<<7RcliyfjW*Ql~u+ z4R|+Ip<)@6Ett0-(HgOJ8xBkONR^NNd0s>CMxNQc)$?uG_8;PFi}icY|J?8)*75&U J`?Fc#e*ky!W^e!i delta 4779 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 diff --git a/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IVideoProvider.cs b/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IVideoProvider.cs index 34e7d47c16..e5f4949974 100644 --- a/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IVideoProvider.cs +++ b/src/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IVideoProvider.cs @@ -17,15 +17,9 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII public int BackgroundColor => 0; public int VsyncNumerator - { - [FeatureNotImplemented] // TODO: precise numbers or confirm the default is okay - get => NullVideo.DefaultVsyncNum; - } + => NullVideo.DefaultVsyncNum; //TODO precise numbers or confirm the default is okay public int VsyncDenominator - { - [FeatureNotImplemented] // TODO: precise numbers or confirm the default is okay - get => NullVideo.DefaultVsyncDen; - } + => NullVideo.DefaultVsyncDen; //TODO precise numbers or confirm the default is okay } } diff --git a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ICodeDataLog.cs index 4bd9ef13b9..cef7ea749c 100644 --- a/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ICodeDataLog.cs @@ -1,6 +1,8 @@ -using BizHawk.Emulation.Common; +using System; using System.IO; +using BizHawk.Emulation.Common; + namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { /// @@ -64,9 +66,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum [FeatureNotImplemented] public void DisassembleCDL(Stream s, ICodeDataLog cdl) - { - - } + => throw new NotImplementedException(); public enum CDLType { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Coleco/TMS9918A.cs b/src/BizHawk.Emulation.Cores/Consoles/Coleco/TMS9918A.cs index e9ab5bab7c..b6c3b14e36 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Coleco/TMS9918A.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Coleco/TMS9918A.cs @@ -471,16 +471,10 @@ namespace BizHawk.Emulation.Cores.ColecoVision public int BackgroundColor => 0; public int VsyncNumerator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncNum; - } + => NullVideo.DefaultVsyncNum; //TODO precise numbers or confirm the default is okay public int VsyncDenominator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncDen; - } + => NullVideo.DefaultVsyncDen; //TODO precise numbers or confirm the default is okay private readonly int[] PaletteTMS9918 = { diff --git a/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.ICodeDataLog.cs index c901dac911..f867054131 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/GCE/Vectrex/VectrexHawk.ICodeDataLog.cs @@ -23,9 +23,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Vectrex [FeatureNotImplemented] public void DisassembleCDL(Stream s, ICodeDataLog cdl) - { - - } + => throw new NotImplementedException(); private enum CDLog_AddrType { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Intellivision/STIC.cs b/src/BizHawk.Emulation.Cores/Consoles/Intellivision/STIC.cs index a4b5ee0c5f..a4abb4cb67 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Intellivision/STIC.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Intellivision/STIC.cs @@ -83,16 +83,10 @@ namespace BizHawk.Emulation.Cores.Intellivision public int BackgroundColor => 0; public int VsyncNumerator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncNum; - } + => NullVideo.DefaultVsyncNum; //TODO precise numbers or confirm the default is okay public int VsyncDenominator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncDen; - } + => NullVideo.DefaultVsyncDen; //TODO precise numbers or confirm the default is okay public void Reset() { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.ICodeDataLog.cs index 61943e039d..0c9c80a9a9 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Magnavox/Odyssey2/O2Hawk.ICodeDataLog.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Components.I8048; @@ -31,9 +32,8 @@ namespace BizHawk.Emulation.Cores.Consoles.O2Hawk } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); public void SetCDL(I8048.eCDLogMemFlags flags, string type, int cdladdr) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IDebuggable.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IDebuggable.cs index 7c394278dc..f6da1336b1 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IDebuggable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.IDebuggable.cs @@ -50,7 +50,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA } } - [FeatureNotImplemented] public IMemoryCallbackSystem MemoryCallbacks { get; } public bool CanStep(StepType type) => false; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs index bea0c3f669..fbedaa6433 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs @@ -175,7 +175,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA return _gpumem; } - [FeatureNotImplemented] public void SetScanlineCallback(Action callback, int scanline) { _scanlinecb = callback; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.ICodeDataLog.cs index e2c8c4d36e..56145b5052 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.ICodeDataLog.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Components.LR35902; @@ -31,9 +32,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); public void SetCDL(LR35902.eCDLogMemFlags flags, string type, int cdladdr) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs index ae2cbe72ef..9151badcbc 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using BizHawk.Emulation.Common; @@ -32,9 +33,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); public void SetCDL(LR35902.eCDLogMemFlags flags, string type, int cdladdr) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.ICodeDataLog.cs index 19b1e4fcda..6f9bdd900b 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink3x/GBHawkLink3x.ICodeDataLog.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using BizHawk.Emulation.Common; @@ -32,9 +33,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink3x } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); public void SetCDL(LR35902.eCDLogMemFlags flags, string type, int cdladdr) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.ICodeDataLog.cs index bb25702720..d7698af937 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink4x/GBHawkLink4x.ICodeDataLog.cs @@ -1,3 +1,4 @@ +using System; using System.IO; using BizHawk.Emulation.Common; @@ -32,9 +33,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink4x } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); public void SetCDL(LR35902.eCDLogMemFlags flags, string type, int cdladdr) { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ICodeDataLog.cs index 5fdbb85c06..4de5549b4c 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.ICodeDataLog.cs @@ -33,9 +33,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) - { - } + public void DisassembleCDL(Stream s, ICodeDataLog cdl) + => throw new NotImplementedException(); private ICodeDataLog _cdl; private string _which; diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.ICodeDataLog.cs index 6686524720..60972c86de 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.ICodeDataLog.cs @@ -1,7 +1,8 @@ -using BizHawk.Emulation.Common; - +using System; using System.IO; +using BizHawk.Emulation.Common; + namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { partial class GambatteLink : ICodeDataLogger @@ -23,8 +24,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy } [FeatureNotImplemented] - void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) + public void DisassembleCDL(Stream s, ICodeDataLog cdl) { + throw new NotImplementedException(); // this doesn't actually do anything /* for (int i = 0; i < _numCores; i++) diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IInputPollable.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IInputPollable.cs index d929acae2d..61fb4c3080 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IInputPollable.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IInputPollable.cs @@ -39,6 +39,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 } // TODO: optimize managed to unmanaged using the ActiveChanged event - public IInputCallbackSystem InputCallbacks { [FeatureNotImplemented] get; } + public IInputCallbackSystem InputCallbacks { get; } } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs index b4593ac009..dfaef1ad0b 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.ICodeDataLogger.cs @@ -28,9 +28,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES [FeatureNotImplemented] public void DisassembleCDL(Stream s, ICodeDataLog cdl) - { - - } + => throw new NotImplementedException(); public enum CDLog_AddrType { diff --git a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VDC.Render.cs b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VDC.Render.cs index baf2735403..afceafc44e 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VDC.Render.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VDC.Render.cs @@ -445,15 +445,9 @@ namespace BizHawk.Emulation.Cores.PCEngine public int BackgroundColor => vce.Palette[256]; public int VsyncNumerator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncNum; - } + => NullVideo.DefaultVsyncNum; //TODO precise numbers or confirm the default is okay public int VsyncDenominator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncDen; - } + => NullVideo.DefaultVsyncDen; //TODO precise numbers or confirm the default is okay } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VPC.cs b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VPC.cs index 5be5b159aa..0c8c980a09 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VPC.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/PC Engine/VPC.cs @@ -534,15 +534,9 @@ namespace BizHawk.Emulation.Cores.PCEngine public int BackgroundColor => VCE.Palette[0]; public int VsyncNumerator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncNum; - } + => NullVideo.DefaultVsyncNum; //TODO precise numbers or confirm the default is okay public int VsyncDenominator - { - [FeatureNotImplemented] - get => NullVideo.DefaultVsyncDen; - } + => NullVideo.DefaultVsyncDen; //TODO precise numbers or confirm the default is okay } } diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.ICodeDataLog.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.ICodeDataLog.cs index c2fcf01c4d..c40d3c7380 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.ICodeDataLog.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/GGHawkLink/GGHawkLink.ICodeDataLog.cs @@ -42,9 +42,7 @@ namespace BizHawk.Emulation.Cores.Sega.GGHawkLink [FeatureNotImplemented] public void DisassembleCDL(Stream s, ICodeDataLog cdl) - { - - } + => throw new NotImplementedException(); private enum CDLog_AddrType { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.ICodeDataLogger.cs b/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.ICodeDataLogger.cs index be6ae7c750..477fbfdaa3 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.ICodeDataLogger.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.ICodeDataLogger.cs @@ -40,9 +40,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem [FeatureNotImplemented] public void DisassembleCDL(Stream s, ICodeDataLog cdl) - { - - } + => throw new NotImplementedException(); public enum CDLog_AddrType { diff --git a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index 46612c01f8..f7dc626e48 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -918,7 +918,6 @@ namespace BizHawk.Emulation.Cores.Sony.PSX get => throw new NotImplementedException(); } - [FeatureNotImplemented] public bool DeterministicEmulation => true; public int[] GetVideoBuffer() => frameBuffer;