Skip to content

Commit a8816b6

Browse files
committed
Finish refactoring.
1 parent ccefcc2 commit a8816b6

22 files changed

+680
-984
lines changed

src/Java.Interop.Tools.JavaCallableWrappers/Adapters/CecilImporter.cs

Lines changed: 373 additions & 129 deletions
Large diffs are not rendered by default.

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperApplicationConstructor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
44

5-
class CallableWrapperApplicationConstructor
5+
public class CallableWrapperApplicationConstructor
66
{
77
public string Name { get; set; }
88

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperConstructor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
44

5-
class CallableWrapperConstructor : CallableWrapperMethod
5+
public class CallableWrapperConstructor : CallableWrapperMethod
66
{
77
public bool CannotRegisterInStaticConstructor { get; set; }
88
public string? PartialAssemblyQualifiedName { get; set; }
@@ -19,8 +19,8 @@ public override void Generate (TextWriter sw, CallableWrapperWriterOptions optio
1919
// This does NOT currently allow creating managed types from Java.
2020
sw.WriteLine ();
2121

22-
if (Annotations is not null)
23-
sw.WriteLine (Annotations);
22+
foreach (var annotation in Annotations)
23+
annotation.Generate (sw, "", options);
2424

2525
sw.Write ("\tpublic ");
2626
sw.Write (Name);

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperField.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1+
using System.Collections.Generic;
12
using System.IO;
23

34
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
45

5-
class CallableWrapperField
6+
public class CallableWrapperField
67
{
78
public string FieldName { get; set; }
89
public string TypeName { get; set; }
910
public string Visibility { get; set; }
1011
public bool IsStatic { get; set; }
1112
public string InitializerName { get; set; }
12-
public string? Annotations { get; set; }
13+
public List<CallableWrapperTypeAnnotation> Annotations { get; } = new List<CallableWrapperTypeAnnotation> ();
1314

1415
public CallableWrapperField (string fieldName, string typeName, string visibility, string initializerName)
1516
{
@@ -23,8 +24,8 @@ public void Generate (TextWriter sw, CallableWrapperWriterOptions options)
2324
{
2425
sw.WriteLine ();
2526

26-
if (Annotations is not null)
27-
sw.WriteLine (Annotations);
27+
foreach (var annotation in Annotations)
28+
annotation.Generate (sw, "", options);
2829

2930
sw.Write ("\t");
3031
sw.Write (Visibility);

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperMethod.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.IO;
34

45
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
56

6-
class CallableWrapperMethod
7+
public class CallableWrapperMethod
78
{
89
public string Name { get; set; }
910
public string Method { get; set; }
@@ -12,16 +13,17 @@ class CallableWrapperMethod
1213
public string? JavaNameOverride { get; set; }
1314
public string? Params { get; set; }
1415
public string? Retval { get; set; }
15-
public string? ThrowsDeclaration { get; set; }
1616
public string? JavaAccess { get; set; }
1717
public bool IsExport { get; set; }
1818
public bool IsStatic { get; set; }
19-
public bool IsDynamicallyRegistered { get; set; }
19+
public bool IsDynamicallyRegistered { get; set; } = true;
2020
public string []? ThrownTypeNames { get; set; }
21-
public string? Annotations { get; set; }
2221
public string? SuperCall { get; set; }
2322
public string? ActivateCall { get; set; }
2423
public string JavaName => JavaNameOverride ?? Name;
24+
public List<CallableWrapperTypeAnnotation> Annotations { get; } = new List<CallableWrapperTypeAnnotation> ();
25+
26+
public string? ThrowsDeclaration => ThrownTypeNames?.Length > 0 ? $" throws {string.Join (", ", ThrownTypeNames)}" : null;
2527

2628
public CallableWrapperMethod (string name, string method, string jniSignature)
2729
{
@@ -34,8 +36,8 @@ public virtual void Generate (TextWriter sw, CallableWrapperWriterOptions option
3436
{
3537
sw.WriteLine ();
3638

37-
if (Annotations is not null)
38-
sw.WriteLine (Annotations);
39+
foreach (var annotation in Annotations)
40+
annotation.Generate (sw, "", options);
3941

4042
sw.Write ("\t");
4143

@@ -58,7 +60,7 @@ public virtual void Generate (TextWriter sw, CallableWrapperWriterOptions option
5860
sw.WriteLine ("\t{");
5961

6062
#if MONODROID_TIMING
61-
sw.WriteLine ("\t\tandroid.util.Log.i(\"MonoDroid-Timing\", \"{0}.{1}: time: \"+java.lang.System.currentTimeMillis());", name, method.Name);
63+
sw.WriteLine ("\t\tandroid.util.Log.i(\"MonoDroid-Timing\", \"{0}.{1}: time: \"+java.lang.System.currentTimeMillis());", Name, Method);
6264
#endif
6365

6466
sw.Write ("\t\t");

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperType.cs

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,27 @@
44

55
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
66

7-
class CallableWrapperType
7+
public class CallableWrapperType
88
{
99
public string Name { get; set; }
1010
public string Package { get; set; }
1111
public bool IsAbstract { get; set; }
1212
public string? ApplicationJavaClass { get; set; }
13-
public bool HasDynamicallyRegisteredMethods { get; set; }
1413
public bool GenerateOnCreateOverrides { get; set; }
14+
/// <summary>
15+
/// The Java source code to be included in Instrumentation.onCreate
16+
///
17+
/// Originally came from MonoRuntimeProvider.java delimited by:
18+
/// // Mono Runtime Initialization {{{
19+
/// // }}}
20+
/// </summary>
1521
public string? MonoRuntimeInitialization { get; set; }
1622
public string? ExtendsType { get; set; }
1723
public CallableWrapperApplicationConstructor? ApplicationConstructor { get; set; }
1824
public bool IsApplication { get; set; }
1925
public bool IsInstrumentation { get; set; }
2026
public string PartialAssemblyQualifiedName { get; set; }
27+
public bool HasExport { get; set; }
2128

2229
public List<CallableWrapperTypeAnnotation> Annotations { get; } = new List<CallableWrapperTypeAnnotation> ();
2330
public List<string> ImplementedInterfaces { get; } = new List<string> ();
@@ -59,8 +66,7 @@ public CallableWrapperType (string name, string package, string partialAssemblyQ
5966
//
6067
// private native void n_onCreate (android.os.Bundle bundle);
6168
// }
62-
63-
public void Generate (TextWriter writer, CallableWrapperWriterOptions options, bool isNested)
69+
public void Generate (TextWriter writer, CallableWrapperWriterOptions options, bool isNested = false)
6470
{
6571
if (!isNested && !string.IsNullOrEmpty (Package)) {
6672
writer.WriteLine ("package " + Package + ";");
@@ -80,7 +86,7 @@ public void Generate (TextWriter writer, CallableWrapperWriterOptions options, b
8086
GenerateFooter (writer, options);
8187
}
8288

83-
public void GenerateHeader (TextWriter sw, CallableWrapperWriterOptions options)
89+
void GenerateHeader (TextWriter sw, CallableWrapperWriterOptions options)
8490
{
8591
sw.WriteLine ();
8692

@@ -90,7 +96,13 @@ public void GenerateHeader (TextWriter sw, CallableWrapperWriterOptions options)
9096

9197
sw.WriteLine ("public " + (IsAbstract ? "abstract " : "") + "class " + Name);
9298

93-
sw.WriteLine ("\textends " + ExtendsType);
99+
var extends = ExtendsType;
100+
101+
// Do this check here rather than the constructor because it can be set after the constructor is called
102+
if (extends == "android.app.Application" && ApplicationJavaClass != null && !string.IsNullOrEmpty (ApplicationJavaClass))
103+
extends = ApplicationJavaClass;
104+
105+
sw.WriteLine ("\textends " + extends);
94106

95107
sw.WriteLine ("\timplements");
96108
sw.Write ("\t\t");
@@ -114,7 +126,7 @@ public void GenerateHeader (TextWriter sw, CallableWrapperWriterOptions options)
114126
sw.WriteLine ("{");
115127
}
116128

117-
public void GenerateInfrastructure (TextWriter writer, CallableWrapperWriterOptions options)
129+
void GenerateInfrastructure (TextWriter writer, CallableWrapperWriterOptions options)
118130
{
119131
var needCtor = false;
120132

@@ -147,7 +159,7 @@ public void GenerateInfrastructure (TextWriter writer, CallableWrapperWriterOpti
147159
}
148160
}
149161

150-
public void GenerateBody (TextWriter sw, CallableWrapperWriterOptions options)
162+
void GenerateBody (TextWriter sw, CallableWrapperWriterOptions options)
151163
{
152164
foreach (var ctor in Constructors)
153165
ctor.Generate (sw, options);
@@ -187,7 +199,7 @@ public void GenerateBody (TextWriter sw, CallableWrapperWriterOptions options)
187199
sw.WriteLine ("\t}");
188200
}
189201

190-
public void GenerateFooter (TextWriter sw, CallableWrapperWriterOptions options)
202+
void GenerateFooter (TextWriter sw, CallableWrapperWriterOptions options)
191203
{
192204
sw.WriteLine ("}");
193205
}
@@ -216,7 +228,7 @@ void WriteInstrumentationOnCreate (TextWriter sw, CallableWrapperWriterOptions o
216228
sw.WriteLine ("\t{");
217229

218230
#if MONODROID_TIMING
219-
sw.WriteLine ("\t\tandroid.util.Log.i(\"MonoDroid-Timing\", \"{0}.onCreate(Bundle): time: \"+java.lang.System.currentTimeMillis());", name);
231+
sw.WriteLine ("\t\tandroid.util.Log.i(\"MonoDroid-Timing\", \"{0}.onCreate(Bundle): time: \"+java.lang.System.currentTimeMillis());", Name);
220232
sw.WriteLine ();
221233
#endif
222234

@@ -282,6 +294,9 @@ void GenerateRegisterType (TextWriter sw, CallableWrapperType self, string field
282294
}
283295
}
284296

297+
// If there are no methods, we need to generate "empty" registration because of backward compatibility
298+
public bool HasDynamicallyRegisteredMethods => Methods.Count == 0 || Methods.Any (sig => sig.IsDynamicallyRegistered);
299+
285300
/// <summary>
286301
/// Returns a destination file path based on the package name of this Java type
287302
/// </summary>

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperMembers/CallableWrapperTypeAnnotation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Java.Interop.Tools.JavaCallableWrappers.CallableWrapperMembers;
66

7-
class CallableWrapperTypeAnnotation
7+
public class CallableWrapperTypeAnnotation
88
{
99
public string Name { get; set; }
1010
public List<KeyValuePair<string, string>> Properties { get; } = new ();

src/Java.Interop.Tools.JavaCallableWrappers/CallableWrapperWriterOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Java.Interop.Tools.JavaCallableWrappers;
66

7-
class CallableWrapperWriterOptions
7+
public class CallableWrapperWriterOptions
88
{
99
public JavaPeerStyle CodeGenerationTarget { get; set; }
1010
}

src/Java.Interop.Tools.JavaCallableWrappers/Java.Interop.Tools.JavaCallableWrappers/JavaCallableWrapperGenerator.JavaFieldInfo.cs

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)