summaryrefslogtreecommitdiff
path: root/sources/scalac/backend/jvm/GenJVM.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/backend/jvm/GenJVM.java')
-rw-r--r--sources/scalac/backend/jvm/GenJVM.java23
1 files changed, 13 insertions, 10 deletions
diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java
index b3ec16c879..2ba2fb1a6b 100644
--- a/sources/scalac/backend/jvm/GenJVM.java
+++ b/sources/scalac/backend/jvm/GenJVM.java
@@ -87,8 +87,6 @@ public class GenJVM {
protected final Symbol JAVA_RMI_REMOTE_CLASS;
protected final Symbol SCALA_SERIAL_VERSION_UID_CONSTR;
- protected final Symbol SCALA_TRANSIENT_CONSTR;
- protected final Symbol SCALA_VOLATILE_CONSTR;
protected final Global global;
protected final Definitions defs;
@@ -118,10 +116,6 @@ public class GenJVM {
JAVA_RMI_REMOTE_CLASS = defs.getClass(JAVA_RMI_REMOTE);
SCALA_SERIAL_VERSION_UID_CONSTR =
defs.getClass("scala.SerialVersionUID") .primaryConstructor();
- SCALA_TRANSIENT_CONSTR =
- defs.getClass("scala.transient").primaryConstructor();
- SCALA_VOLATILE_CONSTR =
- defs.getClass("scala.volatile").primaryConstructor();
}
/// Code generation
@@ -1634,6 +1628,9 @@ public class GenJVM {
boolean serializable =
global.getAttrArguments(cSym, defs.SCALA_SERIALIZABLE_CONSTR) != null;
+ boolean cloneable =
+ global.getAttrArguments(cSym, defs.SCALA_CLONEABLE_CONSTR) != null;
+
scalac.symtab.Type[] baseTps = cSym.info().parents();
assert baseTps.length > 0 : Debug.show(cSym);
@@ -1647,14 +1644,18 @@ public class GenJVM {
superClassName = javaName(baseTps[0].symbol());
}
String[] interfaceNames = new String[baseTps.length - offset
- + (serializable ? 1 : 0)];
+ + (serializable ? 1 : 0)
+ + (cloneable ? 1 : 0)];
for (int i = offset; i < baseTps.length; ++i) {
Symbol baseSym = baseTps[i].symbol();
assert baseSym.isInterface() : cSym + " implements " + baseSym;
interfaceNames[i - offset] = javaName(baseSym);
}
if (serializable)
- interfaceNames[interfaceNames.length - 1] = "java.io.Serializable";
+ interfaceNames[interfaceNames.length - 1 - (cloneable ? 1 : 0)] =
+ "java.io.Serializable";
+ if (cloneable)
+ interfaceNames[interfaceNames.length - 1] = "java.lang.Cloneable";
JClass cls = fjbgContext.JClass(javaModifiers(cSym)
& ~JAccessFlags.ACC_STATIC
@@ -1788,9 +1789,11 @@ public class GenJVM {
Symbol member = memberIt.next();
if (member.isTerm() && !member.isMethod()) {
int flags = javaModifiers(member);
- if (global.getAttrArguments(member,SCALA_TRANSIENT_CONSTR)!=null)
+ if (global.getAttrArguments(member,defs.SCALA_TRANSIENT_CONSTR)
+ != null)
flags |= JAccessFlags.ACC_TRANSIENT;
- if (global.getAttrArguments(member,SCALA_VOLATILE_CONSTR)!=null)
+ if (global.getAttrArguments(member,defs.SCALA_VOLATILE_CONSTR)
+ != null)
flags |= JAccessFlags.ACC_VOLATILE;
ctx.clazz.addNewField(flags,
member.name.toString(),