Basic completion within secondary constructors

body and delegation call
This commit is contained in:
Denis Zharkov
2015-02-13 13:05:20 +03:00
parent 7d963e8e07
commit 50c8c6f68b
9 changed files with 130 additions and 8 deletions
@@ -77,6 +77,7 @@ public abstract class ElementResolver {
jetElement,
JetNamedFunction.class,
JetClassInitializer.class,
JetSecondaryConstructor.class,
JetProperty.class,
JetParameter.class,
JetDelegationSpecifierList.class,
@@ -150,6 +151,9 @@ public abstract class ElementResolver {
else if (resolveElement instanceof JetClassInitializer) {
initializerAdditionalResolve(resolveSession, (JetClassInitializer) resolveElement, trace, file, statementFilter);
}
else if (resolveElement instanceof JetSecondaryConstructor) {
secondaryConstructorAdditionalResolve(resolveSession, (JetSecondaryConstructor) resolveElement, trace, file, statementFilter);
}
else if (resolveElement instanceof JetProperty) {
propertyAdditionalResolve(resolveSession, (JetProperty) resolveElement, trace, file, statementFilter);
}
@@ -405,6 +409,21 @@ public abstract class ElementResolver {
bodyResolver.resolveFunctionBody(createEmptyContext(resolveSession), trace, namedFunction, functionDescriptor, scope);
}
private void secondaryConstructorAdditionalResolve(
ResolveSession resolveSession,
JetSecondaryConstructor constructor,
BindingTrace trace,
JetFile file,
@NotNull StatementFilter statementFilter
) {
JetScope scope = resolveSession.getScopeProvider().getResolutionScopeForDeclaration(constructor);
ConstructorDescriptor constructorDescriptor = (ConstructorDescriptor) resolveSession.resolveToDescriptor(constructor);
ForceResolveUtil.forceResolveAllContents(constructorDescriptor);
BodyResolver bodyResolver = createBodyResolver(resolveSession, trace, file, statementFilter);
bodyResolver.resolveSecondaryConstructorBody(createEmptyContext(resolveSession), trace, constructor, constructorDescriptor, scope);
}
private void constructorAdditionalResolve(
ResolveSession resolveSession,
JetClass klass,