Inline flag calculation through inline annotation
This commit is contained in:
@@ -45,8 +45,7 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl
|
||||
copyValueParameters(descriptor),
|
||||
descriptor.getReturnType(),
|
||||
Modality.FINAL,
|
||||
Visibilities.INTERNAL,
|
||||
/*isInline = */ false);
|
||||
Visibilities.INTERNAL);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -184,7 +184,7 @@ public abstract class ClassBodyCodegen extends MemberCodegen {
|
||||
Name.special("<clinit>"),
|
||||
CallableMemberDescriptor.Kind.SYNTHESIZED);
|
||||
clInit.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(), null, null, Visibilities.PRIVATE, false);
|
||||
Collections.<ValueParameterDescriptor>emptyList(), null, null, Visibilities.PRIVATE);
|
||||
|
||||
clInitCodegen = new ExpressionCodegen(method, new FrameMap(), Type.VOID_TYPE, context.intoFunction(clInit), state, this);
|
||||
}
|
||||
|
||||
@@ -82,8 +82,7 @@ public class CodegenUtil {
|
||||
fd.getValueParameters(),
|
||||
fd.getReturnType(),
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC,
|
||||
/*isInline = */false
|
||||
Visibilities.PUBLIC
|
||||
);
|
||||
return invokeDescriptor;
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ public class NamespacePartCodegen extends MemberCodegen {
|
||||
Name.special("<clinit>"),
|
||||
CallableMemberDescriptor.Kind.SYNTHESIZED);
|
||||
clInit.initialize(null, null, Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(), null, null, Visibilities.PRIVATE, false);
|
||||
Collections.<ValueParameterDescriptor>emptyList(), null, null, Visibilities.PRIVATE);
|
||||
|
||||
ExpressionCodegen codegen = new ExpressionCodegen(mv, frameMap, Type.VOID_TYPE, this.context.intoFunction(clInit), state, this);
|
||||
|
||||
|
||||
+1
-3
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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.<ValueParameterDescriptor>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);
|
||||
|
||||
+1
-2
@@ -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;
|
||||
|
||||
+1
-2
@@ -119,8 +119,7 @@ public class ControlStructureTypingUtils {
|
||||
valueParameters,
|
||||
type,
|
||||
Modality.FINAL,
|
||||
Visibilities.PUBLIC,
|
||||
/*isInline = */ false
|
||||
Visibilities.PUBLIC
|
||||
);
|
||||
return function;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {}
|
||||
@@ -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
|
||||
@@ -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);
|
||||
|
||||
+15
-1
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
+2
-4
@@ -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()
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
+17
-7
@@ -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<ValueParameterDescriptor> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public class DescriptorFactory {
|
||||
return values.initialize(null, classObject.getThisAsReceiverParameter(), Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.<ValueParameterDescriptor>emptyList(),
|
||||
returnType, Modality.FINAL,
|
||||
Visibilities.PUBLIC, false);
|
||||
Visibilities.PUBLIC);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -110,7 +110,7 @@ public class DescriptorFactory {
|
||||
Collections.<TypeParameterDescriptor>emptyList(),
|
||||
Collections.singletonList(parameterDescriptor),
|
||||
returnType, Modality.FINAL,
|
||||
Visibilities.PUBLIC, false);
|
||||
Visibilities.PUBLIC);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -291,8 +291,7 @@ public class ErrorUtils {
|
||||
Collections.<ValueParameterDescriptor>emptyList(), // TODO
|
||||
createErrorType("<ERROR FUNCTION RETURN TYPE>"),
|
||||
Modality.OPEN,
|
||||
Visibilities.INTERNAL,
|
||||
/*isInline = */ false
|
||||
Visibilities.INTERNAL
|
||||
);
|
||||
return function;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user