mirror of
https://github.com/jlengrand/error-prone-support.git
synced 2026-03-10 08:11:25 +00:00
Add Refaster#AnyOf use cases
This commit is contained in:
@@ -132,14 +132,11 @@ final class RefasterRuleSelector {
|
|||||||
private static void collectRuleIdentifiers(
|
private static void collectRuleIdentifiers(
|
||||||
CodeTransformer codeTransformer,
|
CodeTransformer codeTransformer,
|
||||||
Map<CodeTransformer, ImmutableSet<ImmutableSet<String>>> identifiers) {
|
Map<CodeTransformer, ImmutableSet<ImmutableSet<String>>> identifiers) {
|
||||||
if (codeTransformer instanceof CompositeCodeTransformer) {
|
if (codeTransformer instanceof CompositeCodeTransformer compositeCodeTransformer) {
|
||||||
for (CodeTransformer transformer :
|
for (CodeTransformer transformer : compositeCodeTransformer.transformers()) {
|
||||||
((CompositeCodeTransformer) codeTransformer).transformers()) {
|
|
||||||
collectRuleIdentifiers(transformer, identifiers);
|
collectRuleIdentifiers(transformer, identifiers);
|
||||||
}
|
}
|
||||||
} else if (codeTransformer instanceof AnnotatedCompositeCodeTransformer) {
|
} else if (codeTransformer instanceof AnnotatedCompositeCodeTransformer annotatedTransformer) {
|
||||||
AnnotatedCompositeCodeTransformer annotatedTransformer =
|
|
||||||
(AnnotatedCompositeCodeTransformer) codeTransformer;
|
|
||||||
for (Map.Entry<CodeTransformer, ImmutableSet<ImmutableSet<String>>> e :
|
for (Map.Entry<CodeTransformer, ImmutableSet<ImmutableSet<String>>> e :
|
||||||
indexRuleIdentifiers(annotatedTransformer.transformers()).entrySet()) {
|
indexRuleIdentifiers(annotatedTransformer.transformers()).entrySet()) {
|
||||||
identifiers.put(annotatedTransformer.withTransformers(e.getKey()), e.getValue());
|
identifiers.put(annotatedTransformer.withTransformers(e.getKey()), e.getValue());
|
||||||
@@ -160,12 +157,12 @@ final class RefasterRuleSelector {
|
|||||||
ImmutableSet.Builder<ImmutableSet<String>> results = ImmutableSet.builder();
|
ImmutableSet.Builder<ImmutableSet<String>> results = ImmutableSet.builder();
|
||||||
|
|
||||||
for (Object template : RefasterIntrospection.getBeforeTemplates(refasterRule)) {
|
for (Object template : RefasterIntrospection.getBeforeTemplates(refasterRule)) {
|
||||||
if (template instanceof ExpressionTemplate) {
|
if (template instanceof ExpressionTemplate expressionTemplate) {
|
||||||
UExpression expr = RefasterIntrospection.getExpression((ExpressionTemplate) template);
|
UExpression expr = RefasterIntrospection.getExpression(expressionTemplate);
|
||||||
results.addAll(extractRuleIdentifiers(ImmutableList.of(expr)));
|
results.addAll(extractRuleIdentifiers(ImmutableList.of(expr)));
|
||||||
} else if (template instanceof BlockTemplate) {
|
} else if (template instanceof BlockTemplate blockTemplate) {
|
||||||
ImmutableList<UStatement> statements =
|
ImmutableList<UStatement> statements =
|
||||||
RefasterIntrospection.getTemplateStatements((BlockTemplate) template);
|
RefasterIntrospection.getTemplateStatements(blockTemplate);
|
||||||
results.addAll(extractRuleIdentifiers(statements));
|
results.addAll(extractRuleIdentifiers(statements));
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
@@ -333,8 +330,8 @@ final class RefasterRuleSelector {
|
|||||||
ids.add(getSimpleName(RefasterIntrospection.getTopLevelClass(node)));
|
ids.add(getSimpleName(RefasterIntrospection.getTopLevelClass(node)));
|
||||||
ids.add(getIdentifier(node));
|
ids.add(getIdentifier(node));
|
||||||
}
|
}
|
||||||
} else if (node instanceof UStaticIdent) {
|
} else if (node instanceof UStaticIdent uStaticIdent) {
|
||||||
IdentifierTree subNode = RefasterIntrospection.getClassIdent((UStaticIdent) node);
|
IdentifierTree subNode = RefasterIntrospection.getClassIdent(uStaticIdent);
|
||||||
for (Set<String> ids : identifierCombinations) {
|
for (Set<String> ids : identifierCombinations) {
|
||||||
ids.add(getSimpleName(RefasterIntrospection.getTopLevelClass(subNode)));
|
ids.add(getSimpleName(RefasterIntrospection.getTopLevelClass(subNode)));
|
||||||
ids.add(getIdentifier(subNode));
|
ids.add(getIdentifier(subNode));
|
||||||
@@ -406,11 +403,11 @@ final class RefasterRuleSelector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Void visitOther(Tree node, List<Set<String>> identifierCombinations) {
|
public @Nullable Void visitOther(Tree node, List<Set<String>> identifierCombinations) {
|
||||||
if (node instanceof UAnyOf) {
|
if (node instanceof UAnyOf uAnyOf) {
|
||||||
List<Set<String>> base = copy(identifierCombinations);
|
List<Set<String>> base = copy(identifierCombinations);
|
||||||
identifierCombinations.clear();
|
identifierCombinations.clear();
|
||||||
|
|
||||||
for (UExpression expr : RefasterIntrospection.getExpressions((UAnyOf) node)) {
|
for (UExpression expr : RefasterIntrospection.getExpressions(uAnyOf)) {
|
||||||
List<Set<String>> branch = copy(base);
|
List<Set<String>> branch = copy(base);
|
||||||
scan(expr, branch);
|
scan(expr, branch);
|
||||||
identifierCombinations.addAll(branch);
|
identifierCombinations.addAll(branch);
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import static java.util.Collections.singletonMap;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.errorprone.refaster.Refaster;
|
||||||
|
import com.google.errorprone.refaster.annotation.AfterTemplate;
|
||||||
|
import com.google.errorprone.refaster.annotation.BeforeTemplate;
|
||||||
|
import java.util.AbstractMap.SimpleImmutableEntry;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Refaster rule collection to validate the reporting of missing test methods. */
|
||||||
|
final class NestedRefasterAnyOfRules {
|
||||||
|
private NestedRefasterAnyOfRules() {}
|
||||||
|
|
||||||
|
static final class NestedRefasterAnyOf<K, V> {
|
||||||
|
@BeforeTemplate
|
||||||
|
@SuppressWarnings({"ImmutableMapOf1", "MapEntry"} /* Similar rules for testing purposes. */)
|
||||||
|
Map<K, V> before(K k1, V v1) {
|
||||||
|
return Refaster.anyOf(
|
||||||
|
ImmutableMap.ofEntries(
|
||||||
|
Refaster.anyOf(Map.entry(k1, v1), new SimpleImmutableEntry<>(k1, v1))),
|
||||||
|
singletonMap(k1, v1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterTemplate
|
||||||
|
ImmutableMap<K, V> after(K k1, V v1) {
|
||||||
|
return ImmutableMap.of(k1, v1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,8 +21,10 @@ final class RefasterRuleCollectionTest {
|
|||||||
MethodWithoutPrefixRules.class,
|
MethodWithoutPrefixRules.class,
|
||||||
MisnamedTestClassRules.class,
|
MisnamedTestClassRules.class,
|
||||||
MissingTestAndWrongTestRules.class,
|
MissingTestAndWrongTestRules.class,
|
||||||
|
NestedRefasterAnyOfRules.class,
|
||||||
PartialTestMatchRules.class,
|
PartialTestMatchRules.class,
|
||||||
RuleWithoutTestRules.class,
|
RuleWithoutTestRules.class,
|
||||||
|
SingleRefasterAnyOfRules.class,
|
||||||
ValidRules.class
|
ValidRules.class
|
||||||
})
|
})
|
||||||
void verifyRefasterRuleCollections(Class<?> clazz) {
|
void verifyRefasterRuleCollections(Class<?> clazz) {
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import static java.util.Collections.singletonMap;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.errorprone.refaster.Refaster;
|
||||||
|
import com.google.errorprone.refaster.annotation.AfterTemplate;
|
||||||
|
import com.google.errorprone.refaster.annotation.BeforeTemplate;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Refaster rule collection to validate the reporting of missing test methods. */
|
||||||
|
final class SingleRefasterAnyOfRules {
|
||||||
|
private SingleRefasterAnyOfRules() {}
|
||||||
|
|
||||||
|
static final class SingleRefasterAnyOf<K, V> {
|
||||||
|
@BeforeTemplate
|
||||||
|
@SuppressWarnings("ImmutableMapOf1" /* Similar rule for testing purposes. */)
|
||||||
|
Map<K, V> before(K k1, V v1) {
|
||||||
|
return Refaster.anyOf(ImmutableMap.ofEntries(Map.entry(k1, v1)), singletonMap(k1, v1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterTemplate
|
||||||
|
ImmutableMap<K, V> after(K k1, V v1) {
|
||||||
|
return ImmutableMap.of(k1, v1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Code to test the Refaster rules from {@link NestedRefasterAnyOfRules}. */
|
||||||
|
final class NestedRefasterAnyOfRulesTest implements RefasterRuleCollectionTestCase {
|
||||||
|
Map<?, ?> testNestedRefasterAnyOf() {
|
||||||
|
Map<String, String> stringStringMap = Map.of("1", "2");
|
||||||
|
return ImmutableMap.ofEntries(Map.entry("k1", "v1"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Code to test the Refaster rules from {@link NestedRefasterAnyOfRules}. */
|
||||||
|
final class NestedRefasterAnyOfRulesTest implements RefasterRuleCollectionTestCase {
|
||||||
|
Map<?, ?> testNestedRefasterAnyOf() {
|
||||||
|
Map<String, String> stringStringMap = Map.of("1", "2");
|
||||||
|
return ImmutableMap.of("k1", "v1");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Code to test the Refaster rules from {@link SingleRefasterAnyOfRules}. */
|
||||||
|
final class SingleRefasterAnyOfRulesTest implements RefasterRuleCollectionTestCase {
|
||||||
|
@Override
|
||||||
|
public ImmutableSet<Object> elidedTypesAndStaticImports() {
|
||||||
|
return ImmutableSet.of(Collections.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<?, ?> testSingleRefasterAnyOf() {
|
||||||
|
return Collections.singletonMap("k1", "v1");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package tech.picnic.errorprone.refaster.test;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
import com.google.common.collect.ImmutableSet;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/** Code to test the Refaster rules from {@link SingleRefasterAnyOfRules}. */
|
||||||
|
final class SingleRefasterAnyOfRulesTest implements RefasterRuleCollectionTestCase {
|
||||||
|
@Override
|
||||||
|
public ImmutableSet<Object> elidedTypesAndStaticImports() {
|
||||||
|
return ImmutableSet.of(Collections.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<?, ?> testSingleRefasterAnyOf() {
|
||||||
|
return ImmutableMap.of("k1", "v1");
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user