Android-runtime: Static binding generator creates wrong files, when two extended classes have the same name

Created on 18 Jan 2017  路  6Comments  路  Source: NativeScript/android-runtime

_Problem:_
Static binding generator creates wrong files, when two extended classes have the same name
How can I reproduce the problem:

The name is generated as follows:
<extended_class_name>_f<file_path>_l<line>_c<column>__<unique_name>.java

  • Because both classes extend the same base class, both names start with the same <extended_class_name>
  • Because the typescript extends all pass through the ts_helpers file, all files have the same _f<file_path>_l<line>_c<column>.
  • Because uglifyer minifies the names of both classes the <unique_name> is not so unique anymore.

_Solution_
There are two general paths we can take:

  • Suggest the user makes an exception when uglifying for the <unique_name> so it stays unique
  • Find a different way to generate names, that will generate classes with different names, that's also compatible with the way the runtime binding generator would generate them.

This problem does not happen when extending an interface, because the native implementation name does not take part in finding the js counterpart implementation, and all can use the same implementation of an interface.

low bug

All 6 comments

For now we'll issue a warning the identical names will be created and that will cause an undefined behavior. In this case the build will crash and recommend workaround options.

This is causing a problem even without uglifying, because the names have to be globally unique. That means if I use a name that's already been used somewhere in another module, I will hit the same issue because everything passes through the same line in ts_helpers.

@madakk I am happy to say that the problem will be addressed in the next major release of NativeScript.

Follow the progress at https://github.com/NativeScript/android-runtime/pull/923

That's great news, thanks!

Remove RfT label beacuse the fix is reverted.

This is fixed and will be available in the next official release of tns-android.

Was this page helpful?
0 / 5 - 0 ratings