From ce96502f721f173bc09c37864862db804f9cc78f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 30 May 2012 20:57:03 +0400 Subject: [PATCH] Make APIs available to lazy resolve --- .../jet/lang/resolve/DescriptorResolver.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 0c4ed63ac33..ca3f4ac14be 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -99,21 +99,32 @@ public class DescriptorResolver { trace.record(BindingContext.CLASS, classElement, descriptor); } - public void resolveSupertypes(@NotNull JetClassOrObject jetClass, @NotNull MutableClassDescriptor descriptor, BindingTrace trace) { + public void resolveSupertypesForMutableClassDescriptor( + @NotNull JetClassOrObject jetClass, + @NotNull MutableClassDescriptor descriptor, + BindingTrace trace + ) { + for (JetType supertype : resolveSupertypes(descriptor.getScopeForSupertypeResolution(), jetClass, trace)) { + descriptor.addSupertype(supertype); + } + } + + public List resolveSupertypes(@NotNull JetScope scope, @NotNull JetClassOrObject jetClass, BindingTrace trace) { + List result = Lists.newArrayList(); List delegationSpecifiers = jetClass.getDelegationSpecifiers(); if (delegationSpecifiers.isEmpty()) { - descriptor.addSupertype(getDefaultSupertype(jetClass, trace)); + result.add(getDefaultSupertype(jetClass, trace)); } else { Collection supertypes = resolveDelegationSpecifiers( - descriptor.getScopeForSupertypeResolution(), + scope, delegationSpecifiers, typeResolver, trace, false); for (JetType supertype : supertypes) { - descriptor.addSupertype(supertype); + result.add(supertype); } } - + return result; } private JetType getDefaultSupertype(JetClassOrObject jetClass, BindingTrace trace) { @@ -235,7 +246,7 @@ public class DescriptorResolver { return functionDescriptor; } - private Modality getDefaultModality(DeclarationDescriptor containingDescriptor, boolean isBodyPresent) { + public static Modality getDefaultModality(DeclarationDescriptor containingDescriptor, boolean isBodyPresent) { Modality defaultModality; if (containingDescriptor instanceof ClassDescriptor) { boolean isTrait = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT; @@ -674,7 +685,7 @@ public class DescriptorResolver { } @NotNull - /*package*/ static Modality resolveModalityFromModifiers(@Nullable JetModifierList modifierList, @NotNull Modality defaultModality) { + public static Modality resolveModalityFromModifiers(@Nullable JetModifierList modifierList, @NotNull Modality defaultModality) { if (modifierList == null) return defaultModality; boolean hasAbstractModifier = modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD); boolean hasOverrideModifier = modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD); @@ -699,7 +710,7 @@ public class DescriptorResolver { } @NotNull - /*package*/ static Visibility resolveVisibilityFromModifiers(@Nullable JetModifierList modifierList) { + public static Visibility resolveVisibilityFromModifiers(@Nullable JetModifierList modifierList) { Visibility defaultVisibility = modifierList != null && modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD) ? Visibilities.INHERITED : Visibilities.INTERNAL; return resolveVisibilityFromModifiers(modifierList, defaultVisibility); }