summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-09-18 15:51:13 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2014-09-18 15:51:13 +0000
commitc64d28e4a19326cb4648deac09b162f7d4f9fd21 (patch)
tree9a7ed49030439fd3311eacdecb71e2d03695d660
parent2b4aafbc11d904ecf6a3926866bee09b768283c0 (diff)
parentd624a7858c0a63a99f9982931a94e80ee3fc13fd (diff)
downloadtoolchain_jack-c64d28e4a19326cb4648deac09b162f7d4f9fd21.zip
toolchain_jack-c64d28e4a19326cb4648deac09b162f7d4f9fd21.tar.gz
toolchain_jack-c64d28e4a19326cb4648deac09b162f7d4f9fd21.tar.bz2
Merge "Fix visibility bridges flags." into ub-jack
-rw-r--r--jack-tests/tests/com/android/jack/bridge/test009/jack/Caller.java36
-rw-r--r--jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PackageProtected.java32
-rw-r--r--jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PublicExtendsPackage.java21
-rw-r--r--jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java10
-rw-r--r--jack/tests/com/android/jack/BridgeTest.java10
5 files changed, 107 insertions, 2 deletions
diff --git a/jack-tests/tests/com/android/jack/bridge/test009/jack/Caller.java b/jack-tests/tests/com/android/jack/bridge/test009/jack/Caller.java
new file mode 100644
index 0000000..3495b9d
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/bridge/test009/jack/Caller.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.bridge.test009.jack;
+
+import com.android.jack.bridge.test009.jack.sub.PublicExtendsPackage;
+
+
+public class Caller {
+
+ public void call() {
+ PublicExtendsPackage obj = new PublicExtendsPackage() {
+ @Override
+ public void put(boolean key) {
+ }
+ };
+
+ obj.put(1.0f);
+ obj.put("", "toto");
+ obj.put(2l);
+ obj.put(true);
+ }
+}
diff --git a/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PackageProtected.java b/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PackageProtected.java
new file mode 100644
index 0000000..60300dc
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PackageProtected.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.bridge.test009.jack.sub;
+
+
+abstract class PackageProtected {
+
+ public strictfp void put(float key) {
+ }
+
+ public void put(Object... keys) {
+ }
+
+ public native void put(long key);
+
+ public abstract void put(boolean key);
+}
+
diff --git a/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PublicExtendsPackage.java b/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PublicExtendsPackage.java
new file mode 100644
index 0000000..b5be4d3
--- /dev/null
+++ b/jack-tests/tests/com/android/jack/bridge/test009/jack/sub/PublicExtendsPackage.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.bridge.test009.jack.sub;
+
+
+public abstract class PublicExtendsPackage extends PackageProtected {
+}
diff --git a/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java b/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
index b26dcf3..6b16aba 100644
--- a/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
+++ b/jack/src/com/android/jack/transformations/VisibilityBridgeAdder.java
@@ -96,8 +96,14 @@ public class VisibilityBridgeAdder implements RunnableSchedulable<JDefinedClassO
private void synthesizeBridge(@Nonnull JDefinedClass jClass, @Nonnull JMethod method) {
SourceInfo sourceInfo = SourceInfo.UNKNOWN;
JMethodId methodId = method.getMethodId();
- JMethod bridge = new JMethod(sourceInfo, methodId, jClass, method.getType(),
- (method.getModifier() & ~JModifier.SYNCHRONIZED) | JModifier.SYNTHETIC | JModifier.BRIDGE);
+
+ int bridgeModifier = method.getModifier();
+ // Remove non inherited flags
+ bridgeModifier &= ~(JModifier.SYNCHRONIZED | JModifier.ABSTRACT | JModifier.STRICTFP
+ | JModifier.NATIVE);
+ // Add bridge specific flags
+ bridgeModifier |= JModifier.SYNTHETIC | JModifier.BRIDGE;
+ JMethod bridge = new JMethod(sourceInfo, methodId, jClass, method.getType(), bridgeModifier);
for (JParameter param : method.getParams()) {
bridge.addParam(new JParameter(sourceInfo, param.getName(), param.getType(),
param.getModifier(), bridge));
diff --git a/jack/tests/com/android/jack/BridgeTest.java b/jack/tests/com/android/jack/BridgeTest.java
index 731b924..8d53304 100644
--- a/jack/tests/com/android/jack/BridgeTest.java
+++ b/jack/tests/com/android/jack/BridgeTest.java
@@ -131,4 +131,14 @@ public class BridgeTest {
TestTools.compileSourceToDex(options, new File(srcFolder, "Caller.java"),
TestTools.getDefaultBootclasspathString(), outDexFolder, false /* zip */);
}
+
+ @Test
+ public void test009() throws Exception {
+ TestTools.compileSourceToDex(
+ new Options(),
+ TestTools.getJackTestsWithJackFolder("bridge/test009"),
+ TestTools.getDefaultBootclasspathString(),
+ TestTools.createTempFile("bridge009", ".zip"),
+ true /* zip */);
+ }
}