Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public static class IdentifierValidator

private const string Identifier = IdentifierStartCharacter + "(" + IdentifierPartCharacter + ")";

static Regex IsValidIdentifierRegex = new Regex ($"^[{IdentifierStartCharacter}][{IdentifierPartCharacter}]*$", RegexOptions.Compiled);

// We use [^ ...] to detect any character that is NOT a match.
static Regex validIdentifier = new Regex ($"[^{Identifier}]", RegexOptions.Compiled);

Expand All @@ -43,7 +45,7 @@ public static string CreateValidIdentifier (string identifier, bool useEncodedRe

public static bool IsValidIdentifier (string identifier)
{
return !validIdentifier.IsMatch (identifier);
return IsValidIdentifierRegex.IsMatch (identifier);
}

// Makes uglier but unique identifiers by encoding each invalid character with its character value
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,18 @@ public void CreateValidIdentifier_Encoded ()
Assert.AreEqual ("my_x45_identifier_x36_test", IdentifierValidator.CreateValidIdentifier ("my-identifier$test", true));
Assert.AreEqual ("myidentifier_x55357__x56842_test", IdentifierValidator.CreateValidIdentifier ("myidentifier😊test", true));
}

[Test]
public void IsValidIdentifier ()
{
Assert.IsTrue (IdentifierValidator.IsValidIdentifier ("name"));
Assert.IsTrue (IdentifierValidator.IsValidIdentifier ("Name_With_Underscores"));

// Yes, this is "wrong" -- keywords aren't identifiers -- but the keyword check is done elsewhere.
Assert.IsTrue (IdentifierValidator.IsValidIdentifier ("true"));

Assert.IsFalse (IdentifierValidator.IsValidIdentifier ("name-with-hyphens and spaces"));
Assert.IsFalse (IdentifierValidator.IsValidIdentifier ("123"));
}
}
}
4 changes: 4 additions & 0 deletions tests/generator-Tests/Tests-Core/api.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
<parameter name="l" type="android.view.View.OnClickListener">
</parameter>
</method>
<method abstract="false" deprecated="not deprecated" final="false" name="setOn123Listener" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="l" type="android.view.View.OnClickListener">
</parameter>
</method>
<method abstract="false" deprecated="not deprecated" final="false" name="addTouchables" native="false" return="void" static="false" synchronized="false" visibility="public">
<parameter name="views" type="java.util.ArrayList&lt;android.view.View&gt;">
</parameter>
Expand Down
30 changes: 30 additions & 0 deletions tests/generator-Tests/Tests-Core/expected.ji/Android.Views.View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,36 @@ public virtual unsafe void SetOnClickListener (Android.Views.View.IOnClickListen
}
}

static Delegate cb_setOn123Listener_Landroid_view_View_OnClickListener_;
#pragma warning disable 0169
static Delegate GetSetOn123Listener_Landroid_view_View_OnClickListener_Handler ()
{
if (cb_setOn123Listener_Landroid_view_View_OnClickListener_ == null)
cb_setOn123Listener_Landroid_view_View_OnClickListener_ = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, IntPtr>) n_SetOn123Listener_Landroid_view_View_OnClickListener_);
return cb_setOn123Listener_Landroid_view_View_OnClickListener_;
}

static void n_SetOn123Listener_Landroid_view_View_OnClickListener_ (IntPtr jnienv, IntPtr native__this, IntPtr native_l)
{
Android.Views.View __this = global::Java.Lang.Object.GetObject<Android.Views.View> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
Android.Views.View.IOnClickListener l = (Android.Views.View.IOnClickListener)global::Java.Lang.Object.GetObject<Android.Views.View.IOnClickListener> (native_l, JniHandleOwnership.DoNotTransfer);
__this.SetOn123Listener (l);
}
#pragma warning restore 0169

