Skip to content

Commit 4ecdc3c

Browse files
vmutafovvtrifonovdarind
authored
Prepare 6.3.1 patch (#1561)
* bumping version * fix(workers): Dispose the isolate when terminating workers (#1550) * fix: Ensure js timestamp is smaller than corresponding code cache file timestamp (#1554) * Fix Kotlin enum accessing issue (#1559) * Update package.json version to 6.3.1 * Update CHANGELOG.md Co-authored-by: Vasil Trifonov <[email protected]> Co-authored-by: Darin Dimitrov <[email protected]>
1 parent 2b8c75c commit 4ecdc3c

File tree

9 files changed

+71
-3
lines changed

9 files changed

+71
-3
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
6.3.1
2+
==
3+
4+
## Bug Fixes
5+
6+
- [Kotlin enum values not visible at runtime (#1560)](https://github.com/NativeScript/android-runtime/issues/1560)
7+
- [Code cache breaks HMR (#1554)](https://github.com/NativeScript/android-runtime/issues/1554)
8+
- [Worker memory leak in android (#1550)](https://github.com/NativeScript/android-runtime/issues/1550)
9+
110
6.3.0
211
==
312

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "tns-android",
33
"description": "NativeScript Runtime for Android",
4-
"version": "6.3.0",
4+
"version": "6.3.1",
55
"repository": {
66
"type": "git",
77
"url": "https://github.com/NativeScript/android-runtime.git"

test-app/app/src/main/assets/app/mainpage.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,5 @@ require("./tests/kotlin/delegation/testDelegationSupport");
6161
require("./tests/kotlin/objects/testObjectsSupport");
6262
require("./tests/kotlin/functions/testTopLevelFunctionsSupport");
6363
require("./tests/kotlin/extensions/testExtensionFunctionsSupport");
64+
require("./tests/kotlin/enums/testEnumsSupport");
6465
require("./tests/kotlin/access/testInternalLanguageFeaturesSupport");
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
describe("Tests Kotlin extension functions support", function () {
2+
3+
it("Test Kotlin enum entries are accessible", function () {
4+
var enumEntry = com.tns.tests.kotlin.enums.KotlinEnum.TEST_ENTRY;
5+
6+
expect(enumEntry).not.toBe(undefined);
7+
expect(enumEntry).not.toBe(null);
8+
});
9+
10+
});
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.tns.tests.kotlin.enums
2+
3+
enum class KotlinEnum {
4+
TEST_ENTRY
5+
}

test-app/build-tools/android-metadata-generator/src/src/com/telerik/metadata/parsing/kotlin/classes/KotlinClassDescriptor.kt

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.telerik.metadata.parsing.NativeMethodDescriptor
77
import com.telerik.metadata.parsing.NativePropertyDescriptor
88
import com.telerik.metadata.parsing.bytecode.classes.NativeClassBytecodeDescriptor
99
import com.telerik.metadata.parsing.kotlin.fields.KotlinCompanionFieldDescriptor
10+
import com.telerik.metadata.parsing.kotlin.fields.KotlinEnumFieldDescriptor
1011
import com.telerik.metadata.parsing.kotlin.fields.KotlinJvmFieldDescriptor
1112
import com.telerik.metadata.parsing.kotlin.metadata.MetadataAnnotation
1213
import com.telerik.metadata.parsing.kotlin.metadata.bytecode.BytecodeClassMetadataParser
@@ -36,7 +37,6 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
3637

3738
override val fields: Array<NativeFieldDescriptor> by lazy {
3839
val fields = ArrayList<NativeFieldDescriptor>()
39-
4040
val meta = kotlinMetadata
4141
var kotlinMetadataProperties: Collection<KmProperty> = emptyList()
4242

@@ -48,6 +48,12 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
4848
if (possibleCompanionField.isPresent) {
4949
fields.add(possibleCompanionField.get())
5050
}
51+
52+
if(metaClass.enumEntries.isNotEmpty()){
53+
val enumFields = getEnumEntriesAsFields(nativeClass, metaClass.enumEntries)
54+
fields.addAll(enumFields)
55+
}
56+
5157
} else if (meta is KotlinClassMetadata.FileFacade) {
5258
kotlinMetadataProperties = meta.toKmPackage().properties
5359
} else if (meta is KotlinClassMetadata.MultiFileClassPart) {
@@ -107,6 +113,20 @@ class KotlinClassDescriptor(nativeClass: JavaClass, private val metadataAnnotati
107113
return Optional.empty()
108114
}
109115

116+
private fun getEnumEntriesAsFields(nativeClass: JavaClass, metadataEnumEntries: Collection<String>): Collection<KotlinEnumFieldDescriptor> {
117+
val bytecodeFields = nativeClass.fields
118+
119+
val matchingEnumFields = bytecodeFields
120+
.filter {
121+
metadataEnumEntries.contains(it.name)
122+
}
123+
.map {
124+
KotlinEnumFieldDescriptor(it, isPublic, isInternal, isProtected)
125+
}
126+
127+
return matchingEnumFields
128+
}
129+
110130
override val properties: Array<out NativePropertyDescriptor> by lazy {
111131
val metadata = kotlinMetadata
112132
if (metadata is KotlinClassMetadata.Class) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.telerik.metadata.parsing.kotlin.fields
2+
3+
import com.telerik.metadata.parsing.bytecode.fields.NativeFieldBytecodeDescriptor
4+
import org.apache.bcel.classfile.Field
5+
6+
class KotlinEnumFieldDescriptor(field: Field,
7+
override val isPublic: Boolean,
8+
override val isInternal: Boolean,
9+
override val isProtected: Boolean) : NativeFieldBytecodeDescriptor(field)

test-app/runtime/src/main/cpp/ModuleInternal.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include <mutex>
2323
#include <libgen.h>
2424
#include <dlfcn.h>
25+
#include <sys/stat.h>
2526

2627
using namespace v8;
2728
using namespace std;
@@ -460,6 +461,19 @@ ScriptCompiler::CachedData* ModuleInternal::TryLoadScriptCache(const std::string
460461
}
461462

462463
auto cachePath = path + ".cache";
464+
465+
struct stat result;
466+
if (stat(cachePath.c_str(), &result) == 0) {
467+
auto cacheLastModifiedTime = result.st_mtime;
468+
if (stat(path.c_str(), &result) == 0) {
469+
auto jsLastModifiedTime = result.st_mtime;
470+
if (jsLastModifiedTime > 0 && cacheLastModifiedTime > 0 && jsLastModifiedTime > cacheLastModifiedTime) {
471+
// The javascript file is more recent than the cache file => ignore the cache
472+
return nullptr;
473+
}
474+
}
475+
}
476+
463477
int length = 0;
464478
auto data = File::ReadBinary(cachePath, length);
465479
if (!data) {

v8-versions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
">=6.2.9 <6.4.0": "7.8.279.19",
2+
">=6.2.9 <6.5.0": "7.8.279.19",
33
">=6.1.9 <6.3.0": "7.7.299.11",
44
">=6.0.9 <6.2.0": "7.6.303.28",
55
">=5.9.9 <6.0.9": "7.5.288.22",

0 commit comments

Comments
 (0)