KT-3267 Put binary format version into the generated class files
#KT-3267 Fixed
This commit is contained in:
@@ -43,10 +43,7 @@ import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
|||||||
import org.jetbrains.jet.lang.resolve.OverridingUtil;
|
import org.jetbrains.jet.lang.resolve.OverridingUtil;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -242,6 +239,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (JvmStdlibNames.FLAGS_DEFAULT_VALUE != flags) {
|
if (JvmStdlibNames.FLAGS_DEFAULT_VALUE != flags) {
|
||||||
annotationVisitor.visit(JvmStdlibNames.JET_FLAGS_FIELD, flags);
|
annotationVisitor.visit(JvmStdlibNames.JET_FLAGS_FIELD, flags);
|
||||||
}
|
}
|
||||||
|
annotationVisitor.visit(JvmStdlibNames.ABI_VERSION_NAME, JvmAbi.VERSION);
|
||||||
annotationVisitor.visitEnd();
|
annotationVisitor.visitEnd();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.util.io.FileUtil;
|
|||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.asm4.AnnotationVisitor;
|
||||||
import org.jetbrains.asm4.MethodVisitor;
|
import org.jetbrains.asm4.MethodVisitor;
|
||||||
import org.jetbrains.asm4.Type;
|
import org.jetbrains.asm4.Type;
|
||||||
import org.jetbrains.asm4.commons.InstructionAdapter;
|
import org.jetbrains.asm4.commons.InstructionAdapter;
|
||||||
@@ -33,9 +34,7 @@ import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
|||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
|
|
||||||
@@ -86,7 +85,9 @@ public class NamespaceCodegen extends MemberCodegen {
|
|||||||
boolean multiFile = CodegenBinding.isMultiFileNamespace(state.getBindingContext(), name);
|
boolean multiFile = CodegenBinding.isMultiFileNamespace(state.getBindingContext(), name);
|
||||||
|
|
||||||
if (shouldGenerateNSClass(files)) {
|
if (shouldGenerateNSClass(files)) {
|
||||||
v.getClassBuilder().newAnnotation(JvmStdlibNames.JET_PACKAGE_CLASS.getDescriptor(), true);
|
AnnotationVisitor packageClassAnnotation = v.getClassBuilder().newAnnotation(JvmStdlibNames.JET_PACKAGE_CLASS.getDescriptor(), true);
|
||||||
|
packageClassAnnotation.visit(JvmStdlibNames.ABI_VERSION_NAME, JvmAbi.VERSION);
|
||||||
|
packageClassAnnotation.visitEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (JetFile file : files) {
|
for (JetFile file : files) {
|
||||||
|
|||||||
@@ -17,6 +17,12 @@
|
|||||||
package org.jetbrains.jet.lang.resolve.java;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
public class JvmAbi {
|
public class JvmAbi {
|
||||||
|
/**
|
||||||
|
* This constant is used to identify binary format (class file) versions
|
||||||
|
* If you change class file metadata format and/or naming conventions, please increase this number
|
||||||
|
*/
|
||||||
|
public static final int VERSION = 0;
|
||||||
|
|
||||||
public static final String TRAIT_IMPL_CLASS_NAME = "$TImpl";
|
public static final String TRAIT_IMPL_CLASS_NAME = "$TImpl";
|
||||||
public static final String TRAIT_IMPL_SUFFIX = "$" + TRAIT_IMPL_CLASS_NAME;
|
public static final String TRAIT_IMPL_SUFFIX = "$" + TRAIT_IMPL_CLASS_NAME;
|
||||||
|
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ public class JvmStdlibNames {
|
|||||||
|
|
||||||
public static final JvmClassName JET_PACKAGE_CLASS = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetPackageClass");
|
public static final JvmClassName JET_PACKAGE_CLASS = JvmClassName.byFqNameWithoutInnerClasses("jet.runtime.typeinfo.JetPackageClass");
|
||||||
|
|
||||||
|
public static final String ABI_VERSION_NAME = "abiVersion";
|
||||||
|
|
||||||
public static final String JET_CLASS_SIGNATURE = "signature";
|
public static final String JET_CLASS_SIGNATURE = "signature";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,4 +31,6 @@ public @interface JetClass {
|
|||||||
* @return flags for class
|
* @return flags for class
|
||||||
*/
|
*/
|
||||||
int flags() default 0;
|
int flags() default 0;
|
||||||
|
|
||||||
|
int abiVersion();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,5 @@ import java.lang.annotation.RetentionPolicy;
|
|||||||
*/
|
*/
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
public @interface JetPackageClass {
|
public @interface JetPackageClass {
|
||||||
|
int abiVersion();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user