@Nonnull @Override public EncodedValue rewrite(@Nonnull EncodedValue encodedValue) { switch (encodedValue.getValueType()) { case ValueType.TYPE: return new RewrittenTypeEncodedValue((TypeEncodedValue)encodedValue); case ValueType.FIELD: return new RewrittenFieldEncodedValue((FieldEncodedValue)encodedValue); case ValueType.METHOD: return new RewrittenMethodEncodedValue((MethodEncodedValue)encodedValue); case ValueType.ENUM: return new RewrittenEnumEncodedValue((EnumEncodedValue)encodedValue); case ValueType.ARRAY: return new RewrittenArrayEncodedValue((ArrayEncodedValue)encodedValue); case ValueType.ANNOTATION: return new RewrittenAnnotationEncodedValue((AnnotationEncodedValue)encodedValue); default: return encodedValue; } }
@Nonnull @Override public DebugItem rewrite(@Nonnull DebugItem value) { switch (value.getDebugItemType()) { case DebugItemType.START_LOCAL: return new RewrittenStartLocal((StartLocal)value); case DebugItemType.END_LOCAL: return new RewrittenEndLocal((EndLocal)value); case DebugItemType.RESTART_LOCAL: return new RewrittenRestartLocal((RestartLocal)value); default: return value; } }
@Override @Nonnull public List<? extends MethodParameter> getParameters() { // We can't use the MethodReferenceRewriter to rewrite the parameters, because we would lose // parameter names and annotations. If a method rewrite involves changing parameters, it needs // to be handled here as well as in the MethodReferenceRewriter return RewriterUtils.rewriteList(rewriters.getMethodParameterRewriter(), method.getParameters()); }
@Override @Nonnull public Reference getReference() { switch (getReferenceType()) { case ReferenceType.TYPE: return RewriterUtils.rewriteTypeReference(rewriters.getTypeRewriter(), (TypeReference)instruction.getReference()); case ReferenceType.FIELD: return rewriters.getFieldReferenceRewriter().rewrite((FieldReference)instruction.getReference()); case ReferenceType.METHOD: return rewriters.getMethodReferenceRewriter().rewrite((MethodReference)instruction.getReference()); case ReferenceType.STRING: return instruction.getReference(); default: throw new IllegalArgumentException(); } }
@Override @Nullable public MethodImplementation getImplementation() { return RewriterUtils.rewriteNullable(rewriters.getMethodImplementationRewriter(), method.getImplementation()); } }
@Nonnull @Override public Set<? extends AnnotationElement> getElements() { return RewriterUtils.rewriteSet(rewriters.getAnnotationElementRewriter(), annotationEncodedValue.getElements()); } }
@Override @Nullable public TypeReference getTypeReference() { TypeReference typeReference = debugItem.getTypeReference(); if (typeReference == null) { return null; } return RewriterUtils.rewriteTypeReference(rewriters.getTypeRewriter(), typeReference); }
@Override @Nonnull public Iterable<? extends DebugItem> getDebugItems() { return RewriterUtils.rewriteIterable(rewriters.getDebugItemRewriter(), methodImplementation.getDebugItems()); } }
@Override @Nonnull public Iterable<? extends Instruction> getInstructions() { return RewriterUtils.rewriteIterable(rewriters.getInstructionRewriter(), methodImplementation.getInstructions()); }
@Override @Nonnull public List<? extends TryBlock<? extends ExceptionHandler>> getTryBlocks() { return RewriterUtils.rewriteList(rewriters.getTryBlockRewriter(), methodImplementation.getTryBlocks()); }
@Override @Nonnull public String getType() { return rewriters.getTypeRewriter().rewrite(fieldReference.getType()); } }
@Nonnull @Override public EncodedValue rewrite(@Nonnull EncodedValue encodedValue) { switch (encodedValue.getValueType()) { case ValueType.TYPE: return new RewrittenTypeEncodedValue((TypeEncodedValue)encodedValue); case ValueType.FIELD: return new RewrittenFieldEncodedValue((FieldEncodedValue)encodedValue); case ValueType.METHOD: return new RewrittenMethodEncodedValue((MethodEncodedValue)encodedValue); case ValueType.ENUM: return new RewrittenEnumEncodedValue((EnumEncodedValue)encodedValue); case ValueType.ARRAY: return new RewrittenArrayEncodedValue((ArrayEncodedValue)encodedValue); case ValueType.ANNOTATION: return new RewrittenAnnotationEncodedValue((AnnotationEncodedValue)encodedValue); default: return encodedValue; } }
@Nonnull @Override public DebugItem rewrite(@Nonnull DebugItem value) { switch (value.getDebugItemType()) { case DebugItemType.START_LOCAL: return new RewrittenStartLocal((StartLocal)value); case DebugItemType.END_LOCAL: return new RewrittenEndLocal((EndLocal)value); case DebugItemType.RESTART_LOCAL: return new RewrittenRestartLocal((RestartLocal)value); default: return value; } }
@Override @Nonnull public List<? extends MethodParameter> getParameters() { // We can't use the MethodReferenceRewriter to rewrite the parameters, because we would lose // parameter names and annotations. If a method rewrite involves changing parameters, it needs // to be handled here as well as in the MethodReferenceRewriter return RewriterUtils.rewriteList(rewriters.getMethodParameterRewriter(), method.getParameters()); }
@Override @Nullable public MethodImplementation getImplementation() { return RewriterUtils.rewriteNullable(rewriters.getMethodImplementationRewriter(), method.getImplementation()); } }
@Nonnull @Override public Set<? extends AnnotationElement> getElements() { return RewriterUtils.rewriteSet(rewriters.getAnnotationElementRewriter(), annotationEncodedValue.getElements()); } }
@Override @Nullable public TypeReference getTypeReference() { TypeReference typeReference = debugItem.getTypeReference(); if (typeReference == null) { return null; } return RewriterUtils.rewriteTypeReference(rewriters.getTypeRewriter(), typeReference); }
@Override @Nonnull public Iterable<? extends DebugItem> getDebugItems() { return RewriterUtils.rewriteIterable(rewriters.getDebugItemRewriter(), methodImplementation.getDebugItems()); } }
@Nonnull @Override public DebugItem rewrite(@Nonnull DebugItem value) { switch (value.getDebugItemType()) { case DebugItemType.START_LOCAL: return new RewrittenStartLocal((StartLocal)value); case DebugItemType.END_LOCAL: return new RewrittenEndLocal((EndLocal)value); case DebugItemType.RESTART_LOCAL: return new RewrittenRestartLocal((RestartLocal)value); default: return value; } }
@Override @Nonnull public List<? extends MethodParameter> getParameters() { // We can't use the MethodReferenceRewriter to rewrite the parameters, because we would lose // parameter names and annotations. If a method rewrite involves changing parameters, it needs // to be handled here as well as in the MethodReferenceRewriter return RewriterUtils.rewriteList(rewriters.getMethodParameterRewriter(), method.getParameters()); }