From 97b7768890eb7fc7d731500ad140b7f63235dbaa Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 23 Jun 2014 15:39:46 +0400 Subject: [PATCH] JetTypeChecker refactored: duplicate methods replaced by instance management --- .../jet/lang/resolve/OverridingUtil.java | 4 +- .../lang/types/checker/JetTypeChecker.java | 40 ++++++++----------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java index 942ddd72841..09c3abc67a9 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/OverridingUtil.java @@ -165,7 +165,7 @@ public class OverridingUtil { if (superReturnType != null && subReturnType != null) { boolean bothErrors = subReturnType.isError() && superReturnType.isError(); - if (!bothErrors && !JetTypeChecker.DEFAULT.isSubtypeOf(subReturnType, superReturnType, localEqualityAxioms)) { + if (!bothErrors && !JetTypeChecker.withAxioms(localEqualityAxioms).isSubtypeOf(subReturnType, superReturnType)) { return OverrideCompatibilityInfo.returnTypeMismatch(superReturnType, subReturnType); } } @@ -203,7 +203,7 @@ public class OverridingUtil { @NotNull JetTypeChecker.TypeConstructorEquality axioms ) { boolean bothErrors = typeInSuper.isError() && typeInSub.isError(); - if (!bothErrors && !JetTypeChecker.DEFAULT.equalTypes(typeInSuper, typeInSub, axioms)) { + if (!bothErrors && !JetTypeChecker.withAxioms(axioms).equalTypes(typeInSuper, typeInSub)) { return false; } return true; diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/checker/JetTypeChecker.java b/core/descriptors/src/org/jetbrains/jet/lang/types/checker/JetTypeChecker.java index 7f52422fc7b..aaa4cc0a3b9 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/checker/JetTypeChecker.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/checker/JetTypeChecker.java @@ -22,39 +22,33 @@ import org.jetbrains.jet.lang.types.TypeConstructor; public class JetTypeChecker { - public static final JetTypeChecker DEFAULT = new JetTypeChecker(); public interface TypeConstructorEquality { boolean equals(@NotNull TypeConstructor a, @NotNull TypeConstructor b); } - private JetTypeChecker() { - } - - public boolean isSubtypeOf(@NotNull JetType subtype, @NotNull JetType supertype) { - return TYPE_CHECKER.isSubtypeOf(subtype, supertype); - } - - public boolean isSubtypeOf(@NotNull JetType subtype, @NotNull JetType supertype, @NotNull TypeConstructorEquality equalityAxioms) { - return createWithAxioms(equalityAxioms).isSubtypeOf(subtype, supertype); - } - - public boolean equalTypes(@NotNull JetType a, @NotNull JetType b) { - return TYPE_CHECKER.equalTypes(a, b); - } - - public boolean equalTypes(@NotNull JetType a, @NotNull JetType b, @NotNull TypeConstructorEquality equalityAxioms) { - return createWithAxioms(equalityAxioms).equalTypes(a, b); - } + public static final JetTypeChecker DEFAULT = new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerTypingConstraints())); @NotNull - private static TypeCheckingProcedure createWithAxioms(@NotNull final TypeConstructorEquality equalityAxioms) { - return new TypeCheckingProcedure(new TypeCheckerTypingConstraints() { + public static JetTypeChecker withAxioms(@NotNull final TypeConstructorEquality equalityAxioms) { + return new JetTypeChecker(new TypeCheckingProcedure(new TypeCheckerTypingConstraints() { @Override public boolean assertEqualTypeConstructors(@NotNull TypeConstructor constructor1, @NotNull TypeConstructor constructor2) { return constructor1.equals(constructor2) || equalityAxioms.equals(constructor1, constructor2); } - }); + })); } - private static final TypeCheckingProcedure TYPE_CHECKER = new TypeCheckingProcedure(new TypeCheckerTypingConstraints()); + private final TypeCheckingProcedure procedure; + + private JetTypeChecker(@NotNull TypeCheckingProcedure procedure) { + this.procedure = procedure; + } + + public boolean isSubtypeOf(@NotNull JetType subtype, @NotNull JetType supertype) { + return procedure.isSubtypeOf(subtype, supertype); + } + + public boolean equalTypes(@NotNull JetType a, @NotNull JetType b) { + return procedure.equalTypes(a, b); + } }