Inline flag calculation through inline annotation

This commit is contained in:
Mikhael Bogdanov
2013-11-21 12:59:24 +04:00
parent fd4816aa36
commit 9037449313
19 changed files with 83 additions and 43 deletions
@@ -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;
@@ -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) {
@@ -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()
);
}
});
@@ -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;
}