Skip to content

Commit 35ff41c

Browse files
authored
Merge pull request #31 from readdle/restore-32-bit-support
Restore 32 bit support
2 parents c98b127 + a0f315e commit 35ff41c

32 files changed

+244
-47
lines changed

.github/workflows/android_x86.yml

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Android CI x86
2+
3+
on: [push]
4+
5+
jobs:
6+
build:
7+
8+
runs-on: macOS-latest
9+
10+
steps:
11+
- uses: actions/checkout@v1
12+
- name: set up JDK 1.8
13+
uses: actions/setup-java@v1
14+
with:
15+
java-version: 1.8
16+
- name: Install Swift toolchain 5.0.3
17+
run: wget https://swift.org/builds/swift-5.0.3-release/xcode/swift-5.0.3-RELEASE/swift-5.0.3-RELEASE-osx.pkg;
18+
sudo installer -pkg swift-5.0.3-RELEASE-osx.pkg -target /
19+
- name: Install NDK
20+
run: wget https://dl.google.com/android/repository/android-ndk-r17c-darwin-x86_64.zip;
21+
unzip android-ndk-r17c-darwin-x86_64.zip
22+
- name: Install Swift Android Toolchain
23+
run: SWIFT_ANDROID=$(curl -fsSL https://api.bintray.com/packages/readdle/swift-android-toolchain/swift-android-toolchain/versions/_latest | python -c 'import json,sys;print(json.load(sys.stdin))["name"]');
24+
wget https://dl.bintray.com/readdle/swift-android-toolchain/swift-android-$SWIFT_ANDROID.zip;
25+
unzip swift-android-$SWIFT_ANDROID.zip;
26+
swift-android-$SWIFT_ANDROID/bin/swift-android tools --update;
27+
ln -sfn swift-android-$SWIFT_ANDROID swift-android-current
28+
- name: Download Android Emulator
29+
run: $ANDROID_HOME/tools/bin/sdkmanager "system-images;android-29;google_apis;x86"
30+
- name: Create Android Emulator
31+
run: $ANDROID_HOME/tools/bin/avdmanager create avd -n ci-test -k "system-images;android-29;google_apis;x86" -d "pixel" --force
32+
- name: Start Android Emulator
33+
run: $ANDROID_HOME/emulator/emulator -no-window -avd ci-test -noaudio > /dev/null &
34+
- name: Run connected android tests
35+
run: export TOOLCHAINS=org.swift.50320190830a;
36+
export ANDROID_NDK_HOME=$(pwd)/android-ndk-r17c;
37+
export SWIFT_ANDROID_HOME=$(pwd)/swift-android-current;
38+
export PATH=$ANDROID_NDK_HOME:$PATH;
39+
export PATH=$SWIFT_ANDROID_HOME/bin:$SWIFT_ANDROID_HOME/build-tools/current:$PATH;
40+
adb wait-for-device;
41+
./gradlew sample:cAT

.github/workflows/android.yml renamed to .github/workflows/android_x86_64.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Android CI
1+
name: Android CI x86_64
22

33
on: [push]
44

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
buildscript {
2-
ext.kotlin_version = '1.3.61'
2+
ext.kotlin_version = '1.4.21'
33

44
repositories {
55
google()
@@ -9,8 +9,8 @@ buildscript {
99
}
1010

1111
dependencies {
12-
classpath 'com.android.tools.build:gradle:4.1.1'
13-
classpath "com.readdle.android.swift:gradle:1.3.2"
12+
classpath 'com.android.tools.build:gradle:4.1.2'
13+
classpath "com.readdle.android.swift:gradle:1.3.4"
1414
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1515
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
1616
classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4"

compiler/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ archivesBaseName = "compiler"
44

55
dependencies {
66
implementation project(':library')
7-
implementation 'com.google.code.gson:gson:2.8.5'
7+
implementation 'com.google.code.gson:gson:2.8.6'
88
}
99

1010
apply from: rootProject.file('bintray-publish.gradle')

compiler/src/main/java/com/readdle/codegen/SwiftGetterDescriptor.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
6262

6363
String retType = "";
6464
if (returnSwiftType != null) {
65-
retType = " -> " + returnSwiftType.javaSigType(isReturnTypeOptional) + "?";
65+
retType = " -> " + returnSwiftType.javaSigType(isReturnTypeOptional);
66+
if (isReturnTypeOptional || !returnSwiftType.isPrimitiveType()) {
67+
retType += "?";
68+
}
6669
}
6770

6871
swiftWriter.emit(String.format(")%s {\n", retType));
@@ -75,7 +78,12 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
7578
swiftWriter.emitStatement("}");
7679
swiftWriter.emitStatement("catch {");
7780
Utils.handleRuntimeError(swiftWriter);
78-
swiftWriter.emitStatement(String.format("return%s", returnSwiftType != null ? " nil" : ""));
81+
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
82+
swiftWriter.emitStatement("return " + returnSwiftType.primitiveDefaultValue());
83+
}
84+
else {
85+
swiftWriter.emitStatement("return nil");
86+
}
7987
swiftWriter.emitStatement("}");
8088
}
8189

@@ -96,7 +104,12 @@ public void generateCode(SwiftWriter swiftWriter, String javaFullName, String sw
96104
swiftWriter.emitStatement("}");
97105
swiftWriter.emitStatement("catch {");
98106
Utils.handleRuntimeError(swiftWriter);
99-
swiftWriter.emitStatement("return nil");
107+
if (!isReturnTypeOptional && returnSwiftType.isPrimitiveType()) {
108+
swiftWriter.emitStatement("return " + returnSwiftType.primitiveDefaultValue());
109+
}
110+
else {
111+
swiftWriter.emitStatement("return nil");
112+
}
100113
swiftWriter.emitStatement("}");
101114
}
102115

gradle.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
GROUP=com.readdle.swift.java.codegen
2-
VERSION_NAME=0.9.0
2+
VERSION_NAME=0.9.1
33

44
org.gradle.jvmargs=-Xmx1536m
5+
android.useAndroidX=true
6+
android.enableJetifier=true

sample/build.gradle

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ swift {
99
useKapt true
1010
cleanEnabled true
1111
debug {
12-
abiFilters("x86_64")
1312
extraBuildFlags("-Xswiftc", "-DDEBUG")
1413
}
1514
}
@@ -22,7 +21,7 @@ android {
2221
targetSdkVersion 30
2322
versionCode 1
2423
versionName "1.0"
25-
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
24+
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
2625
javaCompileOptions {
2726
annotationProcessorOptions {
2827
arguments = ["com.readdle.codegen.package": """{
@@ -39,8 +38,22 @@ android {
3938
}
4039
buildTypes {
4140
release {
41+
debuggable false
42+
jniDebuggable false
4243
minifyEnabled false
43-
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
44+
shrinkResources false
45+
ndk {
46+
abiFilters = ["armeabi-v7a", "arm64-v8a", "x86", "x86_64"]
47+
}
48+
}
49+
debug {
50+
debuggable true
51+
jniDebuggable true
52+
minifyEnabled false
53+
shrinkResources false
54+
ndk {
55+
abiFilters = ["x86", "x86_64"]
56+
}
4457
}
4558
}
4659

@@ -68,10 +81,10 @@ dependencies {
6881
kapt project(':compiler')
6982
implementation project(':library')
7083

71-
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
84+
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
7285
testImplementation 'junit:junit:4.13.1'
73-
androidTestImplementation 'com.android.support:support-annotations:28.0.0'
74-
androidTestImplementation 'com.android.support.test:runner:1.0.2'
75-
androidTestImplementation 'com.android.support.test:rules:1.0.2'
76-
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
86+
androidTestImplementation 'androidx.annotation:annotation:1.1.0'
87+
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
88+
androidTestImplementation 'androidx.test:rules:1.3.0'
89+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
7790
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/BoolTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/DoubleTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/FloatTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int16Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int32Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int64Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/Int8Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/IntTests.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66
import com.readdle.codegen.anotation.SwiftRuntimeError;
@@ -29,9 +29,11 @@ public void testZero() {
2929
public void testMin() {
3030
try {
3131
Assert.assertEquals(IntTest.testMin(), Integer.MIN_VALUE);
32-
Assert.fail();
33-
}
34-
catch (Exception e) {
32+
if (SwiftEnvironment.is64BitArch()) {
33+
// Only on 64 bit arch there is not enough bytes to represent system Int.min
34+
Assert.fail();
35+
}
36+
} catch (Exception e) {
3537
Assert.assertTrue(e instanceof SwiftRuntimeError);
3638
Assert.assertEquals(e.getMessage(), "Invalid value \"" + Long.MIN_VALUE + "\": Not enough bits to represent Int []");
3739
}
@@ -41,7 +43,10 @@ public void testMin() {
4143
public void testMax() {
4244
try {
4345
Assert.assertEquals(IntTest.testMax(), Integer.MAX_VALUE);
44-
Assert.fail();
46+
if (SwiftEnvironment.is64BitArch()) {
47+
// Only on 64 bit arch there is not enough bytes to represent system Int.maxå
48+
Assert.fail();
49+
}
4550
}
4651
catch (Exception e) {
4752
Assert.assertTrue(e instanceof SwiftRuntimeError);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.readdle.swiftjava.sample
2+
3+
import androidx.test.ext.junit.runners.AndroidJUnit4
4+
import com.readdle.codegen.anotation.JavaSwift
5+
import com.readdle.swiftjava.sample.SwiftEnvironment.Companion.initEnvironment
6+
import org.junit.Assert
7+
import org.junit.Before
8+
import org.junit.Test
9+
import org.junit.runner.RunWith
10+
11+
@RunWith(AndroidJUnit4::class)
12+
class Issue31Tests {
13+
14+
@Before
15+
fun setUp() {
16+
System.loadLibrary("SampleAppCore")
17+
JavaSwift.init()
18+
initEnvironment()
19+
}
20+
21+
@Test
22+
fun testValueTypeNanBug() {
23+
val progress = Issue31TestProgress(elapsed = 8, total = 8)
24+
Assert.assertNotEquals(Double.NaN, progress.percentage)
25+
Assert.assertNotEquals(Double.NaN, progress.calculatePercentage())
26+
}
27+
28+
@Test
29+
fun testReferenceTypeNanBug() {
30+
val progress = Issue31ReferenceTestProgress.init(elapsed = 8, total = 8)
31+
Assert.assertNotEquals(Double.NaN, progress.percentage)
32+
Assert.assertNotEquals(Double.NaN, progress.calculatePercentage())
33+
}
34+
}

sample/src/androidTest/java/com/readdle/swiftjava/sample/SampleReferenceTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.annotation.NonNull;
4-
import android.support.annotation.Nullable;
5-
import android.support.test.runner.AndroidJUnit4;
6-
import android.util.Log;
3+
import androidx.annotation.NonNull;
4+
import androidx.annotation.Nullable;
5+
import androidx.test.ext.junit.runners.AndroidJUnit4;
76

87
import com.readdle.codegen.anotation.JavaSwift;
98
import com.readdle.codegen.anotation.SwiftError;

sample/src/androidTest/java/com/readdle/swiftjava/sample/SampleValueTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample
22

3-
import android.support.test.runner.AndroidJUnit4
3+
import androidx.test.ext.junit.runners.AndroidJUnit4
44
import com.readdle.codegen.anotation.JavaSwift
55
import com.readdle.codegen.anotation.SwiftError
66
import com.readdle.swiftjava.sample.SampleValue.Companion.funcThrows

sample/src/androidTest/java/com/readdle/swiftjava/sample/StringTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66
import com.readdle.codegen.anotation.SwiftRuntimeError;

sample/src/androidTest/java/com/readdle/swiftjava/sample/UInt16Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/UInt32Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/UInt64Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/UInt8Tests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66

sample/src/androidTest/java/com/readdle/swiftjava/sample/UIntTests.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.readdle.swiftjava.sample;
22

3-
import android.support.test.runner.AndroidJUnit4;
3+
import androidx.test.ext.junit.runners.AndroidJUnit4;
44

55
import com.readdle.codegen.anotation.JavaSwift;
66
import com.readdle.codegen.anotation.SwiftRuntimeError;
@@ -37,7 +37,10 @@ public void testMin() {
3737
public void testMax() {
3838
try {
3939
Assert.assertEquals(UIntTest.testMax(), MAX_VALUE);
40-
Assert.fail();
40+
if (SwiftEnvironment.is64BitArch()) {
41+
// Only on 64 bit arch there is not enough bytes to represent system UInt.max
42+
Assert.fail();
43+
}
4144
}
4245
catch (Exception e) {
4346
Assert.assertTrue(e instanceof SwiftRuntimeError);

0 commit comments

Comments
 (0)