// Metadata.xml XPath method reference: path="/api/package[@name='android.view']/class[@name='View']/method[@name='setOn123Listener' and count(parameter)=1 and parameter[1][@type='android.view.View.OnClickListener']]"
[Register ("setOn123Listener", "(Landroid/view/View$OnClickListener;)V", "GetSetOn123Listener_Landroid_view_View_OnClickListener_Handler")]
public virtual unsafe void SetOn123Listener (Android.Views.View.IOnClickListener l)
{
const string __id = "setOn123Listener.(Landroid/view/View$OnClickListener;)V";
try {
JniArgumentValue* __args = stackalloc JniArgumentValue [1];
__args [0] = new JniArgumentValue ((l == null) ? IntPtr.Zero : ((global::Java.Lang.Object) l).Handle);
_members.InstanceMethods.InvokeVirtualVoidMethod (__id, this, __args);
} finally {
}
}

static Delegate cb_addTouchables_Ljava_util_ArrayList_;
#pragma warning disable 0169
static Delegate GetAddTouchables_Ljava_util_ArrayList_Handler ()
Expand Down
36 changes: 36 additions & 0 deletions tests/generator-Tests/Tests-Core/expected/Android.Views.View.cs
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,42 @@ public virtual unsafe void SetOnClickListener (Android.Views.View.IOnClickListen
}
}

static Delegate cb_setOn123Listener_Landroid_view_View_OnClickListener_;
#pragma warning disable 0169
static Delegate GetSetOn123Listener_Landroid_view_View_OnClickListener_Handler ()
{
if (cb_setOn123Listener_Landroid_view_View_OnClickListener_ == null)
cb_setOn123Listener_Landroid_view_View_OnClickListener_ = JNINativeWrapper.CreateDelegate ((Action<IntPtr, IntPtr, IntPtr>) n_SetOn123Listener_Landroid_view_View_OnClickListener_);
return cb_setOn123Listener_Landroid_view_View_OnClickListener_;
}

static void n_SetOn123Listener_Landroid_view_View_OnClickListener_ (IntPtr jnienv, IntPtr native__this, IntPtr native_l)
{
Android.Views.View __this = global::Java.Lang.Object.GetObject<Android.Views.View> (jnienv, native__this, JniHandleOwnership.DoNotTransfer);
Android.Views.View.IOnClickListener l = (Android.Views.View.IOnClickListener)global::Java.Lang.Object.GetObject<Android.Views.View.IOnClickListener> (native_l, JniHandleOwnership.DoNotTransfer);
__this.SetOn123Listener (l);
}
#pragma warning restore 0169

static IntPtr id_setOn123Listener_Landroid_view_View_OnClickListener_;
// Metadata.xml XPath method reference: path="/api/package[@name='android.view']/class[@name='View']/method[@name='setOn123Listener' and count(parameter)=1 and parameter[1][@type='android.view.View.OnClickListener']]"
[Register ("setOn123Listener", "(Landroid/view/View$OnClickListener;)V", "GetSetOn123Listener_Landroid_view_View_OnClickListener_Handler")]
public virtual unsafe void SetOn123Listener (Android.Views.View.IOnClickListener l)
{
if (id_setOn123Listener_Landroid_view_View_OnClickListener_ == IntPtr.Zero)
id_setOn123Listener_Landroid_view_View_OnClickListener_ = JNIEnv.GetMethodID (class_ref, "setOn123Listener", "(Landroid/view/View$OnClickListener;)V");
try {
JValue* __args = stackalloc JValue [1];
__args [0] = new JValue (l);

if (((object) this).GetType () == ThresholdType)
JNIEnv.CallVoidMethod (((global::Java.Lang.Object) this).Handle, id_setOn123Listener_Landroid_view_View_OnClickListener_, __args);
else
JNIEnv.CallNonvirtualVoidMethod (((global::Java.Lang.Object) this).Handle, ThresholdClass, JNIEnv.GetMethodID (ThresholdClass, "setOn123Listener", "(Landroid/view/View$OnClickListener;)V"), __args);
} finally {
}
}

static Delegate cb_addTouchables_Ljava_util_ArrayList_;
#pragma warning disable 0169
static Delegate GetAddTouchables_Ljava_util_ArrayList_Handler ()
Expand Down