From 71071595fab207d2a36df945e3300acb9a59550e Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 18 Jul 2012 15:37:50 +0400 Subject: [PATCH] Pattern -> DescriptorPredicate, NameChecker -> NamePredicate. --- .../functions/FunctionIntrinsics.java | 2 +- .../functions/factories/ArrayFIF.java | 6 +- .../functions/factories/FIFBuilder.java | 24 ++++--- .../factories/FunctionIntrinsicFactory.java | 4 +- .../factories/NumberConversionFIF.java | 10 +-- .../PrimitiveBinaryOperationFIF.java | 16 ++--- .../factories/PrimitiveUnaryOperationFIF.java | 29 ++++---- .../factories/StringOperationFIF.java | 4 +- .../functions/factories/TopLevelFIF.java | 4 +- .../functions/factories/TupleGetterFIF.java | 14 ++-- ...{Pattern.java => DescriptorPredicate.java} | 9 +-- .../{NameChecker.java => NamePredicate.java} | 20 ++++-- .../functions/patterns/PatternBuilder.java | 66 ++++++------------- 13 files changed, 101 insertions(+), 107 deletions(-) rename js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/{Pattern.java => DescriptorPredicate.java} (76%) rename js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/{NameChecker.java => NamePredicate.java} (70%) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/FunctionIntrinsics.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/FunctionIntrinsics.java index e2178883a64..2b051fd60fb 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/FunctionIntrinsics.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/FunctionIntrinsics.java @@ -99,7 +99,7 @@ public final class FunctionIntrinsics { @NotNull private FunctionIntrinsic computeIntrinsic(@NotNull FunctionDescriptor descriptor) { for (FunctionIntrinsicFactory factory : factories) { - if (factory.getPattern().apply(descriptor)) { + if (factory.getPredicate().apply(descriptor)) { return factory.getIntrinsic(descriptor); } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java index 8df8c3e882a..12046aa6902 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/ArrayFIF.java @@ -28,7 +28,7 @@ import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.BuiltInPropertyIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.basic.CallStandardMethodIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import java.util.List; @@ -40,7 +40,7 @@ import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternB public final class ArrayFIF { @NotNull - private static final NameChecker ARRAYS; + private static final NamePredicate ARRAYS; static { List arrayTypeNames = Lists.newArrayList(); @@ -48,7 +48,7 @@ public final class ArrayFIF { arrayTypeNames.add(type.getArrayTypeName()); } arrayTypeNames.add(Name.identifier("Array")); - ARRAYS = new NameChecker(arrayTypeNames); + ARRAYS = new NamePredicate(arrayTypeNames); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FIFBuilder.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FIFBuilder.java index 795c0fe97db..17b97215845 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FIFBuilder.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FIFBuilder.java @@ -16,12 +16,14 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.Maps; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; import java.util.Collection; import java.util.Map; @@ -31,7 +33,7 @@ import java.util.Map; */ public final class FIFBuilder { - @NotNull final Map patternToIntrinsic = Maps.newHashMap(); + @NotNull final Map patternToIntrinsic = Maps.newHashMap(); private FIFBuilder() { } @@ -42,7 +44,7 @@ public final class FIFBuilder { } @NotNull - public FIFBuilder add(@NotNull Pattern pattern, @NotNull FunctionIntrinsic intrinsic) { + public FIFBuilder add(@NotNull DescriptorPredicate pattern, @NotNull FunctionIntrinsic intrinsic) { patternToIntrinsic.put(pattern, intrinsic); return this; } @@ -53,15 +55,21 @@ public final class FIFBuilder { @NotNull @Override - public Pattern getPattern() { - Collection patterns = patternToIntrinsic.keySet(); - return PatternBuilder.any(patterns.toArray(new Pattern[patterns.size()])); + public Predicate getPredicate() { + Collection patterns = patternToIntrinsic.keySet(); + final DescriptorPredicate[] patterns1 = patterns.toArray(new DescriptorPredicate[patterns.size()]); + return new DescriptorPredicate() { + @Override + public boolean apply(@Nullable FunctionDescriptor descriptor) { + return Predicates.or(patterns1).apply(descriptor); + } + }; } @NotNull @Override public FunctionIntrinsic getIntrinsic(@NotNull FunctionDescriptor descriptor) { - for (Pattern pattern : patternToIntrinsic.keySet()) { + for (DescriptorPredicate pattern : patternToIntrinsic.keySet()) { if (pattern.apply(descriptor)) { return patternToIntrinsic.get(pattern); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FunctionIntrinsicFactory.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FunctionIntrinsicFactory.java index e1887502598..39f20df18d6 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FunctionIntrinsicFactory.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/FunctionIntrinsicFactory.java @@ -16,10 +16,10 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; +import com.google.common.base.Predicate; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; /** * @author Pavel Talanov @@ -27,7 +27,7 @@ import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; public interface FunctionIntrinsicFactory { @NotNull - Pattern getPattern(); + Predicate getPredicate(); @NotNull FunctionIntrinsic getIntrinsic(@NotNull FunctionDescriptor descriptor); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java index bab0c14cd74..1aeaff36cdd 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/NumberConversionFIF.java @@ -25,7 +25,7 @@ import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.CallStandardMethodIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import java.util.List; import java.util.Set; @@ -38,21 +38,21 @@ import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternB */ public final class NumberConversionFIF { @NotNull - private static final NameChecker SUPPORTED_CONVERSIONS; + private static final NamePredicate SUPPORTED_CONVERSIONS; static { Set supportedConversions = Sets.newHashSet(NUMBER_CONVERSIONS); //TODO: support longs and chars supportedConversions.remove(CHAR); supportedConversions.remove(LONG); - SUPPORTED_CONVERSIONS = new NameChecker(supportedConversions); + SUPPORTED_CONVERSIONS = new NamePredicate(supportedConversions); } @NotNull - private static final NameChecker FLOATING_POINT_CONVERSIONS = new NameChecker(OperatorConventions.FLOAT, OperatorConventions.DOUBLE); + private static final NamePredicate FLOATING_POINT_CONVERSIONS = new NamePredicate(OperatorConventions.FLOAT, OperatorConventions.DOUBLE); @NotNull - private static final NameChecker INTEGER_CONVERSIONS = new NameChecker(OperatorConventions.INT, OperatorConventions.SHORT, + private static final NamePredicate INTEGER_CONVERSIONS = new NamePredicate(OperatorConventions.INT, OperatorConventions.SHORT, OperatorConventions.BYTE); @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java index 3474805e93f..13a2ffdad77 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveBinaryOperationFIF.java @@ -16,6 +16,8 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; @@ -26,9 +28,7 @@ import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import org.jetbrains.k2js.translate.operation.OperatorTable; import java.util.List; @@ -63,15 +63,15 @@ public enum PrimitiveBinaryOperationFIF implements FunctionIntrinsicFactory { } }; @NotNull - private static final NameChecker BINARY_OPERATIONS = new NameChecker(OperatorConventions.BINARY_OPERATION_NAMES.values()); + private static final NamePredicate BINARY_OPERATIONS = new NamePredicate(OperatorConventions.BINARY_OPERATION_NAMES.values()); @NotNull @Override - public Pattern getPattern() { + public Predicate getPredicate() { //TODO: check that it is binary operation - return PatternBuilder.any(pattern(NameChecker.PRIMITIVE_NUMBERS, BINARY_OPERATIONS), - pattern("Boolean.or|and|xor"), - pattern("String.plus")); + return Predicates.or(pattern(NamePredicate.PRIMITIVE_NUMBERS, BINARY_OPERATIONS), + pattern("Boolean.or|and|xor"), + pattern("String.plus")); } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java index b6a3ce9c37b..5f4b5c7ca5c 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/PrimitiveUnaryOperationFIF.java @@ -16,6 +16,8 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.backend.js.ast.JsPrefixOperation; import com.google.dart.compiler.backend.js.ast.JsUnaryOperator; @@ -27,15 +29,15 @@ import org.jetbrains.jet.lang.types.expressions.OperatorConventions; import org.jetbrains.jet.lexer.JetToken; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import org.jetbrains.k2js.translate.operation.OperatorTable; import org.jetbrains.k2js.translate.utils.JsDescriptorUtils; import java.util.List; -import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker.PRIMITIVE_NUMBERS; -import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.*; +import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate.PRIMITIVE_NUMBERS; +import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.pattern; /** * @author Pavel Talanov @@ -44,23 +46,28 @@ public enum PrimitiveUnaryOperationFIF implements FunctionIntrinsicFactory { INSTANCE; - private static final NameChecker UNARY_OPERATIONS = new NameChecker(OperatorConventions.UNARY_OPERATION_NAMES.values()); + private static final NamePredicate UNARY_OPERATIONS = new NamePredicate(OperatorConventions.UNARY_OPERATION_NAMES.values()); @NotNull - private static final Pattern UNARY_OPERATION_FOR_PRIMITIVE_NUMBER = + private static final DescriptorPredicate UNARY_OPERATION_FOR_PRIMITIVE_NUMBER = pattern(PRIMITIVE_NUMBERS, UNARY_OPERATIONS); @NotNull - private static final Pattern NO_PARAMETERS = new Pattern() { + public static final Predicate PRIMITIVE_UNARY_OPERATION_NAMES = + Predicates.or(UNARY_OPERATION_FOR_PRIMITIVE_NUMBER, pattern("Boolean.not")); + @NotNull + private static final DescriptorPredicate NO_PARAMETERS = new DescriptorPredicate() { @Override - public boolean apply(@NotNull FunctionDescriptor descriptor) { + public boolean apply(@Nullable FunctionDescriptor descriptor) { + assert descriptor != null; return !JsDescriptorUtils.hasParameters(descriptor); } }; + @NotNull + public static final Predicate PATTERN = Predicates.and(PRIMITIVE_UNARY_OPERATION_NAMES, NO_PARAMETERS); @NotNull @Override - public Pattern getPattern() { - Pattern primitiveUnaryOperationNames = any(UNARY_OPERATION_FOR_PRIMITIVE_NUMBER, pattern("Boolean.not")); - return all(primitiveUnaryOperationNames, NO_PARAMETERS); + public Predicate getPredicate() { + return PATTERN; } @NotNull diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/StringOperationFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/StringOperationFIF.java index dcab99a0e55..90317146196 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/StringOperationFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/StringOperationFIF.java @@ -24,7 +24,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.BuiltInPropertyIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; import java.util.List; @@ -38,7 +38,7 @@ import static org.jetbrains.k2js.translate.utils.JsAstUtils.setQualifier; public final class StringOperationFIF { @NotNull - private static final Pattern GET_PATTERN = pattern("String.get"); + private static final DescriptorPredicate GET_PATTERN = pattern("String.get"); @NotNull private static final FunctionIntrinsic GET_INTRINSIC = new FunctionIntrinsic() { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java index b13114551d0..7e8663f40df 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TopLevelFIF.java @@ -19,7 +19,7 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; import org.jetbrains.annotations.NotNull; import org.jetbrains.k2js.translate.intrinsic.functions.basic.BuiltInFunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.functions.basic.CallStandardMethodIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.DescriptorPredicate; import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder.pattern; @@ -29,7 +29,7 @@ import static org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternB public final class TopLevelFIF { @NotNull - private static final Pattern EXT_TO_STRING = pattern("toString"); + private static final DescriptorPredicate EXT_TO_STRING = pattern("toString"); @NotNull public static final FunctionIntrinsicFactory INSTANCE = FIFBuilder.start() diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TupleGetterFIF.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TupleGetterFIF.java index f078269f72c..f0e9b335032 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TupleGetterFIF.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/factories/TupleGetterFIF.java @@ -17,6 +17,7 @@ package org.jetbrains.k2js.translate.intrinsic.functions.factories; import closurecompiler.internal.com.google.common.collect.Lists; +import com.google.common.base.Predicate; import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; @@ -25,8 +26,7 @@ import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.intrinsic.functions.basic.FunctionIntrinsic; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NameChecker; -import org.jetbrains.k2js.translate.intrinsic.functions.patterns.Pattern; +import org.jetbrains.k2js.translate.intrinsic.functions.patterns.NamePredicate; import org.jetbrains.k2js.translate.intrinsic.functions.patterns.PatternBuilder; import java.util.List; @@ -38,30 +38,30 @@ public enum TupleGetterFIF implements FunctionIntrinsicFactory { INSTANCE; @NotNull - private static final NameChecker TUPLES; + private static final NamePredicate TUPLES; static { List tupleNames = Lists.newArrayList(); for (int tupleSize = 0; tupleSize <= JetStandardClasses.MAX_TUPLE_ORDER; ++tupleSize) { tupleNames.add("Tuple" + tupleSize); } - TUPLES = new NameChecker(tupleNames); + TUPLES = new NamePredicate(tupleNames); } @NotNull - private static final NameChecker TUPLE_UNDERSCORE_ACCESSORS; + private static final NamePredicate TUPLE_UNDERSCORE_ACCESSORS; static { List accessorNames = Lists.newArrayList(); for (int tupleSize = 0; tupleSize <= JetStandardClasses.MAX_TUPLE_ORDER; ++tupleSize) { accessorNames.add(""); } - TUPLE_UNDERSCORE_ACCESSORS = new NameChecker(accessorNames); + TUPLE_UNDERSCORE_ACCESSORS = new NamePredicate(accessorNames); } @NotNull @Override - public Pattern getPattern() { + public Predicate getPredicate() { return PatternBuilder.pattern(TUPLES, TUPLE_UNDERSCORE_ACCESSORS); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/Pattern.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/DescriptorPredicate.java similarity index 76% rename from js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/Pattern.java rename to js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/DescriptorPredicate.java index 4f437b27678..8175d12c084 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/Pattern.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/DescriptorPredicate.java @@ -16,13 +16,14 @@ package org.jetbrains.k2js.translate.intrinsic.functions.patterns; -import org.jetbrains.annotations.NotNull; +import com.google.common.base.Predicate; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; /** * @author Pavel Talanov */ -public interface Pattern { - - boolean apply(@NotNull FunctionDescriptor descriptor); +public interface DescriptorPredicate extends Predicate { + @Override + boolean apply(@Nullable FunctionDescriptor descriptor); } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NameChecker.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java similarity index 70% rename from js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NameChecker.java rename to js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java index 6945b3c4154..f42f2a3fa1e 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NameChecker.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/NamePredicate.java @@ -17,7 +17,9 @@ package org.jetbrains.k2js.translate.intrinsic.functions.patterns; import closurecompiler.internal.com.google.common.collect.Lists; +import com.google.common.base.Predicate; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Arrays; @@ -27,33 +29,37 @@ import java.util.List; /** * @author Pavel Talanov */ -public final class NameChecker { +public final class NamePredicate implements Predicate { @NotNull - public static final NameChecker PRIMITIVE_NUMBERS = new NameChecker("Int", "Double", "Float", "Long", "Short"); + public static final NamePredicate PRIMITIVE_NUMBERS = new NamePredicate("Int", "Double", "Float", "Long", "Short"); @NotNull private final List validNames = Lists.newArrayList(); - public NameChecker(@NotNull String... validNames) { + public NamePredicate(@NotNull String... validNames) { this(Arrays.asList(validNames)); } - public NameChecker(@NotNull List validNames) { + public NamePredicate(@NotNull List validNames) { for (String validName : validNames) { this.validNames.add(Name.guess(validName)); } } - public NameChecker(@NotNull Collection validNames) { + public NamePredicate(@NotNull Collection validNames) { this.validNames.addAll(validNames); } - public NameChecker(@NotNull Name... validNames) { + public NamePredicate(@NotNull Name... validNames) { this.validNames.addAll(Lists.newArrayList(validNames)); } - public boolean isValid(@NotNull Name name) { + @Override + public boolean apply(@Nullable Name name) { + if (name == null) { + return false; + } for (Name validName : validNames) { if (name.equals(validName)) { return true; diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/PatternBuilder.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/PatternBuilder.java index 80c56969cad..65be590779d 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/PatternBuilder.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/functions/patterns/PatternBuilder.java @@ -18,6 +18,7 @@ package org.jetbrains.k2js.translate.intrinsic.functions.patterns; import closurecompiler.internal.com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; @@ -30,49 +31,50 @@ import java.util.List; */ public final class PatternBuilder { - public static final NameChecker JET = new NameChecker("jet"); + public static final NamePredicate JET = new NamePredicate("jet"); private PatternBuilder() { } @NotNull - public static Pattern pattern(@NotNull NameChecker checker, @NotNull String stringWithPattern) { - List checkers = Lists.newArrayList(checker); + public static DescriptorPredicate pattern(@NotNull NamePredicate checker, @NotNull String stringWithPattern) { + List checkers = Lists.newArrayList(checker); checkers.addAll(parseStringAsCheckerList(stringWithPattern)); return pattern(checkers); } @NotNull - public static Pattern pattern(@NotNull String stringWithPattern, @NotNull NameChecker checker) { - List checkers = Lists.newArrayList(parseStringAsCheckerList(stringWithPattern)); + public static DescriptorPredicate pattern(@NotNull String stringWithPattern, @NotNull NamePredicate checker) { + List checkers = Lists.newArrayList(parseStringAsCheckerList(stringWithPattern)); checkers.add(checker); return pattern(checkers); } @NotNull - public static Pattern pattern(@NotNull String string) { - List checkers = parseStringAsCheckerList(string); + public static DescriptorPredicate pattern(@NotNull String string) { + List checkers = parseStringAsCheckerList(string); return pattern(checkers); } @NotNull - private static List parseStringAsCheckerList(@NotNull String stringWithPattern) { + private static List parseStringAsCheckerList(@NotNull String stringWithPattern) { String[] subPatterns = stringWithPattern.split("\\."); - List checkers = Lists.newArrayList(); + List checkers = Lists.newArrayList(); for (String subPattern : subPatterns) { String[] validNames = subPattern.split("\\|"); - checkers.add(new NameChecker(validNames)); + checkers.add(new NamePredicate(validNames)); } return checkers; } @NotNull - private static Pattern pattern(@NotNull List checkers) { - final List checkersWithPrefixChecker = Lists.newArrayList(JET); + private static DescriptorPredicate pattern(@NotNull List checkers) { + final List checkersWithPrefixChecker = Lists.newArrayList(JET); checkersWithPrefixChecker.addAll(checkers); - return new Pattern() { + return new DescriptorPredicate() { @Override - public boolean apply(@NotNull FunctionDescriptor descriptor) { + public boolean apply(@Nullable FunctionDescriptor descriptor) { + assert descriptor != null; //TODO: no need to wrap if we check beforehand try { return doApply(descriptor); @@ -94,8 +96,8 @@ public final class PatternBuilder { private boolean allNamePartsValid(@NotNull List nameParts) { for (int i = 0; i < nameParts.size(); ++i) { Name namePart = nameParts.get(i); - NameChecker correspondingPredicate = checkersWithPrefixChecker.get(i); - if (!correspondingPredicate.isValid(namePart)) { + NamePredicate correspondingPredicate = checkersWithPrefixChecker.get(i); + if (!correspondingPredicate.apply(namePart)) { return false; } } @@ -105,37 +107,7 @@ public final class PatternBuilder { } @NotNull - public static Pattern pattern(@NotNull final NameChecker... checkers) { + public static DescriptorPredicate pattern(@NotNull final NamePredicate... checkers) { return pattern(Arrays.asList(checkers)); } - - @NotNull - public static Pattern any(@NotNull final Pattern... patterns) { - return new Pattern() { - @Override - public boolean apply(@NotNull FunctionDescriptor descriptor) { - for (Pattern pattern : patterns) { - if (pattern.apply(descriptor)) { - return true; - } - } - return false; - } - }; - } - - @NotNull - public static Pattern all(@NotNull final Pattern... patterns) { - return new Pattern() { - @Override - public boolean apply(@NotNull FunctionDescriptor descriptor) { - for (Pattern pattern : patterns) { - if (!pattern.apply(descriptor)) { - return false; - } - } - return true; - } - }; - } }