diff options
author | delphinemartin <delphinemartin@google.com> | 2014-04-25 16:59:05 +0200 |
---|---|---|
committer | delphinemartin <delphinemartin@google.com> | 2014-05-15 17:58:39 +0200 |
commit | c722d62c1e71c4c13533941fc098f45a84ed7bec (patch) | |
tree | bab857af7fd858edfc5f14bbac97895f7881a8ef | |
parent | 5be05897b0e495114a966a2930f057d287f269f4 (diff) | |
download | toolchain_jack-c722d62c1e71c4c13533941fc098f45a84ed7bec.zip toolchain_jack-c722d62c1e71c4c13533941fc098f45a84ed7bec.tar.gz toolchain_jack-c722d62c1e71c4c13533941fc098f45a84ed7bec.tar.bz2 |
Splitted OriginalTypeInfo in two markers
OriginalTypeInfo is now replaced by GenericSignature and SourceName markers.
It allows use to remove null values and schedulable can express more specific
constraints.
Change-Id: I790d72df0ad13090fcfb98f290ea140c667c1653
23 files changed, 236 insertions, 176 deletions
diff --git a/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java b/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java index a6d3b50..ad6c9bc 100644 --- a/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java +++ b/jack/src/com/android/jack/backend/dex/annotations/ReflectAnnotationsAdder.java @@ -43,7 +43,8 @@ import com.android.jack.ir.ast.JStringLiteral; import com.android.jack.ir.ast.JType; import com.android.jack.ir.ast.JVisitor; import com.android.jack.ir.ast.MethodKind; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.lookup.CommonTypes; import com.android.jack.lookup.JLookup; @@ -77,8 +78,9 @@ import javax.annotation.Nonnull; @Transform(add = {ReflectAnnotations.class, JAnnotationLiteral.class, JNameValuePair.class, JClassLiteral.class, JStringLiteral.class, JMethodLiteral.class, JArrayLiteral.class, JNullLiteral.class, JIntLiteral.class, ClassAnnotationSchedulingSeparator.SeparatorTag.class}) -@Constraint(need = {OriginalTypeInfo.class, FinalNames.class}) -@Protect(add = OriginalTypeInfo.class, unprotect = @With(remove = ReflectAnnotations.class)) +@Constraint(need = {GenericSignature.class, SourceName.class, FinalNames.class}) +@Protect(add = {GenericSignature.class, SourceName.class}, + unprotect = @With(remove = ReflectAnnotations.class)) public class ReflectAnnotationsAdder implements RunnableSchedulable<JDefinedClassOrInterface> { private class Visitor extends JVisitor { @@ -149,23 +151,17 @@ public class ReflectAnnotationsAdder implements RunnableSchedulable<JDefinedClas addEnclosingClass(x); } } - OriginalTypeInfo marker = x.getMarker(OriginalTypeInfo.class); - String genericSignature = null; + GenericSignature marker = x.getMarker(GenericSignature.class); if (marker != null) { - genericSignature = marker.getGenericSignature(); - } - if (genericSignature != null) { - addSignature(x, genericSignature, x.getSourceInfo()); + addSignature(x, marker.getGenericSignature(), x.getSourceInfo()); } } @Override public void endVisit(@Nonnull JField x) { - OriginalTypeInfo marker = x.getMarker(OriginalTypeInfo.class); + GenericSignature marker = x.getMarker(GenericSignature.class); if (marker != null) { - String genericSignature = marker.getGenericSignature(); - assert genericSignature != null; - addSignature(x, genericSignature, x.getSourceInfo()); + addSignature(x, marker.getGenericSignature(), x.getSourceInfo()); } } @@ -174,7 +170,7 @@ public class ReflectAnnotationsAdder implements RunnableSchedulable<JDefinedClas if (addAnnotationThrows) { addThrows(x); } - OriginalTypeInfo marker = x.getMarker(OriginalTypeInfo.class); + GenericSignature marker = x.getMarker(GenericSignature.class); if (marker != null) { String genericSignature = marker.getGenericSignature(); if (genericSignature != null) { @@ -255,10 +251,9 @@ public class ReflectAnnotationsAdder implements RunnableSchedulable<JDefinedClas private void addInnerClass(@Nonnull JDefinedClassOrInterface innerType) { SourceInfo info = innerType.getSourceInfo(); JAnnotationLiteral annotation = createAnnotation(innerType, innerAnnotation, info); - OriginalTypeInfo marker = innerType.getMarker(OriginalTypeInfo.class); + SourceName marker = innerType.getMarker(SourceName.class); assert marker != null; String innerShortName = marker.getSourceName(); - assert innerShortName != null; JLiteral newValue; if (!innerShortName.isEmpty()) { newValue = new JStringLiteral(info, innerShortName); diff --git a/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java b/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java index 88ad83b..f30753f 100644 --- a/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java +++ b/jack/src/com/android/jack/backend/dex/rop/RopRegisterManager.java @@ -27,7 +27,7 @@ import com.android.jack.ir.ast.JThisRef; import com.android.jack.ir.ast.JType; import com.android.jack.ir.ast.JVariable; import com.android.jack.ir.ast.JVariableRef; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import java.util.ArrayList; @@ -134,12 +134,9 @@ class RopRegisterManager { RegisterSpec reg; if (emitDebugInfo && (emitSyntheticDebugInfo || !var.isSynthetic())) { CstString cstSignature = null; - OriginalTypeInfo infoMarker = var.getMarker(OriginalTypeInfo.class); + GenericSignature infoMarker = var.getMarker(GenericSignature.class); if (infoMarker != null) { - String genericSignature = infoMarker.getGenericSignature(); - if (genericSignature != null) { - cstSignature = new CstString(genericSignature); - } + cstSignature = new CstString(infoMarker.getGenericSignature()); } LocalItem localItem = LocalItem.make(new CstString(var.getName()), RopHelper.getCstType(type), cstSignature); diff --git a/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java b/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java index 320ae6a..33b5486 100644 --- a/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java +++ b/jack/src/com/android/jack/ecj/loader/jast/JAstBinaryType.java @@ -33,7 +33,7 @@ import com.android.jack.ir.ast.JMethod; import com.android.jack.ir.ast.JModifier; import com.android.jack.ir.ast.JNameValuePair; import com.android.jack.ir.ast.JNullLiteral; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.ir.formatter.TypeFormatter; import com.android.jack.util.NamingTools; @@ -280,12 +280,9 @@ class JAstBinaryType implements IBinaryType { @Override public char[] getSourceName() { - OriginalTypeInfo typeInfo = jDeclaredType.getMarker(OriginalTypeInfo.class); + SourceName typeInfo = jDeclaredType.getMarker(SourceName.class); if (typeInfo != null) { - String sourceName = typeInfo.getSourceName(); - if (sourceName != null) { - return sourceName.toCharArray(); - } + return typeInfo.getSourceName().toCharArray(); } char[] sourceNameArray; @@ -360,12 +357,9 @@ class JAstBinaryType implements IBinaryType { @Override public boolean isAnonymous() { boolean isAnonymous = false; - OriginalTypeInfo originalTypeInfo = jDeclaredType.getMarker(OriginalTypeInfo.class); - if (originalTypeInfo != null) { - String sourceName = originalTypeInfo.getSourceName(); - if (sourceName != null) { - isAnonymous = sourceName.isEmpty(); - } + SourceName sourceNameInfo = jDeclaredType.getMarker(SourceName.class); + if (sourceNameInfo != null) { + isAnonymous = sourceNameInfo.getSourceName().isEmpty(); } else { JAnnotationLiteral enclosingAnnotation = AnnotationUtils.getAnnotation(jDeclaredType, AnnotationUtils.INNER_CLASS_ANNOTATION); diff --git a/jack/src/com/android/jack/ecj/loader/jast/LoaderUtils.java b/jack/src/com/android/jack/ecj/loader/jast/LoaderUtils.java index 179366d..03b0300 100644 --- a/jack/src/com/android/jack/ecj/loader/jast/LoaderUtils.java +++ b/jack/src/com/android/jack/ecj/loader/jast/LoaderUtils.java @@ -36,7 +36,7 @@ import com.android.jack.ir.ast.JNameValuePair; import com.android.jack.ir.ast.JNode; import com.android.jack.ir.ast.JNullLiteral; import com.android.jack.ir.ast.JShortLiteral; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter; import com.android.jack.ir.formatter.BinarySignatureFormatter; import com.android.jack.ir.formatter.TypeAndMethodFormatter; @@ -133,12 +133,9 @@ class LoaderUtils { @CheckForNull static <T extends JNode & Annotable> char[] getGenericSignature(@Nonnull T annotableNode) { - OriginalTypeInfo typeInfo = annotableNode.getMarker(OriginalTypeInfo.class); + GenericSignature typeInfo = annotableNode.getMarker(GenericSignature.class); if (typeInfo != null) { - String genericSignature = typeInfo.getGenericSignature(); - if (genericSignature != null) { - return genericSignature.toCharArray(); - } + return typeInfo.getGenericSignature().toCharArray(); } JAnnotationLiteral signatureAnnotation = diff --git a/jack/src/com/android/jack/ir/JackFormatIr.java b/jack/src/com/android/jack/ir/JackFormatIr.java index f925c2a..ceaaa14 100644 --- a/jack/src/com/android/jack/ir/JackFormatIr.java +++ b/jack/src/com/android/jack/ir/JackFormatIr.java @@ -109,7 +109,8 @@ import com.android.jack.ir.ast.JSynchronizedBlock; import com.android.jack.ir.ast.JThisRef; import com.android.jack.ir.ast.JThrowStatement; import com.android.jack.ir.ast.JTryStatement; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import com.android.jack.optimizations.NotSimplifier; import com.android.jack.transformations.ast.BooleanTestOutsideIf; @@ -235,7 +236,8 @@ import com.android.sched.item.Name; MultiDimensionNewArray.class, NoImplicitBlock.class, NotSimplifier.NotExpressionsSimplified.class, - OriginalTypeInfo.class, + GenericSignature.class, + SourceName.class, ThisRefTypeInfo.class, UselessSwitches.class}) public class JackFormatIr implements AbstractComponent { diff --git a/jack/src/com/android/jack/ir/JavaSourceIr.java b/jack/src/com/android/jack/ir/JavaSourceIr.java index e17a8e0..3c8a170 100644 --- a/jack/src/com/android/jack/ir/JavaSourceIr.java +++ b/jack/src/com/android/jack/ir/JavaSourceIr.java @@ -131,7 +131,8 @@ import com.android.jack.ir.ast.JThisRef; import com.android.jack.ir.ast.JThrowStatement; import com.android.jack.ir.ast.JTryStatement; import com.android.jack.ir.ast.JWhileStatement; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.transformations.EmptyClinit; @@ -282,7 +283,8 @@ import com.android.sched.item.Name; JVoidType.class, JWhileStatement.class, MultiDimensionNewArray.class, - OriginalTypeInfo.class, + GenericSignature.class, + SourceName.class, ThisRefTypeInfo.class, ThrownExceptionMarker.class, UselessSwitches.class}) diff --git a/jack/src/com/android/jack/ir/ast/marker/OriginalTypeInfo.java b/jack/src/com/android/jack/ir/ast/marker/GenericSignature.java index 4d30eb0..142db99 100644 --- a/jack/src/com/android/jack/ir/ast/marker/OriginalTypeInfo.java +++ b/jack/src/com/android/jack/ir/ast/marker/GenericSignature.java @@ -24,42 +24,30 @@ import com.android.sched.item.Description; import com.android.sched.marker.Marker; import com.android.sched.marker.ValidOn; -import javax.annotation.CheckForNull; import javax.annotation.Nonnull; /** - * This {@link Marker} holds generic signature and source name retrieved from ecj. + * This {@link Marker} holds generic signature retrieved from ecj. */ -@Description("Holds generic signature and source name retrieved from ecj") +@Description("Holds generic signature retrieved from ecj") @ValidOn({JDefinedClassOrInterface.class, JVariable.class, JMethod.class, JField.class}) -public class OriginalTypeInfo implements Marker { +public class GenericSignature implements Marker { - @CheckForNull + @Nonnull private CharSequence genericSignature; - @CheckForNull - private String sourceName; - - public void setGenericSignature(@CheckForNull CharSequence genericSignature) { + public GenericSignature(@Nonnull CharSequence genericSignature) { this.genericSignature = genericSignature; } - public void setSourceName(@Nonnull String sourceName) { - this.sourceName = sourceName; - } - @CheckForNull - public String getSourceName() { - return sourceName; + public void setGenericSignature(@Nonnull CharSequence genericSignature) { + this.genericSignature = genericSignature; } - @CheckForNull + @Nonnull public String getGenericSignature() { - if (genericSignature == null) { - return null; - } else { - return genericSignature.toString(); - } + return genericSignature.toString(); } @Override diff --git a/jack/src/com/android/jack/ir/ast/marker/SourceName.java b/jack/src/com/android/jack/ir/ast/marker/SourceName.java new file mode 100644 index 0000000..b3ab155 --- /dev/null +++ b/jack/src/com/android/jack/ir/ast/marker/SourceName.java @@ -0,0 +1,52 @@ +/* + * 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.ir.ast.marker; + +import com.android.jack.ir.ast.JDefinedClassOrInterface; +import com.android.jack.ir.ast.JField; +import com.android.jack.ir.ast.JMethod; +import com.android.jack.ir.ast.JVariable; +import com.android.sched.item.Description; +import com.android.sched.marker.Marker; +import com.android.sched.marker.ValidOn; + +import javax.annotation.Nonnull; + +/** + * This {@link Marker} holds source name retrieved from ecj. + */ +@Description("Holds source name retrieved from ecj") +@ValidOn({JDefinedClassOrInterface.class, JVariable.class, JMethod.class, JField.class}) +public class SourceName implements Marker { + + @Nonnull + private final String sourceName; + + public SourceName(@Nonnull String sourceName) { + this.sourceName = sourceName; + } + + @Nonnull + public String getSourceName() { + return sourceName; + } + + @Override + public Marker cloneIfNeeded() { + return this; + } +} diff --git a/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java b/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java index a06934e..6e202ad 100644 --- a/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java +++ b/jack/src/com/android/jack/ir/impl/EcjSourceTypeLoader.java @@ -28,7 +28,8 @@ import com.android.jack.ir.ast.JMethod; import com.android.jack.ir.ast.JModifier; import com.android.jack.ir.ast.JPackage; import com.android.jack.ir.ast.JType; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.load.ClassOrInterfaceLoader; import com.android.jack.lookup.JLookup; import com.android.jack.util.NamingTools; @@ -238,16 +239,14 @@ public class EcjSourceTypeLoader implements ClassOrInterfaceLoader { return; } SourceTypeBinding binding = getBinding(); - OriginalTypeInfo marker = new OriginalTypeInfo(); char [] genSignature = binding.genericSignature(); if (genSignature != null) { if (CharOperation.contains('<', genSignature)) { assert CharOperation.contains('>', genSignature); - marker.setGenericSignature(ReferenceMapper.intern(genSignature)); + loaded.addMarker(new GenericSignature(ReferenceMapper.intern(genSignature))); } } - marker.setSourceName(new String(binding.sourceName)); - loaded.addMarker(marker); + loaded.addMarker(new SourceName(new String(binding.sourceName))); markLoaded(Scope.MARKERS); } } @@ -255,7 +254,7 @@ public class EcjSourceTypeLoader implements ClassOrInterfaceLoader { @Override public void ensureMarker(@Nonnull JDefinedClassOrInterface loaded, @Nonnull Class<? extends Marker> cls) { - if (cls == OriginalTypeInfo.class) { + if (cls == GenericSignature.class || cls == SourceName.class) { ensureMarkers(loaded); } } diff --git a/jack/src/com/android/jack/ir/impl/GwtAstBuilder.java b/jack/src/com/android/jack/ir/impl/GwtAstBuilder.java index 5b788f3..62862d7 100644 --- a/jack/src/com/android/jack/ir/impl/GwtAstBuilder.java +++ b/jack/src/com/android/jack/ir/impl/GwtAstBuilder.java @@ -117,7 +117,7 @@ import com.android.jack.ir.ast.JValueLiteral; import com.android.jack.ir.ast.JVariable; import com.android.jack.ir.ast.JWhileStatement; import com.android.jack.ir.ast.MethodKind; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import com.android.jack.lookup.CommonTypes; import com.android.jack.util.NamingTools; @@ -2309,9 +2309,7 @@ public class GwtAstBuilder { // Check if the generic signature really contains generic types i.e. is different from the // non-generic signature if (!CharOperation.equals(signature, genericSignature)) { - OriginalTypeInfo infoMarker = new OriginalTypeInfo(); - infoMarker.setGenericSignature(ReferenceMapper.intern(genericSignature)); - newLocal.addMarker(infoMarker); + newLocal.addMarker(new GenericSignature(ReferenceMapper.intern(genericSignature))); } curMethod.locals.put(b, newLocal); return newLocal; diff --git a/jack/src/com/android/jack/ir/impl/ReferenceMapper.java b/jack/src/com/android/jack/ir/impl/ReferenceMapper.java index 688396e..f698020 100644 --- a/jack/src/com/android/jack/ir/impl/ReferenceMapper.java +++ b/jack/src/com/android/jack/ir/impl/ReferenceMapper.java @@ -37,7 +37,7 @@ import com.android.jack.ir.ast.JRetentionPolicy; import com.android.jack.ir.ast.JType; import com.android.jack.ir.ast.JTypeLookupException; import com.android.jack.ir.ast.MethodKind; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.lookup.CommonTypes; import com.android.jack.lookup.JLookup; @@ -275,11 +275,9 @@ public class ReferenceMapper { method.setSynthetic(); } enclosingType.addMethod(method); - char [] genSignature = b.genericSignature(); + char[] genSignature = b.genericSignature(); if (genSignature != null) { - OriginalTypeInfo marker = new OriginalTypeInfo(); - marker.setGenericSignature(ReferenceMapper.intern(genSignature)); - method.addMarker(marker); + method.addMarker(new GenericSignature(intern(genSignature))); } method.updateParents(enclosingType); @@ -318,9 +316,7 @@ public class ReferenceMapper { // Check if the generic signature really contains generic types i.e. is different from the // non-generic signature if (!genericSignature.equals(Jack.getLookupFormatter().getName(type))) { - OriginalTypeInfo infoMarker = new OriginalTypeInfo(); - infoMarker.setGenericSignature(ReferenceMapper.intern(genericSignature)); - param.addMarker(infoMarker); + param.addMarker(new GenericSignature(intern(genericSignature))); } } method.addParam(param); @@ -373,9 +369,7 @@ public class ReferenceMapper { enclosingType.addField(field); char [] genSignature = binding.genericSignature(); if (genSignature != null) { - OriginalTypeInfo marker = new OriginalTypeInfo(); - marker.setGenericSignature(ReferenceMapper.intern(genSignature)); - field.addMarker(marker); + field.addMarker(new GenericSignature(intern(genSignature))); } field.updateParents(enclosingType); diff --git a/jack/src/com/android/jack/jayce/v0002/NodeFactory.java b/jack/src/com/android/jack/jayce/v0002/NodeFactory.java index 1373ede..10f550e 100644 --- a/jack/src/com/android/jack/jayce/v0002/NodeFactory.java +++ b/jack/src/com/android/jack/jayce/v0002/NodeFactory.java @@ -129,7 +129,8 @@ 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.JWhileStatement; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; +import com.android.jack.ir.ast.marker.SourceName; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import com.android.jack.ir.ast.marker.ThrownExceptionMarker; import com.android.jack.jayce.v0002.nodes.NAbsentArrayDimension; @@ -187,6 +188,7 @@ import com.android.jack.jayce.v0002.nodes.NFieldInitializer; import com.android.jack.jayce.v0002.nodes.NFieldRef; import com.android.jack.jayce.v0002.nodes.NFloatLiteral; import com.android.jack.jayce.v0002.nodes.NForStatement; +import com.android.jack.jayce.v0002.nodes.NGenericSignature; import com.android.jack.jayce.v0002.nodes.NGoto; import com.android.jack.jayce.v0002.nodes.NGtOperation; import com.android.jack.jayce.v0002.nodes.NGteOperation; @@ -216,7 +218,6 @@ import com.android.jack.jayce.v0002.nodes.NNewArray; import com.android.jack.jayce.v0002.nodes.NNewInstance; import com.android.jack.jayce.v0002.nodes.NNullLiteral; import com.android.jack.jayce.v0002.nodes.NOrOperation; -import com.android.jack.jayce.v0002.nodes.NOriginalTypeInfo; import com.android.jack.jayce.v0002.nodes.NParameter; import com.android.jack.jayce.v0002.nodes.NParameterRef; import com.android.jack.jayce.v0002.nodes.NPostfixDecOperation; @@ -233,6 +234,7 @@ import com.android.jack.jayce.v0002.nodes.NShlOperation; import com.android.jack.jayce.v0002.nodes.NShortLiteral; import com.android.jack.jayce.v0002.nodes.NShrOperation; import com.android.jack.jayce.v0002.nodes.NShruOperation; +import com.android.jack.jayce.v0002.nodes.NSourceName; import com.android.jack.jayce.v0002.nodes.NStringLiteral; import com.android.jack.jayce.v0002.nodes.NSubOperation; import com.android.jack.jayce.v0002.nodes.NSwitchStatement; @@ -778,8 +780,10 @@ public class NodeFactory { @Nonnull private NMarker createMarkerNode(@Nonnull Marker from) { - if (from instanceof OriginalTypeInfo) { - return new NOriginalTypeInfo(); + if (from instanceof GenericSignature) { + return new NGenericSignature(); + } else if (from instanceof SourceName) { + return new NSourceName(); } else if (from instanceof ThisRefTypeInfo) { return new NThisRefTypeInfo(); } else if (from instanceof ThrownExceptionMarker) { diff --git a/jack/src/com/android/jack/jayce/v0002/Version.java b/jack/src/com/android/jack/jayce/v0002/Version.java index 223433c..6f80be9 100644 --- a/jack/src/com/android/jack/jayce/v0002/Version.java +++ b/jack/src/com/android/jack/jayce/v0002/Version.java @@ -21,7 +21,7 @@ package com.android.jack.jayce.v0002; */ public class Version { - public static final int MINOR_MIN = 11; + public static final int MINOR_MIN = 12; - public static final int CURRENT_MINOR = 11; + public static final int CURRENT_MINOR = 12; } diff --git a/jack/src/com/android/jack/jayce/v0002/io/Token.java b/jack/src/com/android/jack/jayce/v0002/io/Token.java index 9270a08..6d5fe2f 100644 --- a/jack/src/com/android/jack/jayce/v0002/io/Token.java +++ b/jack/src/com/android/jack/jayce/v0002/io/Token.java @@ -73,6 +73,7 @@ import com.android.jack.jayce.v0002.nodes.NFieldInitializer; import com.android.jack.jayce.v0002.nodes.NFieldRef; import com.android.jack.jayce.v0002.nodes.NFloatLiteral; import com.android.jack.jayce.v0002.nodes.NForStatement; +import com.android.jack.jayce.v0002.nodes.NGenericSignature; import com.android.jack.jayce.v0002.nodes.NGoto; import com.android.jack.jayce.v0002.nodes.NGtOperation; import com.android.jack.jayce.v0002.nodes.NGteOperation; @@ -101,7 +102,6 @@ import com.android.jack.jayce.v0002.nodes.NNewArray; import com.android.jack.jayce.v0002.nodes.NNewInstance; import com.android.jack.jayce.v0002.nodes.NNullLiteral; import com.android.jack.jayce.v0002.nodes.NOrOperation; -import com.android.jack.jayce.v0002.nodes.NOriginalTypeInfo; import com.android.jack.jayce.v0002.nodes.NParameter; import com.android.jack.jayce.v0002.nodes.NParameterRef; import com.android.jack.jayce.v0002.nodes.NPostfixDecOperation; @@ -118,6 +118,7 @@ import com.android.jack.jayce.v0002.nodes.NShlOperation; import com.android.jack.jayce.v0002.nodes.NShortLiteral; import com.android.jack.jayce.v0002.nodes.NShrOperation; import com.android.jack.jayce.v0002.nodes.NShruOperation; +import com.android.jack.jayce.v0002.nodes.NSourceName; import com.android.jack.jayce.v0002.nodes.NStringLiteral; import com.android.jack.jayce.v0002.nodes.NSubOperation; import com.android.jack.jayce.v0002.nodes.NSwitchStatement; @@ -540,6 +541,13 @@ public enum Token { return new NForStatement(); } }, + GENERIC_SIGNATURE("generic-signature", NodeLevel.TYPES) { + @Override + @Nonnull + public NNode newNode() { + return new NGenericSignature(); + } + }, GOTO("goto") { @Nonnull @Override @@ -736,13 +744,6 @@ public enum Token { return new NOrOperation(); } }, - ORIGINAL_TYPE_INFO("type-info", NodeLevel.TYPES) { - @Override - @Nonnull - public NNode newNode() { - return new NOriginalTypeInfo(); - } - }, PARAMETER("parameter", NodeLevel.STRUCTURE) { @Nonnull @Override @@ -855,6 +856,13 @@ public enum Token { return new NShruOperation(); } }, + SOURCE_NAME("source-name", NodeLevel.TYPES) { + @Override + @Nonnull + public NNode newNode() { + return new NSourceName(); + } + }, SUB_OPERATION("-") { @Nonnull @Override diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NOriginalTypeInfo.java b/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java index f766fb0..2a4780e 100644 --- a/jack/src/com/android/jack/jayce/v0002/nodes/NOriginalTypeInfo.java +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NGenericSignature.java @@ -16,7 +16,7 @@ package com.android.jack.jayce.v0002.nodes; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.jayce.v0002.io.ExportSession; import com.android.jack.jayce.v0002.io.ImportHelper; import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl; @@ -29,50 +29,37 @@ import javax.annotation.CheckForNull; import javax.annotation.Nonnull; /** - * This {@link NMarker} holds generic signature and source name retrieved from ecj. + * This {@link NMarker} holds generic signature retrieved from ecj. */ -public class NOriginalTypeInfo extends NMarker { +public class NGenericSignature extends NMarker { @Nonnull - public static final Token TOKEN = Token.ORIGINAL_TYPE_INFO; + public static final Token TOKEN = Token.GENERIC_SIGNATURE; @CheckForNull public String genericSignature; - @CheckForNull - public String sourceName; - @Override public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) { - OriginalTypeInfo marker = (OriginalTypeInfo) node; + GenericSignature marker = (GenericSignature) node; genericSignature = marker.getGenericSignature(); - sourceName = marker.getSourceName(); } @Override @Nonnull - public OriginalTypeInfo exportAsJast(@Nonnull ExportSession exportSession) { - OriginalTypeInfo marker = new OriginalTypeInfo(); - if (genericSignature != null) { - marker.setGenericSignature(genericSignature); - } - if (sourceName != null) { - marker.setSourceName(sourceName); - } - - return marker; + public GenericSignature exportAsJast(@Nonnull ExportSession exportSession) { + assert genericSignature != null; + return new GenericSignature(genericSignature); } @Override public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException { out.writeString(genericSignature); - out.writeString(sourceName); } @Override public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException { genericSignature = in.readString(); - sourceName = in.readString(); } @Override diff --git a/jack/src/com/android/jack/jayce/v0002/nodes/NSourceName.java b/jack/src/com/android/jack/jayce/v0002/nodes/NSourceName.java new file mode 100644 index 0000000..f1be9ec --- /dev/null +++ b/jack/src/com/android/jack/jayce/v0002/nodes/NSourceName.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2013 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.jayce.v0002.nodes; + +import com.android.jack.ir.ast.marker.SourceName; +import com.android.jack.jayce.v0002.io.ExportSession; +import com.android.jack.jayce.v0002.io.ImportHelper; +import com.android.jack.jayce.v0002.io.JayceInternalReaderImpl; +import com.android.jack.jayce.v0002.io.JayceInternalWriterImpl; +import com.android.jack.jayce.v0002.io.Token; + +import java.io.IOException; + +import javax.annotation.CheckForNull; +import javax.annotation.Nonnull; + + +/** + * This {@link NMarker} holds source name retrieved from ecj. + */ +public class NSourceName extends NMarker { + + @Nonnull + public static final Token TOKEN = Token.SOURCE_NAME; + + @CheckForNull + public String sourceName; + + @Override + public void importFromJast(@Nonnull ImportHelper loader, @Nonnull Object node) { + SourceName marker = (SourceName) node; + sourceName = marker.getSourceName(); + } + + @Override + @Nonnull + public SourceName exportAsJast(@Nonnull ExportSession exportSession) { + assert sourceName != null; + return new SourceName(sourceName); + } + + @Override + public void writeContent(@Nonnull JayceInternalWriterImpl out) throws IOException { + out.writeString(sourceName); + } + + @Override + public void readContent(@Nonnull JayceInternalReaderImpl in) throws IOException { + sourceName = in.readString(); + } + + @Override + @Nonnull + public Token getToken() { + return TOKEN; + } +} diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/FieldGenericSignatureRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/FieldGenericSignatureRemover.java index 3a43fb6..741a569 100644 --- a/jack/src/com/android/jack/shrob/obfuscation/annotation/FieldGenericSignatureRemover.java +++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/FieldGenericSignatureRemover.java @@ -18,12 +18,11 @@ package com.android.jack.shrob.obfuscation.annotation; import com.android.jack.backend.dex.annotations.tag.ReflectAnnotations; import com.android.jack.ir.ast.JField; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.sched.item.Description; import com.android.sched.schedulable.Constraint; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Support; -import com.android.sched.schedulable.Transform; import javax.annotation.Nonnull; @@ -32,16 +31,12 @@ import javax.annotation.Nonnull; */ @Description("Removes signatures from fields") @Constraint(no = ReflectAnnotations.class) -@Transform(modify = OriginalTypeInfo.class) @Support(RemoveGenericSignature.class) public class FieldGenericSignatureRemover implements RunnableSchedulable<JField> { @Override public void run(@Nonnull JField field) throws Exception { - OriginalTypeInfo info = field.getMarker(OriginalTypeInfo.class); - if (info != null) { - info.setGenericSignature(null); - } + field.removeMarker(GenericSignature.class); } } diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java index 82bd34b..3cc62ec 100644 --- a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java +++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableGenericSignatureRemover.java @@ -19,11 +19,10 @@ package com.android.jack.shrob.obfuscation.annotation; import com.android.jack.ir.ast.JMethod; import com.android.jack.ir.ast.JVariable; import com.android.jack.ir.ast.JVisitor; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.sched.item.Description; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Support; -import com.android.sched.schedulable.Transform; import javax.annotation.Nonnull; @@ -31,7 +30,6 @@ import javax.annotation.Nonnull; * A {@link RunnableSchedulable} that removes signatures from local variables. */ @Description("Removes signatures from local variables") -@Transform(modify = OriginalTypeInfo.class) @Support(RemoveLocalVariableGenericSignature.class) public class LocalVariableGenericSignatureRemover implements RunnableSchedulable<JMethod> { @@ -39,10 +37,7 @@ public class LocalVariableGenericSignatureRemover implements private static class Visitor extends JVisitor { @Override public boolean visit(@Nonnull JVariable var) { - OriginalTypeInfo info = var.getMarker(OriginalTypeInfo.class); - if (info != null) { - info.setGenericSignature(null); - } + var.removeMarker(GenericSignature.class); return false; } } diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/MethodGenericSignatureRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/MethodGenericSignatureRemover.java index 466b6ba..742a702 100644 --- a/jack/src/com/android/jack/shrob/obfuscation/annotation/MethodGenericSignatureRemover.java +++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/MethodGenericSignatureRemover.java @@ -18,12 +18,11 @@ package com.android.jack.shrob.obfuscation.annotation; import com.android.jack.backend.dex.annotations.tag.ReflectAnnotations; import com.android.jack.ir.ast.JMethod; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.sched.item.Description; import com.android.sched.schedulable.Constraint; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Support; -import com.android.sched.schedulable.Transform; import javax.annotation.Nonnull; @@ -32,16 +31,12 @@ import javax.annotation.Nonnull; */ @Description("Removes signatures from methods") @Constraint(no = ReflectAnnotations.class) -@Transform(modify = OriginalTypeInfo.class) @Support(RemoveGenericSignature.class) public class MethodGenericSignatureRemover implements RunnableSchedulable<JMethod> { @Override public void run(@Nonnull JMethod method) throws Exception { - OriginalTypeInfo info = method.getMarker(OriginalTypeInfo.class); - if (info != null) { - info.setGenericSignature(null); - } + method.removeMarker(GenericSignature.class); } } diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/TypeGenericSignatureRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/TypeGenericSignatureRemover.java index 613ebcc..28f4f17 100644 --- a/jack/src/com/android/jack/shrob/obfuscation/annotation/TypeGenericSignatureRemover.java +++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/TypeGenericSignatureRemover.java @@ -18,12 +18,11 @@ package com.android.jack.shrob.obfuscation.annotation; import com.android.jack.backend.dex.annotations.tag.ReflectAnnotations; import com.android.jack.ir.ast.JDefinedClassOrInterface; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.sched.item.Description; import com.android.sched.schedulable.Constraint; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Support; -import com.android.sched.schedulable.Transform; import javax.annotation.Nonnull; @@ -32,16 +31,12 @@ import javax.annotation.Nonnull; */ @Description("Removes signatures from types") @Constraint(no = ReflectAnnotations.class) -@Transform(modify = OriginalTypeInfo.class) @Support(RemoveGenericSignature.class) public class TypeGenericSignatureRemover implements RunnableSchedulable<JDefinedClassOrInterface> { @Override public void run(@Nonnull JDefinedClassOrInterface type) throws Exception { - OriginalTypeInfo info = type.getMarker(OriginalTypeInfo.class); - if (info != null) { - info.setGenericSignature(null); - } + type.removeMarker(GenericSignature.class); } } diff --git a/jack/src/com/android/jack/transformations/ast/string/FieldGenericSignatureSplitter.java b/jack/src/com/android/jack/transformations/ast/string/FieldGenericSignatureSplitter.java index 30d8dff..94f35cc 100644 --- a/jack/src/com/android/jack/transformations/ast/string/FieldGenericSignatureSplitter.java +++ b/jack/src/com/android/jack/transformations/ast/string/FieldGenericSignatureSplitter.java @@ -18,11 +18,10 @@ package com.android.jack.transformations.ast.string; import com.android.jack.ir.ast.JField; import com.android.jack.ir.ast.JType; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.signature.GenericSignatureParser; import com.android.sched.item.Description; import com.android.sched.item.Name; -import com.android.sched.schedulable.Constraint; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Transform; import com.android.sched.schedulable.Use; @@ -34,23 +33,20 @@ import javax.annotation.Nonnull; */ @Description("Split field generic signature into more specific string literals.") @Name("FieldGenericSignatureSplitter") -@Constraint(need = {OriginalTypeInfo.class}) -@Transform(modify = OriginalTypeInfo.class) +@Transform(modify = GenericSignature.class) @Use(GenericSignatureRefiner.class) public class FieldGenericSignatureSplitter implements RunnableSchedulable<JField> { @Override public void run(@Nonnull JField field) throws Exception { - OriginalTypeInfo marker = field.getMarker(OriginalTypeInfo.class); + GenericSignature marker = field.getMarker(GenericSignature.class); if (marker != null) { String oldSignature = marker.getGenericSignature(); - if (oldSignature != null) { - GenericSignatureRefiner parserActions = new GenericSignatureRefiner(); - GenericSignatureParser<JType> parser = new GenericSignatureParser<JType>(parserActions); - parser.parseFieldSignature(oldSignature); - assert parserActions.getNewSignature().toString().equals(oldSignature); - marker.setGenericSignature(parserActions.getNewSignature()); - } + GenericSignatureRefiner parserActions = new GenericSignatureRefiner(); + GenericSignatureParser<JType> parser = new GenericSignatureParser<JType>(parserActions); + parser.parseFieldSignature(oldSignature); + assert parserActions.getNewSignature().toString().equals(oldSignature); + marker.setGenericSignature(parserActions.getNewSignature()); } } diff --git a/jack/src/com/android/jack/transformations/ast/string/MethodGenericSignatureSplitter.java b/jack/src/com/android/jack/transformations/ast/string/MethodGenericSignatureSplitter.java index 30042db..8edf72b 100644 --- a/jack/src/com/android/jack/transformations/ast/string/MethodGenericSignatureSplitter.java +++ b/jack/src/com/android/jack/transformations/ast/string/MethodGenericSignatureSplitter.java @@ -18,11 +18,10 @@ package com.android.jack.transformations.ast.string; import com.android.jack.ir.ast.JMethod; import com.android.jack.ir.ast.JType; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.signature.GenericSignatureParser; import com.android.sched.item.Description; import com.android.sched.item.Name; -import com.android.sched.schedulable.Constraint; import com.android.sched.schedulable.RunnableSchedulable; import com.android.sched.schedulable.Transform; import com.android.sched.schedulable.Use; @@ -34,23 +33,20 @@ import javax.annotation.Nonnull; */ @Description("Split method generic signature into more specific string literals.") @Name("MethodGenericSignatureSplitter") -@Constraint(need = {OriginalTypeInfo.class}) -@Transform(modify = OriginalTypeInfo.class) +@Transform(modify = GenericSignature.class) @Use(GenericSignatureRefiner.class) public class MethodGenericSignatureSplitter implements RunnableSchedulable<JMethod> { @Override public void run(@Nonnull JMethod method) throws Exception { - OriginalTypeInfo marker = method.getMarker(OriginalTypeInfo.class); + GenericSignature marker = method.getMarker(GenericSignature.class); if (marker != null) { String oldSignature = marker.getGenericSignature(); - if (oldSignature != null) { - GenericSignatureRefiner parserActions = new GenericSignatureRefiner(); - GenericSignatureParser<JType> parser = new GenericSignatureParser<JType>(parserActions); - parser.parseMethodSignature(oldSignature); - assert parserActions.getNewSignature().toString().equals(oldSignature); - marker.setGenericSignature(parserActions.getNewSignature()); - } + GenericSignatureRefiner parserActions = new GenericSignatureRefiner(); + GenericSignatureParser<JType> parser = new GenericSignatureParser<JType>(parserActions); + parser.parseMethodSignature(oldSignature); + assert parserActions.getNewSignature().toString().equals(oldSignature); + marker.setGenericSignature(parserActions.getNewSignature()); } } diff --git a/jack/src/com/android/jack/transformations/ast/string/TypeGenericSignatureSplitter.java b/jack/src/com/android/jack/transformations/ast/string/TypeGenericSignatureSplitter.java index 71b3e22..06fca08 100644 --- a/jack/src/com/android/jack/transformations/ast/string/TypeGenericSignatureSplitter.java +++ b/jack/src/com/android/jack/transformations/ast/string/TypeGenericSignatureSplitter.java @@ -18,7 +18,7 @@ package com.android.jack.transformations.ast.string; import com.android.jack.ir.ast.JDefinedClassOrInterface; import com.android.jack.ir.ast.JType; -import com.android.jack.ir.ast.marker.OriginalTypeInfo; +import com.android.jack.ir.ast.marker.GenericSignature; import com.android.jack.ir.ast.marker.ThisRefTypeInfo; import com.android.jack.signature.GenericSignatureParser; import com.android.sched.item.Description; @@ -36,7 +36,7 @@ import javax.annotation.Nonnull; */ @Description("Split type generic signature into more specific string literals.") @Name("TypeGenericSignatureSplitter") -@Constraint(need = {OriginalTypeInfo.class, ThisRefTypeInfo.class}) +@Constraint(need = GenericSignature.class) @Use(GenericSignatureRefiner.class) public class TypeGenericSignatureSplitter implements RunnableSchedulable<JDefinedClassOrInterface> { @@ -46,7 +46,7 @@ public class TypeGenericSignatureSplitter implements RunnableSchedulable<JDefine return; } - OriginalTypeInfo marker = declaredType.getMarker(OriginalTypeInfo.class); + GenericSignature marker = declaredType.getMarker(GenericSignature.class); if (marker != null) { CharSequence newSignature = getSplittedSignature(marker.getGenericSignature()); if (newSignature != null) { |