Skip to content

Commit 47a95b0

Browse files
committed
using virtual fuction instead of reflection
1 parent e18e7f0 commit 47a95b0

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/Framework/BuildEventArgs.cs

+11
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,17 @@ internal virtual void WriteToStream(BinaryWriter writer)
200200
WriteToStreamWithExplicitMessage(writer, RawMessage);
201201
}
202202

203+
204+
/// <summary>
205+
/// Convenience access point for CreateFromStream method to avoid making everything public.
206+
/// </summary>
207+
/// <param name="reader"></param>
208+
/// <param name="version"></param>
209+
public void PublicCreateFromStream(BinaryReader reader, int version)
210+
{
211+
CreateFromStream(reader, version);
212+
}
213+
203214
/// <summary>
204215
/// Deserializes from a stream through a binary reader
205216
/// </summary>

src/Shared/LogMessagePacketBase.cs

+13-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
using Microsoft.Build.Framework.Profiler;
1919
using System.Collections;
2020
using System.Linq;
21+
using System.Diagnostics;
22+
2123
#endif
2224

2325
#if FEATURE_APPDOMAIN
@@ -270,11 +272,12 @@ internal abstract class LogMessagePacketBase : INodePacket
270272
/// </summary>
271273
private static readonly int s_defaultPacketVersion = (Environment.Version.Major * 10) + Environment.Version.Minor;
272274

275+
#if TASKHOST
273276
/// <summary>
274277
/// Dictionary of methods used to read BuildEventArgs.
275278
/// </summary>
276279
private static Dictionary<LoggingEventType, MethodInfo> s_readMethodCache = new Dictionary<LoggingEventType, MethodInfo>();
277-
280+
#endif
278281
/// <summary>
279282
/// Dictionary of methods used to write BuildEventArgs.
280283
/// </summary>
@@ -468,16 +471,18 @@ internal void ReadFromStream(ITranslator translator)
468471

469472
_buildEvent = GetBuildEventArgFromId();
470473

474+
471475
// The other side is telling us whether the event knows how to log itself, or whether we're going to have
472476
// to do it manually
473477
int packetVersion = s_defaultPacketVersion;
474478
translator.Translate(ref packetVersion);
475-
476479
bool eventCanSerializeItself = true;
477480
translator.Translate(ref eventCanSerializeItself);
478481

479482
if (eventCanSerializeItself)
480483
{
484+
485+
#if TASKHOST
481486
MethodInfo methodInfo = null;
482487
lock (s_readMethodCache)
483488
{
@@ -488,10 +493,15 @@ internal void ReadFromStream(ITranslator translator)
488493
s_readMethodCache.Add(_eventType, methodInfo);
489494
}
490495
}
491-
492496
ArgsReaderDelegate readerMethod = (ArgsReaderDelegate)CreateDelegateRobust(typeof(ArgsReaderDelegate), _buildEvent, methodInfo);
493497

494498
readerMethod(translator.Reader, packetVersion);
499+
500+
#else
501+
_buildEvent.PublicCreateFromStream(translator.Reader, packetVersion);
502+
#endif
503+
504+
495505
if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null)
496506
{
497507
_targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent);

0 commit comments

Comments
 (0)