Skip to content

Commit

Permalink
perf: Move updateNative(...) into a protected override to seal it (#…
Browse files Browse the repository at this point in the history
…499)

* chore: Move `updateNative(...)` into a protected override to seal it

* chore: Adjust comments on updateNative

* fix: Remove HybridData in `HybridView`

* remove unused import
  • Loading branch information
mrousavy authored Jan 15, 2025
1 parent 3387184 commit d4cfc2b
Show file tree
Hide file tree
Showing 10 changed files with 8 additions and 90 deletions.
6 changes: 0 additions & 6 deletions packages/nitrogen/src/syntax/kotlin/KotlinHybridObject.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ ${createFileMetadataString(`${name.HybridTSpec}.kt`)}
package ${javaPackage}
import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -67,14 +66,9 @@ abstract class ${name.HybridTSpec}: ${kotlinBase}() {
private var mHybridData: HybridData = initHybrid()
init {
// Pass this \`HybridData\` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}
/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -29,14 +28,9 @@ abstract class HybridBaseSpec: HybridObject() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -29,14 +28,9 @@ abstract class HybridChildSpec: HybridBaseSpec() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -29,14 +28,9 @@ abstract class HybridImageFactorySpec: HybridObject() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -29,14 +28,9 @@ abstract class HybridImageSpec: HybridObject() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -29,14 +28,9 @@ abstract class HybridTestObjectSwiftKotlinSpec: HybridObject() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

package com.margelo.nitro.image

import android.util.Log
import androidx.annotation.Keep
import com.facebook.jni.HybridData
import com.facebook.proguard.annotations.DoNotStrip
Expand All @@ -30,14 +29,9 @@ abstract class HybridTestViewSpec: HybridView() {
private var mHybridData: HybridData = initHybrid()

init {
// Pass this `HybridData` through to it's base class,
// to represent inheritance to JHybridObject on C++ side
super.updateNative(mHybridData)
}

/**
* Call from a child class to initialize HybridData with a child.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
super.updateNative(hybridData)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import com.facebook.proguard.annotations.DoNotStrip
*/
@Keep
@DoNotStrip
abstract class HybridObject: ExtendableHybridClass {
abstract class HybridObject {
/**
* Get the memory size of the Kotlin instance (plus any external heap allocations),
* in bytes.
Expand Down Expand Up @@ -39,10 +39,14 @@ abstract class HybridObject: ExtendableHybridClass {
private var mHybridData: HybridData? = null

/**
* Must be called in the constructor of a subclass of `HybridObject`, to initialize the C++
* `JHybridObject` with a subclass of it.
* If `HybridObject` is subclassed, the sub-class needs to create it's own `HybridData`
* with a C++ `jni::HybridClass` representing the subclass directly.
* Then, that `HybridData` must be passed upwards to `HybridObject` using `updateNative(..)`.
*
* This must happen for each sub/base class in the whole inheritance chain to ensure
* overrides and type-erasure works as expected.
*/
override fun updateNative(hybridData: HybridData) {
protected open fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,4 @@ abstract class HybridView: HybridObject() {
@get:DoNotStrip
@get:Keep
abstract val view: View

/**
* Holds the native C++ instance.
* In `HybridView`, the C++ instance is a sub-class of `JHybridView`, such as one of it's specs.
* This is `null`, until `updateNative(..)` is called.
*/
private var mHybridData: HybridData? = null

/**
* Must be called in the constructor of a subclass of `HybridObject`, to initialize the C++
* `JHybridObject` with a subclass of it.
*/
override fun updateNative(hybridData: HybridData) {
mHybridData = hybridData
}
}

0 comments on commit d4cfc2b

Please sign in to comment.