/** * {@inheritDoc} */ public Dispatcher.Resolved.ForMethodExit asMethodExit(List<? extends OffsetMapping.Factory<?>> userFactories, ClassReader classReader, Unresolved methodEnter) { Map<String, TypeDefinition> namedTypes = methodEnter.getNamedTypes(); for (Map.Entry<String, TypeDefinition> entry : this.namedTypes.entrySet()) { TypeDefinition typeDefinition = this.namedTypes.get(entry.getKey()); if (typeDefinition == null) { throw new IllegalStateException(adviceMethod + " attempts use of undeclared local variable " + entry.getKey()); } else if (!typeDefinition.equals(entry.getValue())) { throw new IllegalStateException(adviceMethod + " does not read variable " + entry.getKey() + " as " + typeDefinition); } } return Resolved.ForMethodExit.of(adviceMethod, namedTypes, userFactories, classReader, methodEnter.getAdviceType()); }
/** * {@inheritDoc} */ public Dispatcher.Resolved.ForMethodExit asMethodExit(List<? extends OffsetMapping.Factory<?>> userFactories, ClassReader classReader, Unresolved methodEnter) { Map<String, TypeDefinition> namedTypes = methodEnter.getNamedTypes(); for (ParameterDescription parameterDescription : adviceMethod.getParameters().filter(isAnnotatedWith(Local.class))) { String name = parameterDescription.getDeclaredAnnotations().ofType(Local.class).loadSilent().value(); TypeDefinition typeDefinition = namedTypes.get(name); if (typeDefinition == null) { throw new IllegalStateException(adviceMethod + " attempts use of undeclared local variable " + name); } else if (!typeDefinition.equals(parameterDescription.getType())) { throw new IllegalStateException(adviceMethod + " does not read variable " + name + " as " + typeDefinition); } } return Resolved.ForMethodExit.of(adviceMethod, namedTypes, userFactories, methodEnter.getAdviceType()); }
/** * {@inheritDoc} */ public Dispatcher.Resolved.ForMethodEnter asMethodEnter(List<? extends OffsetMapping.Factory<?>> userFactories, ClassReader classReader, Unresolved methodExit) { return Resolved.ForMethodEnter.of(adviceMethod, namedTypes, userFactories, methodExit.getAdviceType(), classReader, methodExit.isAlive()); }
/** * {@inheritDoc} */ public Dispatcher.Resolved.ForMethodEnter asMethodEnter(List<? extends OffsetMapping.Factory<?>> userFactories, ClassReader classReader, Unresolved methodExit) { return Resolved.ForMethodEnter.of(adviceMethod, userFactories, methodExit.getAdviceType(), methodExit.isAlive()); }