Pattern -> DescriptorPredicate, NameChecker -> NamePredicate.
This commit is contained in:
+1
-1
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -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<Name> 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
|
||||
|
||||
+16
-8
@@ -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<Pattern, FunctionIntrinsic> patternToIntrinsic = Maps.newHashMap();
|
||||
@NotNull final Map<DescriptorPredicate, FunctionIntrinsic> 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<Pattern> patterns = patternToIntrinsic.keySet();
|
||||
return PatternBuilder.any(patterns.toArray(new Pattern[patterns.size()]));
|
||||
public Predicate<FunctionDescriptor> getPredicate() {
|
||||
Collection<DescriptorPredicate> 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);
|
||||
}
|
||||
|
||||
+2
-2
@@ -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<FunctionDescriptor> getPredicate();
|
||||
|
||||
@NotNull
|
||||
FunctionIntrinsic getIntrinsic(@NotNull FunctionDescriptor descriptor);
|
||||
|
||||
+5
-5
@@ -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<Name> 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
|
||||
|
||||
+8
-8
@@ -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<FunctionDescriptor> 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
|
||||
|
||||
+18
-11
@@ -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<FunctionDescriptor> 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<FunctionDescriptor> 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<FunctionDescriptor> getPredicate() {
|
||||
return PATTERN;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+2
-2
@@ -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() {
|
||||
|
||||
+2
-2
@@ -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()
|
||||
|
||||
+7
-7
@@ -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<String> 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<String> accessorNames = Lists.newArrayList();
|
||||
for (int tupleSize = 0; tupleSize <= JetStandardClasses.MAX_TUPLE_ORDER; ++tupleSize) {
|
||||
accessorNames.add("<get-_" + (tupleSize + 1) + ">");
|
||||
}
|
||||
TUPLE_UNDERSCORE_ACCESSORS = new NameChecker(accessorNames);
|
||||
TUPLE_UNDERSCORE_ACCESSORS = new NamePredicate(accessorNames);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public Pattern getPattern() {
|
||||
public Predicate<FunctionDescriptor> getPredicate() {
|
||||
return PatternBuilder.pattern(TUPLES, TUPLE_UNDERSCORE_ACCESSORS);
|
||||
}
|
||||
|
||||
|
||||
+5
-4
@@ -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<FunctionDescriptor> {
|
||||
@Override
|
||||
boolean apply(@Nullable FunctionDescriptor descriptor);
|
||||
}
|
||||
+13
-7
@@ -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<Name> {
|
||||
|
||||
@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<Name> validNames = Lists.newArrayList();
|
||||
|
||||
public NameChecker(@NotNull String... validNames) {
|
||||
public NamePredicate(@NotNull String... validNames) {
|
||||
this(Arrays.asList(validNames));
|
||||
}
|
||||
|
||||
public NameChecker(@NotNull List<String> validNames) {
|
||||
public NamePredicate(@NotNull List<String> validNames) {
|
||||
for (String validName : validNames) {
|
||||
this.validNames.add(Name.guess(validName));
|
||||
}
|
||||
}
|
||||
|
||||
public NameChecker(@NotNull Collection<Name> validNames) {
|
||||
public NamePredicate(@NotNull Collection<Name> 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;
|
||||
+19
-47
@@ -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<NameChecker> checkers = Lists.newArrayList(checker);
|
||||
public static DescriptorPredicate pattern(@NotNull NamePredicate checker, @NotNull String stringWithPattern) {
|
||||
List<NamePredicate> checkers = Lists.newArrayList(checker);
|
||||
checkers.addAll(parseStringAsCheckerList(stringWithPattern));
|
||||
return pattern(checkers);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pattern pattern(@NotNull String stringWithPattern, @NotNull NameChecker checker) {
|
||||
List<NameChecker> checkers = Lists.newArrayList(parseStringAsCheckerList(stringWithPattern));
|
||||
public static DescriptorPredicate pattern(@NotNull String stringWithPattern, @NotNull NamePredicate checker) {
|
||||
List<NamePredicate> checkers = Lists.newArrayList(parseStringAsCheckerList(stringWithPattern));
|
||||
checkers.add(checker);
|
||||
return pattern(checkers);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Pattern pattern(@NotNull String string) {
|
||||
List<NameChecker> checkers = parseStringAsCheckerList(string);
|
||||
public static DescriptorPredicate pattern(@NotNull String string) {
|
||||
List<NamePredicate> checkers = parseStringAsCheckerList(string);
|
||||
return pattern(checkers);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<NameChecker> parseStringAsCheckerList(@NotNull String stringWithPattern) {
|
||||
private static List<NamePredicate> parseStringAsCheckerList(@NotNull String stringWithPattern) {
|
||||
String[] subPatterns = stringWithPattern.split("\\.");
|
||||
List<NameChecker> checkers = Lists.newArrayList();
|
||||
List<NamePredicate> 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<NameChecker> checkers) {
|
||||
final List<NameChecker> checkersWithPrefixChecker = Lists.newArrayList(JET);
|
||||
private static DescriptorPredicate pattern(@NotNull List<NamePredicate> checkers) {
|
||||
final List<NamePredicate> 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<Name> 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;
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user