Supported properties in partial compilation of package.
This commit is contained in:
@@ -155,10 +155,26 @@ public class CodegenUtil {
|
|||||||
|
|
||||||
return !isFakeOverride && !isDelegate &&
|
return !isFakeOverride && !isDelegate &&
|
||||||
(((context.hasThisDescriptor() && containingDeclaration == context.getThisDescriptor()) ||
|
(((context.hasThisDescriptor() && containingDeclaration == context.getThisDescriptor()) ||
|
||||||
(context.getParentContext() instanceof PackageContext && context.getParentContext().getContextDescriptor() == containingDeclaration))
|
(context.getParentContext() instanceof PackageContext
|
||||||
|
&& isSamePackageInSameModule(context.getParentContext().getContextDescriptor(), containingDeclaration)))
|
||||||
&& context.getContextKind() != OwnerKind.TRAIT_IMPL);
|
&& context.getContextKind() != OwnerKind.TRAIT_IMPL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isSamePackageInSameModule(
|
||||||
|
@NotNull DeclarationDescriptor owner1,
|
||||||
|
@NotNull DeclarationDescriptor owner2
|
||||||
|
) {
|
||||||
|
if (owner1 instanceof PackageFragmentDescriptor && owner2 instanceof PackageFragmentDescriptor) {
|
||||||
|
PackageFragmentDescriptor fragment1 = (PackageFragmentDescriptor) owner1;
|
||||||
|
PackageFragmentDescriptor fragment2 = (PackageFragmentDescriptor) owner2;
|
||||||
|
|
||||||
|
// backing field should be used directly within same module of same package
|
||||||
|
// TODO calls from other modules/libraries should use facade: KT-4590
|
||||||
|
return fragment1.getFqName().equals(fragment2.getFqName()) && DescriptorUtils.areInSameModule(fragment1, fragment2);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean isCallInsideSameModuleAsDeclared(CallableMemberDescriptor declarationDescriptor, CodegenContext context) {
|
public static boolean isCallInsideSameModuleAsDeclared(CallableMemberDescriptor declarationDescriptor, CodegenContext context) {
|
||||||
if (context == CodegenContext.STATIC) {
|
if (context == CodegenContext.STATIC) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -21,11 +21,10 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.asm4.Type;
|
import org.jetbrains.asm4.Type;
|
||||||
import org.jetbrains.asm4.commons.Method;
|
import org.jetbrains.asm4.commons.Method;
|
||||||
import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf;
|
import org.jetbrains.jet.descriptors.serialization.*;
|
||||||
import org.jetbrains.jet.descriptors.serialization.NameTable;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor;
|
||||||
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
|
|
||||||
import org.jetbrains.jet.descriptors.serialization.SerializerExtension;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
|
import org.jetbrains.jet.lang.resolve.kotlin.SignatureDeserializer;
|
||||||
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;
|
||||||
|
|
||||||
@@ -67,10 +66,11 @@ public class JavaSerializerExtension extends SerializerExtension {
|
|||||||
@NotNull ProtoBuf.Callable.Builder proto,
|
@NotNull ProtoBuf.Callable.Builder proto,
|
||||||
@NotNull NameTable nameTable
|
@NotNull NameTable nameTable
|
||||||
) {
|
) {
|
||||||
|
SignatureSerializer signatureSerializer = new SignatureSerializer(nameTable);
|
||||||
if (callable instanceof FunctionDescriptor) {
|
if (callable instanceof FunctionDescriptor) {
|
||||||
Method method = bindings.get(METHOD_FOR_FUNCTION, (FunctionDescriptor) callable);
|
Method method = bindings.get(METHOD_FOR_FUNCTION, (FunctionDescriptor) callable);
|
||||||
if (method != null) {
|
if (method != null) {
|
||||||
proto.setExtension(JavaProtoBuf.methodSignature, new SignatureSerializer(nameTable).methodSignature(method));
|
proto.setExtension(JavaProtoBuf.methodSignature, signatureSerializer.methodSignature(method));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (callable instanceof PropertyDescriptor) {
|
else if (callable instanceof PropertyDescriptor) {
|
||||||
@@ -99,8 +99,18 @@ public class JavaSerializerExtension extends SerializerExtension {
|
|||||||
syntheticMethod = bindings.get(SYNTHETIC_METHOD_FOR_PROPERTY, property);
|
syntheticMethod = bindings.get(SYNTHETIC_METHOD_FOR_PROPERTY, property);
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaProtoBuf.JavaPropertySignature signature = new SignatureSerializer(nameTable)
|
JavaProtoBuf.JavaPropertySignature signature;
|
||||||
.propertySignature(fieldType, fieldName, isStaticInOuter, syntheticMethod, getterMethod, setterMethod);
|
if (callable instanceof DeserializedPropertyDescriptor) {
|
||||||
|
DeserializedPropertyDescriptor deserializedCallable = (DeserializedPropertyDescriptor) callable;
|
||||||
|
signature = signatureSerializer.copyPropertySignature(
|
||||||
|
deserializedCallable.getProto().getExtension(JavaProtoBuf.propertySignature),
|
||||||
|
deserializedCallable.getNameResolver()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
signature = signatureSerializer
|
||||||
|
.propertySignature(fieldType, fieldName, isStaticInOuter, syntheticMethod, getterMethod, setterMethod);
|
||||||
|
}
|
||||||
proto.setExtension(JavaProtoBuf.propertySignature, signature);
|
proto.setExtension(JavaProtoBuf.propertySignature, signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -138,6 +148,37 @@ public class JavaSerializerExtension extends SerializerExtension {
|
|||||||
return signature.build();
|
return signature.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JavaProtoBuf.JavaPropertySignature copyPropertySignature(
|
||||||
|
@NotNull JavaProtoBuf.JavaPropertySignature signature,
|
||||||
|
@NotNull NameResolver nameResolver
|
||||||
|
) {
|
||||||
|
Type fieldType;
|
||||||
|
String fieldName;
|
||||||
|
boolean isStaticInOuter;
|
||||||
|
SignatureDeserializer signatureDeserializer = new SignatureDeserializer(nameResolver);
|
||||||
|
if (signature.hasField()) {
|
||||||
|
JavaProtoBuf.JavaFieldSignature field = signature.getField();
|
||||||
|
fieldType = Type.getType(signatureDeserializer.typeDescriptor(field.getType()));
|
||||||
|
fieldName = nameResolver.getName(field.getName()).asString();
|
||||||
|
isStaticInOuter = field.getIsStaticInOuter();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fieldType = null;
|
||||||
|
fieldName = null;
|
||||||
|
isStaticInOuter = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Method syntheticMethod = signature.hasSyntheticMethod()
|
||||||
|
? signatureDeserializer.methodSignature(signature.getSyntheticMethod())
|
||||||
|
: null;
|
||||||
|
|
||||||
|
Method getter = signature.hasGetter() ? signatureDeserializer.methodSignature(signature.getGetter()) : null;
|
||||||
|
Method setter = signature.hasSetter() ? signatureDeserializer.methodSignature(signature.getSetter()) : null;
|
||||||
|
|
||||||
|
return propertySignature(fieldType, fieldName, isStaticInOuter, syntheticMethod, getter, setter);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JavaProtoBuf.JavaPropertySignature propertySignature(
|
public JavaProtoBuf.JavaPropertySignature propertySignature(
|
||||||
@Nullable Type fieldType,
|
@Nullable Type fieldType,
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
|||||||
import org.jetbrains.jet.codegen.context.PackageContext;
|
import org.jetbrains.jet.codegen.context.PackageContext;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.descriptors.serialization.*;
|
import org.jetbrains.jet.descriptors.serialization.*;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
@@ -123,12 +125,12 @@ public class PackageCodegen extends GenerationStateAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private List<CallableMemberDescriptor> getAlreadyCompiledCallables() {
|
private List<DeserializedCallableMemberDescriptor> getAlreadyCompiledCallables() {
|
||||||
List<CallableMemberDescriptor> callables = Lists.newArrayList();
|
List<DeserializedCallableMemberDescriptor> callables = Lists.newArrayList();
|
||||||
if (compiledPackageFragment != null) {
|
if (compiledPackageFragment != null) {
|
||||||
for (DeclarationDescriptor member : compiledPackageFragment.getMemberScope().getAllDescriptors()) {
|
for (DeclarationDescriptor member : compiledPackageFragment.getMemberScope().getAllDescriptors()) {
|
||||||
if (member instanceof DeserializedSimpleFunctionDescriptor) {
|
if (member instanceof DeserializedCallableMemberDescriptor) {
|
||||||
callables.add((DeserializedSimpleFunctionDescriptor) member);
|
callables.add((DeserializedCallableMemberDescriptor) member);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -136,38 +138,47 @@ public class PackageCodegen extends GenerationStateAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void generateDelegationsToAlreadyCompiled(Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks) {
|
private void generateDelegationsToAlreadyCompiled(Map<CallableMemberDescriptor, Runnable> generateCallableMemberTasks) {
|
||||||
for (final CallableMemberDescriptor member : getAlreadyCompiledCallables()) {
|
for (final DeserializedCallableMemberDescriptor member : getAlreadyCompiledCallables()) {
|
||||||
generateCallableMemberTasks.put(member, new Runnable() {
|
generateCallableMemberTasks.put(member, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
DeserializedSimpleFunctionDescriptor deserializedFunction = (DeserializedSimpleFunctionDescriptor) member;
|
|
||||||
|
|
||||||
FieldOwnerContext context = CodegenContext.STATIC.intoPackageFacade(
|
FieldOwnerContext context = CodegenContext.STATIC.intoPackageFacade(
|
||||||
Type.getObjectType(getPackagePartInternalName(deserializedFunction)),
|
Type.getObjectType(getPackagePartInternalName(member)),
|
||||||
compiledPackageFragment);
|
compiledPackageFragment);
|
||||||
|
|
||||||
FunctionCodegen fuCo = new FunctionCodegen(
|
FunctionCodegen functionCodegen = new FunctionCodegen(
|
||||||
context,
|
context,
|
||||||
v.getClassBuilder(),
|
v.getClassBuilder(),
|
||||||
state,
|
state,
|
||||||
getMemberCodegen(context)
|
getMemberCodegen(context)
|
||||||
);
|
);
|
||||||
|
|
||||||
JvmMethodSignature signature = typeMapper.mapSignature(deserializedFunction, OwnerKind.PACKAGE);
|
if (member instanceof DeserializedSimpleFunctionDescriptor) {
|
||||||
fuCo.generateMethod(null, signature, deserializedFunction,
|
DeserializedSimpleFunctionDescriptor function = (DeserializedSimpleFunctionDescriptor) member;
|
||||||
new FunctionGenerationStrategy() {
|
JvmMethodSignature signature = typeMapper.mapSignature(function, OwnerKind.PACKAGE);
|
||||||
@Override
|
functionCodegen.generateMethod(null, signature, function,
|
||||||
public void generateBody(
|
new FunctionGenerationStrategy() {
|
||||||
@NotNull MethodVisitor mv,
|
@Override
|
||||||
@NotNull JvmMethodSignature signature,
|
public void generateBody(
|
||||||
@NotNull MethodContext context,
|
@NotNull MethodVisitor mv,
|
||||||
@Nullable MemberCodegen parentCodegen
|
@NotNull JvmMethodSignature signature,
|
||||||
) {
|
@NotNull MethodContext context,
|
||||||
throw new IllegalStateException("shouldn't be called");
|
@Nullable MemberCodegen parentCodegen
|
||||||
}
|
) {
|
||||||
});
|
throw new IllegalStateException("shouldn't be called");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
v.getClassBuilder().getSerializationBindings().put(METHOD_FOR_FUNCTION, deserializedFunction, signature.getAsmMethod());
|
v.getClassBuilder().getSerializationBindings().put(METHOD_FOR_FUNCTION, function, signature.getAsmMethod());
|
||||||
|
}
|
||||||
|
else if (member instanceof DeserializedPropertyDescriptor) {
|
||||||
|
PropertyCodegen propertyCodegen = new PropertyCodegen(
|
||||||
|
context, v.getClassBuilder(), functionCodegen, getMemberCodegen(context));
|
||||||
|
propertyCodegen.generateInPackageFacade((DeserializedPropertyDescriptor) member);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
throw new IllegalStateException("Unexpected member: " + member);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -386,14 +397,14 @@ public class PackageCodegen extends GenerationStateAware {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static String getPackagePartInternalName(@NotNull DeserializedSimpleFunctionDescriptor deserializedFunction) {
|
public static String getPackagePartInternalName(@NotNull DeserializedCallableMemberDescriptor deserializedCallable) {
|
||||||
DeclarationDescriptor parent = deserializedFunction.getContainingDeclaration();
|
DeclarationDescriptor parent = deserializedCallable.getContainingDeclaration();
|
||||||
assert parent instanceof PackageFragmentDescriptor : "parent should be package, but was: " + parent;
|
assert parent instanceof PackageFragmentDescriptor : "parent should be package, but was: " + parent;
|
||||||
|
|
||||||
assert deserializedFunction.getProto().hasExtension(JavaProtoBuf.implClassName)
|
assert deserializedCallable.getProto().hasExtension(JavaProtoBuf.implClassName)
|
||||||
: "implClassName extension is absent for " + deserializedFunction;
|
: "implClassName extension is absent for " + deserializedCallable;
|
||||||
Name shortName = deserializedFunction.getNameResolver()
|
Name shortName = deserializedCallable.getNameResolver()
|
||||||
.getName(deserializedFunction.getProto().getExtension(JavaProtoBuf.implClassName));
|
.getName(deserializedCallable.getProto().getExtension(JavaProtoBuf.implClassName));
|
||||||
FqName packagePartFqName = ((PackageFragmentDescriptor) parent).getFqName().child(shortName);
|
FqName packagePartFqName = ((PackageFragmentDescriptor) parent).getFqName().child(shortName);
|
||||||
return JvmClassName.byFqNameWithoutInnerClasses(packagePartFqName).getInternalName();
|
return JvmClassName.byFqNameWithoutInnerClasses(packagePartFqName).getInternalName();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import org.jetbrains.jet.codegen.context.PackageFacadeContext;
|
|||||||
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationState;
|
import org.jetbrains.jet.codegen.state.GenerationState;
|
||||||
import org.jetbrains.jet.codegen.state.GenerationStateAware;
|
import org.jetbrains.jet.codegen.state.GenerationStateAware;
|
||||||
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPropertyDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
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;
|
||||||
@@ -80,27 +81,43 @@ public class PropertyCodegen extends GenerationStateAware {
|
|||||||
this.kind = context.getContextKind();
|
this.kind = context.getContextKind();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void gen(JetProperty p) {
|
public void gen(@NotNull JetProperty property) {
|
||||||
VariableDescriptor variableDescriptor = bindingContext.get(BindingContext.VARIABLE, p);
|
VariableDescriptor variableDescriptor = bindingContext.get(BindingContext.VARIABLE, property);
|
||||||
assert variableDescriptor instanceof PropertyDescriptor : "Property should have a property descriptor: " + variableDescriptor;
|
assert variableDescriptor instanceof PropertyDescriptor : "Property should have a property descriptor: " + variableDescriptor;
|
||||||
|
|
||||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor;
|
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor;
|
||||||
assert kind == OwnerKind.PACKAGE || kind == OwnerKind.IMPLEMENTATION || kind == OwnerKind.TRAIT_IMPL
|
gen(property, propertyDescriptor, property.getGetter(), property.getSetter());
|
||||||
: "Generating property with a wrong kind (" + kind + "): " + propertyDescriptor;
|
}
|
||||||
|
|
||||||
|
public void generateInPackageFacade(@NotNull DeserializedPropertyDescriptor deserializedProperty) {
|
||||||
|
assert context instanceof PackageFacadeContext : "should be called only for generating package facade: " + context;
|
||||||
|
gen(null, deserializedProperty, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void gen(
|
||||||
|
@Nullable JetProperty declaration,
|
||||||
|
@NotNull PropertyDescriptor descriptor,
|
||||||
|
@Nullable JetPropertyAccessor getter,
|
||||||
|
@Nullable JetPropertyAccessor setter
|
||||||
|
) {
|
||||||
|
assert kind == OwnerKind.PACKAGE || kind == OwnerKind.IMPLEMENTATION || kind == OwnerKind.TRAIT_IMPL
|
||||||
|
: "Generating property with a wrong kind (" + kind + "): " + descriptor;
|
||||||
|
|
||||||
if (context instanceof PackageFacadeContext) {
|
if (context instanceof PackageFacadeContext) {
|
||||||
Type ownerType = ((PackageFacadeContext) context).getDelegateToClassType();
|
Type ownerType = ((PackageFacadeContext) context).getDelegateToClassType();
|
||||||
v.getSerializationBindings().put(IMPL_CLASS_NAME_FOR_CALLABLE, propertyDescriptor, shortNameByAsmType(ownerType));
|
v.getSerializationBindings().put(IMPL_CLASS_NAME_FOR_CALLABLE, descriptor, shortNameByAsmType(ownerType));
|
||||||
}
|
}
|
||||||
else if (!generateBackingField(p, propertyDescriptor)) {
|
else {
|
||||||
generateSyntheticMethodIfNeeded(propertyDescriptor);
|
assert declaration != null : "Declaration is null for different context: " + context;
|
||||||
|
if (!generateBackingField(declaration, descriptor)) {
|
||||||
|
generateSyntheticMethodIfNeeded(descriptor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
generateGetter(p, propertyDescriptor, p.getGetter());
|
generateGetter(declaration, descriptor, getter);
|
||||||
generateSetter(p, propertyDescriptor, p.getSetter());
|
generateSetter(declaration, descriptor, setter);
|
||||||
|
|
||||||
context.recordSyntheticAccessorIfNeeded(propertyDescriptor, bindingContext);
|
context.recordSyntheticAccessorIfNeeded(descriptor, bindingContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generatePrimaryConstructorProperty(JetParameter p, PropertyDescriptor descriptor) {
|
public void generatePrimaryConstructorProperty(JetParameter p, PropertyDescriptor descriptor) {
|
||||||
@@ -244,7 +261,7 @@ public class PropertyCodegen extends GenerationStateAware {
|
|||||||
return generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value);
|
return generateBackingField(p, propertyDescriptor, false, propertyDescriptor.getType(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateGetter(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor, JetPropertyAccessor getter) {
|
private void generateGetter(@Nullable JetNamedDeclaration p, @NotNull PropertyDescriptor propertyDescriptor, @Nullable JetPropertyAccessor getter) {
|
||||||
boolean defaultGetter = getter == null || getter.getBodyExpression() == null;
|
boolean defaultGetter = getter == null || getter.getBodyExpression() == null;
|
||||||
|
|
||||||
//TODO: Now it's not enough information to properly resolve property from bytecode without generated getter and setter
|
//TODO: Now it's not enough information to properly resolve property from bytecode without generated getter and setter
|
||||||
@@ -274,7 +291,7 @@ public class PropertyCodegen extends GenerationStateAware {
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateSetter(JetNamedDeclaration p, PropertyDescriptor propertyDescriptor, JetPropertyAccessor setter) {
|
private void generateSetter(@Nullable JetNamedDeclaration p, @NotNull PropertyDescriptor propertyDescriptor, @Nullable JetPropertyAccessor setter) {
|
||||||
boolean defaultSetter = setter == null || setter.getBodyExpression() == null;
|
boolean defaultSetter = setter == null || setter.getBodyExpression() == null;
|
||||||
|
|
||||||
//TODO: Now it's not enough information to properly resolve property from bytecode without generated getter and setter
|
//TODO: Now it's not enough information to properly resolve property from bytecode without generated getter and setter
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jetbrains.jet.codegen.signature.BothSignatureWriter;
|
|||||||
import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind;
|
import org.jetbrains.jet.codegen.signature.JvmMethodParameterKind;
|
||||||
import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature;
|
import org.jetbrains.jet.codegen.signature.JvmMethodParameterSignature;
|
||||||
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
import org.jetbrains.jet.codegen.signature.JvmMethodSignature;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedSimpleFunctionDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedCallableMemberDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
|
import org.jetbrains.jet.lang.psi.JetDelegatorToSuperCall;
|
||||||
@@ -132,8 +132,10 @@ public class JetTypeMapper extends BindingTraceAware {
|
|||||||
if (file != null) {
|
if (file != null) {
|
||||||
return PackageCodegen.getPackagePartInternalName(file);
|
return PackageCodegen.getPackagePartInternalName(file);
|
||||||
}
|
}
|
||||||
if (descriptor instanceof DeserializedSimpleFunctionDescriptor) {
|
if (descriptor instanceof DeserializedCallableMemberDescriptor) {
|
||||||
return PackageCodegen.getPackagePartInternalName((DeserializedSimpleFunctionDescriptor) descriptor);
|
//
|
||||||
|
// TODO calls from other modules/libraries should use facade: KT-4590
|
||||||
|
return PackageCodegen.getPackagePartInternalName((DeserializedCallableMemberDescriptor) descriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return PackageClassUtils.getPackageClassFqName(packageFragment.getFqName()).asString().replace('.', '/');
|
return PackageClassUtils.getPackageClassFqName(packageFragment.getFqName()).asString().replace('.', '/');
|
||||||
|
|||||||
@@ -17,10 +17,12 @@
|
|||||||
package org.jetbrains.jet.jps.build;
|
package org.jetbrains.jet.jps.build;
|
||||||
|
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.utils.PathUtil;
|
import org.jetbrains.jet.utils.PathUtil;
|
||||||
import org.jetbrains.jps.builders.JpsBuildTestCase;
|
import org.jetbrains.jps.builders.JpsBuildTestCase;
|
||||||
import org.jetbrains.jps.model.JpsDummyElement;
|
import org.jetbrains.jps.model.JpsDummyElement;
|
||||||
import org.jetbrains.jps.model.JpsModuleRootModificationUtil;
|
import org.jetbrains.jps.model.JpsModuleRootModificationUtil;
|
||||||
|
import org.jetbrains.jps.model.JpsProject;
|
||||||
import org.jetbrains.jps.model.java.JpsAnnotationRootType;
|
import org.jetbrains.jps.model.java.JpsAnnotationRootType;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
|
import org.jetbrains.jps.model.java.JpsJavaDependencyScope;
|
||||||
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
|
import org.jetbrains.jps.model.java.JpsJavaLibraryType;
|
||||||
@@ -76,11 +78,15 @@ public abstract class AbstractKotlinJpsBuildTestCase extends JpsBuildTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected JpsLibrary addKotlinRuntimeDependency() {
|
protected JpsLibrary addKotlinRuntimeDependency() {
|
||||||
return addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, myProject.getModules(), false);
|
return addKotlinRuntimeDependency(myProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected JpsLibrary addKotlinRuntimeDependency(JpsJavaDependencyScope type, Collection<JpsModule> modules, boolean exported) {
|
static JpsLibrary addKotlinRuntimeDependency(@NotNull JpsProject project) {
|
||||||
JpsLibrary library = myProject.addLibrary("kotlin-runtime", JpsJavaLibraryType.INSTANCE);
|
return addKotlinRuntimeDependency(JpsJavaDependencyScope.COMPILE, project.getModules(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static JpsLibrary addKotlinRuntimeDependency(JpsJavaDependencyScope type, Collection<JpsModule> modules, boolean exported) {
|
||||||
|
JpsLibrary library = modules.iterator().next().getProject().addLibrary("kotlin-runtime", JpsJavaLibraryType.INSTANCE);
|
||||||
File runtime = PathUtil.getKotlinPathsForDistDirectory().getRuntimePath();
|
File runtime = PathUtil.getKotlinPathsForDistDirectory().getRuntimePath();
|
||||||
library.addRoot(runtime, JpsOrderRootType.COMPILED);
|
library.addRoot(runtime, JpsOrderRootType.COMPILED);
|
||||||
for (JpsModule module : modules) {
|
for (JpsModule module : modules) {
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public class IncrementalJpsTest : JpsBuildTestCase() {
|
|||||||
|
|
||||||
private fun doTest() {
|
private fun doTest() {
|
||||||
addModule("module", array<String>(getAbsolutePath("src")), null, null, addJdk("my jdk"))
|
addModule("module", array<String>(getAbsolutePath("src")), null, null, addJdk("my jdk"))
|
||||||
|
AbstractKotlinJpsBuildTestCase.addKotlinRuntimeDependency(myProject!!)
|
||||||
|
|
||||||
buildGetLog()
|
buildGetLog()
|
||||||
|
|
||||||
|
|||||||
@@ -7,3 +7,6 @@ fun foo() {
|
|||||||
|
|
||||||
fun baz() {
|
fun baz() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val prop1 = ""
|
||||||
|
val prop2 = prop1
|
||||||
|
|||||||
@@ -7,3 +7,6 @@ fun foo() {
|
|||||||
|
|
||||||
fun baz() {
|
fun baz() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val prop1 = ""
|
||||||
|
val prop2 = prop1
|
||||||
|
|||||||
@@ -1,9 +1,24 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
fun bar(i: Int): String {
|
fun bar(i: Int): String {
|
||||||
|
simpleVar = ":) " + simpleVar
|
||||||
|
|
||||||
return "$i ${quux()} $i"
|
return "$i ${quux()} $i"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun quux(): String {
|
fun quux(): String {
|
||||||
return "quux"
|
return "quux"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var simpleVar = prop1
|
||||||
|
|
||||||
|
var fieldlessVar: String
|
||||||
|
get() = ""
|
||||||
|
set(value) {}
|
||||||
|
|
||||||
|
deprecated("")
|
||||||
|
val fieldlessValWithAnnotation: String
|
||||||
|
get() = ""
|
||||||
|
|
||||||
|
var delegated: String by kotlin.properties.Delegates.notNull()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user