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