From 903744931303609142638415bf19760809a8568c Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Thu, 21 Nov 2013 12:59:24 +0400 Subject: [PATCH] Inline flag calculation through inline annotation --- .../AccessorForFunctionDescriptor.java | 3 +-- .../jet/codegen/ClassBodyCodegen.java | 2 +- .../jetbrains/jet/codegen/CodegenUtil.java | 3 +-- .../jet/codegen/NamespacePartCodegen.java | 2 +- .../serialization/DescriptorDeserializer.java | 4 +--- .../jet/lang/resolve/DescriptorResolver.java | 12 ++++------ .../ClosureExpressionsTypingVisitor.java | 3 +-- .../ControlStructureTypingUtils.java | 3 +-- compiler/testData/cli/jvm/wrongAbiVersion.out | 4 ++-- .../loadKotlin/inline/inlineFunction.kt | 9 +++++++ .../loadKotlin/inline/inlineFunction.txt | 6 +++++ .../LoadCompiledKotlinTestGenerated.java | 16 ++++++++++++- ...esolveNamespaceComparingTestGenerated.java | 16 ++++++++++++- .../jet/lang/resolve/java/JvmAbi.java | 2 +- .../java/resolver/JavaFunctionResolver.java | 4 ++-- .../java/sam/SingleAbstractMethodUtils.java | 6 ++--- .../impl/SimpleFunctionDescriptorImpl.java | 24 +++++++++++++------ .../jet/lang/resolve/DescriptorFactory.java | 4 ++-- .../jetbrains/jet/lang/types/ErrorUtils.java | 3 +-- 19 files changed, 83 insertions(+), 43 deletions(-) create mode 100644 compiler/testData/loadKotlin/inline/inlineFunction.kt create mode 100644 compiler/testData/loadKotlin/inline/inlineFunction.txt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java index 15baab745f7..be1ac519d9d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java @@ -45,8 +45,7 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl copyValueParameters(descriptor), descriptor.getReturnType(), Modality.FINAL, - Visibilities.INTERNAL, - /*isInline = */ false); + Visibilities.INTERNAL); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 5afe5359c37..9b0f68bb72a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -184,7 +184,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen { Name.special(""), CallableMemberDescriptor.Kind.SYNTHESIZED); clInit.initialize(null, null, Collections.emptyList(), - Collections.emptyList(), null, null, Visibilities.PRIVATE, false); + Collections.emptyList(), null, null, Visibilities.PRIVATE); clInitCodegen = new ExpressionCodegen(method, new FrameMap(), Type.VOID_TYPE, context.intoFunction(clInit), state, this); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index ee07d646877..022243e5504 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -82,8 +82,7 @@ public class CodegenUtil { fd.getValueParameters(), fd.getReturnType(), Modality.FINAL, - Visibilities.PUBLIC, - /*isInline = */false + Visibilities.PUBLIC ); return invokeDescriptor; } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/NamespacePartCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/NamespacePartCodegen.java index 50be7490075..b4b66492822 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/NamespacePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/NamespacePartCodegen.java @@ -112,7 +112,7 @@ public class NamespacePartCodegen extends MemberCodegen { Name.special(""), CallableMemberDescriptor.Kind.SYNTHESIZED); clInit.initialize(null, null, Collections.emptyList(), - Collections.emptyList(), null, null, Visibilities.PRIVATE, false); + Collections.emptyList(), null, null, Visibilities.PRIVATE); ExpressionCodegen codegen = new ExpressionCodegen(mv, frameMap, Type.VOID_TYPE, this.context.intoFunction(clInit), state, this); diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java index 64bb425799b..9f5c43b25b9 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java @@ -241,9 +241,7 @@ public class DescriptorDeserializer { local.valueParameters(proto, AnnotatedCallableKind.FUNCTION), local.typeDeserializer.type(proto.getReturnType()), modality(Flags.MODALITY.get(flags)), - visibility(Flags.VISIBILITY.get(flags)), - Flags.INLINE.get(flags) - + visibility(Flags.VISIBILITY.get(flags)) ); return function; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index cbffe636710..2231db3e243 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -340,8 +340,6 @@ public class DescriptorResolver { boolean hasBody = function.getBodyExpression() != null; Modality modality = resolveModalityFromModifiers(function, getDefaultModality(containingDescriptor, hasBody)); Visibility visibility = resolveVisibilityFromModifiers(function, getDefaultVisibility(function, containingDescriptor)); - JetModifierList modifierList = function.getModifierList(); - boolean isInline = KotlinBuiltIns.getInstance().getInlineType(functionDescriptor) != InlineStrategy.NOT_INLINE; functionDescriptor.initialize( receiverType, getExpectedThisObjectIfNeeded(containingDescriptor), @@ -349,8 +347,8 @@ public class DescriptorResolver { valueParameterDescriptors, returnType, modality, - visibility, - isInline); + visibility + ); BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, function, functionDescriptor); return functionDescriptor; @@ -381,8 +379,7 @@ public class DescriptorResolver { Collections.emptyList(), returnType, Modality.FINAL, - property.getVisibility(), - true + property.getVisibility() ); trace.record(BindingContext.DATA_CLASS_COMPONENT_FUNCTION, parameter, functionDescriptor); @@ -429,8 +426,7 @@ public class DescriptorResolver { parameterDescriptors, returnType, Modality.FINAL, - classDescriptor.getVisibility(), - true + classDescriptor.getVisibility() ); trace.record(BindingContext.DATA_CLASS_COPY_FUNCTION, classDescriptor, functionDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index a32b60a38b6..77d001b0407 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -198,8 +198,7 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { valueParameterDescriptors, /*unsubstitutedReturnType = */ null, Modality.FINAL, - Visibilities.LOCAL, - /*isInline = */ false + Visibilities.LOCAL ); BindingContextUtils.recordFunctionDeclarationToDescriptor(context.trace, functionLiteral, functionDescriptor); return functionDescriptor; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java index f763f60442e..be8edf9e94d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java @@ -119,8 +119,7 @@ public class ControlStructureTypingUtils { valueParameters, type, Modality.FINAL, - Visibilities.PUBLIC, - /*isInline = */ false + Visibilities.PUBLIC ); return function; } diff --git a/compiler/testData/cli/jvm/wrongAbiVersion.out b/compiler/testData/cli/jvm/wrongAbiVersion.out index ca19062111a..615318f20b3 100644 --- a/compiler/testData/cli/jvm/wrongAbiVersion.out +++ b/compiler/testData/cli/jvm/wrongAbiVersion.out @@ -1,5 +1,5 @@ WARNING: $TESTDATA_DIR$/wrongAbiVersion.kt: (3, 9) Parameter 'x' is never used ERROR: $TESTDATA_DIR$/wrongAbiVersion.kt: (4, 3) Unresolved reference: bar -ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/wrong/WrongPackage.class: (0, 0) Class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 11 -ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/ClassWithWrongAbiVersion.class: (0, 0) Class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 11 +ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/wrong/WrongPackage.class: (0, 0) Class 'wrong/WrongPackage' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 12 +ERROR: $TESTDATA_DIR$/wrongAbiVersionLib/ClassWithWrongAbiVersion.class: (0, 0) Class 'ClassWithWrongAbiVersion' was compiled with an incompatible version of Kotlin. Its ABI version is -1, expected ABI version is 12 COMPILATION_ERROR diff --git a/compiler/testData/loadKotlin/inline/inlineFunction.kt b/compiler/testData/loadKotlin/inline/inlineFunction.kt new file mode 100644 index 00000000000..c8c0925c0bd --- /dev/null +++ b/compiler/testData/loadKotlin/inline/inlineFunction.kt @@ -0,0 +1,9 @@ +package test + +inline fun a() {} + +inline(InlineStrategy.AS_FUNCTION) fun b() {} + +inline(InlineStrategy.IN_PLACE) fun c() {} + +inline(strategy = InlineStrategy.IN_PLACE) fun d() {} \ No newline at end of file diff --git a/compiler/testData/loadKotlin/inline/inlineFunction.txt b/compiler/testData/loadKotlin/inline/inlineFunction.txt new file mode 100644 index 00000000000..0a8407593ec --- /dev/null +++ b/compiler/testData/loadKotlin/inline/inlineFunction.txt @@ -0,0 +1,6 @@ +package test + +jet.inline() internal fun a(): jet.Unit +jet.inline(strategy = InlineStrategy.AS_FUNCTION: jet.InlineStrategy) internal fun b(): jet.Unit +jet.inline(strategy = InlineStrategy.IN_PLACE: jet.InlineStrategy) internal fun c(): jet.Unit +jet.inline(strategy = InlineStrategy.IN_PLACE: jet.InlineStrategy) internal fun d(): jet.Unit diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java index 65f29e004dd..c85406a9e51 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadCompiledKotlinTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.jvm.compiler.AbstractLoadCompiledKotlinTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/loadKotlin") -@InnerTestClasses({LoadCompiledKotlinTestGenerated.Annotations.class, LoadCompiledKotlinTestGenerated.Class.class, LoadCompiledKotlinTestGenerated.ClassFun.class, LoadCompiledKotlinTestGenerated.ClassObject.class, LoadCompiledKotlinTestGenerated.Constructor.class, LoadCompiledKotlinTestGenerated.DataClass.class, LoadCompiledKotlinTestGenerated.Fun.class, LoadCompiledKotlinTestGenerated.Prop.class, LoadCompiledKotlinTestGenerated.Type.class, LoadCompiledKotlinTestGenerated.Visibility.class}) +@InnerTestClasses({LoadCompiledKotlinTestGenerated.Annotations.class, LoadCompiledKotlinTestGenerated.Class.class, LoadCompiledKotlinTestGenerated.ClassFun.class, LoadCompiledKotlinTestGenerated.ClassObject.class, LoadCompiledKotlinTestGenerated.Constructor.class, LoadCompiledKotlinTestGenerated.DataClass.class, LoadCompiledKotlinTestGenerated.Fun.class, LoadCompiledKotlinTestGenerated.Inline.class, LoadCompiledKotlinTestGenerated.Prop.class, LoadCompiledKotlinTestGenerated.Type.class, LoadCompiledKotlinTestGenerated.Visibility.class}) public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinTest { public void testAllFilesPresentInLoadKotlin() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/loadKotlin"), Pattern.compile("^(.+)\\.kt$"), true); @@ -981,6 +981,19 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT } } + @TestMetadata("compiler/testData/loadKotlin/inline") + public static class Inline extends AbstractLoadCompiledKotlinTest { + public void testAllFilesPresentInInline() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/loadKotlin/inline"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("inlineFunction.kt") + public void testInlineFunction() throws Exception { + doTestWithAccessors("compiler/testData/loadKotlin/inline/inlineFunction.kt"); + } + + } + @TestMetadata("compiler/testData/loadKotlin/prop") @InnerTestClasses({Prop.DefaultAccessors.class}) public static class Prop extends AbstractLoadCompiledKotlinTest { @@ -1435,6 +1448,7 @@ public class LoadCompiledKotlinTestGenerated extends AbstractLoadCompiledKotlinT suite.addTest(Constructor.innerSuite()); suite.addTestSuite(DataClass.class); suite.addTest(Fun.innerSuite()); + suite.addTestSuite(Inline.class); suite.addTest(Prop.innerSuite()); suite.addTestSuite(Type.class); suite.addTestSuite(Visibility.class); diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java index f2ae81447da..1aa07a935a1 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveNamespaceComparingTestGenerated.java @@ -33,7 +33,7 @@ import org.jetbrains.jet.lang.resolve.lazy.AbstractLazyResolveNamespaceComparing @InnerTestClasses({LazyResolveNamespaceComparingTestGenerated.LoadKotlin.class, LazyResolveNamespaceComparingTestGenerated.CompiledJavaCompareWithKotlin.class, LazyResolveNamespaceComparingTestGenerated.NamespaceComparator.class}) public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyResolveNamespaceComparingTest { @TestMetadata("compiler/testData/loadKotlin") - @InnerTestClasses({LoadKotlin.Annotations.class, LoadKotlin.Class.class, LoadKotlin.ClassFun.class, LoadKotlin.ClassObject.class, LoadKotlin.Constructor.class, LoadKotlin.DataClass.class, LoadKotlin.Fun.class, LoadKotlin.Prop.class, LoadKotlin.Type.class, LoadKotlin.Visibility.class}) + @InnerTestClasses({LoadKotlin.Annotations.class, LoadKotlin.Class.class, LoadKotlin.ClassFun.class, LoadKotlin.ClassObject.class, LoadKotlin.Constructor.class, LoadKotlin.DataClass.class, LoadKotlin.Fun.class, LoadKotlin.Inline.class, LoadKotlin.Prop.class, LoadKotlin.Type.class, LoadKotlin.Visibility.class}) public static class LoadKotlin extends AbstractLazyResolveNamespaceComparingTest { public void testAllFilesPresentInLoadKotlin() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/loadKotlin"), Pattern.compile("^(.+)\\.kt$"), true); @@ -983,6 +983,19 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso } } + @TestMetadata("compiler/testData/loadKotlin/inline") + public static class Inline extends AbstractLazyResolveNamespaceComparingTest { + public void testAllFilesPresentInInline() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/loadKotlin/inline"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("inlineFunction.kt") + public void testInlineFunction() throws Exception { + doTestCheckingPrimaryConstructorsAndAccessors("compiler/testData/loadKotlin/inline/inlineFunction.kt"); + } + + } + @TestMetadata("compiler/testData/loadKotlin/prop") @InnerTestClasses({Prop.DefaultAccessors.class}) public static class Prop extends AbstractLazyResolveNamespaceComparingTest { @@ -1437,6 +1450,7 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso suite.addTest(Constructor.innerSuite()); suite.addTestSuite(DataClass.class); suite.addTest(Fun.innerSuite()); + suite.addTestSuite(Inline.class); suite.addTest(Prop.innerSuite()); suite.addTestSuite(Type.class); suite.addTestSuite(Visibility.class); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java index df313193879..895fd2df6c2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAbi.java @@ -28,7 +28,7 @@ public final 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 = 11; + public static final int VERSION = 12; public static final String TRAIT_IMPL_CLASS_NAME = "$TImpl"; public static final String TRAIT_IMPL_SUFFIX = "$" + TRAIT_IMPL_CLASS_NAME; diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java index 0059db9e2dd..358b1b12669 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaFunctionResolver.java @@ -169,8 +169,8 @@ public final class JavaFunctionResolver { effectiveSignature.getValueParameters(), effectiveSignature.getReturnType(), Modality.convertFromFlags(method.isAbstract(), !method.isFinal()), - method.getVisibility(), - /*isInline = */ false + method.getVisibility() + /*TODO what if user annotate it with inline?*/ ); if (record) { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java index c95317d4586..c6013a3ad57 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SingleAbstractMethodUtils.java @@ -161,8 +161,7 @@ public class SingleAbstractMethodUtils { Arrays.asList(parameter), returnType, Modality.FINAL, - samInterface.getVisibility(), - false + samInterface.getVisibility() ); return result; @@ -198,8 +197,7 @@ public class SingleAbstractMethodUtils { valueParameters, returnType, Modality.FINAL, - original.getVisibility(), - false + original.getVisibility() ); } }); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java index 0061646f302..d56f960c95e 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java @@ -23,12 +23,14 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeSubstitutor; +import org.jetbrains.jet.lang.types.lang.InlineStrategy; +import org.jetbrains.jet.lang.types.lang.InlineUtil; import java.util.List; public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl implements SimpleFunctionDescriptor { - private boolean isInline = false; + private InlineStrategy inlineStrategy; public SimpleFunctionDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @@ -48,6 +50,9 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme super(containingDeclaration, original, annotations, name, kind); } + + @NotNull + @Override public SimpleFunctionDescriptorImpl initialize( @Nullable JetType receiverParameterType, @Nullable ReceiverParameterDescriptor expectedThisObject, @@ -55,10 +60,11 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @NotNull List unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, @Nullable Modality modality, - @NotNull Visibility visibility, - boolean isInline) { - super.initialize(receiverParameterType, expectedThisObject, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality, visibility); - this.isInline = isInline; + @NotNull Visibility visibility + ) { + super.initialize(receiverParameterType, expectedThisObject, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, + modality, visibility); + this.inlineStrategy = InlineUtil.getInlineType(getAnnotations()); return this; } @@ -93,12 +99,16 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @Override public SimpleFunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) { SimpleFunctionDescriptorImpl copy = (SimpleFunctionDescriptorImpl)doSubstitute(TypeSubstitutor.EMPTY, newOwner, modality, visibility, false, copyOverrides, kind); - copy.isInline = isInline; return copy; } @Override public boolean isInline() { - return isInline; + return getInlineStrategy() != InlineStrategy.NOT_INLINE; + } + + @NotNull + public InlineStrategy getInlineStrategy() { + return inlineStrategy; } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java index efe8d0e4253..0a2bcea0dbe 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java @@ -87,7 +87,7 @@ public class DescriptorFactory { return values.initialize(null, classObject.getThisAsReceiverParameter(), Collections.emptyList(), Collections.emptyList(), returnType, Modality.FINAL, - Visibilities.PUBLIC, false); + Visibilities.PUBLIC); } @NotNull @@ -110,7 +110,7 @@ public class DescriptorFactory { Collections.emptyList(), Collections.singletonList(parameterDescriptor), returnType, Modality.FINAL, - Visibilities.PUBLIC, false); + Visibilities.PUBLIC); } @Nullable diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java index 559ba5b6d9a..5675be78067 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/ErrorUtils.java @@ -291,8 +291,7 @@ public class ErrorUtils { Collections.emptyList(), // TODO createErrorType(""), Modality.OPEN, - Visibilities.INTERNAL, - /*isInline = */ false + Visibilities.INTERNAL ); return function; }