Support for inline in front-end. Add SimpleFunctionDescriptor#isInline.
This commit is contained in:
@@ -242,7 +242,8 @@ public abstract class CodegenContext {
|
||||
fd.getValueParameters(),
|
||||
fd.getReturnType(),
|
||||
fd.getModality(),
|
||||
fd.getVisibility());
|
||||
fd.getVisibility(),
|
||||
/*isInline = */ false);
|
||||
accessor = myAccessor;
|
||||
}
|
||||
else if(descriptor instanceof PropertyDescriptor) {
|
||||
|
||||
@@ -72,7 +72,10 @@ public class CodegenUtil {
|
||||
Collections.<TypeParameterDescriptor>emptyList(),
|
||||
fd.getValueParameters(),
|
||||
fd.getReturnType(),
|
||||
Modality.FINAL, Visibility.PUBLIC);
|
||||
Modality.FINAL,
|
||||
Visibility.PUBLIC,
|
||||
/*isInline = */false
|
||||
);
|
||||
return invokeDescriptor;
|
||||
}
|
||||
|
||||
|
||||
+2
-1
@@ -1518,7 +1518,8 @@ public class JavaDescriptorResolver {
|
||||
valueParameterDescriptors.descriptors,
|
||||
makeReturnType(returnType, method, methodTypeVariableResolver),
|
||||
Modality.convertFromFlags(method.getPsiMethod().hasModifierProperty(PsiModifier.ABSTRACT), !method.isFinal()),
|
||||
resolveVisibilityFromPsiModifiers(method.getPsiMethod())
|
||||
resolveVisibilityFromPsiModifiers(method.getPsiMethod()),
|
||||
/*isInline = */ false
|
||||
);
|
||||
trace.record(BindingContext.FUNCTION, method.getPsiMethod(), functionDescriptorImpl);
|
||||
FunctionDescriptor substitutedFunctionDescriptor = functionDescriptorImpl;
|
||||
|
||||
@@ -32,4 +32,6 @@ public interface SimpleFunctionDescriptor extends FunctionDescriptor {
|
||||
@NotNull
|
||||
@Override
|
||||
SimpleFunctionDescriptor getOriginal();
|
||||
|
||||
boolean isInline();
|
||||
}
|
||||
|
||||
+23
-4
@@ -31,6 +31,8 @@ import java.util.List;
|
||||
*/
|
||||
public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl implements SimpleFunctionDescriptor {
|
||||
|
||||
private boolean isInline = false;
|
||||
|
||||
public SimpleFunctionDescriptorImpl(
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@NotNull List<AnnotationDescriptor> annotations,
|
||||
@@ -48,9 +50,18 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
||||
super(containingDeclaration, original, annotations, name, kind);
|
||||
}
|
||||
|
||||
@Override
|
||||
public FunctionDescriptorImpl initialize(@Nullable JetType receiverType, @NotNull ReceiverDescriptor expectedThisObject, @NotNull List<TypeParameterDescriptor> typeParameters, @NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters, @Nullable JetType unsubstitutedReturnType, @Nullable Modality modality, @NotNull Visibility visibility) {
|
||||
return super.initialize(receiverType, expectedThisObject, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality, visibility);
|
||||
public SimpleFunctionDescriptorImpl initialize(@Nullable JetType receiverType,
|
||||
@NotNull ReceiverDescriptor expectedThisObject,
|
||||
@NotNull List<TypeParameterDescriptor> typeParameters,
|
||||
@NotNull List<ValueParameterDescriptor> unsubstitutedValueParameters,
|
||||
@Nullable JetType unsubstitutedReturnType,
|
||||
@Nullable Modality modality,
|
||||
@NotNull Visibility visibility,
|
||||
boolean isInline) {
|
||||
SimpleFunctionDescriptorImpl result = (SimpleFunctionDescriptorImpl)super.initialize(receiverType, expectedThisObject, typeParameters, unsubstitutedValueParameters,
|
||||
unsubstitutedReturnType, modality, visibility);
|
||||
result.isInline = isInline;
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -82,6 +93,14 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme
|
||||
@NotNull
|
||||
@Override
|
||||
public SimpleFunctionDescriptor copy(DeclarationDescriptor newOwner, boolean makeNonAbstract, Kind kind, boolean copyOverrides) {
|
||||
return (SimpleFunctionDescriptor) doSubstitute(TypeSubstitutor.EMPTY, newOwner, DescriptorUtils.convertModality(modality, makeNonAbstract), false, copyOverrides, kind);
|
||||
SimpleFunctionDescriptorImpl copy = (SimpleFunctionDescriptorImpl)doSubstitute(TypeSubstitutor.EMPTY, newOwner, DescriptorUtils
|
||||
.convertModality(modality, makeNonAbstract), false, copyOverrides, kind);
|
||||
copy.isInline = isInline;
|
||||
return copy;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInline() {
|
||||
return isInline;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +219,8 @@ public class DescriptorResolver {
|
||||
Modality defaultModality = getDefaultModality(containingDescriptor, hasBody);
|
||||
Modality modality = resolveModalityFromModifiers(function.getModifierList(), defaultModality);
|
||||
Visibility visibility = resolveVisibilityFromModifiers(function.getModifierList());
|
||||
JetModifierList modifierList = function.getModifierList();
|
||||
boolean isInline = (modifierList != null) && modifierList.hasModifier(JetTokens.INLINE_KEYWORD);
|
||||
functionDescriptor.initialize(
|
||||
receiverType,
|
||||
DescriptorUtils.getExpectedThisObjectIfNeeded(containingDescriptor),
|
||||
@@ -226,7 +228,8 @@ public class DescriptorResolver {
|
||||
valueParameterDescriptors,
|
||||
returnType,
|
||||
modality,
|
||||
visibility);
|
||||
visibility,
|
||||
isInline);
|
||||
|
||||
trace.record(BindingContext.FUNCTION, function, functionDescriptor);
|
||||
return functionDescriptor;
|
||||
|
||||
@@ -172,7 +172,8 @@ public class ErrorUtils {
|
||||
Collections.<ValueParameterDescriptor>emptyList(), // TODO
|
||||
createErrorType("<ERROR FUNCTION RETURN TYPE>"),
|
||||
Modality.OPEN,
|
||||
Visibility.INTERNAL
|
||||
Visibility.INTERNAL,
|
||||
/*isInline = */ false
|
||||
);
|
||||
return function;
|
||||
}
|
||||
|
||||
+9
-1
@@ -145,7 +145,15 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
|
||||
else {
|
||||
effectiveReceiverType = context.expressionTypingServices.getTypeResolver().resolveType(context.scope, receiverTypeRef, context.trace, true);
|
||||
}
|
||||
functionDescriptor.initialize(effectiveReceiverType, NO_RECEIVER, Collections.<TypeParameterDescriptor>emptyList(), valueParameterDescriptors, null, Modality.FINAL, Visibility.LOCAL);
|
||||
functionDescriptor.initialize(effectiveReceiverType,
|
||||
NO_RECEIVER,
|
||||
Collections.<TypeParameterDescriptor>emptyList(),
|
||||
valueParameterDescriptors,
|
||||
/*unsubstitutedReturnType = */ null,
|
||||
Modality.FINAL,
|
||||
Visibility.LOCAL,
|
||||
/*isInline = */ false
|
||||
);
|
||||
context.trace.record(BindingContext.FUNCTION, expression, functionDescriptor);
|
||||
return functionDescriptor;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user