Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Missing methods when binding a Kotlin library #4693

Closed
cosminstirbu opened this issue May 18, 2020 · 3 comments
Closed

Missing methods when binding a Kotlin library #4693

cosminstirbu opened this issue May 18, 2020 · 3 comments
Assignees
Labels
Area: Bindings Issues in Java Library Binding projects.

Comments

@cosminstirbu
Copy link

cosminstirbu commented May 18, 2020

Hello,

I'm trying to create bindings for the following SDK https://salesforce-marketingcloud.github.io/MarketingCloudSDK-Android/

The problem is that the generated MarketingCloudConfig.Builder doesn't contain any of the 'setter' methods exposed by the native class.

I had a look at the generated api.xml and I didn't find any references to those methods.

When building the binding project I can see in the logs something along the following lines:

   Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - build - p0 -> context
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setAccessToken - p0 -> accessToken
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setAnalyticsEnabled - p0 -> analyticsEnabled
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setApplicationId - p0 -> applicationId
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setDelayRegistrationUntilContactKeyIsSet - p0 -> delay
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setGeofencingEnabled - p0 -> geofenceEnabled
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setInboxEnabled - p0 -> inboxEnabled
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMarkMessageReadOnInboxNotificationOpen - p0 -> markRead
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMarketingCloudServerUrl - p0 -> marketingCloudServerUrl
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMid - p0 -> mid
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setNotificationCustomizationOptions - p0 -> options
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setPiAnalyticsEnabled - p0 -> piAnalyticsEnabled
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - -setPredictiveIntelligenceServerUrl - p0 -> url
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setProximityEnabled - p0 -> proximityEnabled
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setSenderId - p0 -> senderId
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setUrlHandler - p0 -> urlHandler
    Kotlin: Renaming parameter com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setUseLegacyPiIdentifier - p0 -> useLegacyPiIdentifier
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setAccessToken
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setAnalyticsEnabled
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setApplicationId
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setDelayRegistrationUntilContactKeyIsSet
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setGeofencingEnabled
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setInboxEnabled
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMarkMessageReadOnInboxNotificationOpen
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMarketingCloudServerUrl
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setMid
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setNotificationCustomizationOptions
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setPiAnalyticsEnabled
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setProximityEnabled
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setSenderId
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setUrlHandler
    Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setUseLegacyPiIdentifier

I'm using

Xamarin.Android
Version: 10.2.0.100 (Visual Studio Enterprise)
Commit: xamarin-android/d16-5/988c811
Android SDK: /Users/cosminstirbu/Library/Developer/Xamarin/android-sdk-macosx
	Supported Android versions:
		None installed

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 30.0.0
SDK Build Tools Version: 29.0.2

I've downloaded the .aar from here https://salesforce-marketingcloud.github.io/MarketingCloudSDK-Android/repository/com/salesforce/marketingcloud/marketingcloudsdk/7.1.0/

I've also attached my bindings project.

MarketingCloudSDK.zip

Thank you,
Cosmin

@cosminstirbu cosminstirbu added the Area: Bindings Issues in Java Library Binding projects. label May 18, 2020
@jpobst
Copy link
Contributor

jpobst commented May 18, 2020

I think this is this bug: dotnet/java-interop#571, where we were incorrectly matching getters/setters and thus hiding things that were not supposed to hidden.

If I run your project on 16.5 I get the same Kotlin: Hiding internal setter method com/salesforce/marketingcloud/MarketingCloudConfig$Builder - setAccessToken that you are seeing.

However if I run your project on 16.6 Preview 6.0 the method is properly bound:

[Register ("setAccessToken", "(Ljava/lang/String;)Lcom/salesforce/marketingcloud/MarketingCloudConfig$Builder;", "")]
public unsafe global::Com.Salesforce.Marketingcloud.MarketingCloudConfig.Builder SetAccessToken (string accessToken)
{
	const string __id = "setAccessToken.(Ljava/lang/String;)Lcom/salesforce/marketingcloud/MarketingCloudConfig$Builder;";
	IntPtr native_accessToken = JNIEnv.NewString (accessToken);
	try {
		JniArgumentValue* __args = stackalloc JniArgumentValue [1];
		__args [0] = new JniArgumentValue (native_accessToken);
		var __rm = _members.InstanceMethods.InvokeNonvirtualObjectMethod (__id, this, __args);
		return global::Java.Lang.Object.GetObject<global::Com.Salesforce.Marketingcloud.MarketingCloudConfig.Builder> (__rm.Handle, JniHandleOwnership.TransferLocalRef);
	} finally {
		JNIEnv.DeleteLocalRef (native_accessToken);
	}
}

@jpobst jpobst added this to the Under Consideration milestone May 18, 2020
@cosminstirbu
Copy link
Author

I can confirm that the setters are generated when using

Xamarin.Android
Version: 10.3.1.0 (Visual Studio Enterprise)
Commit: xamarin-android/d16-6/3fe860a
Android SDK: /Users/cosminstirbu/Library/Developer/Xamarin/android-sdk-macosx
	Supported Android versions:
		None installed

SDK Tools Version: 26.1.1
SDK Platform Tools Version: 30.0.0
SDK Build Tools Version: 29.0.2

Thank you,
Cosmin

@jpobst
Copy link
Contributor

jpobst commented May 18, 2020

Nice! Glad you got it working!

I apologize for the inconvenience.

@jpobst jpobst closed this as completed May 18, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Jun 4, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Area: Bindings Issues in Java Library Binding projects.
Projects
None yet
Development

No branches or pull requests

3 participants