Skip to content

Commit 3de56bd

Browse files
committed
rds : improve generation of scripts for static members
1 parent 496fa08 commit 3de56bd

19 files changed

+106
-30
lines changed

sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberOverride.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,17 @@ public static IMemberOverride ByFunc<TReturnType>(Expression<Func<Document, TFor
2626
{
2727
var compiledGetter = getter.Compile();
2828
var methodCallExpression = getter.Body as MethodCallExpression;
29-
//var syntax = methodCallExpression.ToString();
29+
30+
string syntax = null;
31+
if (methodCallExpression.Object is ParameterExpression)
32+
{
33+
var uniformMethodCallExpression = methodCallExpression.Update(Expression.Parameter(methodCallExpression.Object.Type, "item"), methodCallExpression.Arguments);
34+
syntax = uniformMethodCallExpression.ToString();
35+
}
36+
if (methodCallExpression.Object == null)
37+
{
38+
syntax = $"{methodCallExpression.Method.DeclaringType.Name}." + methodCallExpression.ToString();
39+
}
3040
var uniqueId = getter.GetUniqueId();
3141

3242
return new MemberOverride<TForType>()
@@ -35,7 +45,7 @@ public static IMemberOverride ByFunc<TReturnType>(Expression<Func<Document, TFor
3545
MemberAccessorFactory = () =>
3646
{
3747
var accessor = new MemberAccessorByFunc<TForType, TReturnType>(compiledGetter);
38-
//accessor.DefaultInvocation.Syntax = syntax;
48+
accessor.DefaultInvocation.Syntax = syntax;
3949
return accessor;
4050
}
4151
};

sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberTemplate.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,37 @@ public bool CanBeUsedWith(object @object)
3131
}
3232

3333

34-
public static ISnoopableMemberTemplate Create<TReturnType>(Expression<Func<Document, TForType, TReturnType>> getter, Func<TForType, bool> canBeUsed = null, MemberKind kind = MemberKind.StaticMethod)
34+
public static ISnoopableMemberTemplate Create<TReturnType>(Expression<Func<Document, TForType, TReturnType>> getter,
35+
Func<TForType, bool> canBeUsed = null,
36+
MemberKind kind = MemberKind.StaticMethod)
3537
{
3638
var compiledGetter = getter.Compile();
3739
var methodCallExpression = getter.Body as MethodCallExpression;
3840
var memberAccessor = new MemberAccessorByFunc<TForType, TReturnType>(compiledGetter);
3941

40-
return Create(methodCallExpression.Method.DeclaringType, methodCallExpression.Method.Name, memberAccessor, canBeUsed, kind, () => RevitDocumentationReader.GetMethodComments(methodCallExpression.Method));
42+
memberAccessor.UniqueId = $"{typeof(TForType).Name}_{getter.GetUniqueId()}";
43+
44+
45+
return WithCustomAC(methodCallExpression.Method.DeclaringType, methodCallExpression.Method.Name, memberAccessor, canBeUsed, kind, () => RevitDocumentationReader.GetMethodComments(methodCallExpression.Method));
4146
}
42-
public static ISnoopableMemberTemplate Create(Type declaringType, string memberName, IAccessor memberAccessor, Func<TForType, bool> canBeUsed = null, MemberKind kind = MemberKind.StaticMethod, Func<DocXml> documentationFactoryMethod = null)
47+
48+
49+
public static ISnoopableMemberTemplate WithCustomAC(Type declaringType,
50+
string memberName,
51+
IAccessor memberAccessor,
52+
Func<TForType, bool> canBeUsed = null,
53+
MemberKind kind = MemberKind.StaticMethod,
54+
Func<DocXml> documentationFactoryMethod = null)
4355
{
56+
if (string.IsNullOrEmpty(memberAccessor.UniqueId))
57+
{
58+
memberAccessor.UniqueId= $"{typeof(TForType).Name}_{memberAccessor.GetType().Name}.{memberName}";
59+
}
60+
if (string.IsNullOrEmpty(memberAccessor.DefaultInvocation.Syntax))
61+
{
62+
63+
}
64+
4465
return new MemberTemplate<TForType>()
4566
{
4667
Descriptor = new MemberDescriptor(typeof(TForType), kind, memberName, declaringType, memberAccessor, documentationFactoryMethod),

sources/RevitDBExplorer/Domain/DataModel/Members/MemberAccessorFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public static IAccessor CreateMemberAccessor(MethodInfo getMethod, MethodInfo se
6161
memberAccessor.UniqueId = getMethod.GetUniqueId();
6262
if (string.IsNullOrEmpty(memberAccessor.DefaultInvocation.Syntax))
6363
{
64-
memberAccessor.DefaultInvocation.Syntax = getMethod.GenerateInvocation();
64+
memberAccessor.DefaultInvocation.Syntax = "item." + getMethod.GenerateInvocation();
6565
}
6666

6767
return memberAccessor;
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Collections.Generic;
2+
using Autodesk.Revit.DB;
3+
using RevitDBExplorer.Domain.DataModel.Members;
4+
using RevitDBExplorer.Domain.DataModel.Members.Base;
5+
6+
// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md
7+
8+
namespace RevitDBExplorer.Domain.DataModel.MembersOverrides
9+
{
10+
internal class Document_Overrides : IHaveMembersOverrides
11+
{
12+
public IEnumerable<IMemberOverride> GetOverrides() =>
13+
[
14+
MemberOverride<Document>.ByFunc((doc, document) => Document.GetDocumentVersion(document)),
15+
];
16+
}
17+
}

sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/HostObject/HostObject_FindInserts.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal class HostObject_FindInserts : MemberAccessorByFunc<HostObject, IList<E
1515

1616
public HostObject_FindInserts() : base((document, hostObject) => hostObject.FindInserts(true, true, true, true))
1717
{
18-
DefaultInvocation.Syntax = "FindInserts(true, true, true, true)";
18+
DefaultInvocation.Syntax = "item.FindInserts(true, true, true, true)";
1919
}
2020
}
2121
}

sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Rebar/Rebar_GetCenterlineCurves.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ internal class Rebar_GetCenterlineCurves : MemberAccessorByType<Rebar>, ICanCrea
1818

1919
public Rebar_GetCenterlineCurves()
2020
{
21-
DefaultInvocation.Syntax = "GetCenterlineCurves(false, true, false, MultiplanarOption.IncludeOnlyPlanarCurves, 0)";
21+
DefaultInvocation.Syntax = "item.GetCenterlineCurves(false, true, false, MultiplanarOption.IncludeOnlyPlanarCurves, 0)";
2222
}
2323

2424

sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Rebar/Rebar_GetTransformedCenterlineCurves.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ internal class Rebar_GetTransformedCenterlineCurves : MemberAccessorByType<Rebar
1919

2020
public Rebar_GetTransformedCenterlineCurves()
2121
{
22-
DefaultInvocation.Syntax = "GetTransformedCenterlineCurves(false, true, false, MultiplanarOption.IncludeOnlyPlanarCurves, 0)";
22+
DefaultInvocation.Syntax = "item.GetTransformedCenterlineCurves(false, true, false, MultiplanarOption.IncludeOnlyPlanarCurves, 0)";
2323
}
2424

2525

sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/BoundingBox_Templates.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ internal class BoundingBox_Templates : IHaveMemberTemplates
1212
{
1313
public IEnumerable<ISnoopableMemberTemplate> GetTemplates() =>
1414
[
15-
MemberTemplate<BoundingBoxXYZ>.Create(typeof(BoundingBoxXYZ), "BoundingBoxIntersectsFilter", new BoundingBox_BoundingBoxIntersectsFilter(), kind: MemberKind.Extra),
15+
MemberTemplate<BoundingBoxXYZ>.WithCustomAC(typeof(BoundingBoxXYZ), "BoundingBoxIntersectsFilter", new BoundingBox_BoundingBoxIntersectsFilter(), kind: MemberKind.Extra, documentationFactoryMethod: () => new DocXml() { Summary ="TEST" }),
1616
];
1717
}
1818
}

sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Document_Templates.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ namespace RevitDBExplorer.Domain.DataModel.MembersTemplates
1111
internal class Document_Templates : IHaveMemberTemplates
1212
{
1313
public IEnumerable<ISnoopableMemberTemplate> GetTemplates() =>
14-
[
15-
MemberTemplate<Document>.Create((doc, target) => Document.GetDocumentVersion(target), kind: MemberKind.StaticMethod),
14+
[
1615
#if R2023_MIN
1716
MemberTemplate<Document>.Create((doc, target) => target.GetChangedElements(Guid.Empty), kind: MemberKind.Method),
1817
#endif

sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Element_Templates.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ public IEnumerable<ISnoopableMemberTemplate> GetTemplates() =>
2222

2323
#if R2023_MIN
2424
MemberTemplate<Element>.Create((doc, target) => AnalyticalNodeData.GetAnalyticalNodeData(target), kind: MemberKind.StaticMethod, canBeUsed: x => x is ReferencePoint),
25-
MemberTemplate<Element>.Create(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.HasAssociation), new AnalyticalToPhysicalAssociationManager_HasAssociation(), kind: MemberKind.AsArgument),
26-
MemberTemplate<Element>.Create(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementId), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementId(), kind: MemberKind.AsArgument),
25+
MemberTemplate<Element>.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.HasAssociation), new AnalyticalToPhysicalAssociationManager_HasAssociation(), kind: MemberKind.AsArgument),
26+
MemberTemplate<Element>.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementId), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementId(), kind: MemberKind.AsArgument),
2727
#endif
2828
#if R2024_MIN
2929
MemberTemplate<Element>.Create((doc, target) => AnalyticalToPhysicalAssociationManager.IsAnalyticalElement(doc, target.Id), kind: MemberKind.StaticMethod),
3030
MemberTemplate<Element>.Create((doc, target) => AnalyticalToPhysicalAssociationManager.IsPhysicalElement(doc, target.Id), kind: MemberKind.StaticMethod),
31-
MemberTemplate<Element>.Create(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementIds), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementIds(), kind: MemberKind.AsArgument),
31+
MemberTemplate<Element>.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementIds), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementIds(), kind: MemberKind.AsArgument),
3232
#endif
3333
];
3434
}

0 commit comments

Comments
 (0)