summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-04-03 08:37:10 +0200
committermikaelpeltier <mikaelpeltier@google.com>2015-04-29 15:10:02 +0200
commit0ae7eb8483fdf263f652fda280808ff9d3680857 (patch)
tree3806c94b63193ea9986c32cfb5e5e7c170709ab0 /jack
parent2f4937b1e507a63eae229aca27054db2c44e6c21 (diff)
downloadtoolchain_jack-0ae7eb8483fdf263f652fda280808ff9d3680857.tar.gz
toolchain_jack-0ae7eb8483fdf263f652fda280808ff9d3680857.tar.bz2
toolchain_jack-0ae7eb8483fdf263f652fda280808ff9d3680857.zip
JVisitor does not longer visit annotations
- Now, if we need to visit annotation, you must use explicitly JVisitorWithAnnotation. Change-Id: If4c29bd12f4d7e43d5cae7be43e8b2d57297b333
Diffstat (limited to 'jack')
-rw-r--r--jack/src/com/android/jack/analysis/tracer/Tracer.java4
-rw-r--r--jack/src/com/android/jack/backend/dex/ConstantBuilder.java4
-rw-r--r--jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java4
-rw-r--r--jack/src/com/android/jack/ir/ast/JNode.java2
-rw-r--r--jack/src/com/android/jack/ir/ast/JVisitor.java23
-rw-r--r--jack/src/com/android/jack/ir/ast/JVisitorWithAnnotation.java51
-rw-r--r--jack/src/com/android/jack/ir/impl/CloneExpressionVisitor.java4
-rw-r--r--jack/src/com/android/jack/ir/impl/TextOutputVisitor.java3
-rw-r--r--jack/src/com/android/jack/jayce/v0002/NodeFactory.java4
-rw-r--r--jack/src/com/android/jack/transformations/ast/PrimitiveClassTransformer.java4
-rw-r--r--jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java4
-rw-r--r--jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java4
-rw-r--r--jack/src/com/android/jack/util/AnnotationSkipperVisitor.java41
13 files changed, 90 insertions, 62 deletions
diff --git a/jack/src/com/android/jack/analysis/tracer/Tracer.java b/jack/src/com/android/jack/analysis/tracer/Tracer.java
index 90f73445..0c9a4eed 100644
--- a/jack/src/com/android/jack/analysis/tracer/Tracer.java
+++ b/jack/src/com/android/jack/analysis/tracer/Tracer.java
@@ -56,7 +56,7 @@ import com.android.jack.ir.ast.JPrimitiveType.JPrimitiveTypeEnum;
import com.android.jack.ir.ast.JType;
import com.android.jack.ir.ast.JTypeStringLiteral;
import com.android.jack.ir.ast.JVariable;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import com.android.jack.ir.ast.marker.ThrownExceptionMarker;
import com.android.jack.lookup.JMethodLookupException;
import com.android.sched.item.Description;
@@ -74,7 +74,7 @@ import javax.annotation.Nonnull;
* A visitor that traces dependencies
*/
@Description("traces dependencies")
-public class Tracer extends JVisitor {
+public class Tracer extends JVisitorWithAnnotation {
@Nonnull
protected static final com.android.sched.util.log.Tracer tracer = TracerFactory.getTracer();
diff --git a/jack/src/com/android/jack/backend/dex/ConstantBuilder.java b/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
index 303c9e88..2026e603 100644
--- a/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
+++ b/jack/src/com/android/jack/backend/dex/ConstantBuilder.java
@@ -51,7 +51,7 @@ import com.android.jack.ir.ast.JMethodLiteral;
import com.android.jack.ir.ast.JNameValuePair;
import com.android.jack.ir.ast.JNullLiteral;
import com.android.jack.ir.ast.JShortLiteral;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import java.util.List;
@@ -64,7 +64,7 @@ import javax.annotation.Nonnull;
* {@code ConstantBuilder} is not thread safe.
*/
public class ConstantBuilder {
- private class Visitor extends JVisitor {
+ private class Visitor extends JVisitorWithAnnotation {
@CheckForNull
private Constant result;
diff --git a/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java b/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
index 83767af8..a1e2e9d6 100644
--- a/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
+++ b/jack/src/com/android/jack/frontend/MethodIdDuplicateRemover.java
@@ -22,7 +22,7 @@ import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JMethodCall;
import com.android.jack.ir.ast.JMethodId;
import com.android.jack.ir.ast.JNameValuePair;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import java.util.Collection;
@@ -31,7 +31,7 @@ import javax.annotation.Nonnull;
/**
* Update methodIds of {@link JMethodCall}s and {@link JNameValuePair}s.
*/
-public class MethodIdDuplicateRemover extends JVisitor {
+public class MethodIdDuplicateRemover extends JVisitorWithAnnotation {
public MethodIdDuplicateRemover() {
super(false /* needLoading */);
diff --git a/jack/src/com/android/jack/ir/ast/JNode.java b/jack/src/com/android/jack/ir/ast/JNode.java
index 56e196a2..84491a90 100644
--- a/jack/src/com/android/jack/ir/ast/JNode.java
+++ b/jack/src/com/android/jack/ir/ast/JNode.java
@@ -51,7 +51,7 @@ public abstract class JNode extends LocalMarkerManager
INSERT_AFTER;
}
- private static class ParentSetterVisitor extends JVisitor {
+ private static class ParentSetterVisitor extends JVisitorWithAnnotation {
final Stack<JNode> nodes = new Stack<JNode>();
diff --git a/jack/src/com/android/jack/ir/ast/JVisitor.java b/jack/src/com/android/jack/ir/ast/JVisitor.java
index 351693d4..8e38de45 100644
--- a/jack/src/com/android/jack/ir/ast/JVisitor.java
+++ b/jack/src/com/android/jack/ir/ast/JVisitor.java
@@ -120,8 +120,13 @@ public class JVisitor {
endVisit((JExpression) x);
}
+ /**
+ * End visit of a {@link JAnnotation}.
+ * @param annotation annotation to visit.
+ */
public void endVisit(@Nonnull JAnnotation annotation) {
- endVisit((JExpression) annotation);
+ // Few JVisitor instances need to visit annotation, thus by default don't visit them.
+ // Use JVisitorWithAnnotation to visit them.
}
public void endVisit(@Nonnull JArrayLength x) {
@@ -500,8 +505,14 @@ public class JVisitor {
return visit((JExpression) x);
}
+ /**
+ * Visit of a {@link JAnnotation}.
+ * @param annotation annotation to visit.
+ */
public boolean visit(@Nonnull JAnnotation annotation) {
- return visit((JExpression) annotation);
+ // Few JVisitor instances need to visit annotation, thus by default don't visit them.
+ // Use JVisitorWithAnnotation to visit them.
+ return false;
}
public boolean visit(@Nonnull JArrayLength x) {
@@ -888,9 +899,15 @@ public class JVisitor {
visit((JExpression) x, transformRequest);
}
+ /**
+ * Visit of a {@link JAnnotation} with a {@link TransformRequest} to apply on.
+ * @param annotation annotation to visit.
+ * @param transformRequest transformation request to apply.
+ */
public void visit(@Nonnull JAnnotation annotation, @Nonnull TransformRequest transformRequest)
throws Exception {
- visit((JExpression) annotation, transformRequest);
+ // Few JVisitor instances need to visit annotation, thus by default don't visit them.
+ // Use JVisitorWithAnnotation to visit them.
}
public void visit(@Nonnull JArrayLength x, @Nonnull TransformRequest transformRequest)
diff --git a/jack/src/com/android/jack/ir/ast/JVisitorWithAnnotation.java b/jack/src/com/android/jack/ir/ast/JVisitorWithAnnotation.java
new file mode 100644
index 00000000..c6eee3bd
--- /dev/null
+++ b/jack/src/com/android/jack/ir/ast/JVisitorWithAnnotation.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.ir.ast;
+
+import com.android.sched.transform.TransformRequest;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A visitor for iterating through an AST that also visit annotations.
+ */
+public class JVisitorWithAnnotation extends JVisitor {
+
+ protected JVisitorWithAnnotation() {
+ this(/* needLoading =*/ true);
+ }
+
+ protected JVisitorWithAnnotation(boolean needLoading) {
+ super(needLoading);
+ }
+
+ @Override
+ public void endVisit(@Nonnull JAnnotation annotation) {
+ endVisit((JExpression) annotation);
+ }
+
+ @Override
+ public boolean visit(@Nonnull JAnnotation annotation) {
+ return visit((JExpression) annotation);
+ }
+
+ @Override
+ public void visit(@Nonnull JAnnotation annotation, @Nonnull TransformRequest transformRequest)
+ throws Exception {
+ visit((JExpression) annotation, transformRequest);
+ }
+}
diff --git a/jack/src/com/android/jack/ir/impl/CloneExpressionVisitor.java b/jack/src/com/android/jack/ir/impl/CloneExpressionVisitor.java
index e7b44056..4e465e95 100644
--- a/jack/src/com/android/jack/ir/impl/CloneExpressionVisitor.java
+++ b/jack/src/com/android/jack/ir/impl/CloneExpressionVisitor.java
@@ -54,7 +54,7 @@ import com.android.jack.ir.ast.JPostfixOperation;
import com.android.jack.ir.ast.JPrefixOperation;
import com.android.jack.ir.ast.JShortLiteral;
import com.android.jack.ir.ast.JThisRef;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import java.util.ArrayList;
import java.util.List;
@@ -65,7 +65,7 @@ import javax.annotation.Nonnull;
/**
* A general purpose expression cloner.
*/
-public class CloneExpressionVisitor extends JVisitor {
+public class CloneExpressionVisitor extends JVisitorWithAnnotation {
@CheckForNull
protected JExpression expression;
diff --git a/jack/src/com/android/jack/ir/impl/TextOutputVisitor.java b/jack/src/com/android/jack/ir/impl/TextOutputVisitor.java
index 629364d7..564b14ec 100644
--- a/jack/src/com/android/jack/ir/impl/TextOutputVisitor.java
+++ b/jack/src/com/android/jack/ir/impl/TextOutputVisitor.java
@@ -17,13 +17,14 @@ package com.android.jack.ir.impl;
import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import com.android.jack.util.TextOutput;
/**
* A convenience base class that combines a {@link JVisitor} with a
* {@link TextOutput}.
*/
-public class TextOutputVisitor extends JVisitor implements TextOutput {
+public class TextOutputVisitor extends JVisitorWithAnnotation implements TextOutput {
private final TextOutput textOutput;
diff --git a/jack/src/com/android/jack/jayce/v0002/NodeFactory.java b/jack/src/com/android/jack/jayce/v0002/NodeFactory.java
index a609114b..d5a98438 100644
--- a/jack/src/com/android/jack/jayce/v0002/NodeFactory.java
+++ b/jack/src/com/android/jack/jayce/v0002/NodeFactory.java
@@ -126,7 +126,7 @@ import com.android.jack.ir.ast.JThrowStatement;
import com.android.jack.ir.ast.JTryStatement;
import com.android.jack.ir.ast.JUnaryOperation;
import com.android.jack.ir.ast.JUnlock;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import com.android.jack.ir.ast.JWhileStatement;
import com.android.jack.ir.ast.marker.GenericSignature;
import com.android.jack.ir.ast.marker.SimpleName;
@@ -255,7 +255,7 @@ import javax.annotation.Nonnull;
*/
public class NodeFactory {
- private static class Creator extends JVisitor {
+ private static class Creator extends JVisitorWithAnnotation {
@CheckForNull
private NNode newNode;
diff --git a/jack/src/com/android/jack/transformations/ast/PrimitiveClassTransformer.java b/jack/src/com/android/jack/transformations/ast/PrimitiveClassTransformer.java
index 9f216e2d..64597c6d 100644
--- a/jack/src/com/android/jack/transformations/ast/PrimitiveClassTransformer.java
+++ b/jack/src/com/android/jack/transformations/ast/PrimitiveClassTransformer.java
@@ -26,12 +26,12 @@ import com.android.jack.ir.ast.JFieldLookupException;
import com.android.jack.ir.ast.JFieldRef;
import com.android.jack.ir.ast.JMethod;
import com.android.jack.ir.ast.JPrimitiveType;
+import com.android.jack.ir.ast.JVisitor;
import com.android.jack.lookup.CommonTypes;
import com.android.jack.lookup.JPhantomLookup;
import com.android.jack.transformations.request.Replace;
import com.android.jack.transformations.request.TransformationRequest;
import com.android.jack.transformations.threeaddresscode.ThreeAddressCodeForm;
-import com.android.jack.util.AnnotationSkipperVisitor;
import com.android.jack.util.filter.Filter;
import com.android.sched.item.Description;
import com.android.sched.item.Name;
@@ -59,7 +59,7 @@ public class PrimitiveClassTransformer implements RunnableSchedulable<JMethod> {
@Nonnull
private final Filter<JMethod> filter = ThreadConfig.get(Options.METHOD_FILTER);
- private static class Visitor extends AnnotationSkipperVisitor {
+ private static class Visitor extends JVisitor {
private static final String FIELD_TYPE_NAME = "TYPE";
@Nonnull
diff --git a/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java
index 88b6e823..5d408c38 100644
--- a/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java
+++ b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java
@@ -24,7 +24,7 @@ import com.android.jack.ir.ast.JNode;
import com.android.jack.ir.ast.JPackage;
import com.android.jack.ir.ast.JSession;
import com.android.jack.ir.ast.JStringLiteral;
-import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithAnnotation;
import com.android.jack.ir.ast.Resource;
import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter;
import com.android.jack.ir.formatter.TypeFormatter;
@@ -78,7 +78,7 @@ public class PackageRenamer implements RunnableSchedulable<JSession>{
@Nonnull
private final InputStreamFile jarjarRulesFile = ThreadConfig.get(JARJAR_FILE);
- private static class Visitor extends JVisitor {
+ private static class Visitor extends JVisitorWithAnnotation {
@Nonnull
private final PackageRemapper remapper;
diff --git a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
index f79b8ee7..f899cf7d 100644
--- a/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
+++ b/jack/src/com/android/jack/transformations/threeaddresscode/ThreeAddressCodeBuilder.java
@@ -49,6 +49,7 @@ import com.android.jack.ir.ast.JValueLiteral;
import com.android.jack.ir.ast.JVariable;
import com.android.jack.ir.ast.JVariableRef;
import com.android.jack.ir.ast.JVisitor;
+import com.android.jack.ir.ast.JVisitorWithConcurrentModification;
import com.android.jack.ir.sourceinfo.SourceInfo;
import com.android.jack.scheduling.marker.collector.SubTreeMarkersCollector;
import com.android.jack.transformations.LocalVarCreator;
@@ -60,7 +61,6 @@ import com.android.jack.transformations.request.AppendBefore;
import com.android.jack.transformations.request.Remove;
import com.android.jack.transformations.request.Replace;
import com.android.jack.transformations.request.TransformationRequest;
-import com.android.jack.util.AnnotationSkipperVisitor;
import com.android.jack.util.filter.Filter;
import com.android.sched.item.Description;
import com.android.sched.item.Name;
@@ -101,7 +101,7 @@ public class ThreeAddressCodeBuilder implements RunnableSchedulable<JMethod> {
/**
* {@code ThreeAddressCode} is the visitor building the three address form.
*/
- private static class ThreeAddressCode extends AnnotationSkipperVisitor {
+ private static class ThreeAddressCode extends JVisitorWithConcurrentModification {
@Nonnull
private static final SubTreeMarkersCollector<DefinitionMarker> defMarkerCollector =
diff --git a/jack/src/com/android/jack/util/AnnotationSkipperVisitor.java b/jack/src/com/android/jack/util/AnnotationSkipperVisitor.java
deleted file mode 100644
index 6b8f3ff4..00000000
--- a/jack/src/com/android/jack/util/AnnotationSkipperVisitor.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.jack.util;
-
-import com.android.jack.ir.ast.JAnnotation;
-import com.android.jack.ir.ast.JVisitorWithConcurrentModification;
-
-import javax.annotation.Nonnull;
-
-/**
- * A {@link JVisitorWithConcurrentModification} that does not visit annotations values.
- */
-// TODO(yroussel) a better way to filter out ?
-public class AnnotationSkipperVisitor extends JVisitorWithConcurrentModification {
- public AnnotationSkipperVisitor() {
- }
-
- @Override
- public boolean visit(@Nonnull JAnnotation stmt) {
- return false;
- }
-
- @Override
- public void endVisit(@Nonnull JAnnotation annotation) {
- }
-
-}