From c1accbd186da6b5bd845e5290b237d9af67d6929 Mon Sep 17 00:00:00 2001 From: Martin Monperrus Date: Mon, 15 May 2017 22:47:22 +0200 Subject: [PATCH] refactor: remove or update deprecation related to queries & filters --- .../java/spoon/reflect/visitor/Query.java | 12 +-- .../spoon/reflect/visitor/QueryVisitor.java | 84 ------------------- .../reflect/visitor/ReferenceFilter.java | 32 ------- .../visitor/ReferenceQueryVisitor.java | 36 -------- .../filter/AbstractReferenceFilter.java | 8 +- .../visitor/filter/ReferenceTypeFilter.java | 2 - 6 files changed, 8 insertions(+), 166 deletions(-) delete mode 100644 src/main/java/spoon/reflect/visitor/QueryVisitor.java delete mode 100644 src/main/java/spoon/reflect/visitor/ReferenceFilter.java delete mode 100644 src/main/java/spoon/reflect/visitor/ReferenceQueryVisitor.java diff --git a/src/main/java/spoon/reflect/visitor/Query.java b/src/main/java/spoon/reflect/visitor/Query.java index b71cd759d9c..59143c347c9 100644 --- a/src/main/java/spoon/reflect/visitor/Query.java +++ b/src/main/java/spoon/reflect/visitor/Query.java @@ -20,6 +20,7 @@ import spoon.reflect.factory.Factory; import spoon.reflect.reference.CtReference; import spoon.reflect.visitor.chain.CtFunction; +import spoon.reflect.visitor.filter.TypeFilter; import java.util.List; @@ -77,12 +78,13 @@ public static List getElements( * @param filter * the filter which defines the matching criteria * - * @deprecated use {@link #getElements(CtElement, Filter)} instead. */ - @Deprecated public static List getReferences( CtElement rootElement, Filter filter) { - return getElements(rootElement, filter); + // note that the new TypeFilter<>(CtReference.class) should not be necessary + // thanks to using + // however, playing safe to satisfy contract in case of type erasure + return rootElement.filterChildren(new TypeFilter<>(CtReference.class)).filterChildren(filter).list(); } /** @@ -96,12 +98,10 @@ public static List getReferences( * search on * @param filter * the filter which defines the matching criteria - * @deprecated use {@link #getElements(CtElement, Filter)} instead. */ - @Deprecated public static List getReferences( Factory factory, Filter filter) { - return getElements(factory, filter); + return getReferences(factory.Package().getRootPackage(), filter); } } diff --git a/src/main/java/spoon/reflect/visitor/QueryVisitor.java b/src/main/java/spoon/reflect/visitor/QueryVisitor.java deleted file mode 100644 index 9c9e0a75ba4..00000000000 --- a/src/main/java/spoon/reflect/visitor/QueryVisitor.java +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (C) 2006-2017 INRIA and contributors - * Spoon - http://spoon.gforge.inria.fr/ - * - * This software is governed by the CeCILL-C License under French law and - * abiding by the rules of distribution of free software. You can use, modify - * and/or redistribute the software under the terms of the CeCILL-C license as - * circulated by CEA, CNRS and INRIA at http://www.cecill.info. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package spoon.reflect.visitor; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import spoon.SpoonException; -import spoon.reflect.declaration.CtElement; -import spoon.reflect.visitor.chain.CtQuery; -import spoon.reflect.visitor.filter.AbstractFilter; -import spoon.support.util.RtHelper; - -/** - * A simple visitor that takes a filter and returns all the elements that match - * it. - * @deprecated use {@link CtQuery#filterChildren(Filter)} instead. - */ -@Deprecated -public class QueryVisitor extends CtScanner { - private final Filter filter; - private final Class filteredType; - private final List result = new ArrayList<>(); - - /** - * Constructs a query visitor with a given filter. - */ - @SuppressWarnings("unchecked") - public QueryVisitor(Filter filter) { - super(); - this.filter = filter; - if (filter instanceof AbstractFilter) { - filteredType = ((AbstractFilter) filter).getType(); - } else { - Method method = RtHelper.getMethod(filter.getClass(), "matches", 1); - if (method == null) { - throw new SpoonException("The Filter class " + filter.getClass().getName() + " has no matches method with one parameter."); - } - filteredType = (Class) method.getParameterTypes()[0]; - } - } - - /** - * Gets the result (elements matching the filter). - */ - public List getResult() { - return result; - } - - @SuppressWarnings("unchecked") - @Override - public void scan(CtElement element) { - if (element == null) { - return; - } - try { - if ((filteredType == null || filteredType.isAssignableFrom(element.getClass()))) { - if (filter.matches((T) element)) { - result.add((T) element); - } - } - } catch (ClassCastException e) { - // expected, some elements are not of type T - // Still need to protect from CCE, if users extend Filter (instead of AbstractFilter) directly, - // but with concrete type parameter - } - super.scan(element); - } -} diff --git a/src/main/java/spoon/reflect/visitor/ReferenceFilter.java b/src/main/java/spoon/reflect/visitor/ReferenceFilter.java deleted file mode 100644 index 7db548935b6..00000000000 --- a/src/main/java/spoon/reflect/visitor/ReferenceFilter.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright (C) 2006-2017 INRIA and contributors - * Spoon - http://spoon.gforge.inria.fr/ - * - * This software is governed by the CeCILL-C License under French law and - * abiding by the rules of distribution of free software. You can use, modify - * and/or redistribute the software under the terms of the CeCILL-C license as - * circulated by CEA, CNRS and INRIA at http://www.cecill.info. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package spoon.reflect.visitor; - -import spoon.reflect.reference.CtReference; - -/** - * This interface defines a filter for program element references. - * - * @param - * the type of the filtered references (an reference belonging to the - * filtered element must be assignable from T). - * - * @deprecated use {@link Filter} instead. - */ -@Deprecated -public interface ReferenceFilter extends Filter { -} diff --git a/src/main/java/spoon/reflect/visitor/ReferenceQueryVisitor.java b/src/main/java/spoon/reflect/visitor/ReferenceQueryVisitor.java deleted file mode 100644 index 2f6b2cb227c..00000000000 --- a/src/main/java/spoon/reflect/visitor/ReferenceQueryVisitor.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * Copyright (C) 2006-2017 INRIA and contributors - * Spoon - http://spoon.gforge.inria.fr/ - * - * This software is governed by the CeCILL-C License under French law and - * abiding by the rules of distribution of free software. You can use, modify - * and/or redistribute the software under the terms of the CeCILL-C license as - * circulated by CEA, CNRS and INRIA at http://www.cecill.info. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-C license and that you accept its terms. - */ -package spoon.reflect.visitor; - -import spoon.reflect.reference.CtReference; - -/** - * A simple visitor that takes a reference filter and returns all the references - * that match it. - * - * @deprecated use {@link QueryVisitor} instead. - */ -@Deprecated -public class ReferenceQueryVisitor extends QueryVisitor { - - /** - * Constructs a reference query visitor with a given reference filter. - */ - public ReferenceQueryVisitor(ReferenceFilter filter) { - super(filter); - } -} diff --git a/src/main/java/spoon/reflect/visitor/filter/AbstractReferenceFilter.java b/src/main/java/spoon/reflect/visitor/filter/AbstractReferenceFilter.java index 5a3d3f1d153..aa8f80dd344 100644 --- a/src/main/java/spoon/reflect/visitor/filter/AbstractReferenceFilter.java +++ b/src/main/java/spoon/reflect/visitor/filter/AbstractReferenceFilter.java @@ -17,7 +17,7 @@ package spoon.reflect.visitor.filter; import spoon.reflect.reference.CtReference; -import spoon.reflect.visitor.ReferenceFilter; +import spoon.reflect.visitor.Filter; /** * This class defines an abstract reference filter that needs to be subclassed @@ -25,12 +25,8 @@ * * @param * the type of the reference to be matched - * @see spoon.reflect.visitor.Filter - * - * @deprecated use {@link AbstractFilter} instead. */ -@Deprecated -public abstract class AbstractReferenceFilter extends AbstractFilter implements ReferenceFilter { +public abstract class AbstractReferenceFilter extends AbstractFilter implements Filter { /** * Creates a reference filter with the type of the potentially matching diff --git a/src/main/java/spoon/reflect/visitor/filter/ReferenceTypeFilter.java b/src/main/java/spoon/reflect/visitor/filter/ReferenceTypeFilter.java index b982220d89d..52854692642 100644 --- a/src/main/java/spoon/reflect/visitor/filter/ReferenceTypeFilter.java +++ b/src/main/java/spoon/reflect/visitor/filter/ReferenceTypeFilter.java @@ -24,9 +24,7 @@ * @param * the type of the reference to be matched * - * @deprecated use {@link TypeFilter} instead. */ -@Deprecated public class ReferenceTypeFilter extends TypeFilter { /**