private static Collection<ExecutableElement> getMessageMethods(final TypeElement intf) { return ElementFilter.methodsIn(intf.getEnclosedElements()) .stream() .filter(method -> !method.isDefault() && !method.getModifiers().contains(Modifier.STATIC)) .collect(Collectors.toList()); } }
@Override default boolean isDefault() { return getDelegate().isDefault(); }
static boolean isValid(ExecutableElement elem, Messager messager) { return ensure(elem, doesNotThrow(elem), messager, () -> "@" + "Unapply method should not throw (checked) exceptions.") && ensure(elem, !elem.isDefault(), messager, () -> "@" + "Unapply method needs to be declared in a class, not an interface.") && ensure(elem, !elem.isVarArgs(), messager, () -> "@" + "Unapply method has varargs.") && ensure(elem, elem.getParameters().size() == 1, messager, () -> "Unapply method must have exactly one parameter of the object to be deconstructed.") && ensure(elem, elem.getParameters().get(0).asType().getKind() == TypeKind.DECLARED, messager, () -> "Unapply method parameter must be a declared type.") && ensure(elem, elem.getReturnType().toString().startsWith("io.vavr.Tuple"), messager, () -> "Return type of unapply method must be a Tuple.") && ensure(elem, !elem.getReturnType().toString().endsWith("Tuple"), messager, () -> "Return type is no Tuple implementation.") && ensure(elem, hasAll(elem, STATIC), messager, () -> "Unapply method needs to be static.") && ensure(elem, hasNone(elem, PRIVATE, PROTECTED, ABSTRACT), messager, () -> "Unapply method may not be private or protected."); }
@Override public boolean isDefault() { return this.delegate.isDefault(); }
@Override public boolean isDefault() { return this.delegate.isDefault(); }
private static boolean isDefaultMethod(final Element e) { return e instanceof ExecutableElement && ((ExecutableElement) e).isDefault(); }
private static boolean isDefaultMethod(final Element e) { return e instanceof ExecutableElement && ((ExecutableElement) e).isDefault(); }
private boolean isVoidLambda(Tree tree) { ExecutableElementTest<Void> test = new ExecutableElementTest<>((e, o) -> !e.isDefault() && !e.getModifiers().contains(STATIC) && "void".equals(e.getReturnType().toString())); return types.asElement(trees.getTypeMirror(trees.getPath(getCurrentPath().getCompilationUnit(), tree))).getEnclosedElements().stream().anyMatch(m -> m.accept(test, null)); }
private boolean isVoidLambda(Tree tree) { ExecutableElementTest<Void> test = new ExecutableElementTest<>((e, o) -> !e.isDefault() && !e.getModifiers().contains(STATIC) && "void".equals(e.getReturnType().toString())); return types.asElement(trees.getTypeMirror(trees.getPath(getCurrentPath().getCompilationUnit(), tree))).getEnclosedElements().stream().anyMatch(m -> m.accept(test, null)); }
protected ExecutableElement findNonDefaultMethod(TypeElement interfaceElement) { Optional<ExecutableElement> method = ElementFilter.methodsIn(interfaceElement.getEnclosedElements()) .stream() .filter(m -> !m.isDefault()) .findAny(); if (method.isPresent()) { return method.get(); } for (TypeMirror typeMirror : interfaceElement.getInterfaces()) { TypeElement i = ctx.getTypes().toTypeElement(typeMirror); if (i == null) { throw new AptIllegalStateException("failed to convert to TypeElement."); } ExecutableElement m = findNonDefaultMethod(i); if (m != null) { return m; } } return null; }
@Override protected void doVisitMethod(@Nullable JavaMethodElement oldMethod, @Nullable JavaMethodElement newMethod) { if (!isBothAccessible(oldMethod, newMethod)) { return; } assert oldMethod != null; assert newMethod != null; boolean onInterfaces = oldMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE && newMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE; if (onInterfaces && oldMethod.getDeclaringElement().isDefault() && !newMethod.getDeclaringElement().isDefault()) { pushActive(oldMethod, newMethod); } }
@Override protected void doVisitMethod(@Nullable JavaMethodElement oldMethod, @Nullable JavaMethodElement newMethod) { if (!isBothAccessible(oldMethod, newMethod)) { return; } assert oldMethod != null; assert newMethod != null; boolean onInterfaces = oldMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE && newMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE; if (onInterfaces && !oldMethod.getDeclaringElement().isDefault() && newMethod.getDeclaringElement().isDefault()) { pushActive(oldMethod, newMethod); } }
@Override protected void doVisitMethod(@Nullable JavaMethodElement oldMethod, @Nullable JavaMethodElement newMethod) { if (!isBothAccessible(oldMethod, newMethod)) { return; } assert oldMethod != null; assert newMethod != null; boolean onInterfaces = oldMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE && newMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE; if (onInterfaces && oldMethod.getDeclaringElement().isDefault() && !newMethod.getDeclaringElement().isDefault()) { pushActive(oldMethod, newMethod); } }
@Override protected void doVisitMethod(@Nullable JavaMethodElement oldMethod, @Nullable JavaMethodElement newMethod) { if (!isBothAccessible(oldMethod, newMethod)) { return; } assert oldMethod != null; assert newMethod != null; boolean onInterfaces = oldMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE && newMethod.getParent().getDeclaringElement().getKind() == ElementKind.INTERFACE; if (onInterfaces && !oldMethod.getDeclaringElement().isDefault() && newMethod.getDeclaringElement().isDefault()) { pushActive(oldMethod, newMethod); } }
static boolean isValid(ExecutableElement elem, Messager messager) { return ensure(elem, doesNotThrow(elem), messager, () -> "@" + "Unapply method should not throw (checked) exceptions.") && ensure(elem, !elem.isDefault(), messager, () -> "@" + "Unapply method needs to be declared in a class, not an interface.") && ensure(elem, !elem.isVarArgs(), messager, () -> "@" + "Unapply method has varargs.") && ensure(elem, elem.getParameters().size() == 1, messager, () -> "Unapply method must have exactly one parameter of the object to be deconstructed.") && ensure(elem, elem.getParameters().get(0).asType().getKind() == TypeKind.DECLARED, messager, () -> "Unapply method parameter must be a declared type.") && ensure(elem, elem.getReturnType().toString().startsWith("javaslang.Tuple"), messager, () -> "Return type of unapply method must be a Tuple.") && ensure(elem, !elem.getReturnType().toString().endsWith("Tuple"), messager, () -> "Return type is no Tuple implementation.") && ensure(elem, hasAll(elem, STATIC), messager, () -> "Unapply method needs to be static.") && ensure(elem, hasNone(elem, PRIVATE, PROTECTED, ABSTRACT), messager, () -> "Unapply method may not be private or protected."); }
protected void validateMethod(ExecutableElement methodElement, DaoMeta daoMeta) { TypeElement foundAnnotationTypeElement = null; for (AnnotationMirror annotation : methodElement.getAnnotationMirrors()) { DeclaredType declaredType = annotation.getAnnotationType(); TypeElement typeElement = ctx.getTypes().toTypeElement(declaredType); if (typeElement.getAnnotation(DaoMethod.class) != null) { if (foundAnnotationTypeElement != null) { throw new AptException( Message.DOMA4087, methodElement, new Object[] { foundAnnotationTypeElement.getQualifiedName(), typeElement.getQualifiedName() }); } if (methodElement.isDefault()) { throw new AptException( Message.DOMA4252, methodElement, new Object[] {typeElement.getQualifiedName()}); } foundAnnotationTypeElement = typeElement; } } }
if (element.isDefault() && element.getEnclosingElement().getKind().isInterface()) { Types types = copy.getTypes(); Context ctx = ((JavacTaskImpl) copy.impl.getJavacTask()).getContext();
if (method.isDefault()) { difference = createDifference(Code.METHOD_DEFAULT_METHOD_ADDED_TO_INTERFACE, Code.attachmentsFor(methods.oldElement, methods.newElement));
if (method.isDefault()) { difference = createDifference(Code.METHOD_DEFAULT_METHOD_ADDED_TO_INTERFACE, Code.attachmentsFor(methods.oldElement, methods.newElement));
@Override public QueryMeta createQueryMeta(ExecutableElement method, DaoMeta daoMeta) { assertNotNull(method, daoMeta); if (!method.isDefault()) { return null; } DefaultQueryMeta queryMeta = new DefaultQueryMeta(method, daoMeta.getDaoElement()); queryMeta.setQueryKind(QueryKind.DEFAULT); doTypeParameters(queryMeta, method, daoMeta); doParameters(queryMeta, method, daoMeta); doReturnType(queryMeta, method, daoMeta); doThrowTypes(queryMeta, method, daoMeta); return queryMeta; }