Make APIs available to lazy resolve

This commit is contained in:
Andrey Breslav
2012-05-30 20:57:03 +04:00
parent d95f315e24
commit ce96502f72
@@ -99,21 +99,32 @@ public class DescriptorResolver {
trace.record(BindingContext.CLASS, classElement, descriptor); 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<JetType> resolveSupertypes(@NotNull JetScope scope, @NotNull JetClassOrObject jetClass, BindingTrace trace) {
List<JetType> result = Lists.newArrayList();
List<JetDelegationSpecifier> delegationSpecifiers = jetClass.getDelegationSpecifiers(); List<JetDelegationSpecifier> delegationSpecifiers = jetClass.getDelegationSpecifiers();
if (delegationSpecifiers.isEmpty()) { if (delegationSpecifiers.isEmpty()) {
descriptor.addSupertype(getDefaultSupertype(jetClass, trace)); result.add(getDefaultSupertype(jetClass, trace));
} }
else { else {
Collection<JetType> supertypes = resolveDelegationSpecifiers( Collection<JetType> supertypes = resolveDelegationSpecifiers(
descriptor.getScopeForSupertypeResolution(), scope,
delegationSpecifiers, delegationSpecifiers,
typeResolver, trace, false); typeResolver, trace, false);
for (JetType supertype : supertypes) { for (JetType supertype : supertypes) {
descriptor.addSupertype(supertype); result.add(supertype);
} }
} }
return result;
} }
private JetType getDefaultSupertype(JetClassOrObject jetClass, BindingTrace trace) { private JetType getDefaultSupertype(JetClassOrObject jetClass, BindingTrace trace) {
@@ -235,7 +246,7 @@ public class DescriptorResolver {
return functionDescriptor; return functionDescriptor;
} }
private Modality getDefaultModality(DeclarationDescriptor containingDescriptor, boolean isBodyPresent) { public static Modality getDefaultModality(DeclarationDescriptor containingDescriptor, boolean isBodyPresent) {
Modality defaultModality; Modality defaultModality;
if (containingDescriptor instanceof ClassDescriptor) { if (containingDescriptor instanceof ClassDescriptor) {
boolean isTrait = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT; boolean isTrait = ((ClassDescriptor) containingDescriptor).getKind() == ClassKind.TRAIT;
@@ -674,7 +685,7 @@ public class DescriptorResolver {
} }
@NotNull @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; if (modifierList == null) return defaultModality;
boolean hasAbstractModifier = modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD); boolean hasAbstractModifier = modifierList.hasModifier(JetTokens.ABSTRACT_KEYWORD);
boolean hasOverrideModifier = modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD); boolean hasOverrideModifier = modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD);
@@ -699,7 +710,7 @@ public class DescriptorResolver {
} }
@NotNull @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; Visibility defaultVisibility = modifierList != null && modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD) ? Visibilities.INHERITED : Visibilities.INTERNAL;
return resolveVisibilityFromModifiers(modifierList, defaultVisibility); return resolveVisibilityFromModifiers(modifierList, defaultVisibility);
} }