diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractJetType.java b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractJetType.java index a1afd0e23b9..b9d6679a6c7 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/AbstractJetType.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/AbstractJetType.java @@ -29,7 +29,13 @@ public abstract class AbstractJetType implements JetType { @Nullable @Override public T getCapability(@NotNull Class capabilityClass) { - return null; + return getCapabilities().getCapability(capabilityClass); + } + + @NotNull + @Override + public TypeCapabilities getCapabilities() { + return TypeCapabilities.NONE.INSTANCE$; } @Override diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/DelegatingType.java b/core/descriptors/src/org/jetbrains/kotlin/types/DelegatingType.java index 7bd852289ea..9a5db02f04c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/DelegatingType.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/DelegatingType.java @@ -73,6 +73,12 @@ public abstract class DelegatingType implements JetType { return getDelegate().getCapability(capabilityClass); } + @NotNull + @Override + public TypeCapabilities getCapabilities() { + return getDelegate().getCapabilities(); + } + @Override public int hashCode() { return getDelegate().hashCode(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index c19cf467a23..8e7ec802934 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -539,6 +539,12 @@ public class ErrorUtils { return null; } + @NotNull + @Override + public TypeCapabilities getCapabilities() { + return TypeCapabilities.NONE.INSTANCE$; + } + @Override public String toString() { return constructor.toString() + (arguments.isEmpty() ? "" : joinToString(arguments, ", ", "<", ">", -1, "...", null)); diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/JetType.java b/core/descriptors/src/org/jetbrains/kotlin/types/JetType.java index 08b32dd4a1f..c7e1ee24c98 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/JetType.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/JetType.java @@ -52,4 +52,7 @@ public interface JetType extends Annotated { @KotlinSignature("fun getCapability(capabilityClass: Class): T?") @Nullable T getCapability(@NotNull Class capabilityClass); + + @NotNull + TypeCapabilities getCapabilities(); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeCapabilities.kt b/core/descriptors/src/org/jetbrains/kotlin/types/TypeCapabilities.kt index c3f53f4bfd4..2312a079c1b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeCapabilities.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeCapabilities.kt @@ -20,6 +20,13 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor public interface TypeCapability +public interface TypeCapabilities { + object NONE : TypeCapabilities { + override fun getCapability(capabilityClass: Class): T? = null + } + + fun getCapability(capabilityClass: Class): T? +} public interface Specificity : TypeCapability { public enum class Relation { diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java index 31fe2e03c15..88200e47d0d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/TypeUtils.java @@ -99,6 +99,12 @@ public class TypeUtils { return null; } + @NotNull + @Override + public TypeCapabilities getCapabilities() { + return TypeCapabilities.NONE.INSTANCE$; + } + @Override public String toString() { return name; @@ -798,6 +804,18 @@ public class TypeUtils { public TypeSubstitution getSubstitution() { return delegate.getSubstitution(); } + + @Nullable + @Override + public T getCapability(@NotNull Class capabilityClass) { + return delegate.getCapability(capabilityClass); + } + + @NotNull + @Override + public TypeCapabilities getCapabilities() { + return delegate.getCapabilities(); + } } private static class NullableType extends AbstractTypeWithKnownNullability {