Introduce TypeCapabilities concept
It encapsulates special features of type like custom substitution.
This commit is contained in:
@@ -29,7 +29,13 @@ public abstract class AbstractJetType implements JetType {
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public <T extends TypeCapability> T getCapability(@NotNull Class<T> capabilityClass) {
|
public <T extends TypeCapability> T getCapability(@NotNull Class<T> capabilityClass) {
|
||||||
return null;
|
return getCapabilities().getCapability(capabilityClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public TypeCapabilities getCapabilities() {
|
||||||
|
return TypeCapabilities.NONE.INSTANCE$;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -73,6 +73,12 @@ public abstract class DelegatingType implements JetType {
|
|||||||
return getDelegate().getCapability(capabilityClass);
|
return getDelegate().getCapability(capabilityClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public TypeCapabilities getCapabilities() {
|
||||||
|
return getDelegate().getCapabilities();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return getDelegate().hashCode();
|
return getDelegate().hashCode();
|
||||||
|
|||||||
@@ -539,6 +539,12 @@ public class ErrorUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public TypeCapabilities getCapabilities() {
|
||||||
|
return TypeCapabilities.NONE.INSTANCE$;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return constructor.toString() + (arguments.isEmpty() ? "" : joinToString(arguments, ", ", "<", ">", -1, "...", null));
|
return constructor.toString() + (arguments.isEmpty() ? "" : joinToString(arguments, ", ", "<", ">", -1, "...", null));
|
||||||
|
|||||||
@@ -52,4 +52,7 @@ public interface JetType extends Annotated {
|
|||||||
@KotlinSignature("fun <T : TypeCapability> getCapability(capabilityClass: Class<T>): T?")
|
@KotlinSignature("fun <T : TypeCapability> getCapability(capabilityClass: Class<T>): T?")
|
||||||
@Nullable
|
@Nullable
|
||||||
<T extends TypeCapability> T getCapability(@NotNull Class<T> capabilityClass);
|
<T extends TypeCapability> T getCapability(@NotNull Class<T> capabilityClass);
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
TypeCapabilities getCapabilities();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,13 @@ import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
|||||||
|
|
||||||
public interface TypeCapability
|
public interface TypeCapability
|
||||||
|
|
||||||
|
public interface TypeCapabilities {
|
||||||
|
object NONE : TypeCapabilities {
|
||||||
|
override fun <T : TypeCapability> getCapability(capabilityClass: Class<T>): T? = null
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T : TypeCapability> getCapability(capabilityClass: Class<T>): T?
|
||||||
|
}
|
||||||
public interface Specificity : TypeCapability {
|
public interface Specificity : TypeCapability {
|
||||||
|
|
||||||
public enum class Relation {
|
public enum class Relation {
|
||||||
|
|||||||
@@ -99,6 +99,12 @@ public class TypeUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public TypeCapabilities getCapabilities() {
|
||||||
|
return TypeCapabilities.NONE.INSTANCE$;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return name;
|
return name;
|
||||||
@@ -798,6 +804,18 @@ public class TypeUtils {
|
|||||||
public TypeSubstitution getSubstitution() {
|
public TypeSubstitution getSubstitution() {
|
||||||
return delegate.getSubstitution();
|
return delegate.getSubstitution();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <T extends TypeCapability> T getCapability(@NotNull Class<T> capabilityClass) {
|
||||||
|
return delegate.getCapability(capabilityClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public TypeCapabilities getCapabilities() {
|
||||||
|
return delegate.getCapabilities();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class NullableType extends AbstractTypeWithKnownNullability {
|
private static class NullableType extends AbstractTypeWithKnownNullability {
|
||||||
|
|||||||
Reference in New Issue
Block a user