@@ -1127,6 +1127,9 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
1127
1127
let nm = ( match v with VRefNonLocal n -> n.ItemKey.PartialKey.LogicalName | _ -> " <local>" )
1128
1128
invalidOp ( sprintf " The value or member '%s ' does not exist or is in an unresolved assembly." nm)
1129
1129
1130
+ let mkMethSym minfo = FSharpMemberOrFunctionOrValue( cenv, M minfo, Item.MethodGroup ( minfo.DisplayName,[ minfo]))
1131
+ let mkEventSym einfo = FSharpMemberOrFunctionOrValue( cenv, E einfo, Item.Event einfo)
1132
+
1130
1133
new ( cenv , vref ) = FSharpMemberFunctionOrValue( cenv, V vref, Item.Value vref)
1131
1134
new ( cenv , minfo ) = FSharpMemberFunctionOrValue( cenv, M minfo, Item.MethodGroup( minfo.LogicalName, [ minfo]))
1132
1135
@@ -1209,25 +1212,19 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
1209
1212
member __.GetterMethod =
1210
1213
checkIsResolved()
1211
1214
match d with
1212
- | P m ->
1213
- let minfo = m.GetterMethod
1214
- FSharpMemberOrFunctionOrValue( cenv, M minfo, Item.MethodGroup ( minfo.DisplayName,[ minfo]))
1215
+ | P m -> mkMethSym m.GetterMethod
1215
1216
| E _ | M _ | V _ -> invalidOp " the value or member doesn't have an associated getter method"
1216
1217
1217
1218
member __.EventAddMethod =
1218
1219
checkIsResolved()
1219
1220
match d with
1220
- | E e ->
1221
- let minfo = e.GetAddMethod()
1222
- FSharpMemberOrFunctionOrValue( cenv, M minfo, Item.MethodGroup ( minfo.DisplayName,[ minfo]))
1221
+ | E e -> mkMethSym ( e.GetAddMethod())
1223
1222
| P _ | M _ | V _ -> invalidOp " the value or member doesn't have an associated add method"
1224
1223
1225
1224
member __.EventRemoveMethod =
1226
1225
checkIsResolved()
1227
1226
match d with
1228
- | E e ->
1229
- let minfo = e.GetRemoveMethod()
1230
- FSharpMemberOrFunctionOrValue( cenv, M minfo, Item.MethodGroup ( minfo.DisplayName,[ minfo]))
1227
+ | E e -> mkMethSym ( e.GetRemoveMethod())
1231
1228
| P _ | M _ | V _ -> invalidOp " the value or member doesn't have an associated remove method"
1232
1229
1233
1230
member __.EventDelegateType =
@@ -1256,12 +1253,8 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
1256
1253
member __.SetterMethod =
1257
1254
checkIsResolved()
1258
1255
match d with
1259
- | P m ->
1260
- let minfo = m.SetterMethod
1261
- FSharpMemberOrFunctionOrValue( cenv, M minfo, Item.MethodGroup ( minfo.DisplayName,[ minfo]))
1262
- | E _
1263
- | M _
1264
- | V _ -> invalidOp " the value or member doesn't have an associated setter method"
1256
+ | P m -> mkMethSym m.SetterMethod
1257
+ | E _ | M _ | V _ -> invalidOp " the value or member doesn't have an associated setter method"
1265
1258
1266
1259
member __.EnclosingEntity =
1267
1260
checkIsResolved()
@@ -1328,6 +1321,20 @@ and FSharpMemberOrFunctionOrValue(cenv, d:FSharpMemberOrValData, item) =
1328
1321
| E _ -> true
1329
1322
| _ -> false
1330
1323
1324
+ member x.EventForFSharpProperty =
1325
+ match d with
1326
+ | P p when p.IsFSharpEventProperty && p.PropertyName.StartsWith " get_" ->
1327
+ let nm = p.PropertyName.[ 4 ..]
1328
+ let minfos1 = GetImmediateIntrinsicMethInfosOfType ( Some( " add_" + nm), AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 p.EnclosingType
1329
+ let minfos2 = GetImmediateIntrinsicMethInfosOfType ( Some( " remove_" + nm), AccessibleFromSomeFSharpCode) cenv.g cenv.amap range0 p.EnclosingType
1330
+ match minfos1, minfos2 with
1331
+ | [ addMeth],[ removeMeth] ->
1332
+ match addMeth.ArbitraryValRef, removeMeth.ArbitraryValRef with
1333
+ | Some addVal, Some removeVal -> Some ( mkEventSym ( FSEvent( cenv.g, p, addVal, removeVal)))
1334
+ | _ -> None
1335
+ | _ -> None
1336
+ | _ -> None
1337
+
1331
1338
member __.IsEventAddMethod =
1332
1339
if isUnresolved() then false else
1333
1340
match d with
0 commit comments